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

файл

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)

	Если ПринудительноЗакрытьФорму Тогда
		Возврат;
	КонецЕсли;
	
	Если Модифицированность Тогда

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

	КонецЕсли;

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

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

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

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

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

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

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

&НаКлиенте
Процедура АктВыполненныхРаботПоЗаказамПриИзменении(Элемент)
	ПоЗаказамПриИзменении();
КонецПроцедуры

&НаКлиенте
Процедура АктВыполненныхРаботПоЗаказуПриИзменении(Элемент)
	ПоЗаказамПриИзменении();	
КонецПроцедуры

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

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

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

&НаКлиенте
Процедура ВыбратьТоварыВыполнить()

	ВыбратьВсеТоварыНаСервере(Истина);

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

&НаКлиенте
Процедура ИсключитьТоварыВыполнить()

	ВыбратьВсеТоварыНаСервере(Ложь);

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

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

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

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

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

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

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Gray);

	//

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

	ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
	ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТаблицаУслугЗаказКлиента.Имя);

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

	//

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

	//

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

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

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

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

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

	Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);

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

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

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

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

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

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

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

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

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

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