#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура")Тогда
ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
КонецЕсли;
КоммерческиеПредложенияДокументыПереопределяемый.ОбработкаЗаполненияДокумента(ЭтотОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка);
ИнициализироватьДанныеДокумента();
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ТаблицаДляПроверки = Товары.Выгрузить(,"НомерСтроки, ИсточникДобавленияТовара, Номенклатура,
|НоменклатураВСервисеИдентификатор, НоменклатураВСервисеПредставление, НоменклатураТекстом, КатегорияВСервисеПредставление");
МассивНепроверяемыхРеквизитов = Новый Массив;
МассивНепроверяемыхРеквизитов.Добавить("Товары.Номенклатура" );
МассивНепроверяемыхРеквизитов.Добавить("Товары.НоменклатураВСервисеПредставление" );
МассивНепроверяемыхРеквизитов.Добавить("Товары.НоменклатураТекстом" );
МассивНепроверяемыхРеквизитов.Добавить("Товары.КатегорияВСервисеПредставление");
Для Каждого СтрокаТаблицы Из ТаблицаДляПроверки Цикл
Если СтрокаТаблицы.ИсточникДобавленияТовара = 0 Тогда
Если Не ЗначениеЗаполнено(СтрокаТаблицы.Номенклатура) Тогда
СообщитьПользователю("Товары", СтрокаТаблицы.НомерСтроки, "Номенклатура", "Номенклатура", Отказ);
ИначеЕсли Не ЗначениеЗаполнено(СтрокаТаблицы.КатегорияВСервисеПредставление)
И Не ЗначениеЗаполнено(СтрокаТаблицы.НоменклатураВСервисеИдентификатор)Тогда
СообщитьПользователю("Товары", СтрокаТаблицы.НомерСтроки, "КатегорияВСервисеПредставление", "Категория", Отказ);
КонецЕсли;
ИначеЕсли СтрокаТаблицы.ИсточникДобавленияТовара = 1 Тогда
Если Не ЗначениеЗаполнено(СтрокаТаблицы.НоменклатураВСервисеПредставление) Тогда
СообщитьПользователю("Товары", СтрокаТаблицы.НомерСтроки, "НоменклатураВСервисеПредставление", "Номенклатура", Отказ);
ИначеЕсли Не ЗначениеЗаполнено(СтрокаТаблицы.КатегорияВСервисеПредставление) Тогда
СообщитьПользователю("Товары", СтрокаТаблицы.НомерСтроки, "КатегорияВСервисеПредставление", "Категория", Отказ);
КонецЕсли;
ИначеЕсли СтрокаТаблицы.ИсточникДобавленияТовара = 2 Тогда
Если Не ЗначениеЗаполнено(СтрокаТаблицы.НоменклатураТекстом) Тогда
СообщитьПользователю("Товары", СтрокаТаблицы.НомерСтроки, "НоменклатураТекстом", "Номенклатура", Отказ);
ИначеЕсли Не ЗначениеЗаполнено(СтрокаТаблицы.КатегорияВСервисеПредставление) Тогда
СообщитьПользователю("Товары", СтрокаТаблицы.НомерСтроки, "КатегорияВСервисеПредставление", "Категория", Отказ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(Менеджер) Тогда
НекорректныеРеквизитыМенеджера = Новый Массив;
Если ПустаяСтрока(МенеджерEmail) Тогда
НекорректныеРеквизитыМенеджера.Добавить(НСтр("ru = 'адрес электронной почты'"));
КонецЕсли;
Если ПустаяСтрока(МенеджерНомерТелефона) Тогда
НекорректныеРеквизитыМенеджера.Добавить(НСтр("ru = 'телефон'"));
КонецЕсли;
Если НекорректныеРеквизитыМенеджера.Количество() > 0 Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Для менеджера %1 не указаны: %2.'"), Менеджер,
СтрСоединить(НекорректныеРеквизитыМенеджера, ", "));
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, , "Объект.Менеджер", Отказ);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Склад) Тогда
Если ТипЗнч(Склад) = Тип("Строка") Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Адрес доставки"" не заполнено.'");
Иначе
ТекстСообщения = НСтр("ru = 'Поле ""Склад"" не заполнено.'");
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, ЭтотОбъект, , "Объект.Склад", Отказ);
КонецЕсли;
Если ЗапрашиватьПредложенияПоставщиков = КоммерческиеПредложенияДокументыКлиентСервер.СпособРазмещенияБидзаар() Тогда
ПроверяемыеРеквизиты.Добавить("АдресДоставки");
КонецЕсли;
КоммерческиеПредложенияДокументыПереопределяемый.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
Если ЗначениеЗаполнено(МассивНепроверяемыхРеквизитов) Тогда
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецЕсли;
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ДополнительныеСвойства.Вставить("ЭтоНовый", ЭтоНовый());
ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
Если ЭтоНовый() Тогда
СсылкаНаДокумент = Документы.ЗапросКоммерческихПредложенийПоставщиков.ПолучитьСсылку(
Новый УникальныйИдентификатор());
УстановитьСсылкуНового(СсылкаНаДокумент);
Иначе
СсылкаНаДокумент = Ссылка;
КонецЕсли;
Если Не ЗначениеЗаполнено(Автор) И ЭтоНовый() Тогда
Автор = Пользователи.ТекущийПользователь();
КонецЕсли;
КоммерческиеПредложенияДокументыПереопределяемый.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
Если ТипЗнч(Склад) = Тип("Строка") Тогда
АдресДоставки = Склад;
АдресДоставкиЗначенияПолей = СкладЗначенияПолей;
КонецЕсли;
Если ПустаяСтрока(НомерЭД) Тогда
НомерЭД = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Номер, Истина, Истина);
КонецЕсли;
СоздатьИзображенияТоварныхПозиций1СН(СсылкаНаДокумент);
СоздатьИзображенияСНовымВладельцемПриКопированииДокумента(СсылкаНаДокумент);
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
КоммерческиеПредложенияСлужебный.УдалитьНеАктуальныеИзображенияРучныхТоваровЗКППоставщика(Ссылка);
КоммерческиеПредложенияДокументыПереопределяемый.ПриЗаписи(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ИндексРучногоТовара = 2;
Для Каждого Товар Из Товары Цикл
Товар.ИдентификаторСтрокиЗапроса = Новый УникальныйИдентификатор;
Если Товар.ИсточникДобавленияТовара = ИндексРучногоТовара Тогда
Товар.Изображение = Неопределено;
КонецЕсли;
КонецЦикла;
ВыбранныеИсточники.Очистить();
ИдентификаторВСервисе = "";
Если ЗначениеЗаполнено(Менеджер) Тогда
Документы.ЗапросКоммерческихПредложенийПоставщиков.ЗаполнитьКИМенеджера(Менеджер, МенеджерEmail, МенеджерНомерТелефона);
КонецЕсли;
Автор = Пользователи.ТекущийПользователь();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
Процедура СообщитьПользователю(ИмяТабличнойЧасти, НомерСтроки, ИмяКолонки, ЗаголовокКолонки, Отказ)
ТекстСообщения = СтрШаблон(НСтр("ru = 'Не заполнена колонка ""%3"" в строке %1 списка ""%2""'"),
НомерСтроки, ИмяТабличнойЧасти, ЗаголовокКолонки);
Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(ИмяТабличнойЧасти, НомерСтроки, ИмяКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, Поле, "Объект", Отказ);
КонецПроцедуры
Процедура ИнициализироватьДанныеДокумента()
НастройкиУчета = КоммерческиеПредложенияДокументы.НастройкиУчета();
Если Не ЗначениеЗаполнено(Менеджер) Тогда
Менеджер = Пользователи.ТекущийПользователь();
КонецЕсли;
Документы.ЗапросКоммерческихПредложенийПоставщиков.ЗаполнитьКИМенеджера(Менеджер, МенеджерEmail, МенеджерНомерТелефона);
Если Не ЗначениеЗаполнено(Организация)
И НастройкиУчета.ИспользуетсяЕдинственнаяОрганизация
И ЗначениеЗаполнено(НастройкиУчета.ЕдинственнаяОрганизация) Тогда
Организация = НастройкиУчета.ЕдинственнаяОрганизация;
КонецЕсли;
Если Не ЗначениеЗаполнено(Валюта)
И НастройкиУчета.ИспользуетсяЕдинственнаяВалюта
И ЗначениеЗаполнено(НастройкиУчета.ЕдинственнаяВалюта) Тогда
Валюта = НастройкиУчета.ЕдинственнаяВалюта;
КонецЕсли;
Автор = Пользователи.ТекущийПользователь();
КонецПроцедуры
Процедура СоздатьИзображенияТоварныхПозиций1СН(СсылкаНаДокумент)
СтрокиТребующиеСозданиеИзображения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства,
"СтрокиТребующиеСозданиеИзображения", Новый Массив);
ДополнительныеРеквизитыФайла = Новый Структура;
ДополнительныеРеквизитыФайла.Вставить("ЭтоИзображениеТоварнойПозиции", Истина);
Для Каждого СтрокаТребующаяСозданиеИзображения Из СтрокиТребующиеСозданиеИзображения Цикл
АдресИзображенияВХранилище = СтрокаТребующаяСозданиеИзображения.ИзображениеАдресДвоичныхДанных;
ИдентификаторСтрокиЗапроса = СтрокаТребующаяСозданиеИзображения.ИдентификаторСтрокиЗапроса;
Наименование = Строка(Новый УникальныйИдентификатор());
Расширение = СтрокаТребующаяСозданиеИзображения.РасширениеИзображения;
ДобавитьФайлИзображенияТоварнойПозиции(СсылкаНаДокумент, ИдентификаторСтрокиЗапроса, АдресИзображенияВХранилище,
Наименование, Расширение, ДополнительныеРеквизитыФайла);
КонецЦикла;
КонецПроцедуры
Процедура СоздатьИзображенияСНовымВладельцемПриКопированииДокумента(СсылкаНаДокумент)
УстановитьПривилегированныйРежим(Истина);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.ИдентификаторСтрокиЗапроса,
| Товары.Изображение КАК Изображение
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|
|ИНДЕКСИРОВАТЬ ПО
| Изображение
|;
|
|
|ВЫБРАТЬ
| Товары.ИдентификаторСтрокиЗапроса,
| Товары.Изображение,
| ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.Наименование КАК Наименование,
| ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.Расширение
|ИЗ
| Товары КАК Товары
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы КАК
| ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы
| ПО Товары.Изображение = ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.Ссылка
|ГДЕ
| ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.ВладелецФайла <> &Ссылка";
Запрос.УстановитьПараметр("Товары", Товары);
Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);
РезультатЗапроса = Запрос.Выполнить();
Выгрузка = РезультатЗапроса.Выгрузить();
ФайлыИзображенийДляЗамены = Выгрузка.ВыгрузитьКолонку("Изображение");
ДвоичныеДанныеИзображенийДляЗамены = РаботаСФайлами.ДвоичныеДанныеФайлов(ФайлыИзображенийДляЗамены);
ДополнительныеРеквизитыФайла = Новый Структура;
ДополнительныеРеквизитыФайла.Вставить("ЭтоИзображениеТоварнойПозиции", Истина);
Для Каждого СтрокаВыгрузки Из Выгрузка Цикл
ДвоичныеДанныеИзображенияДляЗамены = ДвоичныеДанныеИзображенийДляЗамены[СтрокаВыгрузки.Изображение];
АдресИзображенияВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеИзображенияДляЗамены);
ИдентификаторСтрокиЗапроса = СтрокаВыгрузки.ИдентификаторСтрокиЗапроса;
Наименование = СтрокаВыгрузки.Наименование;
Расширение = СтрокаВыгрузки.Расширение;
ДобавитьФайлИзображенияТоварнойПозиции(СсылкаНаДокумент, ИдентификаторСтрокиЗапроса, АдресИзображенияВХранилище,
Наименование, Расширение, ДополнительныеРеквизитыФайла);
КонецЦикла;
КонецПроцедуры
Процедура ДобавитьФайлИзображенияТоварнойПозиции(СсылкаНаДокумент, ИдентификаторСтрокиЗапроса,
АдресИзображенияВХранилище, Наименование, Расширение, ДополнительныеРеквизитыФайла)
ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла(ДополнительныеРеквизитыФайла);
ПараметрыФайла.ВладелецФайлов = СсылкаНаДокумент;
ПараметрыФайла.ИмяБезРасширения = Наименование;
ПараметрыФайла.РасширениеБезТочки = Расширение;
ФайлИзображения = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресИзображенияВХранилище);
СтрокаТовары = Товары.Найти(ИдентификаторСтрокиЗапроса);
СтрокаТовары.Изображение = ФайлИзображения;
КонецПроцедуры
#КонецОбласти
#КонецЕсли