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