Акт о расхождениях после отгрузки / Форма документа самообслуживание / Модуль формы

файл
#Область ОписаниеПеременных

&НаКлиенте
Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ

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

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

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

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

	СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	
	ОтключитьОтметкуНезаполненного();
	
	// СтандартныеПодсистемы.ПодключаемыеКоманды
	ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
	// Конец СтандартныеПодсистемы.ПодключаемыеКоманды
КонецПроцедуры

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)

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

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

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

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

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)

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

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

#Область ОбработчикиСобытийЭлементовШапкиФормы

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

&НаКлиенте
Процедура СоглашениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
	ОткрытьФорму("Обработка.СамообслуживаниеПартнеров.Форма.ВыборСоглашения",
	             Новый Структура("Партнер,Соглашение",Объект.Партнер,Объект.Соглашение),
	             ЭтаФорма,,,, Новый ОписаниеОповещения("СоглашениеОткрытиеФормыВыбораЗавершение", ЭтотОбъект),
	             РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
	
КонецПроцедуры

&НаКлиенте
Процедура СоглашениеОчистка(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	
КонецПроцедуры

&НаКлиенте
Процедура ДокументыОснованиеПредставлениеНажатие(Элемент, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	Если ДокументыОснования.Количество() = 1 Тогда
		ПоказатьЗначение(, ДокументыОснования[0].Реализация);
	ИначеЕсли ДокументыОснования.Количество() > 1 Тогда
		
		СписокДокументов = Новый СписокЗначений;
		Для Каждого СтрокаТаблицы Из ДокументыОснования Цикл
			СписокДокументов.Добавить(СтрокаТаблицы.Реализация); 
		КонецЦикла;
		
		ОткрытьФорму(
		"ОбщаяФорма.ПросмотрСпискаДокументов",
		Новый Структура("СписокДокументов, Заголовок",
		СписокДокументов,
		НСтр("ru='Реализации товаров и услуг (%КоличествоДокументов%)'")
		),
		ЭтаФорма);
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ДоговорПриИзменении(Элемент)
	
	 ПриИзмененииДоговораСервер();
	 
КонецПроцедуры 

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

#Область ОбработчикиСобытийЭлементовТаблицыФормыТовары

&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
	
	ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия();
	
	ВыбранноеЗначение.Значение                   = Элементы.Товары.ТекущиеДанные.Серия;
	ВыбранноеЗначение.ИдентификаторТекущейСтроки = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор();
	
	НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);

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

&НаКлиенте
Процедура ТоварыСерияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	СтандартнаяОбработка = Ложь;
	ОткрытьПодборСерий(Элемент.ТекстРедактирования);

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

&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
	
	РасхожденияКлиент.ТоварыКоличествоУпаковокПриИзменении(ЭтаФорма, КэшированныеЗначения);
	
КонецПроцедуры

&НаКлиенте
Процедура ТоварыУпаковкаПриИзменении(Элемент)
	
	РасхожденияКлиент.ТоварыУпаковкаПриИзменении(ЭтаФорма, КэшированныеЗначения);
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура ТоварыКомментарийКлиентаПодвалНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
	
	КомментарийКлиентаНачалоВыбора();
	
КонецПроцедуры

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

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ЗаполнитьПоРеализациямВыполнить(Команда)
	
	ПараметрыПроверки = РаботаСТабличнымиЧастямиКлиент.ПараметрыПроверкиЗаполнения();
	ПараметрыПроверки.ТабличнаяЧасть            = Объект.Товары;
	ПараметрыПроверки.ПроверятьРаспроведенность = Ложь;
	Оповещение = Новый ОписаниеОповещения("ЗаполнитьПоРеализациямВыполнитьЗавершение", ЭтотОбъект);
	РаботаСТабличнымиЧастямиКлиент.ПроверитьВозможностьЗаполнения(ЭтаФорма, Оповещение, ПараметрыПроверки);
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьПоРеализациямВыполнитьЗавершение(Результат, ДополнительныеПараметры) Экспорт 
	
	ЗаполнитьПоРеализациям();
	
КонецПроцедуры

&НаКлиенте
Процедура РеквизитыПечати(Команда)
	
	ОткрытьФорму("Обработка.РаботаСАктамиРасхождений.Форма.РеквизитыПечати",
	             Новый Структура("ДокументОбъект", Объект),
	             ЭтаФорма);
	
КонецПроцедуры

&НаКлиенте
Процедура УказатьСерии(Команда)
	
	ОткрытьПодборСерий();
	
КонецПроцедуры

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

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

&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
	
	Если ЗначениеЗаполнено(АдресЗагруженныхДанных) Тогда
		ПолучитьЗагруженныеТоварыИзХранилища(АдресЗагруженныхДанных, КэшированныеЗначения);
	КонецЕсли;
	
КонецПроцедуры

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

&НаКлиенте
Процедура ОткрытьКарточкуТовара(Команда)
	
	ОткрытьКарточкуНоменклатуры();
	
КонецПроцедуры

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

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

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

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

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

&НаКлиенте
Процедура РазбитьСтроку(Команда)
	
	ТаблицаФормы  = Элементы.Товары;
	ДанныеТаблицы = Объект.Товары;
	
	СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаСуммы(
		"Количество, Сумма, СуммаНДС, СуммаСНДС",
		"КоличествоУпаковок");
		
	Если ТаблицаФормы.ТекущиеДанные <> Неопределено Тогда
		ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьСтруктуруПересчетаСуммы(СтруктураПересчетаСуммы, ТаблицаФормы.ТекущиеДанные);
	КонецЕсли;
	
	ДополнительныеПараметры = Новый Структура;
	ДополнительныеПараметры.Вставить("СтруктураПересчетаСуммы", СтруктураПересчетаСуммы);
	
	РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы,
		Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект, ДополнительныеПараметры));
	
КонецПроцедуры

&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт 
	
	ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
	
	Если НоваяСтрока <> Неопределено Тогда
		
		НоваяСтрока.КодСтроки = 0;
		НоваяСтрока.КоличествоПоДокументу         = 0;
		НоваяСтрока.КоличествоУпаковокПоДокументу = 0;
		НоваяСтрока.КоличествоУпаковокРасхождения = 0;
		НоваяСтрока.СуммаНДСПоДокументу           = 0;
		НоваяСтрока.СуммаНДСРасхождения           = 0;
		НоваяСтрока.СуммаПоДокументу              = 0;
		НоваяСтрока.СуммаРасхождения              = 0;
		НоваяСтрока.СуммаСНДСПоДокументу          = 0;
		НоваяСтрока.СуммаСНДСРасхождения          = 0;
		НоваяСтрока["Действие"]                   = ПредопределенноеЗначение("Перечисление.ВариантыДействийПоРасхождениямВАктеПослеОтгрузки.ПустаяСсылка");
		НоваяСтрока.ЕстьКомментарийМенеджера      = Ложь;
		НоваяСтрока.ЕстьКомментарийКлиента        = Ложь;
		НоваяСтрока.КомментарийКлиента            = "";
		НоваяСтрока.КомментарийМенеджера          = "";
		НоваяСтрока.ЗаполненоПоРеализации         = Ложь;
		
		СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
		ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект);
		
		СтруктураДействий = Новый Структура;
		СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
		СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
		СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
		СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
		СтруктураДействий.Вставить("ПересчитатьСумму");
		СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекущаяСтрока.Склад, ПараметрыУказанияСерий));
		СтруктураДействий.Вставить("ПересчитатьРасхожденияПослеПриемки");

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

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

// СтандартныеПодсистемы.Свойства
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
	УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
// Конец СтандартныеПодсистемы.Свойства

&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
	
	СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
	
КонецПроцедуры

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

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

&НаСервере
Процедура УстановитьУсловноеОформление()

	УсловноеОформление.Элементы.Очистить();
	
	// Упаковка
	
	НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);
	
	// ТоварыТекстовоеОписание отметка незаполненного

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыТекстовоеОписание.Имя);
	
	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Номенклатура");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
	
	// ТоварыТекстовоеОписание только просмотр
	
	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыТекстовоеОписание.Имя);

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

	ПараметрыУстановки = МногооборотнаяТараСервер.ПараметрыУстановкиУсловногоОформленияДляСтрокСМногооборотнойТарой();
	
	ПараметрыУстановки.Форма                 = ЭтаФорма;
	ПараметрыУстановки.ЭтоПоступление        = Истина;
	ПараметрыУстановки.ПутьКПолюОтбораВернутьМногооборотнуюТару	= "Объект.Товары.ВернутьМногооборотнуюТару";
	ПараметрыУстановки.ПутьКПолюОтбораТребуетсяЗалогЗаТару		= "Объект.Товары.ТребуетсяЗалогЗаТару";
	
	МногооборотнаяТараСервер.УстановитьУсловноеОформлениеДляСтрокСМногооборотнойТарой(ПараметрыУстановки);

	// ТоварыНоменклатура, ТоварыЦена, ТоварыСтавкаНДС  отметка незаполненного

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыНоменклатура.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЦена.Имя);
	
	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСтавкаНДС.Имя);

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

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

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыДокументОснование.Имя);
	
	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;

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

	НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, Ложь);
	
	// Статус указания серии не отображать

	НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь);

	// Сумма

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСумма.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Сумма");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;

	ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
	ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

	ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
	СписокЗначений = Новый СписокЗначений;
	СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.Товар);
	СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.Работа);
	ОтборЭлемента.ПравоеЗначение = СписокЗначений;

	Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
	
	// Недоступность элементов таблицы товары по реализациям
	
	Элемент = УсловноеОформление.Элементы.Добавить();

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

	// Расхождение количество

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоРасхождения.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоУпаковокРасхождения");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = 0;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Кирпичный);
	
	// НеДоступность документов оснований

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДокументыОснованиеПредставление.Имя);

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

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаРасхождения.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.СуммаРасхождения");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = 0;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Кирпичный);
	
	// Расхождение сумма НДС

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаНДСРасхождения.Имя);

	ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
	ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.СуммаНДСРасхождения");
	ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
	ОтборЭлемента.ПравоеЗначение = 0;
	
	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Кирпичный);
	
	// Расхождение сумма с НДС

	Элемент = УсловноеОформление.Элементы.Добавить();

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаСНДСРасхождения.Имя);

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

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

&НаСервере
Процедура ПриЧтенииСозданииНаСервере()

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

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

&НаКлиенте
Процедура КомментарийКлиентаНачалоВыбора()
	
	СамообслуживаниеКлиент.КомментарийКлиентаНачалоВыбора(ЭтотОбъект);
	
КонецПроцедуры

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

#Область Серии

&НаСервере
Процедура УстановитьВидимостьЭлементовСерий()
	
	Элементы.ТоварыСтатусУказанияСерий.Видимость  = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	Элементы.ТоварыУказатьСерии.Видимость         = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
	Элементы.ТоварыСерия.Видимость                = ПараметрыУказанияСерий.УчитыватьСебестоимостьПоСериям;
	
КонецПроцедуры

&НаСервере
Функция ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор)
	
	Возврат НоменклатураСервер.ПараметрыФормыУказанияСерий(Объект, ПараметрыУказанияСерий, ТекущиеДанныеИдентификатор, ЭтаФорма);
	
КонецФункции

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

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

&НаКлиенте
Процедура ОткрытьПодборСерийЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    ПараметрыФормыУказанияСерий = ДополнительныеПараметры.ПараметрыФормыУказанияСерий;
    
    
    ЗначениеВозврата = Результат;
    
    Если ЗначениеВозврата <> Неопределено Тогда
        ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий);
    КонецЕсли;

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

&НаСервере
Процедура ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий)
	
	НоменклатураСервер.ОбработатьУказаниеСерий(Объект, ПараметрыУказанияСерий, ПараметрыФормыУказанияСерий);

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

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

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

&НаКлиенте
Процедура ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение)
	
	ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение, КэшированныеЗначения);
	
КонецПроцедуры

&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение, КэшированныеЗначения)
	
	РасхожденияСервер.ОбработкаВыбораПодборНаСервере(ЭтаФорма, КэшированныеЗначения, ВыбранноеЗначение, Истина);
	
КонецПроцедуры

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

&НаСервере
Процедура КонтрагентПриИзмененииСервер()
	
	Если ИспользуютсяДоговорыКонтрагентов Тогда
		СамообслуживаниеСервер.УправлениеЭлементомФормыДоговор(Объект, Элементы.Договор,
	                                                       ИспользуютсяДоговорыКонтрагентов, Объект.ХозяйственнаяОперация);
	КонецЕсли;
	
КонецПроцедуры

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

&НаСервере
Процедура ЗаполнитьПоРеализациям()
	
	РасхожденияСервер.ЗаполнитьПоОснованиям(ЭтаФорма, Ложь);
	РасхожденияКлиентСервер.ЗаполнитьРеквизитыМногооборотнойТары(Объект, ДокументыОснования);
	
КонецПроцедуры

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

&НаСервере
Процедура ОбработатьПодборДокументовОснований(МассивДокументовОснований, ПараметрВариантЗаполнения)

	ВариантЗаполнения = ПараметрВариантЗаполнения;
	РасхожденияСервер.СформироватьТаблицуДокументовОснований(ЭтаФорма, МассивДокументовОснований);
	ЗаполнитьПоРеализациям();
	УправлениеДоступностьюКлиентСервер(ЭтаФорма);

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

// СтандартныеПодсистемы.ПодключаемыеКоманды
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
	ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект);
КонецПроцедуры

&НаСервере
Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) Экспорт
	ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
	ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
// Конец СтандартныеПодсистемы.ПодключаемыеКоманды

&НаСервере
Процедура УстановитьЗаголовокФормыДокумента(ЭтоНовыйОбъект)
	
	Если ЭтоНовыйОбъект Тогда
		
		Заголовок = НСтр("ru = 'Акт приемки (создание)'");
		
	Иначе
		
		Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Акт приемки %1 от %2'"),
		                                                                    Объект.Номер, Объект.Дата);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьКарточкуНоменклатуры()

	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	
	Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.Номенклатура) Тогда
		ПараметрыФормы = Новый Структура("Ключ", ТекущиеДанные.Номенклатура);
		ОткрытьФорму("Справочник.Номенклатура.Форма.ФормаЭлемента", ПараметрыФормы);
	КонецЕсли;

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

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

&НаКлиенте
Процедура ТоварыКомментарийКлиентаПодвалПриИзменении(Элемент)
	
	ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
	ТекущиеДанные.ЕстьКомментарийКлиента = Не ПустаяСтрока(ТекущиеДанные.КомментарийКлиента);
	
КонецПроцедуры

&НаКлиенте
Процедура СоглашениеОткрытиеФормыВыбораЗавершение(Результат, ДополнительныеПараметры) Экспорт
	
	РезультатВыбора = Результат;
	
	Если РезультатВыбора <> Неопределено И РезультатВыбора.Соглашение <> Объект.Соглашение Тогда
		
		Если Объект.Товары.Количество() > 0 Тогда
			
			ДополнительныеПараметры.Вставить("РезультатВыбора", РезультатВыбора);
			ОписаниеОповещениВопрос = Новый ОписаниеОповещения("ВопросПослеВыбораСоглашения", ЭтотОбъект, ДополнительныеПараметры);
			ТекстВопроса = НСтр("ru = 'Соглашение было изменено, ""Товары"" будут очищены, Продолжить?'");
			ПоказатьВопрос(ОписаниеОповещениВопрос, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
			
		Иначе
			
			ОбработатьВыборСоглашения(РезультатВыбора);
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ВопросПослеВыбораСоглашения(РезультатВопроса, ДополнительныеПараметры) Экспорт
	
	Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
		
		Объект.Товары.Очистить();
		Объект.Серии.Очистить();
		ОбработатьВыборСоглашения(ДополнительныеПараметры.РезультатВыбора);
		
	КонецЕсли;
	
КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборСоглашения(РезультатВыбора)
	
	Объект.Соглашение = РезультатВыбора.Соглашение;
	ПриИзмененииСоглашенияСервер(РезультатВыбора);
	УправлениеДоступностьюКлиентСервер(ЭтаФорма);
	
КонецПроцедуры

&НаСервере
Процедура ПриИзмененииДоговораСервер()
	
	ЗаполнитьНалогообложениеНДСПродажи();
	УправлениеДоступностьюКлиентСервер(ЭтаФорма);
	
КонецПроцедуры

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

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


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