Выпуск продукции и выполнение работ / Модуль объекта

файл
//++ Устарело_Производство21
#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

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

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

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

Процедура ПриЗаписи(Отказ)
	
	Если ОбменДанными.Загрузка Тогда
		Возврат;
	КонецЕсли;
	
	ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
	
КонецПроцедуры

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

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

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

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

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

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

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

#Область ИнициализацияИЗаполнение

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


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

Функция ДокументОснованиеПриЗаполнении(ДанныеЗаполнения)
	
	
	Возврат Неопределено;
	
КонецФункции

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

#Область ВидыЗапасов

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

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

#Область Прочее

Процедура ПроверитьЗаполнениеТовары(Отказ)

	ПериодУчетнойПолитики = ?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДатаСеанса());
	ПараметрыПолитики = НастройкиНалоговУчетныхПолитик.ДействующиеПараметрыНалоговУчетныхПолитикНаДату("УчетнаяПолитикаФинансовогоУчета",
		Организация,
		ПериодУчетнойПолитики);
	
	Если ПараметрыПолитики <> Неопределено Тогда
		ИспользоватьПлановуюСтоимость = ПараметрыПолитики.УчетГотовойПродукцииПоПлановойСтоимости;
	Иначе
		ИспользоватьПлановуюСтоимость = Ложь;
	КонецЕсли;
	
	Для Каждого ДанныеСтроки Из Товары Цикл
		
		// Цена, Сумма
		Если ИспользоватьПлановуюСтоимость 
			ИЛИ ДанныеСтроки.ТипСтоимости = Перечисления.ТипыСтоимостиВыходныхИзделий.Фиксированная Тогда
		
			Если Не ЗначениеЗаполнено(ДанныеСтроки.Цена) Тогда
				
				ТекстСообщения = НСтр("ru = 'Не заполнена колонка ""Цена"" в строке %1 списка ""Товары и работы""'");
				
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДанныеСтроки.НомерСтроки),
					ЭтотОбъект,
					ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ДанныеСтроки.НомерСтроки, "Цена"),
					,
					Отказ);
				
			КонецЕсли;
			
			Если Не ЗначениеЗаполнено(ДанныеСтроки.Сумма) Тогда
				
				ТекстСообщения = НСтр("ru = 'Не заполнена колонка ""Сумма"" в строке %1 списка ""Товары и работы""'");
				
				ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
					СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ДанныеСтроки.НомерСтроки),
					ЭтотОбъект,
					ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ДанныеСтроки.НомерСтроки, "Сумма"),
					,
					Отказ);
				
			КонецЕсли;
			
		КонецЕсли;
		
	КонецЦикла;
	
	Если НаправлениеВыпуска = Перечисления.ХозяйственныеОперации.ВыпускПродукцииНаСклад Тогда
		
			ТоварыСПустымСкладом = Товары.Выгрузить(Новый Структура("Склад", Справочники.Склады.ПустаяСсылка()), "Номенклатура,НомерСтроки");
			МассивНоменклатуры = ТоварыСПустымСкладом.ВыгрузитьКолонку("Номенклатура");
			ТипыНоменклатуры = ОбщегоНазначения.ЗначенияРеквизитовОбъектов(МассивНоменклатуры, "ТипНоменклатуры");
			Для Каждого ДанныеСтроки Из ТоварыСПустымСкладом Цикл
				Если ТипыНоменклатуры.Получить(ДанныеСтроки.Номенклатура).ТипНоменклатуры = Перечисления.ТипыНоменклатуры.Работа Тогда
					ТекстСообщения = НСтр("ru = 'В строке %1 списка ""Товары и работы"" указана номенклатура с типом ""Работа"". Работы можно указывать только при направлении выпуска ""В подразделение""'");
					
					ОбщегоНазначения.СообщитьПользователю(
						СтрШаблон(ТекстСообщения, ДанныеСтроки.НомерСтроки),
						ЭтотОбъект,
						ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ДанныеСтроки.НомерСтроки, "Номенклатура"),
						,
						Отказ);
				КонецЕсли;
			КонецЦикла;
			
	КонецЕсли;
	
КонецПроцедуры

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


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

Процедура ЗаполнитьВыпускПодДеятельность()
	
	ПараметрыЗаполнения = Документы.ВыпускПродукции.ПараметрыЗаполненияВидаДеятельностиНДС(ЭтотОбъект);
	УчетНДСУП.ЗаполнитьВидДеятельностиНДС(ВыпускПодДеятельность, ПараметрыЗаполнения);
	
КонецПроцедуры

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

#КонецЕсли
//-- Устарело_Производство21

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