Запрос коммерческих предложений у поставщиков / Модуль объекта

файл

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ОбработчикиСобытий

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка)
	
	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура")Тогда 
		ЗаполнитьЗначенияСвойств(ЭтотОбъект, ДанныеЗаполнения);
	КонецЕсли;
	
	КоммерческиеПредложенияДокументыПереопределяемый.ОбработкаЗаполненияДокумента(ЭтотОбъект, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка);
	
	ИнициализироватьДанныеДокумента();
	
КонецПроцедуры

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

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
	
	ДополнительныеСвойства.Вставить("ЭтоНовый",    ЭтоНовый());
	ДополнительныеСвойства.Вставить("РежимЗаписи", РежимЗаписи);
	
	Если ЭтоНовый() Тогда
		СсылкаНаДокумент = Документы.ЗапросКоммерческихПредложенийПоставщиков.ПолучитьСсылку(
			Новый УникальныйИдентификатор());
		УстановитьСсылкуНового(СсылкаНаДокумент);
	Иначе
		СсылкаНаДокумент = Ссылка;
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Автор) И ЭтоНовый() Тогда
		Автор = Пользователи.ТекущийПользователь();
	КонецЕсли;

	КоммерческиеПредложенияДокументыПереопределяемый.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
	
	Если ТипЗнч(Склад) = Тип("Строка") Тогда
		АдресДоставки = Склад;
		АдресДоставкиЗначенияПолей = СкладЗначенияПолей;
	КонецЕсли;
	
	Если ПустаяСтрока(НомерЭД) Тогда
		НомерЭД = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Номер, Истина, Истина);
	КонецЕсли;
	
	СоздатьИзображенияТоварныхПозиций1СН(СсылкаНаДокумент);
	
	СоздатьИзображенияСНовымВладельцемПриКопированииДокумента(СсылкаНаДокумент);
	
КонецПроцедуры

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	КоммерческиеПредложенияСлужебный.УдалитьНеАктуальныеИзображенияРучныхТоваровЗКППоставщика(Ссылка);
	
	КоммерческиеПредложенияДокументыПереопределяемый.ПриЗаписи(ЭтотОбъект, Отказ);
	
КонецПроцедуры

Процедура ПриКопировании(ОбъектКопирования)
	
	ИндексРучногоТовара = 2;
	
	Для Каждого Товар Из Товары Цикл
		
		Товар.ИдентификаторСтрокиЗапроса = Новый УникальныйИдентификатор;
		
		Если Товар.ИсточникДобавленияТовара = ИндексРучногоТовара Тогда
			Товар.Изображение = Неопределено;
		КонецЕсли;
		
	КонецЦикла;
	
	ВыбранныеИсточники.Очистить();
	ИдентификаторВСервисе = "";
	Если ЗначениеЗаполнено(Менеджер) Тогда
		Документы.ЗапросКоммерческихПредложенийПоставщиков.ЗаполнитьКИМенеджера(Менеджер, МенеджерEmail, МенеджерНомерТелефона);
	КонецЕсли;
	
	Автор = Пользователи.ТекущийПользователь();
	
КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура СообщитьПользователю(ИмяТабличнойЧасти, НомерСтроки, ИмяКолонки, ЗаголовокКолонки, Отказ)

	ТекстСообщения = СтрШаблон(НСтр("ru = 'Не заполнена колонка ""%3"" в строке %1 списка ""%2""'"),
			НомерСтроки, ИмяТабличнойЧасти, ЗаголовокКолонки);
	
	Поле = ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти(ИмяТабличнойЧасти, НомерСтроки, ИмяКолонки);
	
	ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Ссылка, Поле, "Объект", Отказ);

КонецПроцедуры

Процедура ИнициализироватьДанныеДокумента()

	НастройкиУчета = КоммерческиеПредложенияДокументы.НастройкиУчета();
	
	Если Не ЗначениеЗаполнено(Менеджер) Тогда
		Менеджер = Пользователи.ТекущийПользователь();
	КонецЕсли;
	
	Документы.ЗапросКоммерческихПредложенийПоставщиков.ЗаполнитьКИМенеджера(Менеджер, МенеджерEmail, МенеджерНомерТелефона);
	
	Если Не ЗначениеЗаполнено(Организация)
		И НастройкиУчета.ИспользуетсяЕдинственнаяОрганизация 
		И ЗначениеЗаполнено(НастройкиУчета.ЕдинственнаяОрганизация) Тогда
		
		Организация = НастройкиУчета.ЕдинственнаяОрганизация;
		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(Валюта)
		И НастройкиУчета.ИспользуетсяЕдинственнаяВалюта
		И ЗначениеЗаполнено(НастройкиУчета.ЕдинственнаяВалюта) Тогда
		
		Валюта = НастройкиУчета.ЕдинственнаяВалюта;
		
	КонецЕсли;
	
	Автор = Пользователи.ТекущийПользователь();

КонецПроцедуры

Процедура СоздатьИзображенияТоварныхПозиций1СН(СсылкаНаДокумент)
		
	СтрокиТребующиеСозданиеИзображения = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(ДополнительныеСвойства, 
		"СтрокиТребующиеСозданиеИзображения", Новый Массив);
		
	ДополнительныеРеквизитыФайла = Новый Структура;
	ДополнительныеРеквизитыФайла.Вставить("ЭтоИзображениеТоварнойПозиции", Истина);

	Для Каждого СтрокаТребующаяСозданиеИзображения Из СтрокиТребующиеСозданиеИзображения Цикл
		
		АдресИзображенияВХранилище = СтрокаТребующаяСозданиеИзображения.ИзображениеАдресДвоичныхДанных;
		ИдентификаторСтрокиЗапроса = СтрокаТребующаяСозданиеИзображения.ИдентификаторСтрокиЗапроса;
		Наименование = Строка(Новый УникальныйИдентификатор());
		Расширение = СтрокаТребующаяСозданиеИзображения.РасширениеИзображения;
		ДобавитьФайлИзображенияТоварнойПозиции(СсылкаНаДокумент, ИдентификаторСтрокиЗапроса, АдресИзображенияВХранилище, 
			Наименование, Расширение, ДополнительныеРеквизитыФайла);
		
	КонецЦикла;
	
КонецПроцедуры

Процедура СоздатьИзображенияСНовымВладельцемПриКопированииДокумента(СсылкаНаДокумент)

	УстановитьПривилегированныйРежим(Истина);
	
	Запрос = Новый Запрос;
	Запрос.Текст =
		"ВЫБРАТЬ
		|	Товары.ИдентификаторСтрокиЗапроса,
		|	Товары.Изображение КАК Изображение
		|ПОМЕСТИТЬ Товары
		|ИЗ
		|	&Товары КАК Товары
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Изображение
		|;
		|
		|////////////////////////////////////////////////////////////////////////////////
		|ВЫБРАТЬ
		|	Товары.ИдентификаторСтрокиЗапроса,
		|	Товары.Изображение,
		|	ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.Наименование КАК Наименование,
		|	ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.Расширение
		|ИЗ
		|	Товары КАК Товары
		|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы КАК
		|			ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы
		|		ПО Товары.Изображение = ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.Ссылка
		|ГДЕ
		|	ЗапросКоммерческихПредложенийПоставщиковПрисоединенныеФайлы.ВладелецФайла <> &Ссылка";
	
	Запрос.УстановитьПараметр("Товары", Товары);
	Запрос.УстановитьПараметр("Ссылка", СсылкаНаДокумент);
	
	РезультатЗапроса = Запрос.Выполнить();
	Выгрузка = РезультатЗапроса.Выгрузить();
	
	ФайлыИзображенийДляЗамены = Выгрузка.ВыгрузитьКолонку("Изображение");
	ДвоичныеДанныеИзображенийДляЗамены = РаботаСФайлами.ДвоичныеДанныеФайлов(ФайлыИзображенийДляЗамены);
	
	ДополнительныеРеквизитыФайла = Новый Структура;
	ДополнительныеРеквизитыФайла.Вставить("ЭтоИзображениеТоварнойПозиции", Истина);

	Для Каждого СтрокаВыгрузки Из Выгрузка Цикл
		
		ДвоичныеДанныеИзображенияДляЗамены = ДвоичныеДанныеИзображенийДляЗамены[СтрокаВыгрузки.Изображение];
		АдресИзображенияВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеИзображенияДляЗамены);
		ИдентификаторСтрокиЗапроса = СтрокаВыгрузки.ИдентификаторСтрокиЗапроса;
		Наименование = СтрокаВыгрузки.Наименование;
		Расширение = СтрокаВыгрузки.Расширение;
		ДобавитьФайлИзображенияТоварнойПозиции(СсылкаНаДокумент, ИдентификаторСтрокиЗапроса, АдресИзображенияВХранилище, 
			Наименование, Расширение, ДополнительныеРеквизитыФайла);
				
	КонецЦикла;
	
КонецПроцедуры

Процедура ДобавитьФайлИзображенияТоварнойПозиции(СсылкаНаДокумент, ИдентификаторСтрокиЗапроса, 
	АдресИзображенияВХранилище, Наименование, Расширение, ДополнительныеРеквизитыФайла)
	
	ПараметрыФайла = РаботаСФайлами.ПараметрыДобавленияФайла(ДополнительныеРеквизитыФайла);
	ПараметрыФайла.ВладелецФайлов = СсылкаНаДокумент;
	ПараметрыФайла.ИмяБезРасширения = Наименование;
	ПараметрыФайла.РасширениеБезТочки = Расширение;
	
	ФайлИзображения = РаботаСФайлами.ДобавитьФайл(ПараметрыФайла, АдресИзображенияВХранилище);
	
	СтрокаТовары = Товары.Найти(ИдентификаторСтрокиЗапроса);
	СтрокаТовары.Изображение = ФайлИзображения;
	
КонецПроцедуры

#КонецОбласти

#КонецЕсли

Связанные материалы