#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем ПроверкаКонтрагентовПараметрыОбработчикаОжидания Экспорт;
&НаКлиенте
Перем ФормаДлительнойОперации Экспорт;
&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ИсправлениеДокументов.ПриСозданииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
Если ТребуетсяОткрытиеПечатнойФормы Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Объект", Объект);
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры);
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
ИспользоватьРучныеСкидкиВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах");
ИспользоватьАвтоматическиеСкидкиВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах");
ОтклонениеОтУсловийПродаж = ПраваПользователяПовтИсп.ОтклонениеОтУсловийПродаж();
ПродажаНеОблагаетсяНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС;
ИспользоватьПартнеровКакКонтрагентов = ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов");
ИспользоватьОграниченияРучныхСкидок = ПолучитьФункциональнуюОпцию("ИспользоватьОграниченияРучныхСкидокВПродажахПоПользователям")
ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьОграниченияРучныхСкидокВПродажахПоСоглашениям");
ИспользоватьКорректировкиРеализаций = ПолучитьФункциональнуюОпцию("ИспользоватьКорректировкиРеализаций");
ИспользоватьУпрощеннуюСхемуОплатыВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьУпрощеннуюСхемуОплатыВПродажах");
ИспользоватьПодразделения = ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения");
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Объект.КартаЛояльности);
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПриЧтенииСозданииНаСервере();
КонецЕсли;
УстановитьУсловноеОформление();
ПродажиСервер.УстановитьОтметкуНезаполненногоДоговора(Элементы, "Договор");
Если ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам Тогда
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УслугиПодобратьУслугиИзЗаказа", "Заголовок", НСтр("ru = 'Подобрать услуги из заказов'"));
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УслугиЗаполнитьПоЗаказу", "Заголовок", НСтр("ru = 'Заполнить по заказам'"));
КонецЕсли;
Если Не ИспользоватьПодразделения Тогда
Элементы.УслугиПодразделение.Видимость = Ложь;
Иначе
Элементы.УслугиПодразделение.Заголовок = НСтр("ru = 'Подразделение-отправитель'");
КонецЕсли;
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
КонецЕсли;
ПравоНаЧтениеВидаЦены = ПравоДоступа("Просмотр", Метаданные.Документы.АктВыполненныхРабот.ТабличныеЧасти.Услуги.Реквизиты.ВидЦены);
Элементы.УслугиВидЦены.БыстрыйВыбор = Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен");
СкидкиНаценкиЗаполнениеСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения);
УстановитьДоступностьКомандБуфераОбмена();
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтаФорма);
ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриСозданииНаСервере_ФормаДокумента();
ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
ПараметрыЭДОПриСоздании.ДокументССылка = Объект.Ссылка;
ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
ОбменСКонтрагентами.ПриСозданииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
Элементы.ДекорацияСостояниеЭДО.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьОбменЭД");
ЭлектронноеАктированиеЕИСУТ.УстановкаВидимостиГруппыГосконтракта(ЭтотОбъект);
ОбновитьПризнакЕстьКорректировки();
ВзаиморасчетыСервер.ФормаПриСозданииНаСервере(ЭтаФорма);
ФормированиеФискальныхЧековСервер.ФормаПриСозданииНаСервере(ЭтотОбъект);
ПроверкаКонтрагентов.ПриСозданииНаСервереДокумент(ЭтотОбъект, Параметры);
ПроверкаКонтрагентовВызовСервераПереопределяемыйУТ.ФормаДокументаПриСозданииНаСервере(ЭтотОбъект);
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
УчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если ТребуетсяОткрытиеПечатнойФормы Тогда
Отказ = Истина;
СамообслуживаниеКлиент.ПечатьАктВыполненныхРабот(Объект.Ссылка);
Возврат;
КонецЕсли;
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
Если Объект.АктПоЗаказам Тогда
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("УслугиСкопировать");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюСкопировать");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", Ложь);
КонецЕсли;
ПроверкаКонтрагентовКлиент.ПриОткрытииДокумент(ЭтотОбъект);
ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
Если ОбщегоНазначенияУТКлиентСервер.АвторизованВнешнийПользователь() Тогда
ТребуетсяОткрытиеПечатнойФормы = Истина;
Возврат;
КонецЕсли;
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ПриЧтенииСозданииНаСервере();
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
СобытияФорм.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриЧтенииНаСервере_ФормаДокумента();
ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПриЧтенииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
ВзаиморасчетыСервер.ФормаПриЧтенииНаСервере(ЭтаФорма);
ИсправлениеДокументов.ПриЧтенииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
ФормированиеФискальныхЧековСервер.ФормаПриЧтенииНаСервере(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
УстановитьДоступностьЭлементовПоСтатусуСервер();
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ПараметрыПослеЗаписи = ОбменСКонтрагентами.ПараметрыПослеЗаписиНаСервере();
ПараметрыПослеЗаписи.Форма = ЭтотОбъект;
ПараметрыПослеЗаписи.ДокументСсылка = Объект.Ссылка;
ПараметрыПослеЗаписи.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыПослеЗаписи.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи, ПараметрыПослеЗаписи);
ПроверкаКонтрагентов.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект);
ВзаиморасчетыСервер.ФормаПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект.ДополнительныеСвойства);
НаправленияДеятельностиСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
ОбеспечениеВДокументахСервер.ПроверитьЗапуститьФоновоеЗаданиеРаспределенияЗапасов();
МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
ФормированиеФискальныхЧековСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект);
СобытияФорм.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
ПринудительноЗакрытьФорму = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
СобытияФормКлиент.ПередЗаписью(ЭтотОбъект, Отказ, ПараметрыЗаписи);
Если НеВыполнятьПроверкуПередЗаписью Тогда
НеВыполнятьПроверкуПередЗаписью = Ложь;
Возврат;
КонецЕсли;
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
Если ИспользоватьАвтоматическиеСкидкиВПродажах Тогда
Если Не Объект.СкидкиРассчитаны И СкидкиИзменились() Тогда
Отказ = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
ДополнительныеПараметры.Вставить("ЭтотОбъект", ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.ПредложитьПользователюРассчитатьСкидки(
Новый ОписаниеОповещения(
"ПредложитьПользователюРассчитатьСкидкиЗавершение",
ЭтотОбъект,
ДополнительныеПараметры)
);
Иначе
Объект.СкидкиРассчитаны = Истина;
КонецЕсли;
КонецЕсли;
Если НЕ Отказ Тогда
ПередЗаписьюНаКлиентеСервер();
КонецЕсли;
КонецЕсли;
ОбщегоНазначенияУТКлиент.ЗаписатьОбъектПриНеобходимости(ЭтотОбъект, ПараметрыЗаписи, Отказ);
КонецПроцедуры
&НаСервере
Функция СкидкиИзменились()
СкидкиИзменились = СкидкиНаценкиЗаполнениеСервер.НеобходимПерерасчетСкидок(
Объект,
УправляемыеСкидки,
УникальныйИдентификатор,
АдресПримененныхСкидокВоВременномХранилище);
Если Объект.Услуги.Итог("СуммаАвтоматическойСкидки") <> Объект.СкидкиНаценки.Итог("Сумма") Тогда
СкидкиИзменились = Истина;
КонецЕсли;
Возврат СкидкиИзменились;
КонецФункции
&НаКлиенте
Процедура Подключаемый_ОбработатьЗаписьОбъекта()
ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);
КонецПроцедуры
&НаКлиенте
Процедура ПредложитьПользователюРассчитатьСкидкиЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
Отказ = Ложь;
Если ОтветНаВопрос = КодВозвратаДиалога.ОК Тогда
Отказ = Ложь;
ПрименитьИзмененияСкидокНаценокНаКлиенте(Отказ);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
Иначе
Возврат;
КонецЕсли;
ПередЗаписьюНаКлиентеСервер();
ОбщегоНазначенияУТКлиент.ЗаписатьОбъектПриНеобходимости(ЭтотОбъект, ДополнительныеПараметры.ПараметрыЗаписи,,Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если Источник = "ПодключаемоеОборудование"
И ИмяСобытия = "НеизвестныеШтрихкоды"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
КэшированныеЗначения.Штрихкоды.Очистить();
ДанныеШтрихкодов = Новый Массив;
Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
ОбработатьШтрихкоды(ДанныеШтрихкодов);
КонецЕсли;
Если ВзаиморасчетыКлиент.НуженВызовОбработкиОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда
ЗачтенаОплатаСервер(ИмяСобытия, Параметр, Источник);
КонецЕсли;
ПроверкаКонтрагентовКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
Если ИмяСобытия = "ОбновитьСостояниеЭД" Тогда
ОбновитьТекстСчетаФактурыВыданные();
КонецЕсли;
ПараметрыОповещения = ОбменСКонтрагентамиКлиент.ПараметрыОповещенияЭДО_ФормаДокумента();
ПараметрыОповещения.Форма = ЭтотОбъект;
ПараметрыОповещения.ДокументСсылка = Объект.Ссылка;
ПараметрыОповещения.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыОповещения.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентамиКлиент.ОбработкаОповещения_ФормаДокумента(ИмяСобытия, Параметр, Источник, ПараметрыОповещения);
Если ИмяСобытия = "Запись_СчетФактураВыданный"
И ((Параметр.Свойство("ФормаВладелец") И Параметр.ФормаВладелец = УникальныйИдентификатор)
Или Параметр.Свойство("СписокОснований") И Параметр.СписокОснований.НайтиПоЗначению(Объект.Ссылка) <> Неопределено) Тогда
ОбновитьТекстСчетаФактурыВыданные();
КонецЕсли;
Если ИмяСобытия = "Запись_КорректировкаРеализации"
И ТипЗнч(Параметр) = Тип("Структура")
И Параметр.Свойство("ДокументОснование")
И Параметр.ДокументОснование = Объект.Ссылка Тогда
Запись_КорректировкаРеализацииНаСервере();
КонецЕсли;
Если ИмяСобытия = "СчитанаКартаЛояльности"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
СчитанаКартаЛояльности(Новый ОписаниеОповещения("ОбработкаОповещенияЗавершение", ЭтотОбъект, Новый Структура("ИмяСобытия, Параметр", ИмяСобытия, Параметр)), Параметр.КартаЛояльности);
Возврат;
КонецЕсли;
ИсправлениеДокументовКлиент.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);
ОбработкаОповещенияФрагмент(ИмяСобытия, Параметр);
СобытияФормКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
УстановитьВидимостьПоляПартнер(ЭтотОбъект);
РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
УчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия,ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗачтенаОплатаСервер(ИмяСобытия, Параметр, Источник)
ВзаиморасчетыСервер.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияЗавершение(Результат, ДополнительныеПараметры) Экспорт
ИмяСобытия = ДополнительныеПараметры.ИмяСобытия;
Параметр = ДополнительныеПараметры.Параметр;
ОбработкаОповещенияФрагмент(ИмяСобытия, Параметр);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияФрагмент(Знач ИмяСобытия, Знач Параметр)
Если ИмяСобытия = "ПолученыСообщения"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ПолученыСообщения(Параметр.Сообщения);
КонецЕсли;
Если ИмяСобытия = "ИзмененРеквизитЗависящийОтСтатуса"
И Параметр.УникальныйИдентификатор = УникальныйИдентификатор Тогда
Если Объект.Согласован Тогда
Объект.Согласован = Ложь;
КонецЕсли;
ПодключитьОбработчикОжидания("Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса", 0.1, Истина);
КонецЕсли;
Если ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда
УстановитьДоступностьКомандБуфераОбменаНаКлиенте();
КонецЕсли;
Если ИмяСобытия = "ДобавлениеПартнераВСегмент"
ИЛИ ИмяСобытия = "УдалениеПартнераИзСегмента" Тогда
УстановитьВидимостьЗапретаОтгрузкиПартнеру();
КонецЕсли;
Если ИмяСобытия = "Закрытие_РедактированиеКомплекта"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ПриОкончанииРедактированияНабора(Параметр.АдресВоВременномХранилище);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
Если ИмяСобытия = "РедактироватьНабор"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
МассивТиповНоменклатуры = Новый Массив;
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор"));
ПараметрыНабора = Новый Структура;
ПараметрыНабора.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора);
ПараметрыНабора.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
ПараметрыНабора.Вставить("СверхЗаказа", Истина);
ПараметрыНабора.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма));
АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыНабора);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище);
ПараметрыОткрытия.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора);
ПараметрыОткрытия.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
ПараметрыОткрытия.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыОткрытия.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыОткрытия.Вставить("Валюта", Объект.Валюта);
ПараметрыОткрытия.Вставить("Соглашение", Объект.Соглашение);
ПараметрыОткрытия.Вставить("Дата", Объект.Дата);
ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка);
ПараметрыОткрытия.Вставить("ОтборПоТипуНоменклатуры", МассивТиповНоменклатуры);
ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Истина);
ПараметрыОткрытия.Вставить("Организация", Объект.Организация);
ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ИсточникВыбора.ИмяФормы = "Документ.АктВыполненныхРабот.Форма.ФормаПодбораУслугИзЗаказа" Тогда
ПолучитьУслугиИзХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение);
ИначеЕсли УчетНДСУПКлиент.ЗаконченоРедактированиеСчетаФактурыВыданного(ВыбранноеЗначение, ИсточникВыбора) Тогда
ОбновитьТекстСчетаФактурыВыданные();
ИначеЕсли ИсточникВыбора.ИмяФормы = "Справочник.СтруктураПредприятия.Форма.ФормаВыбора" Тогда
ПродажиКлиент.ОбработкаВыбораПодразделения(Объект.Услуги, Элементы.Услуги.ВыделенныеСтроки, ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "ОбщаяФорма.РеквизитыПечатиРеализации" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
Модифицированность = Истина;
ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение);
КонецЕсли;
ИначеЕсли ИсточникВыбора.ИмяФормы = "Справочник.ВидыЗапасов.Форма.ФормаВводаВидовЗапасов" Тогда
ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение);
КонецЕсли;
Если Окно <> Неопределено Тогда
Окно.Активизировать();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
Оповестить("Запись_АктВыполненныхРабот", ПараметрыЗаписи, Объект.Ссылка);
ВзаиморасчетыКлиент.ФормаПослеЗаписи(ЭтаФорма);
ОбменСКонтрагентамиКлиент.ПослеЗаписи_ФормаДокумента(ЭтаФорма, ПараметрыЗаписи);
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);
ОбщегоНазначенияУТКлиент.ВыполнитьДействияПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
ПроверкаКонтрагентов.ПередЗаписьюНаСервереДокумент(ЭтотОбъект, ТекущийОбъект);
ВзаиморасчетыСервер.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
ЭлектронноеАктированиеЕИСУТ.ПередЗаписьюНаСервереДокумент(ЭтаФорма, ТекущийОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
ПроверкаКонтрагентов.ПриЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СоглашениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПараметрыВыбораСоглашения = ПродажиКлиент.ПараметрыНачалаВыбораСоглашенияСКлиентом();
ПараметрыВыбораСоглашения.Элемент = Элемент;
ПараметрыВыбораСоглашения.Партнер = Объект.Партнер;
ПараметрыВыбораСоглашения.Документ = Объект.Соглашение;
ПараметрыВыбораСоглашения.ДатаДокумента = Объект.Дата;
ПараметрыВыбораСоглашения.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.РеализацияКлиенту");
ПараметрыВыбораСоглашения.ДанныеФормыСтруктура = Объект;
ПродажиКлиент.НачалоВыбораСоглашенияСКлиентом(ПараметрыВыбораСоглашения, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПартнерПриИзменении(Элемент)
Если Не ЗначениеЗаполнено (Объект.Партнер) Тогда
УстановитьВидимостьЗапретаОтгрузкиПартнеру();
Возврат;
КонецЕсли;
ПартнерПриИзмененииСервер();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию();
КонецЕсли;
ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Элемент);
ПредложениеЗаполнитьПоГосконтрактуЕИС();
КонецПроцедуры
&НаКлиенте
Процедура КонтактноеЛицоПриИзменении(Элемент)
Если Объект.КонтактноеЛицо.Пустая() Тогда
Возврат;
ИначеЕсли Не Объект.Партнер.Пустая() Тогда
Возврат;
КонецЕсли;
ПартнерИзменился = Ложь;
КонтактноеЛицоПриИзмененииСервер(ПартнерИзменился);
Если Не ПартнерИзменился Тогда
Возврат;
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоглашениеПриИзменении(Элемент)
Если Не ЗначениеЗаполнено (Объект.Соглашение) Тогда
СоглашениеОчисткаСервер();
Возврат;
КонецЕсли;
ДоговорДоИзменения = Объект.Договор;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
СоглашениеПриИзмененииСервер();
Если Не ДоговорДоИзменения = Объект.Договор Тогда
ПредложениеЗаполнитьПоГосконтрактуЕИС();
КонецЕсли;
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродаж();
КонецПроцедуры
&НаКлиенте
Процедура ДоговорПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.Договор) Тогда
ДоговорПриИзмененииСервер();
ПредложениеЗаполнитьПоГосконтрактуЕИС();
Иначе
ДоговорОчисткаСервер();
СуммаДолга = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НалогообложениеНДСПриИзменении(Элемент)
НалогообложениеНДСПриИзмененииСервер();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЦенаВключаетНДСПриИзменении(Элемент)
ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПараметрыРегистрацииСчетовФактурВыданныхСервер(Знач Объект)
Возврат Документы.АктВыполненныхРабот.ПараметрыРегистрацииСчетовФактурВыданных(Объект);
КонецФункции
&НаКлиенте
Процедура ТекстСчетаФактурыВыданныеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
ПараметрыРегистрации = ПараметрыРегистрацииСчетовФактурВыданныхСервер(Объект);
УчетНДСУПКлиент.ОбработкаНавигационнойСсылкиСчетаФактурыВыданные(ЭтаФорма, НавигационнаяСсылка, СтандартнаяОбработка, ПараметрыРегистрации);
ФискальнаяОперацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
Перем ЦеныРассчитаны;
ОчиститьСообщения();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Если Не Объект.АктПоЗаказам Тогда
Оповещение = Новый ОписаниеОповещения("ДатаПриИзмененииЗавершение", ЭтотОбъект);
ЦеныПредприятияЗаполнениеКлиент.ЗадатьВопросПересчетаЦеныПриИзмененииДаты(Объект, Оповещение, "Услуги");
Возврат;
КонецЕсли;
ПересчитатьЦены = Ложь;
ДатаПриИзмененииСервер(ПересчитатьЦены, ЦеныРассчитаны);
Если ПересчитатьЦены Тогда
ЗакупкиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны);
КонецЕсли;
ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Объект.Дата);
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Перем ЦеныРассчитаны;
Если Не РезультатВопроса = КодВозвратаДиалога.Отмена Тогда
ДатаПриИзмененииСервер(РезультатВопроса, ЦеныРассчитаны, РезультатВопроса);
КонецЕсли;
Если РезультатВопроса = Истина Тогда
ЗакупкиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ОрганизацияПриИзмененииСервер();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
ПредложениеЗаполнитьПоГосконтрактуЕИС();
КонецПроцедуры
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
КонтрагентПриИзмененииСервер();
ПроверкаКонтрагентовКлиент.ЗапуститьПроверкуКонтрагентовВДокументе(ЭтотОбъект, Элемент);
ПредложениеЗаполнитьПоГосконтрактуЕИС();
КонецПроцедуры
&НаКлиенте
Процедура МенеджерПриИзменении(Элемент)
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Менеджер");
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура АктВыполненныхРаботПоЗаказамПриИзменении(Элемент)
ЗаказКлиента = Неопределено;
ОчиститьСообщения();
Если Объект.АктПоЗаказам Тогда
Если ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам Тогда
Если Объект.Услуги.Количество() = 0 Тогда
ТекстВопроса = НСтр("ru='Список Услуги будет перезаполнен остатками неоказанных услуг по заказам. Продолжить?'");
Иначе
ТекстВопроса = НСтр("ru='Строки в списке Услуги будут привязаны к строкам заказов. Строки, которые невозможно привязать к строкам заказа, будут удалены. Продолжить?'");
КонецЕсли;
Иначе
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("Валюта", Объект.Валюта);
ПараметрыОтбора.Вставить("Контрагент", Объект.Контрагент);
ПараметрыОтбора.Вставить("Договор", Объект.Договор);
ПараметрыОтбора.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыОтбора.Вставить("Организация", Объект.Организация);
ПараметрыОтбора.Вставить("Партнер", Объект.Партнер);
ПараметрыОтбора.Вставить("Соглашение", Объект.Соглашение);
ПараметрыОтбора.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыОтбора.Вставить("Сделка", Объект.Сделка);
ПараметрыОтбора.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
ОткрытьФорму(
"Документ.АктВыполненныхРабот.Форма.ФормаВыбораРаспоряжения",
Новый Структура("Отбор,Регистратор", ПараметрыОтбора, Объект.Ссылка),,,,, Новый ОписаниеОповещения("АктВыполненныхРаботПоЗаказамПриИзмененииПослеВыбора", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецЕсли;
Иначе
Если Объект.Услуги.Количество() > 0 Тогда
Если ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам Тогда
ТекстВопроса = НСтр("ru='Строки в списке Услуги перестанут быть связанными со строками заказов. Продолжить?'");
Иначе
ТекстВопроса = НСтр("ru='Строки в списке Услуги перестанут быть связанными со строками заказа. Продолжить?'");
КонецЕсли;
Иначе
ПриИзмененииАктовВыполненныхРаботПоНесколькимЗаказам();
Возврат;
КонецЕсли;
КонецЕсли;
АктВыполненныхРаботПоЗаказамПриИзмененииФрагмент(ЗаказКлиента, ТекстВопроса);
КонецПроцедуры
&НаКлиенте
Процедура АктВыполненныхРаботПоЗаказамПриИзмененииПослеВыбора(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Объект.АктПоЗаказам = Ложь;
Возврат;
КонецЕсли;
ЗаказКлиента = Результат.ЗаказКлиента;
Если Объект.Услуги.Количество() = 0 Тогда
ТекстВопроса = СтрЗаменить(НСтр(
"ru='Список Услуги будет перезаполнен остатками неоформленных услуг по документу %ЗаказКлиента%. Продолжить?'"),
"%ЗаказКлиента%", ЗаказКлиента);
Иначе
ТекстВопроса = СтрЗаменить(НСтр(
"ru='Строки в списке Услуги будут привязаны к строкам документа %ЗаказКлиента%. Строки, которые невозможно привязать к строкам заказа, будут удалены. Продолжить?'"),
"%ЗаказКлиента%", ЗаказКлиента);
КонецЕсли;
АктВыполненныхРаботПоЗаказамПриИзмененииФрагмент(Результат, ТекстВопроса);
КонецПроцедуры
&НаКлиенте
Процедура АктВыполненныхРаботПоЗаказамПриИзмененииФрагмент(Знач Результат, Знач ТекстВопроса)
Если ТипЗнч(Результат) <> Тип("Структура") Тогда
Результат = Новый Структура("ЗаказКлиента", Результат);
КонецЕсли;
ПоказатьВопрос(Новый ОписаниеОповещения("АктВыполненныхРаботПоЗаказамПриИзмененииЗавершение", ЭтотОбъект, Результат), ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура АктВыполненныхРаботПоЗаказамПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ЗаказКлиента = ДополнительныеПараметры.ЗаказКлиента;
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
Объект.АктПоЗаказам = Не Объект.АктПоЗаказам;
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(ЗаказКлиента) Тогда
Объект.ЗаказКлиента = ЗаказКлиента;
Если ДополнительныеПараметры.Свойство("ПорядокРасчетов") Тогда
Объект.ПорядокРасчетов = ДополнительныеПараметры.ПорядокРасчетов;
КонецЕсли;
КонецЕсли;
ПриИзмененииАктовВыполненныхРаботПоНесколькимЗаказам();
УстановитьДоступностьКомандБуфераОбменаНаКлиенте();
КонецПроцедуры
&НаСервере
Процедура СчитанаКартаЛояльностиНаСервере(ДанныеКартыЛояльности)
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Партнер) И ДанныеКартыЛояльности.Партнер <> Объект.Партнер Тогда
Объект.Партнер = ДанныеКартыЛояльности.Партнер;
Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
Объект.Соглашение = Справочники.СоглашенияСКлиентами.ПустаяСсылка();
ПартнерПриИзмененииСервер();
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Соглашение)
И ДанныеКартыЛояльности.Соглашение <> Объект.Соглашение
И ДанныеКартыЛояльности.СоглашениеДоступно Тогда
Объект.Соглашение = ДанныеКартыЛояльности.Соглашение;
СоглашениеПриИзмененииСервер();
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Контрагент)
И ДанныеКартыЛояльности.Контрагент <> Объект.Контрагент
И ДанныеКартыЛояльности.КонтрагентДоступен Тогда
Объект.Контрагент = ДанныеКартыЛояльности.Контрагент;
КонтрагентПриИзмененииСервер();
КонецЕсли;
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Объект.КартаЛояльности);
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИспользоватьБонусныеПрограммыЛояльности(КартаЛояльности)
Если Не ЗначениеЗаполнено(КартаЛояльности) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СкидкиНаценкиСервер.ИспользоватьБонусныеПрограммыЛояльности(КартаЛояльности);
КонецФункции
&НаКлиенте
Процедура СчитанаКартаЛояльности(Знач Оповещение, КартаЛояльности)
ДанныеКартыЛояльности = КартыЛояльностиВызовСервера.ПолучитьДанныеКартыЛояльности(КартаЛояльности);
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Ссылка) Тогда
Если Не ДанныеКартыЛояльности.ПартнерДоступен Тогда
ПоказатьПредупреждение(Новый ОписаниеОповещения("СчитанаКартаЛояльностиЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), НСтр("ru = 'Нет доступа к партнеру-владельцу карты лояльности.'"));
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеКартыЛояльности.Партнер) Тогда
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Модифицированность = Истина;
Если Объект.КартаЛояльности <> КартаЛояльности Тогда
ПрименитьОплатуБонуснымиБаллами(Неопределено);
КонецЕсли;
Объект.КартаЛояльности = КартаЛояльности;
ВыполнитьОбработкуОповещения(Оповещение);
Возврат;
ИначеЕсли Объект.Партнер <> ДанныеКартыЛояльности.Партнер Тогда
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Оповещение", Оповещение);
ДополнительныеПараметры.Вставить("КартаЛояльности", КартаЛояльности);
ДополнительныеПараметры.Вставить("ДанныеКартыЛояльности", ДанныеКартыЛояльности);
ПоказатьВопрос(
Новый ОписаниеОповещения("СчитанаКартаЛояльностиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Карта лояльности принадлежит партнеру ""%1"". Изменить партнера в документе?'"), ДанныеКартыЛояльности.Партнер),
РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
Иначе
ВопросОбИзмененииКонтрагента = Ложь;
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Контрагент)
И ЗначениеЗаполнено(Объект.Контрагент) И ДанныеКартыЛояльности.Контрагент <> Объект.Контрагент Тогда
ВопросОбИзмененииКонтрагента = Истина;
КонецЕсли;
ВопросОбИзмененииСоглашения = Ложь;
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(ДанныеКартыЛояльности.Соглашение)
И ЗначениеЗаполнено(Объект.Соглашение) И ДанныеКартыЛояльности.Соглашение <> Объект.Соглашение Тогда
ВопросОбИзмененииСоглашения = Истина;
КонецЕсли;
Если ВопросОбИзмененииКонтрагента Или ВопросОбИзмененииСоглашения Тогда
Если ВопросОбИзмененииКонтрагента И ВопросОбИзмененииСоглашения Тогда
ТекстВопроса = НСтр("ru = 'Для карты лояльности заданы контрагент ""%1"" и соглашение ""%2"". Применить карту лояльности и подставить в документ контрагента ""%1"" и соглашение ""%2""?'");
ИначеЕсли ВопросОбИзмененииКонтрагента Тогда
ТекстВопроса = НСтр("ru = 'Для карты лояльности задан контрагент ""%1"". Применить карту лояльности и подставить в документ контрагента ""%1""?'");
ИначеЕсли ВопросОбИзмененииСоглашения Тогда
ТекстВопроса = НСтр("ru = 'Для карты лояльности задано соглашение ""%2"". Применить карту лояльности и подставить в документ соглашение ""%2""?'");
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Оповещение", Оповещение);
ДополнительныеПараметры.Вставить("КартаЛояльности", КартаЛояльности);
ДополнительныеПараметры.Вставить("ДанныеКартыЛояльности", ДанныеКартыЛояльности);
ПоказатьВопрос(
Новый ОписаниеОповещения("СчитанаКартаЛояльностиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ДанныеКартыЛояльности.Контрагент, ДанныеКартыЛояльности.Соглашение),
РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Модифицированность = Истина;
Объект.КартаЛояльности = КартаЛояльности;
СчитанаКартаЛояльностиНаСервере(ДанныеКартыЛояльности);
Иначе
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Неопределено);
ПрименитьОплатуБонуснымиБалламиКлиент();
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
КонецЕсли;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура СчитанаКартаЛояльностиВопросЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Нет Тогда
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Объект.КартаЛояльности);
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение);
ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Модифицированность = Истина;
Объект.КартаЛояльности = ДополнительныеПараметры.КартаЛояльности;
СчитанаКартаЛояльностиНаСервере(ДополнительныеПараметры.ДанныеКартыЛояльности);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СчитанаКартаЛояльностиЗавершение(ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура КартаЛояльностиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
КартыЛояльностиКлиент.НачалоВыбораКартыЛояльности(Элемент, СтандартнаяОбработка, Объект.Партнер, Объект.Дата);
КонецПроцедуры
&НаКлиенте
Процедура КартаЛояльностиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СчитанаКартаЛояльности(Неопределено, ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура КартаЛояльностиОчистка(Элемент, СтандартнаяОбработка)
СчитанаКартаЛояльности(Неопределено, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ТекстОстатокДопустимогоКредитаНажатие(Элемент, СтандартнаяОбработка)
ВзаиморасчетыКлиент.ОграниченияЗадолженностиНажатие(ЭтаФорма, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ТекстОтгрузкаПартнеруЗапрещенаНажатие(Элемент)
ОткрытьФорму("Справочник.Партнеры.Форма.ФормаСегментовЗапретаОтгрузки", Новый Структура("Партнер", Объект.Партнер));
КонецПроцедуры
&НаКлиенте
Процедура НадписьЭтапыОплатыНажатие(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("НадписьЭтапыОплатыНажатиеЗавершение", ЭтотОбъект);
ПоместитьЭтапыОплатыВоВременноеХранилище(Элемент.Имя);
ВзаиморасчетыКлиент.НадписьЭтапыОплатыНажатие(ЭтаФорма, Элемент, СтандартнаяОбработка, Оповещение);
КонецПроцедуры
&НаСервере
Процедура ПоместитьЭтапыОплатыВоВременноеХранилище(ИмяЭлемента)
ВзаиморасчетыСервер.ПоместитьЭтапыОплатыВоВременноеХранилище(ЭтаФорма, ИмяЭлемента);
ВзаиморасчетыСервер.ПоместитьРасшифровкуПлатежаВоВременноеХранилище(ЭтаФорма, ИмяЭлемента);
КонецПроцедуры
&НаСервере
Процедура ОтразитьИзмененияПравилОплаты(ИзмененныеРеквизиты)
ВзаиморасчетыСервер.ЗагрузитьЭтапыОплатыИзВременногоХранилища(ЭтаФорма);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, ИзмененныеРеквизиты, Истина);
УстановитьДоступностьЭлементовПоСтатусуСервер()
КонецПроцедуры
&НаКлиенте
Процедура НадписьЭтапыОплатыНажатиеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
ИзмененныеРеквизиты = Результат.СтарыеЗначенияИзмененныхРеквизитов;
ОтразитьИзмененияПравилОплаты(ИзмененныеРеквизиты);
Если ИзмененныеРеквизиты.Количество() > 0 Тогда
Объект.Согласован = Ложь;
Если ИзмененныеРеквизиты.Свойство("ФормаОплаты") Тогда
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
КонецЕсли;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НаправлениеДеятельностиПриИзменении(Элемент)
НаправлениеДеятельностиПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура НадписьВалютыНажатие(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("НадписьВалютыНажатиеЗавершение", ЭтотОбъект);
ВзаиморасчетыКлиент.ВалютыИКурсДокументаНажатие(ЭтаФорма, Элемент, СтандартнаяОбработка, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()
УчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтаФорма,Элементы.ДекорацияСостояниеОригинала);
КонецПроцедуры
&НаКлиенте
Процедура ВыборЭтапаГосКонтактаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
ЭтапГосконтрактаЕИС = Результат.ЭтапГосконтрактаЕИС;
Объект.ЭтапГосконтрактаЕИС = ЭтапГосконтрактаЕИС;
ПредставлениеЭтапаГосконтрактаЕИС = ЭлектронноеВзаимодействиеУТВызовСервера.СформироватьПредставлениеЭтапаГосконтракта(Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапГосконтрактаЕИСНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Госконтракт", ГосКонтракт);
ОткрытьФорму("Справочник.ГосударственныеКонтракты.Форма.ФормаВыбораЭтапаГосконтракта", ПараметрыОткрытия,,,,, Новый ОписаниеОповещения("ВыборЭтапаГосКонтактаЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ЭтапГосконтрактаЕИСОчистка(Элемент, СтандартнаяОбработка)
Объект.ЭтапГосконтрактаЕИС = "";
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияФайлыЕИСНажатие(Элемент, СтандартнаяОбработка)
ЭлектронноеАктированиеЕИСКлиент.ОткрытьСписокПриложенныхФайловДокумента(Объект.Ссылка, ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ТекущаяСтраница.Имя = "ГруппаДополнительно"
И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
СвойстваВыполнитьОтложеннуюИнициализацию();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если ТекущаяСтраница.Имя = "ГруппаОсновное" Тогда
ВзаиморасчетыКлиент.ОбновитьТекстГиперссылкиЭтапыОплаты(ЭтаФорма);
ВзаиморасчетыКлиентСервер.ОбновитьТекстГиперссылкиВалюты(ЭтаФорма);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияЭДОНажатие(Элемент, СтандартнаяОбработка)
ОбменСКонтрагентамиКлиент.СостояниеЭДОНажатие_ФормаДокумента(ЭтотОбъект, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура НадписьВалютыНажатиеЗавершение(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
Если РезультатЗакрытия = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(РезультатЗакрытия) = Тип("Структура") Тогда
ИзмененныеРеквизиты = РезультатЗакрытия.СтарыеЗначенияИзмененныхРеквизитов;
Если ИзмененныеРеквизиты.Количество() > 0 Тогда
НадписьВалютыНажатиеЗавершениеСервер(РезультатЗакрытия);
Если РезультатЗакрытия.НеобходимПересчетСуммДокумента Тогда
ЦенообразованиеКлиент.ОповеститьОбОкончанииПересчетаСуммВВалюту(ВалютаДокумента, Объект.Валюта);
КонецЕсли;
Если ИзмененныеРеквизиты.Свойство("ВалютаВзаиморасчетов") Тогда
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтрокаИсправлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ИсправлениеДокументовКлиент.СтрокаИсправлениеОбработкаНавигационныйСсылки(
ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаСервере
Процедура НадписьВалютыНажатиеЗавершениеСервер(РезультатЗакрытия)
ИзмененныеРеквизиты = РезультатЗакрытия.СтарыеЗначенияИзмененныхРеквизитов;
Если ИзмененныеРеквизиты.Свойство("Валюта") Тогда
Если РезультатЗакрытия.НеобходимПересчетСуммДокумента Тогда
ВалютаПриИзмененииСервер(Объект.Валюта);
КонецЕсли;
ВалютаДокумента = Объект.Валюта;
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Валюта");
КонецЕсли;
Если ИзмененныеРеквизиты.Свойство("ВалютаВзаиморасчетов") Тогда
ВалютаВзаиморасчетов = Объект.ВалютаВзаиморасчетов;
ЗаполнитьДоговорПоУмолчанию();
КонецЕсли;
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, ИзмененныеРеквизиты, Истина);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыУслуги
&НаКлиенте
Процедура УслугиПослеУдаления(Элемент)
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Если ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам Тогда
УслугиПослеУдаленияСервер();
Иначе
ОбновитьИнформациюПоЗаказам();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УслугиПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если Объект.АктПоЗаказам Тогда
Отказ = Истина;
ПодборУслугИзЗаказа();
КонецЕсли;
Если Копирование Тогда
НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтаФорма, "Услуги", Отказ, Истина);
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Элемент.ТекущийЭлемент = Элементы.УслугиПроцентАвтоматическойСкидки
Или Элемент.ТекущийЭлемент = Элементы.УслугиСуммаАвтоматическойСкидки Тогда
СтандартнаяОбработка = Ложь;
Если Не Объект.АктПоЗаказам Тогда
Если НЕ Объект.СкидкиРассчитаны Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("УслугиВыборЗавершение", ЭтотОбъект,
Новый Структура("ВыбраннаяСтрока, Поле", ВыбраннаяСтрока, Поле)),
НСтр("ru = 'Скидки (наценки) не рассчитаны, рассчитать?'"), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
УслугиВыборФрагмент();
КонецЕсли;
ИначеЕсли Поле = Элементы.УслугиЦена Тогда
ТекущиеДанные = Элементы.Услуги.ТекущиеДанные;
Если ПравоНаЧтениеВидаЦены Тогда
Если ЗначениеЗаполнено(ТекущиеДанные.ВидЦены) И НЕ Объект.Согласован Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Для редактирования цены очистите вид цены'"),
Объект.Ссылка,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Услуги", ТекущиеДанные.НомерСтроки, "ВидЦены"),);
КонецЕсли;
КонецЕсли;
ИначеЕсли НаборыКлиент.БлокируемыйЭлемент(Поле) Тогда
ТекущаяСтрока = Объект.Услуги.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда
ПараметрОповещения = Новый Структура;
ПараметрОповещения.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрОповещения.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрОповещения.Вставить("ФормаВладелец", УникальныйИдентификатор);
Оповестить("РедактироватьНабор", ПараметрОповещения, ЭтаФорма);
КонецЕсли;
ИначеЕсли Поле = Элементы.УслугиНоменклатураНабора Тогда
ПоказатьЗначение(Неопределено, Элементы.Услуги.ТекущиеДанные.НоменклатураНабора);
ИначеЕсли Поле.Имя = "УслугиЗаказКлиента" Тогда
Если ЗначениеЗаполнено(Элементы.Услуги.ТекущиеДанные.ЗаказКлиента) Тогда
ПоказатьЗначение(Неопределено, Элементы.Услуги.ТекущиеДанные.ЗаказКлиента);
ИначеЕсли ЗначениеЗаполнено(Объект.ЗаказКлиента) Тогда
ПоказатьЗначение(Неопределено, Объект.ЗаказКлиента);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УслугиВыборЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ВыбраннаяСтрока = ДополнительныеПараметры.ВыбраннаяСтрока;
Поле = ДополнительныеПараметры.Поле;
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры);
Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
УслугиВыборФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура УслугиВыборФрагмент()
Перем ТекущиеДанные;
Если НЕ ЗначениеЗаполнено(АдресПримененныхСкидокВоВременномХранилище) Тогда
РассчитатьСкидкиБезПримененияКОбъекту();
КонецЕсли;
ТекущиеДанные = Элементы.Услуги.ТекущиеДанные;
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуПримененныеСкидки(ТекущиеДанные, Объект, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура НадписьЗаголовокЗаказыКлиентовНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьФорму(
"ОбщаяФорма.ПросмотрСпискаДокументов",
Новый Структура("СписокДокументов, Заголовок",
СписокЗаказов,
НСтр("ru='Заказы клиентов (%КоличествоДокументов%)'")
),
ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура УслугиСодержаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(
Элемент.ТекстРедактирования,
ЭтотОбъект,
"Элементы.Услуги.ТекущиеДанные.Содержание",
НСтр("ru='Содержание услуги'"));
КонецПроцедуры
&НаКлиенте
Процедура УслугиНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
ПроверкаОплатыБонуснымиБаллами();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействий.Вставить("ЗаполнитьУсловияПродажУслуги", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
Иначе
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ЗаполнитьСодержание", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Истина, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Услуги"));
СтруктураДействий.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиНоменклатураПартнераПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ЗаполнитьНоменклатуруПоНоменклатуреПартнера");
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействий.Вставить("ЗаполнитьУсловияПродажУслуги", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
Иначе
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ЗаполнитьСодержание", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Истина, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Услуги"));
СтруктураДействий.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиНоменклатураПартнераНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ЭлементФормы" , Элемент);
ДополнительныеПараметры.Вставить("ТекущаяСтрока", ТекущаяСтрока);
ОповещениеОЗакрытие = Новый ОписаниеОповещения("ОбработатьРезультатВыбораНоменклатурыПартнера", ЭтотОбъект, ДополнительныеПараметры);
НоменклатураПартнеровКлиент.ОткрытьФормуВыбораНоменклатурыПартнера(ЭтотОбъект, Объект.Партнер, ТекущаяСтрока, Элемент.Заголовок, ОповещениеОЗакрытие, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьРезультатВыбораНоменклатурыПартнера(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт
Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли;
ДополнительныеПараметры.ТекущаяСтрока.НоменклатураПартнера = ВыбранноеЗначение;
УслугиНоменклатураПартнераПриИзменении(ДополнительныеПараметры.ЭлементФормы);
КонецПроцедуры
&НаКлиенте
Процедура УслугиХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействий.Вставить("ЗаполнитьУсловияПродажУслуги", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
Иначе
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
СтруктураДействий.Вставить("ЗаполнитьСодержание", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Истина));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Истина, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Услуги"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиОбособленноПриИзменении(Элемент)
НаправленияДеятельностиКлиент.ТоварыОбособленноПриИзменении(ЭтотОбъект, Элементы.Услуги.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура УслугиВидЦеныПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
ПроверкаОплатыБонуснымиБаллами();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Ложь,"Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиЦенаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
ПроверкаОплатыБонуснымиБаллами();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиСтавкаНДСПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
ПроверкаОплатыБонуснымиБаллами();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиПроцентРучнойСкидкиПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
ПроверкаОплатыБонуснымиБаллами();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки","Количество");
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиСуммаРучнойСкидкиПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьПроцентРучнойСкидки", "Количество");
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ПересчитыватьСуммуРучнойСкидки, ИмяКоличества", Ложь, Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиСуммаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаЦены = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаЦеныСкидкиВПродажахВТЧ(Объект, Ложь, "Количество");
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьЦенуСкидкуПоСуммеВПродажах", СтруктураПересчетаЦены);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиКоличествоПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличества(СтруктураДействий, Объект);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура УслугиПередУдалением(Элемент, Отказ)
НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтаФорма, "Услуги", Отказ);
КонецПроцедуры
&НаКлиенте
Процедура УслугиПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
Если НоваяСтрока И Не Копирование Тогда
ТекущаяСтрока.Подразделение = Объект.Подразделение;
КонецЕсли;
ПродажиКлиент.СтрокаНоменклатурыПриНачалеРедактирования(ЭтаФорма, "Услуги", ТекущаяСтрока, НоваяСтрока, Копирование);
Если Копирование Тогда
ТекущаяСтрока.КодСтроки = 0;
ТекущаяСтрока.ЗаказКлиента = Неопределено;
ТекущаяСтрока.СуммаБонусныхБалловКСписанию = 0;
ТекущаяСтрока.СуммаБонусныхБалловКСписаниюВВалюте = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УслугиСуммаНДСПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ЗаполнитьНалогообложениеНДСПродажи();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныПоСоглашению(Команда)
Если ЦеныПредприятияЗаполнениеКлиент.НеобходимоЗаполнениеЦенПоСоглашению(Объект, "Услуги", НСтр("ru='Услуги'")) Тогда
ТекстОшибки = "";
ЦеныРассчитаны = ЗаполнитьЦеныПоСоглашениюСервер(, ТекстОшибки);
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны, ТекстОшибки);
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура АвтоТест_ЗаполнитьЦеныПоСоглашению(Команда) Экспорт
ЗаполнитьЦеныПоСоглашению(Команда);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен(Команда)
Если ЦеныПредприятияЗаполнениеКлиент.НеобходимоЗаполнениеЦенПоВидуЦен(Объект, "Услуги", НСтр("ru='Услуги'")) Тогда
ПараметрыВыбораЦен = ЦеныПредприятияЗаполнениеКлиент.НовыйПараметрыЗаполненияВыбратьВидЦен();
ПараметрыВыбораЦен.ОписаниеОповещения =
Новый ОписаниеОповещения("ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенЗавершение", ЭтотОбъект);
ПараметрыВыбораЦен.ЦенаВключаетНДС = Объект.ЦенаВключаетНДС;
ПараметрыВыбораЦен.ВладелецИндивидуальногоВидаЦен = ?(ИспользоватьСоглашенияСКлиентами,Объект.Соглашение,Объект.Партнер);
ПараметрыВыбораЦен.ИспользоватьПриПродаже = Истина;
ЦеныПредприятияЗаполнениеКлиент.ВыбратьВидЦен(ПараметрыВыбораЦен);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенЗавершение(ВидЦен, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(ВидЦен) Тогда
ЦеныРассчитаны = ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен);
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоВидуЦен(ЦеныРассчитаны, ВидЦен);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
ОчиститьСообщения();
Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект);
ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
ОбработатьШтрихкоды(ДанныхШтрихкода);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОбОшибкахОткрытияПодбора(Отказ)
Если ИспользоватьСоглашенияСКлиентами И Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Соглашение"" не заполнено'"), Объект.Ссылка, "Объект.Соглашение",,Отказ);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Валюта) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Валюта"" не заполнено'"), Объект.Ссылка, "Объект.Валюта",,Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодбор(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.АктВыполненныхРабот.ФормаДокумента.Команда.ОткрытьПодбор");
Отказ = Ложь;
Если (ИспользоватьСоглашенияСКлиентами И Не ЗначениеЗаполнено(Объект.Соглашение))
Или Не ЗначениеЗаполнено(Объект.Валюта) Тогда
ОчиститьСообщения();
СообщитьОбОшибкахОткрытияПодбора(Отказ);
КонецЕсли;
Если Отказ Тогда
Возврат;
КонецЕсли;
ПараметрЗаголовок = НСтр("ru = 'Подбор услуг в %Документ%'");
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", Объект.Ссылка);
Иначе
ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", НСтр("ru = 'Акт выполненных работ'"));
КонецЕсли;
МассивТиповНоменклатуры = Новый Массив;
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор"));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Партнер", Объект.Партнер);
ПараметрыФормы.Вставить("Соглашение", Объект.Соглашение);
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыФормы.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыФормы.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
ПараметрыФормы.Вставить("Валюта", Объект.Валюта);
ПараметрыФормы.Вставить("Заголовок", ПараметрЗаголовок);
ПараметрыФормы.Вставить("Дата", Объект.Дата);
ПараметрыФормы.Вставить("РежимПодбораИсключитьГруппыДоступныеВЗаказах", Истина);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", МассивТиповНоменклатуры);
ПараметрыФормы.Вставить("СкрыватьКомандуОстаткиНаСкладах", Истина);
ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСкидкиНаценки(Команда)
РассчитатьСкидкиНаценкиКлиент();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьИнформациюОСкидках(Команда)
Если Не Объект.СкидкиРассчитаны Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("ОткрытьИнформациюОСкидкахЗавершение", ЭтотОбъект),
НСтр("ru = 'Скидки (наценки) не рассчитаны, рассчитать?'"), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ОткрытьИнформациюОСкидкахФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьИнформациюОСкидкахЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Результат = РезультатВопроса;
Если Результат = КодВозвратаДиалога.Нет Тогда
Возврат;
Иначе
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры);
Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
ОткрытьИнформациюОСкидкахФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьИнформациюОСкидкахФрагмент()
Перем ТекущиеДанные;
Если Не ЗначениеЗаполнено(АдресПримененныхСкидокВоВременномХранилище) Тогда
РассчитатьСкидкиБезПримененияКОбъекту();
КонецЕсли;
ТекущиеДанные = Элементы.Услуги.ТекущиеДанные;
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуПримененныеСкидки(ТекущиеДанные, Объект, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьАвтоматическиеСкидки(Команда)
АдресВХранилище = ВыполнитьПредварительныйРасчетСкидокНаСервере();
Оповещение = Новый ОписаниеОповещения("НазначитьАвтоматическиеСкидкиЗавершение", ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуНазначенияУправляемыхСкидокНаценок(АдресВХранилище, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьАвтоматическиеСкидкиЗавершение(ВозвращенноеЗначение, ДополнительныеПараметры) Экспорт
Если ВозвращенноеЗначение <> Неопределено Тогда
УправляемыеСкидки = ВозвращенноеЗначение;
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Ложь);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры);
Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор);
КонецЕсли;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Скидки (наценки)'"),
,
НСтр("ru = 'Скидки (наценки) рассчитаны'"),
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидку(Команда)
Если Не СкидкиНаценкиЗаполнениеКлиент.ВозможноНазначениеРучнойСкидкиНаценки(Объект, "Услуги", НСтр("ru='Услуги'")) Тогда
Возврат;
КонецЕсли;
АдресВоВременномХранилище = АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(Ложь);
Оповещение = Новый ОписаниеОповещения(
"НазначитьРучнуюСкидкуЗавершение",
ЭтотОбъект,
Новый Структура("АдресВоВременномХранилище", АдресВоВременномХранилище));
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуНазначенияРучныхСкидок(
АдресВоВременномХранилище,
Объект.Валюта,
Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидкуЗавершение(СуммаРучнойСкидкиНаценки, ДополнительныеПараметры) Экспорт
АдресВоВременномХранилище = ДополнительныеПараметры.АдресВоВременномХранилище;
Если СуммаРучнойСкидкиНаценки <> Неопределено Тогда
НазначитьРучнуюСкидкуНаСервере(СуммаРучнойСкидкиНаценки, Неопределено, АдресВоВременномХранилище);
СкидкиНаценкиЗаполнениеКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок(СуммаРучнойСкидкиНаценки, Объект.Валюта);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидкуДляВыделенныхСтрок(Команда)
Если Не СкидкиНаценкиЗаполнениеКлиент.ВозможноНазначениеРучнойСкидкиНаценки(Объект, "Услуги", НСтр("ru='Услуги'")) Тогда
Возврат;
КонецЕсли;
АдресВоВременномХранилище = АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(Ложь);
Оповещение = Новый ОписаниеОповещения(
"НазначитьРучнуюСкидкуДляВыделенныхСтрокЗавершение",
ЭтотОбъект,
Новый Структура("АдресВоВременномХранилище", АдресВоВременномХранилище));
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуНазначенияРучныхСкидок(
АдресВоВременномХранилище,
Объект.Валюта,
Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидкуДляВыделенныхСтрокЗавершение(СуммаРучнойСкидкиНаценки, ДополнительныеПараметры) Экспорт
АдресВоВременномХранилище = ДополнительныеПараметры.АдресВоВременномХранилище;
Если СуммаРучнойСкидкиНаценки <> Неопределено Тогда
НазначитьРучнуюСкидкуНаСервере(СуммаРучнойСкидкиНаценки, Элементы.Услуги.ВыделенныеСтроки,АдресВоВременномХранилище);
СкидкиНаценкиЗаполнениеКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок(СуммаРучнойСкидкиНаценки, Объект.Валюта);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьРучныеСкидки(Команда)
Если Не СкидкиНаценкиЗаполнениеКлиент.ВозможнаОтменаРучныхСкидокНаценок(Объект, "Услуги", НСтр("ru='Услуги'")) Тогда
Возврат;
КонецЕсли;
ОтменитьРучныеСкидкиНаСервере();
СкидкиНаценкиЗаполнениеКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок();
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура РассчитатьСкидкиНаценкиКлиент()
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);
Если Не Объект.АктПоЗаказам Тогда
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры);
Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор);
КонецЕсли;
Иначе
РассчитатьСкидкиНаценкиПоЗаказуНаСервере();
КонецЕсли;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Скидки (наценки)'"),
,
НСтр("ru = 'Скидки (наценки) рассчитаны'"),
БиблиотекаКартинок.Информация32);
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьИзмененияСкидокНаценокНаКлиенте(Отказ)
Если Не Объект.АктПоЗаказам Тогда
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(Неопределено, Истина);
Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор);
Отказ = Истина;
КонецЕсли;
Иначе
РассчитатьСкидкиНаценкиПоЗаказуНаСервере();
КонецЕсли;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Скидки (наценки)'"),
,
НСтр("ru = 'Скидки (наценки) рассчитаны'"),
БиблиотекаКартинок.Информация32);
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьУслугиИзЗаказа(Команда)
ПодборУслугИзЗаказа();
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоЗаказу(Команда)
Если Объект.Услуги.Количество() > 0 Тогда
ОтветНаВопрос = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ЗаполнитьПоЗаказуЗавершение", ЭтотОбъект), НСтр("ru='Таблица ""Услуги"" будет перезаполнена. Продолжить?'"), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ЗаполнитьПоЗаказуФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоЗаказуЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
ЗаполнитьПоЗаказуФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоЗаказуФрагмент()
ЗаполнитьПоЗаказуСервер();
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтроку(Команда)
ТаблицаФормы = Элементы.Услуги;
ДанныеТаблицы = Объект.Услуги;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаСуммы(
"Сумма, СуммаНДС, СуммаСНДС, СуммаРучнойСкидки, СуммаАвтоматическойСкидки,
|СуммаБонусныхБалловКСписанию, СуммаБонусныхБалловКСписаниюВВалюте, ");
Если ТаблицаФормы.ТекущиеДанные <> Неопределено Тогда
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьСтруктуруПересчетаСуммы(СтруктураПересчетаСуммы, ТаблицаФормы.ТекущиеДанные);
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("СтруктураПересчетаСуммы", СтруктураПересчетаСуммы);
ПараметрыРазбиенияСтроки = РаботаСТабличнымиЧастямиКлиент.ПараметрыРазбиенияСтроки();
ПараметрыРазбиенияСтроки.ИмяПоляКоличество = "Количество";
Оповещение = Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы, Оповещение, ПараметрыРазбиенияСтроки);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
ТекущаяСтрока = Элементы.Услуги.ТекущиеДанные;
Если НоваяСтрока <> Неопределено Тогда
НоваяСтрока.КодСтроки = 0;
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ДобавитьСтрокуДляПересчетаСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы, ТекущаяСтрока);
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ДобавитьСтрокуДляПересчетаСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы, НоваяСтрока);
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СтруктураСообщений()
Возврат СкидкиНаценкиЗаполнениеСервер.СтруктураСообщений(Объект);
КонецФункции
&НаКлиенте
Процедура ПоказатьСообщения(Команда)
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуСообщений(СтруктураСообщений(), ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура СчитатьКартуЛояльности(Команда)
Если Объект.Согласован Тогда
Возврат;
КонецЕсли;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Партнер", Объект.Партнер);
ПараметрыОткрытия.Вставить("Организация", Объект.Организация);
ОткрытьФорму(
"Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности",
ПараметрыОткрытия,
ЭтаФорма,
ЭтаФорма.УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ВставитьСтроки(Команда)
КоличествоТоваровДоВставки = Объект.Услуги.Количество();
ПолучитьСтрокиИзБуфераОбмена();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КоличествоВставленных = Объект.Услуги.Количество()-КоличествоТоваровДоВставки;
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьСтроки(Команда)
Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы.Услуги) Тогда
СкопироватьСтрокиНаСервере();
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОКопированииСтрок(Элементы.Услуги.ВыделенныеСтроки.Количество());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайла(Команда)
ПараметрыЗагрузки = РаботаСТабличнымиЧастямиКлиент.ПараметрыЗагрузкиНоменклатуры();
ПараметрыЗагрузки.Организация = Объект.Организация;
ПараметрыЗагрузки.ЗагружатьЦены = Истина;
ПараметрыЗагрузки.ЦенаВключаетНДС = Объект.ЦенаВключаетНДС;
ПараметрыЗагрузки.НалогообложениеНДС = Объект.НалогообложениеНДС;
ПараметрыЗагрузки.ДатаЗаполнения = Объект.Дата;
ПараметрыЗагрузки.ПараметрыЦенКомплектующих.Дата = Объект.Дата;
ПараметрыЗагрузки.ПараметрыЦенКомплектующих.Валюта = Объект.Валюта;
ПараметрыЗагрузки.ПараметрыЦенКомплектующих.Соглашение = Объект.Соглашение;
МассивТиповНоменклатуры = Новый Массив;
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор"));
ПараметрыЗагрузки.ПараметрыОтбора.Вставить("ТипНоменклатуры", МассивТиповНоменклатуры);
Оповещение = Новый ОписаниеОповещения("ЗагрузитьИзВнешнегоФайлаЗавершение", ЭтотОбъект);
РаботаСТабличнымиЧастямиКлиент.ПоказатьФормуЗагрузкиНоменклатуры(ПараметрыЗагрузки, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзВнешнегоФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(АдресЗагруженныхДанных) Тогда
ПолучитьЗагруженныеТоварыИзХранилища(АдресЗагруженныхДанных);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтаФорма, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработчикОжиданияЭДО()
ОбменСКонтрагентамиКлиент.ОбработчикОжиданияЭДО(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СоставНабора(Команда)
ВыбраннаяСтрока = Элементы.Услуги.ТекущаяСтрока;
Если ВыбраннаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = Объект.Услуги.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если Не ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда
ПоказатьПредупреждение(,НСтр("ru = 'Открытие состава набора возможно только для набора.'"));
Возврат;
ИначеЕсли ТекущаяСтрока.КодСтроки <> 0 Тогда
ПоказатьПредупреждение(,НСтр("ru = 'Открытие состава набора возможно только для строк сверх заказа.'"));
Возврат;
КонецЕсли;
ПараметрыКомплекта = Новый Структура;
ПараметрыКомплекта.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрыКомплекта.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрыКомплекта.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма));
АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыКомплекта);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище);
ПараметрыОткрытия.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрыОткрытия.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрыОткрытия.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыОткрытия.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыОткрытия.Вставить("Валюта", Объект.Валюта);
ПараметрыОткрытия.Вставить("Соглашение", Объект.Соглашение);
ПараметрыОткрытия.Вставить("Дата", Объект.Дата);
ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка);
ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Истина);
ПараметрыОткрытия.Вставить("Организация", Объект.Организация);
ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиДокумент(Команда)
ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура РасчетыНажатие(Элемент, СтандартнаяОбработка)
ВзаиморасчетыКлиент.РасчетыНажатие(ЭтаФорма, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура РеквизитыПечати(Команда)
ОткрытьРеквизитыПечатиРеализации();
КонецПроцедуры
&НаКлиенте
Процедура ЗачетОплаты(Команда)
ПоместитьРасшифровкуПлатежаВоВременноеХранилище();
ВзаиморасчетыКлиент.ЗачетОплаты(ЭтаФорма, Элементы.ЗачетОплатыФорма);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтметкуОбособленно(Команда)
УстановитьСнятьОтметкуОбособленно(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметкуОбособленно(Команда)
УстановитьСнятьОтметкуОбособленно(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплатуБонуснымиБаллами(Команда)
ПрименитьОплатуБонуснымиБалламиКлиент();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьОплатуБонуснымиБаллами(Команда) Экспорт
ОписаниеОповещенияЗавершения = Новый ОписаниеОповещения("ДобавитьОплатуБонуснымиБалламиПродолжение", ЭтотОбъект);
Если Объект.Проведен Тогда
РозничныеПродажиКлиент.ОтобразитьВопросОНеобходимостиНепроведенногоДокумента(ЭтотОбъект, ОписаниеОповещенияЗавершения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещенияЗавершения, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьОплатуБонуснымиБалламиПродолжение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Истина Тогда
Отказ = Ложь;
Если Не Объект.СкидкиРассчитаны И СкидкиИзменились() Тогда
ПрименитьИзмененияСкидокНаценокНаКлиенте(Отказ);
КонецЕсли;
Если Отказ Тогда
Возврат;
КонецЕсли;
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Партнер", Объект.Партнер);
ПараметрыОткрытияФормы.Вставить("КартаЛояльности", Объект.КартаЛояльности);
ПараметрыОткрытияФормы.Вставить("АдресТабличнойЧастиТовары", АдресТабличнойЧастиУслуги());
ПараметрыОткрытияФормы.Вставить("Валюта", Объект.Валюта);
ОткрытьФорму(
"Справочник.БонусныеПрограммыЛояльности.Форма.ОплатаБонуснымиБаллами",
ПараметрыОткрытияФормы,
ЭтотОбъект,,,,
Новый ОписаниеОповещения("ДобавитьОплатуБонуснымиБалламиЗавершение", ЭтотОбъект));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьОплатуБонуснымиБалламиЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(Результат) Тогда
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
Возврат;
КонецЕсли;
ПрименитьОплатуБонуснымиБалламиКлиент(Результат.АдресВоВременномХранилище);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьВидыЗапасов(Команда)
ПараметрыРедактированияВидовЗапасов = ПоместитьТоварыИВидыЗапасовВХранилище();
ФинансыКлиент.ОткрытьВидыЗапасов(ЭтотОбъект, ПараметрыРедактированияВидовЗапасов);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииКлючевыхРеквизитовСостояниеЭДО()
ПараметрыПриИзменении = ОбменСКонтрагентами.ПараметрыПриИзмененииКлючевыхРеквизитовЭДО();
ПараметрыПриИзменении.Форма = ЭтотОбъект;
ПараметрыПриИзменении.ДокументСсылка = Объект.Ссылка;
ПараметрыПриИзменении.ДокументОбъект = РеквизитФормыВЗначение("Объект");
ПараметрыПриИзменении.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыПриИзменении.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПриИзмененииКлючевыхРеквизитовЭДО(ПараметрыПриИзменении);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПодчиненныеСвойстваПоСтатистике(ИмяРеквизитаРодителя)
ЗаполнениеОбъектовПоСтатистике.ЗаполнитьПодчиненныеРеквизитыОбъекта(Объект, ИмяРеквизитаРодителя);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
УчетНДСУП.УстановитьУсловноеОформлениеСуммНДСПоНалогообложениюПродажи(ЭтаФорма,
"УслугиСтавкаНДС",
"УслугиСуммаНДС",
"УслугиСуммаСНДС");
ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеЦенаВключаетНДС(ЭтаФорма, "УслугиСуммаСНДС");
НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеФлагаОбособленно(ЭтотОбъект);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиЦена.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказКлиента");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтклонениеОтУсловийПродаж");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Услуги.ВидЦены");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиСумма.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиСуммаНДС.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ОтклонениеОтУсловийПродаж");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказКлиента");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Услуги.ВидЦены");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ГруппаОтбора3 = ГруппаОтбора2.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора3.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьРучныеСкидкиВПродажах");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма,
"УслугиХарактеристика",
"Объект.Услуги.ХарактеристикиИспользуются");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиКодСтроки.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказКлиента");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Услуги.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиСуммаВзаиморасчетов.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Валюта");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВалютаВзаиморасчетов");
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеВидовЦен(ЭтаФорма,
"УслугиВидЦены",
"Объект.Услуги.ВидЦены");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиЗаказКлиента.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Услуги.ЗаказКлиента");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиЗаказКлиента.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.УслугиЗаказКлиента.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказКлиента");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.АктПоЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
СкладыСервер.УстановитьУсловноеОформлениеПодразделенияВТЧ(ЭтаФорма, "Услуги", Ложь);
НаборыСервер.УстановитьУсловноеОформление(ЭтаФорма, "Услуги");
НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеНаправленияДеятельности(ЭтаФорма);
КонецПроцедуры
#Область ПриИзмененииРеквизитов
&НаСервере
Процедура ДатаПриИзмененииСервер(ПересчитатьЦены, ЦеныРассчитаны, ПрименитьОплатуБонуснымиБаллами = Ложь)
Если ПрименитьОплатуБонуснымиБаллами = Истина Тогда
ПрименитьОплатуБонуснымиБаллами(, Истина);
КонецЕсли;
Если ПересчитатьЦены Тогда
ЦеныРассчитаны = ЗаполнитьЦеныПоСоглашениюСервер(Истина);
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма,"Дата");
РозничныеПродажиКлиентСервер.УстановитьДоступностьКомандОплатыБонуснымиБаллами(Элементы, Объект.Дата);
КонецПроцедуры
&НаСервере
Процедура ПартнерПриИзмененииСервер()
МассивРеквизитов = Новый Массив;
Если ИспользоватьСоглашенияСКлиентами Тогда
ЗаполнитьУсловияПродаж(МассивРеквизитов);
МассивРеквизитов.Добавить("Валюта");
МассивРеквизитов.Добавить("ВалютаВзаиморасчетов");
МассивРеквизитов.Добавить("Договор");
МассивРеквизитов.Добавить("НаправлениеДеятельности");
МассивРеквизитов.Добавить("Контрагент");
МассивРеквизитов.Добавить("Организация");
МассивРеквизитов.Добавить("Соглашение");
Иначе
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Объект.Партнер, Объект.Контрагент);
ИспользоватьДоговорыСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьДоговорыСКлиентами");
Если ИспользоватьДоговорыСКлиентами Тогда
ЗаполнитьДоговорПоУмолчанию();
КонецЕсли;
КонецЕсли;
НоменклатураПартнеровСервер.ЗаполнитьНоменклатуруПартнераПоНоменклатуреПриИзмененииПартнера(Объект.Услуги, Объект.Партнер);
МассивРеквизитов.Добавить("Партнер");
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, МассивРеквизитов);
ФормированиеФискальныхЧековСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект);
УстановитьДоступностьЭлементовПоСтатусуСервер();
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор);
ОбновитьТекстСчетаФактурыВыданные();
ЗаполнитьОснованиеДляПечати();
Объект.БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Объект.Контрагент);
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Контрагент");
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
УстановитьВидимостьЗапретаОтгрузкиПартнеру();
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
КонецЕсли;
ОтветственныеЛицаСервер.ЗаполнитьСписокВыбораМенеджера(Элементы.Менеджер, Объект);
ОтветственныеЛицаСервер.УстановитьМенеджера(
Объект, ПродажиСервер.ДокументОснование(Объект, "АктПоЗаказам, ЗаказКлиента, Услуги.ЗаказКлиента"));
ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура КонтактноеЛицоПриИзмененииСервер(ПартнерИзменился)
ВладелецКонтактногоЛица = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.КонтактноеЛицо, "Владелец");
Если ВладелецКонтактногоЛица <> Объект.Партнер Тогда
Объект.Партнер = ВладелецКонтактногоЛица;
ПартнерПриИзмененииСервер();
ПартнерИзменился = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоглашениеПриИзмененииСервер()
ДокументПродажи = РеквизитФормыВЗначение("Объект");
ДокументПродажи.ЗаполнитьУсловияПродажПоСоглашению();
ОтветственныеЛицаСервер.ЗаполнитьСписокВыбораМенеджера(Элементы.Менеджер, ДокументПродажи);
ОтветственныеЛицаСервер.УстановитьМенеджера(
ДокументПродажи, ПродажиСервер.ДокументОснование(ДокументПродажи, "АктПоЗаказам, ЗаказКлиента, Услуги.ЗаказКлиента"));
ЗначениеВРеквизитФормы(ДокументПродажи, "Объект");
ВалютаДокумента = Объект.Валюта;
ВалютаВзаиморасчетов = Объект.ВалютаВзаиморасчетов;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор);
ОбновитьТекстСчетаФактурыВыданные();
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить("Валюта");
МассивРеквизитов.Добавить("ВалютаВзаиморасчетов");
МассивРеквизитов.Добавить("Партнер");
МассивРеквизитов.Добавить("Договор");
МассивРеквизитов.Добавить("НаправлениеДеятельности");
МассивРеквизитов.Добавить("Контрагент");
МассивРеквизитов.Добавить("Организация");
МассивРеквизитов.Добавить("Соглашение");
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, МассивРеквизитов);
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Договор");
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Договор) Тогда
ДоговорПриИзмененииСервер();
Иначе
СуммаДолга = 0;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоглашениеОчисткаСервер()
ОтветственныеЛицаСервер.ЗаполнитьСписокВыбораМенеджера(Элементы.Менеджер, Объект);
ОтветственныеЛицаСервер.УстановитьМенеджера(
Объект, ПродажиСервер.ДокументОснование(Объект, "АктПоЗаказам, ЗаказКлиента, Услуги.ЗаказКлиента"));
КонецПроцедуры
&НаСервере
Процедура ВалютаПриИзмененииСервер(НоваяВалюта)
СтараяВалюта = ВалютаДокумента;
ДатаДокумента = ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата,ТекущаяДатаСеанса());
СтруктурыКурсов = ВзаиморасчетыСервер.КурсыВалютДляПересчета(ЭтаФорма, СтараяВалюта, НоваяВалюта, ВалютаРегламентированногоУчета, ДатаДокумента);
СтруктураКурсовСтаройВалюты = СтруктурыКурсов.СтруктураКурсовСтаройВалюты;
СтруктураКурсовНовойВалюты = СтруктурыКурсов.СтруктураКурсовНовойВалюты;
Ценообразование.ПересчитатьСуммыТабличнойЧастиВВалюту(
Объект.Услуги,
Объект.ЦенаВключаетНДС,
СтараяВалюта,
НоваяВалюта,
СтруктураКурсовСтаройВалюты,
СтруктураКурсовНовойВалюты,
Истина,
Истина,
"Количество");
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
Если Не Объект.АктПоЗаказам И НЕ ЗначениеЗаполнено(Объект.Соглашение) Тогда
Объект.ВалютаВзаиморасчетов = Объект.Валюта;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура КонтрагентПриИзмененииСервер()
ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор);
ЗаполнитьДоговорПоУмолчанию();
Если ЗначениеЗаполнено(Объект.Контрагент)
И Не ЗначениеЗаполнено(Объект.БанковскийСчетКонтрагента) Тогда
Объект.БанковскийСчетКонтрагента = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Объект.Контрагент);
КонецЕсли;
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
КонецЕсли;
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Контрагент");
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Контрагент");
ФормированиеФискальныхЧековСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект);
ПриИзмененииКлючевыхРеквизитовСостояниеЭДО();
ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура ДоговорПриИзмененииСервер()
ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Объект.Договор, Объект.БанковскийСчетОрганизации, Объект.БанковскийСчетКонтрагента);
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
КонецЕсли;
ДанныеДоговора = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Договор, "ОплатаВВалюте, БанковскийСчет");
Объект.ОплатаВВалюте = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор, "ОплатаВВалюте");
Если ЗначениеЗаполнено(Объект.Договор)
И Не ЗначениеЗаполнено(ДанныеДоговора.БанковскийСчет)
И Не Объект.ОплатаВВалюте Тогда
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Объект.Организация;
СтруктураПараметров.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
Объект.БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
ОтветственныеЛицаСервер.ЗаполнитьСписокВыбораМенеджера(Элементы.Менеджер, Объект);
ОтветственныеЛицаСервер.УстановитьМенеджера(
Объект, ПродажиСервер.ДокументОснование(Объект, "АктПоЗаказам, ЗаказКлиента, Услуги.ЗаказКлиента"));
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Договор");
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Договор");
ЗаполнитьОснованиеДляПечати();
ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС(ЭтотОбъект, Объект);
ПриИзмененииКлючевыхРеквизитовСостояниеЭДО();
КонецПроцедуры
&НаСервере
Процедура ДоговорОчисткаСервер()
ОтветственныеЛицаСервер.ЗаполнитьСписокВыбораМенеджера(Элементы.Менеджер, Объект);
ОтветственныеЛицаСервер.УстановитьМенеджера(
Объект, ПродажиСервер.ДокументОснование(Объект, "АктПоЗаказам, ЗаказКлиента, Услуги.ЗаказКлиента"));
КонецПроцедуры
&НаКлиенте
Процедура ПредложениеЗаполнитьПоГосконтрактуЕИС()
Если Не Объект.АктПоЗаказам И ЭтоГосконтрактЕИС Тогда
ОповещениеОЗавершении = Новый ОписаниеОповещения("ЗаполнитьПоГосконтрактуЗавершение", ЭтотОбъект);
ТекстПредупреждения = НСтр("ru = 'Заполнить документ по данным госконтракта?'");
ПоказатьВопрос(ОповещениеОЗавершении, ТекстПредупреждения, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоГосконтрактуЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ЗаполнитьПоГосконтрактуСервер();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоГосконтрактуСервер()
ЭлектронноеАктированиеЕИСУТ.ЗаполнитьТабличнуюЧастьДокументаПоДаннымГосконтракта(Объект, Истина);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьСодержание", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Услуги"));
СтруктураДействий.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Услуги, СтруктураДействий, Неопределено);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Услуги");
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииСервер()
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор);
Если ЗначениеЗаполнено(Объект.Организация) Тогда
ЗаполнитьДоговорПоУмолчанию();
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор);
КонецЕсли;
ОбновитьТекстСчетаФактурыВыданные();
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
КонецЕсли;
ДенежныеСредстваСервер.ПроверитьЗаполнитьКассуОрганизацииПоВладельцу(Объект.Организация, Объект.Касса, Объект.ФормаОплаты, Объект.НаправлениеДеятельности);
ДенежныеСредстваСервер.ПроверитьЗаполнитьБанковскийСчетОрганизацииПоВладельцу(Объект.Организация, Объект.БанковскийСчетОрганизации, Объект.ФормаОплаты, Объект.НаправлениеДеятельности);
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Организация");
ОтветственныеЛицаСервер.УстановитьМенеджера(
Объект, ПродажиСервер.ДокументОснование(Объект, "АктПоЗаказам, ЗаказКлиента, Услуги.ЗаказКлиента"));
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Организация");
ПриИзмененииКлючевыхРеквизитовСостояниеЭДО();
ЭлектронноеАктированиеЕИСУТ.ДоговорПриИзмененииЭлектронноеАктированиеЕИС(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииАктовВыполненныхРаботПоНесколькимЗаказам()
Если Объект.АктПоЗаказам Тогда
Если Объект.Услуги.Количество() = 0 Тогда
ЗаполнитьПоЗаказуСервер();
Иначе
ПривязатьСтрокиАктовВыполненныхРаботКЗаказамКлиентов(Не ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам);
КонецЕсли;
Иначе
ОтвязатьСтрокиОтЗаказовКлиентов();
Объект.ЗаказКлиента = Документы.ЗаказКлиента.ПустаяСсылка();
СписокЗаказов.Очистить();
КонецЕсли;
УстановитьДоступностьЭлементовПоСтатусуСервер();
ОбновитьИнформациюПоЗаказам();
УстановитьДоступностьКомандБуфераОбмена();
ОтветственныеЛицаСервер.УстановитьМенеджера(
Объект, ПродажиСервер.ДокументОснование(Объект, "АктПоЗаказам, ЗаказКлиента, Услуги.ЗаказКлиента"));
ВзаиморасчетыСервер.ПриИзмененииПараметровМеханизма(ЭтаФорма);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "АктПоЗаказам");
НаправленияДеятельностиСервер.УстановитьВидимостьЭлементовОбособленно(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура НалогообложениеНДСПриИзмененииСервер()
КэшированныеЗначенияСлужебный = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("СкорректироватьСтавкуНДС", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект));
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Услуги, СтруктураДействий, КэшированныеЗначенияСлужебный);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
КэшированныеЗначенияСлужебный.ОбработанныеСтроки,
СтруктураДействий,
Объект.Услуги,
Неопределено);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения)
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Услуги, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
Если НЕ ИспользоватьСоглашенияСКлиентами Тогда
ПараметрыВыбораВидаЦены = ЗначениеНастроекПовтИсп.ПараметрыВыбораВидаЦеныПоУмолчанию();
ПараметрыВыбораВидаЦены.ЦенаВключаетНДС = Объект.ЦенаВключаетНДС;
ПараметрыВыбораВидаЦены.ИспользоватьПриПродаже = Истина;
ПараметрыВыбораВидаЦены.Статус = Перечисления.СтатусыДействияВидовЦен.Действует;
ВидЦеныПоУмолчанию = ЗначениеНастроекПовтИсп.ВидЦеныПоУмолчанию(ПараметрыВыбораВидаЦены);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НаправлениеДеятельностиПриИзмененииСервер()
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда
ЗаполнитьДоговорПоУмолчанию();
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "НаправлениеДеятельности");
КонецПроцедуры
#КонецОбласти
#Область ЦенообразованиеИСкидки
&НаСервере
Функция ЗаполнитьЦеныПоСоглашениюСервер(ПоВсемСтрокам = Ложь, ТекстОшибки = "")
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Соглашение, "ЦенаВключаетНДС") <> Объект.ЦенаВключаетНДС Тогда
ТекстОшибки =
НСтр("ru = 'Установленные значения полей ""Цена включает НДС"" в документе и соглашении разные.'");
Возврат Ложь;
КонецЕсли;
Если ПоВсемСтрокам Тогда
МассивСтрок = Неопределено;
Иначе
МассивСтрок = Новый Массив;
Для Каждого Строка Из Элементы.Услуги.ВыделенныеСтроки Цикл
МассивСтрок.Добавить(Объект.Услуги.НайтиПоИдентификатору(Строка));
КонецЦикла;
КонецЕсли;
НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Услуги, МассивСтрок, Истина);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС",СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС",СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Истина, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, ВидЦены");
ПараметрыЗаполнения.Вставить("КолонкиПоЗначению", Новый Структура("Упаковка", Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка()));
ЦеныРассчитаны = ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
Объект.Услуги,
МассивСтрок,
ПараметрыЗаполнения,
СтруктураДействий);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
ВзаиморасчетыКлиентСервер.ОбновитьТекстГиперссылкиВалюты(ЭтотОбъект);
Возврат ЦеныРассчитаны;
КонецФункции
&НаСервере
Функция ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен)
МассивСтрок = Новый Массив;
Для Каждого Строка Из Элементы.Услуги.ВыделенныеСтроки Цикл
МассивСтрок.Добавить(Объект.Услуги.НайтиПоИдентификатору(Строка));
КонецЦикла;
НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Услуги, МассивСтрок, Истина);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС",СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС",СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки","Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Истина, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
ПараметрыЗаполнения.Вставить("ВидЦены", ВидЦен);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, ВидЦены");
ПараметрыЗаполнения.Вставить("КолонкиПоЗначению", Новый Структура("Упаковка", Справочники.УпаковкиЕдиницыИзмерения.ПустаяСсылка()));
ЦеныРассчитаны = ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
Объект.Услуги,
МассивСтрок,
ПараметрыЗаполнения,
СтруктураДействий);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
Возврат ЦеныРассчитаны;
КонецФункции
&НаСервере
Процедура РассчитатьСкидкиБезПримененияКОбъекту()
СтруктураПараметры = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыРассчитать();
СтруктураПараметры.ПрименятьКОбъекту = Ложь;
СтруктураПараметры.ТолькоПредварительныйРасчет = Ложь;
СтруктураПараметры.ВосстанавливатьУправляемыеСкидки = Истина;
СтруктураПараметры.УправляемыеСкидки = УправляемыеСкидки;
ПримененныеСкидки = СкидкиНаценкиЗаполнениеСервер.Рассчитать(Объект, СтруктураПараметры);
АдресПримененныхСкидокВоВременномХранилище = ПоместитьВоВременноеХранилище(ПримененныеСкидки, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Функция РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры, ВзятьИзВременногоХранилища = Ложь)
Если ВзятьИзВременногоХранилища Тогда
ПримененныеСкидки = ПолучитьИзВременногоХранилища(АдресПримененныхСкидокВоВременномХранилище);
СкидкиНаценкиЗаполнениеСервер.ПрименитьРезультатРасчета(Объект, ПримененныеСкидки);
Иначе
ПримененныеСкидки = СкидкиНаценкиЗаполнениеСервер.Рассчитать(Объект, СтруктураПараметры);
АдресПримененныхСкидокВоВременномХранилище = ПоместитьВоВременноеХранилище(ПримененныеСкидки, УникальныйИдентификатор);
КонецЕсли;
Объект.СкидкиРассчитаны = Истина;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СтруктураСообщений = СкидкиНаценкиЗаполнениеСервер.СтруктураСообщений(Объект);
СкидкиНаценкиЗаполнениеСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения);
Возврат СтруктураСообщений;
КонецФункции
&НаСервере
Процедура НазначитьРучнуюСкидкуНаСервере(СуммаСкидкиНаценки, Знач ВыделенныеСтроки, АдресВоВременномХранилище)
Если СуммаСкидкиНаценки <> 0 Тогда
ПараметрыСкидки = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыНазначитьРучнуюСкидку();
ПараметрыСкидки.ИспользуютсяАвтоматическиеСкидки = Истина;
ПараметрыСкидки.ТолькоДляАктивныхСтрок = Ложь;
ПараметрыСкидки.РассчитыватьСуммуСНДС = Истина;
ПараметрыСкидки.РассчитыватьСуммуВзаиморасчетов = Истина;
ПараметрыСкидки.ВыделенныеСтроки = ВыделенныеСтроки;
ПараметрыСкидки.АдресВоВременномХранилище = АдресВоВременномХранилище;
СкидкиНаценкиЗаполнениеСервер.НазначитьРучнуюСкидку(Объект, "Услуги", СуммаСкидкиНаценки, ПараметрыСкидки);
Иначе
СкидкиНаценкиЗаполнениеСервер.ОтменитьРучныеСкидки(Объект, "Услуги", Истина, Истина, Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура РассчитатьСкидкиНаценкиПоЗаказуНаСервере()
Объект.СкидкиНаценки.Очистить();
Объект.НачислениеБонусныхБаллов.Очистить();
Запрос = Новый Запрос(
"ВЫБРАТЬ
| КурсВалютыВзаиморасчетов.КурсЧислитель * КурсВалюты.КурсЗнаменатель / (КурсВалюты.КурсЧислитель * КурсВалютыВзаиморасчетов.КурсЗнаменатель) КАК КоэффициентПересчета
|ПОМЕСТИТЬ ВалютаЗаказаВВалютуДокумента
|ИЗ
| РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(&Дата, Валюта = &Валюта И БазоваяВалюта = &БазоваяВалюта) КАК КурсВалюты
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтносительныеКурсыВалют.СрезПоследних(
| &Дата,
| Валюта = &ВалютаВзаиморасчетов И БазоваяВалюта = &БазоваяВалюта) КАК КурсВалютыВзаиморасчетов
| ПО (ИСТИНА)
|;
|
|
|ВЫБРАТЬ
| Услуги.ЗаказКлиента КАК ЗаказКлиента,
| ВЫРАЗИТЬ(Услуги.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
| ВЫРАЗИТЬ(Услуги.Характеристика КАК Справочник.ХарактеристикиНоменклатуры) КАК Характеристика,
| ВЫРАЗИТЬ(Услуги.КодСтроки КАК ЧИСЛО) КАК КодСтроки,
| ВЫРАЗИТЬ(Услуги.КлючСвязи КАК ЧИСЛО) КАК КлючСвязи,
| ВЫРАЗИТЬ(Услуги.Количество КАК ЧИСЛО) КАК Количество
|ПОМЕСТИТЬ УслугиДокумента
|ИЗ
| &ТаблицаУслуг КАК Услуги
|;
|
|
|ВЫБРАТЬ
| ТоварыЗаказа.Ссылка КАК ЗаказКлиента,
| ТоварыЗаказа.КодСтроки КАК КодСтроки,
| ТоварыЗаказа.КлючСвязи КАК КлючСвязи,
| УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество КАК Коэффициент,
| ТоварыЗаказа.ПроцентАвтоматическойСкидки КАК ПроцентАвтоматическойСкидки,
| ТоварыЗаказа.ПроцентРучнойСкидки КАК ПроцентРучнойСкидки,
| ТоварыЗаказа.СуммаАвтоматическойСкидки * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета КАК СуммаАвтоматическойСкидки,
| ТоварыЗаказа.СуммаРучнойСкидки * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета КАК СуммаРучнойСкидки,
| ТоварыЗаказа.СуммаБонусныхБалловКСписанию * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) КАК СуммаБонусныхБалловКСписанию,
| ТоварыЗаказа.СуммаБонусныхБалловКСписаниюВВалюте * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета КАК СуммаБонусныхБалловКСписаниюВВалюте,
| ТоварыЗаказа.СуммаНачисленныхБонусныхБалловВВалюте * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета КАК СуммаНачисленныхБонусныхБалловВВалюте
|ИЗ
| УслугиДокумента КАК УслугиАктовВыполненныхРабот
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ТоварыЗаказа
| ПО УслугиАктовВыполненныхРабот.КодСтроки = ТоварыЗаказа.КодСтроки
| И УслугиАктовВыполненныхРабот.Номенклатура = ТоварыЗаказа.Номенклатура
| И УслугиАктовВыполненныхРабот.Характеристика = ТоварыЗаказа.Характеристика
| И УслугиАктовВыполненныхРабот.ЗаказКлиента = ТоварыЗаказа.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВалютаЗаказаВВалютуДокумента КАК ВалютаЗаказаВВалютуДокумента
| ПО (ИСТИНА)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТоварыЗаказа.Ссылка,
| ТоварыЗаказа.КодСтроки,
| ТоварыЗаказа.КлючСвязи,
| УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество,
| ТоварыЗаказа.ПроцентАвтоматическойСкидки,
| ТоварыЗаказа.ПроцентРучнойСкидки,
| ТоварыЗаказа.СуммаАвтоматическойСкидки * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета,
| ТоварыЗаказа.СуммаРучнойСкидки * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета,
| ТоварыЗаказа.СуммаБонусныхБалловКСписанию * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество),
| ТоварыЗаказа.СуммаБонусныхБалловКСписаниюВВалюте * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета,
| ТоварыЗаказа.СуммаНачисленныхБонусныхБалловВВалюте * (УслугиАктовВыполненныхРабот.Количество / ТоварыЗаказа.Количество) * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета
|ИЗ
| УслугиДокумента КАК УслугиАктовВыполненныхРабот
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаявкаНаВозвратТоваровОтКлиента.ЗаменяющиеТовары КАК ТоварыЗаказа
| ПО УслугиАктовВыполненныхРабот.КодСтроки = ТоварыЗаказа.КодСтроки
| И УслугиАктовВыполненныхРабот.Номенклатура = ТоварыЗаказа.Номенклатура
| И УслугиАктовВыполненныхРабот.Характеристика = ТоварыЗаказа.Характеристика
| И УслугиАктовВыполненныхРабот.ЗаказКлиента = ТоварыЗаказа.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ ВалютаЗаказаВВалютуДокумента КАК ВалютаЗаказаВВалютуДокумента
| ПО (ИСТИНА)
|;
|
|
|ВЫБРАТЬ
| СкидкиНаценки.Ссылка КАК ЗаказКлиента,
| СкидкиНаценки.КлючСвязи КАК КлючСвязи,
| СкидкиНаценки.СкидкаНаценка КАК СкидкаНаценка,
| СкидкиНаценки.Сумма * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета КАК Сумма
|ИЗ
| Документ.ЗаказКлиента.СкидкиНаценки КАК СкидкиНаценки
| ЛЕВОЕ СОЕДИНЕНИЕ ВалютаЗаказаВВалютуДокумента КАК ВалютаЗаказаВВалютуДокумента
| ПО (ИСТИНА)
|ГДЕ
| (СкидкиНаценки.Ссылка, СкидкиНаценки.КлючСвязи) В
| (ВЫБРАТЬ
| УслугиДокумента.ЗаказКлиента,
| УслугиДокумента.КлючСвязи
| ИЗ
| УслугиДокумента КАК УслугиДокумента)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| СкидкиНаценки.Ссылка,
| СкидкиНаценки.КлючСвязи,
| СкидкиНаценки.СкидкаНаценка,
| СкидкиНаценки.Сумма * ВалютаЗаказаВВалютуДокумента.КоэффициентПересчета
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента.СкидкиНаценки КАК СкидкиНаценки
| ЛЕВОЕ СОЕДИНЕНИЕ ВалютаЗаказаВВалютуДокумента КАК ВалютаЗаказаВВалютуДокумента
| ПО (ИСТИНА)
|ГДЕ
| (СкидкиНаценки.Ссылка, СкидкиНаценки.КлючСвязи) В
| (ВЫБРАТЬ
| УслугиДокумента.ЗаказКлиента,
| УслугиДокумента.КлючСвязи
| ИЗ
| УслугиДокумента КАК УслугиДокумента)
|;
|
|
|ВЫБРАТЬ
| ТабличнаяЧасть.Ссылка КАК ЗаказКлиента,
| ТабличнаяЧасть.КлючСвязи КАК КлючСвязи,
| ТабличнаяЧасть.БонуснаяПрограммаЛояльности КАК БонуснаяПрограммаЛояльности,
| ТабличнаяЧасть.БонуснаяПрограммаЛояльности.ВалютаКонвертацииБонусов КАК ВалютаКонвертацииБонусов,
| ТабличнаяЧасть.БонуснаяПрограммаЛояльности.КурсКонвертацииБонусовВВалюту КАК КурсКонвертацииБонусовВВалюту,
| ДОБАВИТЬКДАТЕ(ТабличнаяЧасть.ДатаНачисления, ДЕНЬ,
| РАЗНОСТЬДАТ(
| НАЧАЛОПЕРИОДА(ТабличнаяЧасть.Ссылка.Дата, ДЕНЬ),
| НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ),
| ДЕНЬ)
| ) КАК ДатаНачисления,
| ВЫБОР
| КОГДА ТабличнаяЧасть.ДатаСписания = ДАТАВРЕМЯ(1, 1, 1)
| ТОГДА ТабличнаяЧасть.ДатаСписания
| ИНАЧЕ
| ДОБАВИТЬКДАТЕ(
| ТабличнаяЧасть.ДатаСписания,
| ДЕНЬ,
| РАЗНОСТЬДАТ(
| НАЧАЛОПЕРИОДА(ТабличнаяЧасть.Ссылка.Дата, ДЕНЬ),
| НАЧАЛОПЕРИОДА(&Дата, ДЕНЬ),
| ДЕНЬ))
| КОНЕЦ КАК ДатаСписания,
| ТабличнаяЧасть.СуммаБонусныхБаллов КАК СуммаБонусныхБаллов
|ИЗ
| Документ.ЗаказКлиента.НачислениеБонусныхБаллов КАК ТабличнаяЧасть
|ГДЕ
| (ТабличнаяЧасть.Ссылка, ТабличнаяЧасть.КлючСвязи) В
| (ВЫБРАТЬ
| УслугиДокумента.ЗаказКлиента,
| УслугиДокумента.КлючСвязи
| ИЗ
| УслугиДокумента КАК УслугиДокумента)
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ТабличнаяЧасть.Ссылка,
| ТабличнаяЧасть.КлючСвязи,
| ТабличнаяЧасть.БонуснаяПрограммаЛояльности,
| ТабличнаяЧасть.БонуснаяПрограммаЛояльности.ВалютаКонвертацииБонусов,
| ТабличнаяЧасть.БонуснаяПрограммаЛояльности.КурсКонвертацииБонусовВВалюту,
| ТабличнаяЧасть.ДатаНачисления,
| ТабличнаяЧасть.ДатаСписания,
| ТабличнаяЧасть.СуммаБонусныхБаллов
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента.НачислениеБонусныхБаллов КАК ТабличнаяЧасть
|ГДЕ
| (ТабличнаяЧасть.Ссылка, ТабличнаяЧасть.КлючСвязи) В
| (ВЫБРАТЬ
| УслугиДокумента.ЗаказКлиента,
| УслугиДокумента.КлючСвязи
| ИЗ
| УслугиДокумента КАК УслугиДокумента)
|");
Запрос.УстановитьПараметр("Дата", ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, ТекущаяДатаСеанса()));
Запрос.УстановитьПараметр("Валюта", Объект.Валюта);
Запрос.УстановитьПараметр("ВалютаВзаиморасчетов", Объект.ВалютаВзаиморасчетов);
Запрос.УстановитьПараметр("ТаблицаУслуг", Объект.Услуги.Выгрузить(, "ЗаказКлиента, Номенклатура, Характеристика, КодСтроки, Количество, КлючСвязи"));
Запрос.УстановитьПараметр("БазоваяВалюта", ЗначениеНастроекПовтИсп.БазоваяВалютаПоУмолчанию());
ПакетЗапросов = Запрос.ВыполнитьПакет();
СкидкиНаценкиЗаказа = ПакетЗапросов[3].Выгрузить();
ИспользоватьБонусныеПрограммыЛояльности = ПолучитьФункциональнуюОпцию("ИспользоватьБонусныеПрограммыЛояльности");
Если ИспользоватьБонусныеПрограммыЛояльности Тогда
НачислениеБонусныхБалловЗаказа = ПакетЗапросов[4].Выгрузить();
БонуснаяПрограммаЛояльности = Новый Структура("БонуснаяПрограммаЛояльности,
|ВалютаКонвертацииБонусов,
|КурсКонвертацииБонусовВВалюту,
|СтруктураКурсовВалютыКонвертации,
|СтруктураКурсовВалютыДокумента");
БонусныеПрограммыЛояльности = НачислениеБонусныхБалловЗаказа.Скопировать();
БонусныеПрограммыЛояльности.Свернуть("БонуснаяПрограммаЛояльности,
|ВалютаКонвертацииБонусов,
|КурсКонвертацииБонусовВВалюту");
Если БонусныеПрограммыЛояльности.Количество() > 1 Тогда
ИспользоватьБонусныеПрограммыЛояльности = Ложь;
ИначеЕсли БонусныеПрограммыЛояльности.Количество() = 1 Тогда
ЗаполнитьЗначенияСвойств(БонуснаяПрограммаЛояльности, БонусныеПрограммыЛояльности[0]);
Если Объект.Валюта <> БонуснаяПрограммаЛояльности.ВалютаКонвертацииБонусов Тогда
БонуснаяПрограммаЛояльности.СтруктураКурсовВалютыКонвертации = РаботаСКурсамиВалютУТ.ПолучитьКурсВалюты(БонуснаяПрограммаЛояльности.ВалютаКонвертацииБонусов,
ТекущаяДатаСеанса(),
ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация));
БонуснаяПрограммаЛояльности.СтруктураКурсовВалютыДокумента = РаботаСКурсамиВалютУТ.ПолучитьКурсВалюты(Объект.Валюта,
ТекущаяДатаСеанса(),
ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация));
КонецЕсли;
КонецЕсли;
КонецЕсли;
ОбрабатываемыеСтроки = Новый Массив();
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураДействий.Вставить("ПересчитатьСумму", "Количество");
ВыборкаУслуги = ПакетЗапросов[2].Выбрать();
Пока ВыборкаУслуги.Следующий() Цикл
НайденныеСтроки = Объект.Услуги.НайтиСтроки(Новый Структура("ЗаказКлиента, КодСтроки", ВыборкаУслуги.ЗаказКлиента, ВыборкаУслуги.КодСтроки));
Если НайденныеСтроки.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
СтрокаТаблицы = НайденныеСтроки[0];
СписокПолей = "ПроцентАвтоматическойСкидки, ПроцентРучнойСкидки";
ЗаполнитьЗначенияСвойств(СтрокаТаблицы, ВыборкаУслуги, СписокПолей);
СтрокаТаблицы.СуммаАвтоматическойСкидки = Окр(ВыборкаУслуги.СуммаАвтоматическойСкидки, 2);
СтрокаТаблицы.СуммаРучнойСкидки = Окр(ВыборкаУслуги.СуммаРучнойСкидки , 2);
СтрокаТаблицы.СуммаНачисленныхБонусныхБалловВВалюте = Окр(ВыборкаУслуги.СуммаНачисленныхБонусныхБалловВВалюте, 2);
СтрокаТаблицы.СуммаБонусныхБалловКСписаниюВВалюте = Окр(ВыборкаУслуги.СуммаБонусныхБалловКСписаниюВВалюте, 2);
СтрокаТаблицы.СуммаБонусныхБалловКСписанию = Окр(ВыборкаУслуги.СуммаБонусныхБалловКСписанию, 2);
ОбрабатываемыеСтроки.Добавить(СтрокаТаблицы);
СуммаКРаспределению = СтрокаТаблицы.СуммаАвтоматическойСкидки + СтрокаТаблицы.СуммаНачисленныхБонусныхБалловВВалюте;
Если СтрокаТаблицы.КлючСвязи <> 0 Тогда
НайденныеСтроки = СкидкиНаценкиЗаказа.НайтиСтроки(Новый Структура("ЗаказКлиента, КлючСвязи", СтрокаТаблицы.ЗаказКлиента, СтрокаТаблицы.КлючСвязи));
Если НайденныеСтроки <> 0 Тогда
Для Каждого СтрокаСкидкиЗаказа Из НайденныеСтроки Цикл
СтрокаСкидки = Объект.СкидкиНаценки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСкидки, СтрокаСкидкиЗаказа);
СтрокаСкидки.Сумма = ВыборкаУслуги.Коэффициент * СтрокаСкидки.Сумма;
СуммаКРаспределению = СуммаКРаспределению - СтрокаСкидки.Сумма;
КонецЦикла;
Если СуммаКРаспределению <> 0 Тогда
СтрокаСкидки.Сумма = СтрокаСкидки.Сумма + СуммаКРаспределению;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ИспользоватьБонусныеПрограммыЛояльности Тогда
СуммаКРаспределению = СтрокаТаблицы.СуммаНачисленныхБонусныхБалловВВалюте;
Если ЗначениеЗаполнено(БонуснаяПрограммаЛояльности.ВалютаКонвертацииБонусов)
И Объект.Валюта <> БонуснаяПрограммаЛояльности.ВалютаКонвертацииБонусов Тогда
СуммаКРаспределению = РаботаСКурсамиВалютУТ.ПересчитатьПоКурсу(
СуммаКРаспределению,
БонуснаяПрограммаЛояльности.СтруктураКурсовВалютыДокумента,
БонуснаяПрограммаЛояльности.СтруктураКурсовВалютыКонвертации);
КонецЕсли;
Если СуммаКРаспределению <> 0
И ЗначениеЗаполнено(БонуснаяПрограммаЛояльности.КурсКонвертацииБонусовВВалюту) Тогда
СуммаКРаспределению = СуммаКРаспределению / БонуснаяПрограммаЛояльности.КурсКонвертацииБонусовВВалюту;
КонецЕсли;
Если СтрокаТаблицы.КлючСвязи <> 0 Тогда
НайденныеСтроки = НачислениеБонусныхБалловЗаказа.НайтиСтроки(Новый Структура("ЗаказКлиента, КлючСвязи", СтрокаТаблицы.ЗаказКлиента, ВыборкаУслуги.КлючСвязи));
Если НайденныеСтроки.Количество() <> 0 Тогда
Для Каждого СтрокаБонусныеБаллыЗаказа Из НайденныеСтроки Цикл
СтрокаБонусныеБаллы = Объект.НачислениеБонусныхБаллов.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаБонусныеБаллы, СтрокаБонусныеБаллыЗаказа);
СтрокаБонусныеБаллы.СуммаБонусныхБаллов = ВыборкаУслуги.Коэффициент * СтрокаБонусныеБаллы.СуммаБонусныхБаллов;
СуммаКРаспределению = СуммаКРаспределению - СтрокаБонусныеБаллы.СуммаБонусныхБаллов;
КонецЦикла;
Если СуммаКРаспределению <> 0 Тогда
СтрокаСкидки.Сумма = СтрокаСкидки.Сумма + СуммаКРаспределению;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Услуги,
КэшированныеЗначения);
Объект.СкидкиРассчитаны = Истина;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОтменитьРучныеСкидкиНаСервере()
СкидкиНаценкиЗаполнениеСервер.ОтменитьРучныеСкидки(Объект, "Услуги", Истина, Истина, Истина);
КонецПроцедуры
&НаСервере
Функция ВыполнитьПредварительныйРасчетСкидокНаСервере()
СтруктураПараметры = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыРассчитать();
СтруктураПараметры.ПрименятьКОбъекту = Ложь;
СтруктураПараметры.ТолькоПредварительныйРасчет = Истина;
СтруктураПараметры.ВосстанавливатьУправляемыеСкидки = Истина;
СтруктураПараметры.УправляемыеСкидки = УправляемыеСкидки;
Возврат ПоместитьВоВременноеХранилище(
СкидкиНаценкиЗаполнениеСервер.Рассчитать(Объект, СтруктураПараметры), УникальныйИдентификатор);
КонецФункции
&НаСервере
Процедура УдалитьСтрокиТЧСкидкиНаценки(СтрокаТЧУслуги)
Если ЗначениеЗаполнено(СтрокаТЧУслуги.КлючСвязи) Тогда
Для Каждого СтрокаКУдалению Из Объект.СкидкиНаценки.НайтиСтроки(Новый Структура("КлючСвязи", СтрокаТЧУслуги.КлючСвязи)) Цикл
Объект.СкидкиНаценки.Удалить(СтрокаКУдалению);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПолученыСообщения(Сообщения)
СкидкиНаценкиЗаполнениеСервер.СохранитьОтработанныеСообщения(Объект, Сообщения);
СкидкиНаценкиЗаполнениеСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения);
КонецПроцедуры
&НаКлиенте
Процедура ПроверкаОплатыБонуснымиБаллами()
Если Не ИспользоватьБонусныеПрограммыЛояльности
Или Не ОплатаБонуснымиБаллами Тогда
Возврат;
КонецЕсли;
ОчиститьСообщения();
ПрименитьОплатуБонуснымиБалламиКлиент(, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьОплатуБонуснымиБалламиКлиент(АдресВоВременномХранилище = Неопределено, ВыводитьСообщение = Ложь)
Если АдресВоВременномХранилище = Неопределено И (Не ОплатаБонуснымиБаллами Или Не Объект.Услуги.Количество()) Тогда
Возврат;
КонецЕсли;
ПрименитьОплатуБонуснымиБаллами(АдресВоВременномХранилище, ВыводитьСообщение);
КонецПроцедуры
&НаСервере
Процедура ПрименитьОплатуБонуснымиБаллами(АдресВоВременномХранилище = Неопределено, ВыводитьСообщение = Ложь)
УдалениеОплаты = Ложь;
Если АдресВоВременномХранилище <> Неопределено Тогда
ТаблицаТоваров = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
Иначе
Если Не ОплатаБонуснымиБаллами Тогда
Возврат;
КонецЕсли;
ТаблицаТоваров = Объект.Услуги;
УдалениеОплаты = Истина;
КонецЕсли;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму", "Количество");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ПересчитыватьСуммуРучнойСкидки, ИмяКоличества", Ложь, Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
КорректировкаВыполнена = Ложь;
ОбрабатываемыеСтроки = Новый Массив;
Для Каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
Если УдалениеОплаты Тогда
Если ЗначениеЗаполнено(СтрокаТаблицы.ЗаказКлиента) Тогда
Продолжить;
КонецЕсли;
СтрокаТЧ = СтрокаТаблицы;
СтрокаТЧ.СуммаБонусныхБалловКСписанию = 0;
СтрокаТЧ.СуммаБонусныхБалловКСписаниюВВалюте = 0;
Иначе
СтрокаТЧ = Объект.Услуги.НайтиСтроки(Новый Структура("КлючСвязи", СтрокаТаблицы.КлючСвязи))[0];
СтрокаТЧ.СуммаБонусныхБалловКСписанию = СтрокаТаблицы.СуммаБонусныхБалловКСписанию;
СтрокаТЧ.СуммаБонусныхБалловКСписаниюВВалюте = СтрокаТаблицы.СуммаБонусныхБалловКСписаниюВВалюте;
КонецЕсли;
ОбрабатываемыеСтроки.Добавить(СтрокаТЧ);
КорректировкаВыполнена = Истина;
КонецЦикла;
ОбрабатываемаяКоллекция = ?(УдалениеОплаты, ТаблицаТоваров, Объект.Услуги);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
ОбрабатываемаяКоллекция,
КэшированныеЗначения);
Если КорректировкаВыполнена Тогда
ОплатаБонуснымиБаллами = Не УдалениеОплаты;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
Если ВыводитьСообщение Тогда
Если УдалениеОплаты Тогда
ТекстСообщения = НСтр("ru = 'Оплата бонусными баллами отменена. При необходимости, оплату бонусными баллами можно назначить заново (""Цены и скидки / Добавить оплату бонусными баллами"").'");
Иначе
ТекстСообщения = НСтр("ru = 'Оплата бонусными баллами распределена.'");
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, Объект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПодборыИОбработкаПроверкиКоличества
&НаКлиенте
Процедура ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение)
ОчиститьСообщения();
ПрименитьОплатуБонуснымиБалламиКлиент(, Истина);
ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПодборУслугИзЗаказа()
МассивКодовСтрок = Новый Массив;
МассивЗаказов = Новый Массив;
Если Объект.Услуги.Количество() > 0 Тогда
Для Каждого СтрокаТЧ Из Объект.Услуги Цикл
Если СтрокаТЧ.КодСтроки <> 0 И ЗначениеЗаполнено(СтрокаТЧ.ЗаказКлиента) Тогда
МассивКодовСтрок.Добавить(Новый Структура("КодСтроки,ЗаказКлиента", СтрокаТЧ.КодСтроки, СтрокаТЧ.ЗаказКлиента));
КонецЕсли;
Если МассивЗаказов.Найти(СтрокаТЧ.ЗаказКлиента)=Неопределено Тогда
МассивЗаказов.Добавить(СтрокаТЧ.ЗаказКлиента);
КонецЕсли;
КонецЦикла;
Иначе
МассивЗаказов.Добавить(Объект.ЗаказКлиента);
КонецЕсли;
ПараметрыПодбора = Новый Структура;
ПараметрыПодбора.Вставить("ЗаказКлиента", Объект.ЗаказКлиента);
ПараметрыПодбора.Вставить("ВалютаДокумента", Объект.Валюта);
ПараметрыПодбора.Вставить("Документ", Объект.Ссылка);
ПараметрыПодбора.Вставить("МассивКодовСтрок", МассивКодовСтрок);
ПараметрыПодбора.Вставить("МассивЗаказов",МассивЗаказов);
ПараметрыПодбора.Вставить("Партнер", Объект.Партнер);
ПараметрыПодбора.Вставить("Контрагент", Объект.Контрагент);
ПараметрыПодбора.Вставить("Договор", Объект.Договор);
ПараметрыПодбора.Вставить("Организация", Объект.Организация);
ПараметрыПодбора.Вставить("Соглашение", Объект.Соглашение);
ПараметрыПодбора.Вставить("Сделка", Объект.Сделка);
ПараметрыПодбора.Вставить("ВалютаВзаиморасчетов", Объект.ВалютаВзаиморасчетов);
ПараметрыПодбора.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыПодбора.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыПодбора.Вставить("ПорядокРасчетов", Объект.ПорядокРасчетов);
ПараметрыПодбора.Вставить("Дата", Объект.Дата);
ПараметрыПодбора.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
ПараметрыПодбора.Вставить("ИспользоватьРасширенныеВозможностиЗаказаКлиента", ИспользоватьРасширенныеВозможностиЗаказаКлиента);
ПараметрыПодбора.Вставить("Подразделение", Объект.Подразделение);
ОткрытьФорму(
"Документ.АктВыполненныхРабот.Форма.ФормаПодбораУслугИзЗаказа",
ПараметрыПодбора,
ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
ТаблицаУслуг = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначенияУслуг();
ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ЗаполнитьСодержание",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(
Объект, Истина));
СтруктураДействий.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ",
Новый Структура("Подразделение", Объект.Подразделение));
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
ОбрабатываемыеСтроки = Новый Массив();
Для каждого СтрокаУслуги Из ТаблицаУслуг Цикл
ТекущаяСтрока = Объект.Услуги.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаУслуги, "НоменклатураНабора, ХарактеристикаНабора, Номенклатура,
| Характеристика, ВидЦены, Цена, Количество, Сумма, СуммаРучнойСкидки, ПроцентРучнойСкидки, Обособленно");
ТекущаяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора), 1, 0);
НаправленияДеятельностиКлиентСервер.ЗаполнитьНазначениеПоФлагуОбособленно(ЭтотОбъект, ТекущаяСтрока);
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Услуги,
КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СтруктураХарактеристикиНоменклатуры = Новый Структура;
СтруктураХарактеристикиНоменклатуры.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Услуги, СтруктураХарактеристикиНоменклатуры);
НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект, "Услуги");
КонецПроцедуры
#КонецОбласти
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(ДанныеШтрихкодов) Тогда
Возврат;
КонецЕсли;
ИзменятьКоличество = Не (Объект.АктПоЗаказам);
ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействийСДобавленнымиСтроками = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличества(СтруктураДействийСДобавленнымиСтроками, Объект);
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействийСДобавленнымиСтроками);
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСодержание", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Истина));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействийСИзмененнымиСтроками = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличества(СтруктураДействийСИзмененнымиСтроками, Объект);
СтруктураДействий = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов();
СтруктураДействий.Штрихкоды = ДанныеШтрихкодов;
СтруктураДействий.СтруктураДействийСДобавленнымиСтроками = СтруктураДействийСДобавленнымиСтроками;
СтруктураДействий.СтруктураДействийСИзмененнымиСтроками = СтруктураДействийСИзмененнымиСтроками;
СтруктураДействий.ПараметрыУказанияСерий = Неопределено;
СтруктураДействий.ИмяКолонкиКоличество = "Количество";
СтруктураДействий.НеИспользоватьУпаковки = Истина;
СтруктураДействий.ИмяТЧ = "Услуги";
СтруктураДействий.ИзменятьКоличество = ИзменятьКоличество;
СтруктураДействий.ТолькоУслуги = Истина;
СтруктураДействий.РассчитыватьНаборы = Истина;
ОбработатьШтрихкодыСервер(СтруктураДействий,КэшированныеЗначения);
ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураДействий,КэшированныеЗначения,ЭтотОбъект);
Если ИзменятьКоличество Тогда
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецЕсли;
Если СтруктураДействий.ТекущаяСтрока <> Неопределено Тогда
Элементы.Услуги.ТекущаяСтрока = СтруктураДействий.ТекущаяСтрока;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьШтрихкодыСервер(СтруктураПараметровДействия,КэшированныеЗначения)
ШтрихкодированиеНоменклатурыСервер.ОбработатьШтрихкоды(ЭтаФорма, Объект,СтруктураПараметровДействия,КэшированныеЗначения);
КонецПроцедуры
#КонецОбласти
#Область РаботаСБуферомОбмена
&НаСервере
Процедура СкопироватьСтрокиНаСервере()
РаботаСТабличнымиЧастями.СкопироватьСтрокиВБуферОбмена(Объект.Услуги, Элементы.Услуги.ВыделенныеСтроки);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбмена()
МассивТиповНоменклатуры = Новый Массив;
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
ПараметрыОтбора = Новый Соответствие;
ПараметрыОтбора.Вставить("Номенклатура.ТипНоменклатуры", МассивТиповНоменклатуры);
Колонки = "Номенклатура,Характеристика,Упаковка,Количество,ВидЦены,Цена,
|ПроцентРучнойСкидки,СуммаРучнойСкидки,Подразделение,НоменклатураНабора,ХарактеристикаНабора";
ТаблицаУслуг = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, Колонки);
Если Не ЗначениеЗаполнено(ТаблицаУслуг) Тогда
Возврат;
КонецЕсли;
ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ЗаполнитьСодержание",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(
Объект, Истина));
ДобавитьВСтруктуруДействияПриИзмененииКоличества(СтруктураДействий,Объект);
Если ТаблицаУслуг.Колонки.Найти("СуммаРучнойСкидки") <> Неопределено Тогда
СтруктураДействий.ПересчитатьСуммуСУчетомРучнойСкидки.Вставить("ПересчитыватьСуммуРучнойСкидки", Ложь);
КонецЕсли;
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
ПараметрыПроверкиВидаЦены = Новый Структура("ЦенаВключаетНДС, ИспользоватьПриПродаже, Статус",
Объект.ЦенаВключаетНДС, Истина, Перечисления.СтатусыДействияВидовЦен.Действует);
СтруктураДействий.Вставить("ПроверитьЗаполнитьВидЦены", Новый Структура(
"ВидЦены, ПараметрыОтбора", "ВидЦены", ПараметрыПроверкиВидаЦены));
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
ОбрабатываемыеСтроки = Новый Массив;
Для каждого СтрокаУслуги Из ТаблицаУслуг Цикл
ТекущаяСтрока = Объект.Услуги.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаУслуги);
ТекущаяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора), 1, 0);
Если НЕ ИспользоватьРучныеСкидкиВПродажах Тогда
ТекущаяСтрока.ПроцентРучнойСкидки = 0;
ТекущаяСтрока.СуммаРучнойСкидки = 0;
КонецЕсли;
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Услуги);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
СтруктураХарактеристикиНоменклатуры = Новый Структура;
СтруктураХарактеристикиНоменклатуры.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Услуги, СтруктураХарактеристикиНоменклатуры);
НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект, "Услуги");
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьКомандБуфераОбмена()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("УслугиВставитьСтроки");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
РаботаСТабличнымиЧастями.ЕстьСтрокиВБуфереОбмена() И Не Объект.АктПоЗаказам);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКомандБуфераОбменаНаКлиенте()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("УслугиВставитьСтроки");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", НЕ Объект.АктПоЗаказам);
КонецПроцедуры
#КонецОбласти
#Область Наборы
&НаКлиентеНаСервереБезКонтекста
Функция КолонкиНабора(Форма)
Колонки = Новый Массив;
Колонки.Добавить("Номенклатура");
Колонки.Добавить("Характеристика");
Колонки.Добавить("Цена");
Колонки.Добавить("ВидЦены");
Колонки.Добавить("Количество");
Если Форма.ИспользоватьРучныеСкидкиВПродажах Тогда
Колонки.Добавить("ПроцентРучнойСкидки");
Колонки.Добавить("СуммаРучнойСкидки");
КонецЕсли;
Если Форма.ИспользоватьАвтоматическиеСкидкиВПродажах Тогда
Колонки.Добавить("ПроцентАвтоматическойСкидки");
Колонки.Добавить("СуммаАвтоматическойСкидки");
КонецЕсли;
Колонки.Добавить("СтавкаНДС");
Колонки.Добавить("СуммаНДС");
Колонки.Добавить("СуммаСНДС");
Колонки.Добавить("Сумма");
Возврат Колонки;
КонецФункции
&НаКлиенте
Процедура ПриУдаленииКомплектующих(Действие, ДополнительныйПараметр) Экспорт
Если НаборыКлиент.ДействиеРедактироватьНабор(Действие) Тогда
НаборыКлиент.ПриУдаленииКомплектующих(ЭтаФорма, "Услуги", ДополнительныйПараметр);
ИначеЕсли НаборыКлиент.ДействиеУдалитьВесьНабор(Действие) Тогда
ПриУдаленииКомплектующихНаСервере("Услуги", ДополнительныйПараметр);
КонецЕсли;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриУдаленииКомплектующихНаСервере(ИмяТЧ, ДополнительныйПараметр)
НаборыСервер.ПриУдаленииКомплектующих(ЭтаФорма, ИмяТЧ, ДополнительныйПараметр);
КонецПроцедуры
&НаСервере
Функция АдресНабораВоВременномХранилище(Параметры)
Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтаФорма, Параметры, "Услуги");
КонецФункции
&НаСервере
Процедура ПриОкончанииРедактированияНабора(АдресВоВременномХранилище)
СтруктураДействийСДобавленнымиСтроками = Новый Структура;
СтруктураДействийСДобавленнымиСтроками.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСодержание", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Истина));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействийСИзмененнымиСтроками = Новый Структура;
СтруктураДействийСИзмененнымиСтроками.Вставить("ОчиститьСуммуВзаиморасчетов");
ПараметрыДанных = Новый Структура;
ПараметрыДанных.Вставить("Данные", ПолучитьИзВременногоХранилища(АдресВоВременномХранилище));
ПараметрыДанных.Вставить("СтруктураДействийСИзмененнымиСтроками", СтруктураДействийСИзмененнымиСтроками);
ПараметрыДанных.Вставить("СтруктураДействийСДобавленнымиСтроками", СтруктураДействийСДобавленнымиСтроками);
ПараметрыДанных.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма));
НаборыСервер.ПриОкончанииРедактированияНабора(ЭтаФорма, "Услуги", ПараметрыДанных);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Процедура УстановитьСнятьОтметкуОбособленно(Установить)
НаправленияДеятельностиСервер.УстановитьСнятьОтметкуОбособленно(ЭтотОбъект, Установить);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПоНоменклатуре()
ПараметрыЗаполненияРеквизитов = Новый Структура;
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакАртикул",
Новый Структура("Номенклатура", "Артикул"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Услуги,ПараметрыЗаполненияРеквизитов);
НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтаФорма, "Услуги");
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
Если Открыта() Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
ИспользоватьГрафикиОплаты = ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиОплаты");
ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам = ПолучитьФункциональнуюОпцию("ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам");
ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами");
ВалютаДокумента = Объект.Валюта;
ВалютаВзаиморасчетов = Объект.ВалютаВзаиморасчетов;
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
ОтветственныеЛицаСервер.ЗаполнитьСписокВыбораМенеджера(Элементы.Менеджер, Объект);
Если НЕ ИспользоватьСоглашенияСКлиентами Тогда
ПараметрыВыбораВидаЦены = ЗначениеНастроекПовтИсп.ПараметрыВыбораВидаЦеныПоУмолчанию();
ПараметрыВыбораВидаЦены.ЦенаВключаетНДС = Объект.ЦенаВключаетНДС;
ПараметрыВыбораВидаЦены.ИспользоватьПриПродаже = Истина;
ПараметрыВыбораВидаЦены.Статус = Перечисления.СтатусыДействияВидовЦен.Действует;
ВидЦеныПоУмолчанию = ЗначениеНастроекПовтИсп.ВидЦеныПоУмолчанию(ПараметрыВыбораВидаЦены);
КонецЕсли;
ИспользоватьНаправленияДеятельности = ПолучитьФункциональнуюОпцию("ИспользоватьУчетДоходовПоНаправлениямДеятельности");
НаправленияДеятельностиСервер.ПриЧтенииСозданииНаСервере(ЭтотОбъект);
УстановитьДоступностьЭлементовПоСтатусуСервер();
ОбновитьИнформациюПоЗаказам();
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
УстановитьВидимостьПоляПартнер(ЭтаФорма);
ОбновитьТекстСчетаФактурыВыданные();
ОснованиеИзменено = Ложь;
Если ПравоДоступа("Изменение", Метаданные.Документы.АктВыполненныхРабот) Тогда
ТаблицаОснованийДляПечати.Загрузить(Документы.АктВыполненныхРабот.ТаблицаОснованийДляПечати(Объект));
Если ЗначениеЗаполнено(Объект.Основание) Тогда
СтруктураОснования = Документы.АктВыполненныхРабот.СтруктураОснованияДляПечати(Объект);
ОснованиеИзменено = (СокрЛП(Объект.Основание) <> СтруктураОснования.Основание)
ИЛИ (СокрЛП(Объект.ОснованиеНомер) <> СтруктураОснования.ОснованиеНомер)
ИЛИ (Объект.ОснованиеДата <> СтруктураОснования.ОснованиеДата);
КонецЕсли;
КонецЕсли;
УстановитьВидимостьЗапретаОтгрузкиПартнеру();
ПараметрыЗаполнения = Документы.АктВыполненныхРабот.ПараметрыЗаполненияНалогообложенияНДСПродажи(Объект);
УчетНДСУП.ЗаполнитьСписокВыбораНалогообложенияНДСПродажи(Элементы.НалогообложениеНДС, Объект.НалогообложениеНДС, ПараметрыЗаполнения, УчетНДСКэшированныеЗначенияПараметров);
Если Не Объект.АктПоЗаказам Тогда
ОплатаБонуснымиБаллами = Объект.Услуги.Итог("СуммаБонусныхБалловКСписанию") <> 0
Или Объект.Услуги.Итог("СуммаБонусныхБалловКСписаниюВВалюте") <> 0;
КонецЕсли;
ДатаДокумента = ?(Параметры.Ключ.Пустая(), ТекущаяДатаСеанса(), Объект.Дата);
РозничныеПродажиКлиентСервер.УстановитьДоступностьКомандОплатыБонуснымиБаллами(Элементы, ДатаДокумента);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(Форма)
СуммаВсего = Форма.Объект.Услуги.Итог("Сумма");
СуммаАвтоСкидки = Форма.Объект.Услуги.Итог("СуммаАвтоматическойСкидки");
СуммаРучнойСкидки = Форма.Объект.Услуги.Итог("СуммаРучнойСкидки");
СуммаСуммаБонусныхБалловКСписаниюВВалюте = Форма.Объект.Услуги.Итог("СуммаБонусныхБалловКСписаниюВВалюте");
Форма.СуммаСкидки = СуммаАвтоСкидки + СуммаРучнойСкидки + СуммаСуммаБонусныхБалловКСписаниюВВалюте;
Форма.СуммаВсего = Форма.Объект.Услуги.Итог("СуммаСНДС");
Форма.СуммаНДС = Форма.Объект.Услуги.Итог("СуммаНДС");
ОтображатьИтогСуммыНДС = УчетНДСУПКлиентСервер.ОтображатьНДСВИтогахДокументаПродажи(Форма.Объект.НалогообложениеНДС);
Если ОтображатьИтогСуммыНДС Тогда
Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоСНДС;
Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница = Форма.Элементы.СтраницаСНДС;
Иначе
Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоБезНДС;
Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница = Форма.Элементы.СтраницаБезНДС;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ДобавитьВСтруктуруДействияПриИзмененииКоличества(СтруктураДействий, Объект)
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ИмяКоличества", Ложь, "Количество"));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
СтруктураДействий.Вставить("ПересчитатьСумму", "Количество");
КонецФункции
&НаСервере
Процедура ЗаполнитьДоговорПоУмолчанию()
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
И ИспользоватьНаправленияДеятельности Тогда
Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(Объект,
Перечисления.ХозяйственныеОперации.РеализацияКлиенту,
Объект.ВалютаВзаиморасчетов,
Объект.НаправлениеДеятельности);
Иначе
Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(Объект,
Перечисления.ХозяйственныеОперации.РеализацияКлиенту,
Объект.ВалютаВзаиморасчетов);
КонецЕсли;
Если Договор <> Объект.Договор Тогда
Объект.Договор = Договор;
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтаФорма, "Договор");
ЗаполнитьОснованиеДляПечати();
ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Объект.Договор, Объект.БанковскийСчетОрганизации, Объект.БанковскийСчетКонтрагента);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьПоЗаказуСервер()
Объект.Услуги.Очистить();
Если ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам Тогда
МассивЗаказов = Неопределено;
Иначе
МассивЗаказов = Новый Массив();
МассивЗаказов.Добавить(Объект.ЗаказКлиента);
КонецЕсли;
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ИспользоватьРасширенныеВозможностиЗаказаКлиента", ИспользоватьРасширенныеВозможностиЗаказаКлиента);
ПараметрыЗаполнения.Вставить("ОтображатьСообщение", Ложь);
Документы.АктВыполненныхРабот.ЗаполнитьПоОстаткамЗаказов(
Объект,
Объект.Услуги,
Объект.СкидкиНаценки,
Объект.НачислениеБонусныхБаллов,
МассивЗаказов,
ПараметрыЗаполнения);
ОбновитьИнформациюПоЗаказам();
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ЗаполнитьОснованиеДляПечати();
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецФункции
&НаСервере
Процедура ОбновитьИнформациюПоЗаказам()
ПараметрыОбновления = ЗаказыСервер.ПараметрыОбновленияИнформацииПоЗаказамВФорме();
ПараметрыОбновления.ИмяРеквизитаСписокЗаказов = "СписокЗаказов";
ПараметрыОбновления.ПутьЗаказаВШапке = "Объект.ЗаказКлиента";
ПараметрыОбновления.ИмяНадписиЗаголовка = "НадписьЗаголовокЗаказыКлиентов";
ПараметрыОбновления.ИмяГруппыКолонокВТабличнойЧасти = "УслугиГруппаЗаказКлиента";
ПараметрыОбновления.ИмяЗаказаВТабличнойЧасти = "ЗаказКлиента";
ПараметрыОбновления.ИспользоватьЗаказыВТабличнойЧасти = ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам;
ЗаказыСервер.ОбновитьИнформациюПоЗаказамВФорме(ЭтаФорма, Объект.Услуги, ПараметрыОбновления);
ИспользоватьРасширенныеВозможностиЗаказаКлиента = ИспользоватьРасширенныеВозможностиЗаказаКлиента();
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовПоСтатусуСервер()
УстановитьПодписку = Объект.Согласован;
МассивЭлементов = Новый Массив;
Если Не Объект.АктПоЗаказам Тогда
МассивЭлементов.Добавить("Дата");
КонецЕсли;
МассивЭлементов.Добавить("Партнер");
МассивЭлементов.Добавить("Соглашение");
МассивЭлементов.Добавить("Договор");
МассивЭлементов.Добавить("ЦенаВключаетНДС");
МассивЭлементов.Добавить("Организация");
МассивЭлементов.Добавить("Контрагент");
МассивЭлементов.Добавить("НалогообложениеНДС");
МассивЭлементов.Добавить("АктВыполненныхРаботПоЗаказу");
МассивЭлементов.Добавить("АктВыполненныхРаботПоЗаказам");
МассивЭлементов.Добавить("Услуги;ПередНачаломДобавления,ПередУдалением,ПередНачаломИзменения");
МассивЭлементов.Добавить("УслугиДобавить");
МассивЭлементов.Добавить("УслугиСкопировать");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюДобавить");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюСкопировать");
МассивЭлементов.Добавить("УслугиНоменклатура");
МассивЭлементов.Добавить("УслугиСодержание");
МассивЭлементов.Добавить("УслугиКодСтроки");
МассивЭлементов.Добавить("УслугиХарактеристика");
МассивЭлементов.Добавить("УслугиВидЦены");
МассивЭлементов.Добавить("УслугиПроцентРучнойСкидки");
МассивЭлементов.Добавить("УслугиСуммаРучнойСкидки");
МассивЭлементов.Добавить("УслугиСтавкаНДС");
МассивЭлементов.Добавить("УслугиСумма");
МассивЭлементов.Добавить("УслугиСуммаНДС");
МассивЭлементов.Добавить("УслугиПоискПоШтрихкоду");
МассивЭлементов.Добавить("УслугиЗагрузитьДанныеИзТСД");
МассивЭлементов.Добавить("УслугиРазбитьСтроку");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюРазбитьСтроку");
МассивЭлементов.Добавить("УслугиОткрытьПодбор");
МассивЭлементов.Добавить("УслугиЗагрузитьИзВнешнегоФайла");
МассивЭлементов.Добавить("УслугиНазначитьАвтоматическиеСкидки");
МассивЭлементов.Добавить("УслугиЗаполнитьЦеныПоСоглашению");
МассивЭлементов.Добавить("УслугиЗаполнитьЦеныВыделенныхСтрокПоВидуЦен");
МассивЭлементов.Добавить("УслугиОтменитьРучныеСкидки");
МассивЭлементов.Добавить("УслугиНазначитьРучнуюСкидку");
МассивЭлементов.Добавить("УслугиНазначитьРучнуюСкидкуВыделенныхСтрок");
МассивЭлементов.Добавить("УслугиПодобратьУслугиИзЗаказа");
МассивЭлементов.Добавить("УслугиЗаполнитьПоЗаказу");
МассивЭлементов.Добавить("УслугиРассчитатьСкидкиНаценки");
МассивЭлементов.Добавить("СчитатьКартуЛояльности");
МассивЭлементов.Добавить("СчитатьКартуЛояльностиКлиент");
МассивЭлементов.Добавить("КартаЛояльности");
ОбщегоНазначенияУТ.УстановитьПодпискуНаСобытияИзмененияЭлементовФормы(ЭтаФорма, МассивЭлементов, УстановитьПодписку);
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УслугиПодобратьУслугиИзЗаказа", "Доступность", Объект.АктПоЗаказам);
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УслугиЗаполнитьПоЗаказу", "Доступность", Объект.АктПоЗаказам);
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "УслугиОткрытьИнформациюОСкидках", "Доступность", Не Объект.АктПоЗаказам);
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КонтекстноеМенюУслугиОткрытьИнформациюОСкидках", "Доступность", Не Объект.АктПоЗаказам);
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("УслугиСкопировать");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюСкопировать");
МассивЭлементов.Добавить("УслугиПоискПоШтрихкоду");
МассивЭлементов.Добавить("УслугиЗагрузитьДанныеИзТСД");
МассивЭлементов.Добавить("УслугиРазбитьСтроку");
МассивЭлементов.Добавить("УслугиКонтекстноеМенюРазбитьСтроку");
МассивЭлементов.Добавить("УслугиОткрытьПодбор");
МассивЭлементов.Добавить("УслугиЗагрузитьИзВнешнегоФайла");
МассивЭлементов.Добавить("СчитатьКартуЛояльности");
МассивЭлементов.Добавить("СчитатьКартуЛояльностиКлиент");
МассивЭлементов.Добавить("КартаЛояльности");
МассивЭлементов.Добавить("УслугиОтменитьРучныеСкидки");
МассивЭлементов.Добавить("УслугиНазначитьРучнуюСкидку");
МассивЭлементов.Добавить("УслугиНазначитьРучнуюСкидкуВыделенныхСтрок");
МассивЭлементов.Добавить("УслугиНазначитьАвтоматическиеСкидки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", НЕ Объект.АктПоЗаказам);
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("Партнер");
МассивЭлементов.Добавить("Соглашение");
МассивЭлементов.Добавить("Договор");
МассивЭлементов.Добавить("Валюта");
МассивЭлементов.Добавить("ЦенаВключаетНДС");
МассивЭлементов.Добавить("Организация");
МассивЭлементов.Добавить("Контрагент");
МассивЭлементов.Добавить("НалогообложениеНДС");
МассивЭлементов.Добавить("ВалютаВзаиморасчетов");
МассивЭлементов.Добавить("АктВыполненныхРаботПоЗаказу");
МассивЭлементов.Добавить("АктВыполненныхРаботПоЗаказам");
МассивЭлементов.Добавить("КартаЛояльности");
МассивЭлементов.Добавить("УслугиНоменклатура");
МассивЭлементов.Добавить("УслугиСодержание");
МассивЭлементов.Добавить("УслугиКодСтроки");
МассивЭлементов.Добавить("УслугиХарактеристика");
МассивЭлементов.Добавить("УслугиВидЦены");
МассивЭлементов.Добавить("УслугиПроцентРучнойСкидки");
МассивЭлементов.Добавить("УслугиСуммаРучнойСкидки");
МассивЭлементов.Добавить("УслугиСтавкаНДС");
ТолькоПросмотрЭлементов = Объект.АктПоЗаказам И Не ПраваПользователяПовтИсп.ОтклонениеОтУсловийПродаж()
И (ЗначениеЗаполнено(Объект.ЗаказКлиента) ИЛИ СписокЗаказов.Количество() > 0);
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "ТолькоПросмотр", ТолькоПросмотрЭлементов);
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("УслугиЗаполнитьЦеныПоСоглашению");
МассивЭлементов.Добавить("УслугиЗаполнитьЦеныВыделенныхСтрокПоВидуЦен");
МассивЭлементов.Добавить("УслугиОтменитьРучныеСкидки");
МассивЭлементов.Добавить("УслугиНазначитьРучнуюСкидку");
МассивЭлементов.Добавить("УслугиНазначитьРучнуюСкидкуВыделенныхСтрок");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", НЕ (ТолькоПросмотрЭлементов));
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПолучитьУслугиИзХранилища(АдресУслугВХранилище)
СтруктураТаблиц = ПолучитьИзВременногоХранилища(АдресУслугВХранилище);
СтруктураПоискаУслуг = Новый Структура("КодСтроки,ЗаказКлиента");
СтруктураПоискаСкидки = Новый Структура("КлючСвязи");
Для Каждого СтрокаУслуг Из СтруктураТаблиц.Товары Цикл
СтруктураПоискаУслуг.КодСтроки = СтрокаУслуг.КодСтроки;
СтруктураПоискаУслуг.ЗаказКлиента = СтрокаУслуг.ЗаказКлиента;
МассивСтрокТЧУслуги = Объект.Услуги.НайтиСтроки(СтруктураПоискаУслуг);
Если МассивСтрокТЧУслуги.Количество() = 0 Тогда
СтрокаТЧУслуги = Объект.Услуги.Добавить();
ИначеЕсли МассивСтрокТЧУслуги.Количество() = 1 Тогда
СтрокаТЧУслуги = МассивСтрокТЧУслуги[0];
УдалитьСтрокиТЧСкидкиНаценки(СтрокаТЧУслуги);
ИначеЕсли МассивСтрокТЧУслуги.Количество() > 1 Тогда
Для Каждого СтрокаКУдалению Из МассивСтрокТЧУслуги Цикл
УдалитьСтрокиТЧСкидкиНаценки(СтрокаКУдалению);
Объект.Услуги.Удалить(СтрокаКУдалению);
КонецЦикла;
СтрокаТЧУслуги = Объект.Услуги.Добавить();
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаТЧУслуги, СтрокаУслуг);
Если ЗначениеЗаполнено(СтрокаТЧУслуги.КлючСвязи) Тогда
СтруктураПоискаСкидки.КлючСвязи = СтрокаТЧУслуги.КлючСвязи;
Для Каждого СтрокаСкидки Из СтруктураТаблиц.СкидкиНаценки.НайтиСтроки(СтруктураПоискаСкидки) Цикл
ЗаполнитьЗначенияСвойств(Объект.СкидкиНаценки.Добавить(), СтрокаСкидки);
КонецЦикла;
КонецЕсли;
КонецЦикла;
Объект.СкидкиРассчитаны = Ложь;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ОбновитьИнформациюПоЗаказам();
ВзаиморасчетыСервер.ПриИзмененииПараметровМеханизма(ЭтотОбъект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "АктПоЗаказам");
КонецПроцедуры
&НаСервере
Функция ПривязатьСтрокиАктовВыполненныхРаботКЗаказамКлиентов(ОтобратьПоЗаказу)
Если (Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыКлиентов")
И Не ПолучитьФункциональнуюОпцию("ИспользоватьЗаявкиНаВозвратТоваровОтКлиентов")) Или
(Не ПолучитьФункциональнуюОпцию("ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам")
И Не ЗначениеЗаполнено(Объект.ЗаказКлиента)) Тогда
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос("ВЫБРАТЬ
| Услуги.Номенклатура КАК Номенклатура,
| Услуги.Характеристика КАК Характеристика
|ПОМЕСТИТЬ Услуги
|ИЗ
| &Услуги КАК Услуги
|;
|
|
|ВЫБРАТЬ
| ТаблицаЗаказы.ЗаказКлиента.Сделка КАК Сделка,
| ТаблицаЗаказы.ЗаказКлиента КАК ЗаказКлиента,
| ТаблицаЗаказы.ПорядокРасчетов КАК ПорядокРасчетов,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.КодСтроки КАК КодСтроки,
| СУММА(ТаблицаЗаказы.КОформлению) КАК КОформлениюОстаток
|ПОМЕСТИТЬ ЗаказыКлиентов
|ИЗ
| (ВЫБРАТЬ
| РаспоряженияОбороты.Распоряжение КАК ЗаказКлиента,
| РаспоряженияОбороты.Распоряжение.ПорядокРасчетов КАК ПорядокРасчетов,
| РаспоряженияОбороты.Номенклатура КАК Номенклатура,
| РаспоряженияОбороты.Характеристика КАК Характеристика,
| РаспоряженияОбороты.КодСтроки КАК КодСтроки,
| (РаспоряженияОбороты.КОформлениюКоличествоОборот -
| РаспоряженияОбороты.ОформленоКоличествоОборот) КАК КОформлению
| ИЗ
| #РаспоряженияНаОтгрузкуОборотыРазвернутая КАК РаспоряженияОбороты
| ГДЕ
| (РаспоряженияОбороты.КОформлениюКоличествоОборот -
| РаспоряженияОбороты.ОформленоКоличествоОборот) <> 0
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| РаспоряженияДвижения.Распоряжение,
| РаспоряженияДвижения.Распоряжение.ПорядокРасчетов,
| РаспоряженияДвижения.Номенклатура,
| РаспоряженияДвижения.Характеристика,
| РаспоряженияДвижения.КодСтроки,
| РаспоряженияДвижения.ОформленоКоличество
| ИЗ
| #РаспоряженияНаОтгрузкуДвиженияРазвернутая КАК РаспоряженияДвижения) КАК ТаблицаЗаказы
|СГРУППИРОВАТЬ ПО
| ТаблицаЗаказы.ЗаказКлиента,
| ТаблицаЗаказы.ПорядокРасчетов,
| ТаблицаЗаказы.Номенклатура,
| ТаблицаЗаказы.Характеристика,
| ТаблицаЗаказы.КодСтроки
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаЗаказы.КОформлению) > 0
|;
|
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоДублей,
| ЗаказыКлиентов.Номенклатура КАК Номенклатура,
| ЗаказыКлиентов.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ДублиУслуг
|ИЗ
| ЗаказыКлиентов КАК ЗаказыКлиентов
|
|СГРУППИРОВАТЬ ПО
| ЗаказыКлиентов.Номенклатура,
| ЗаказыКлиентов.Характеристика
|;
|
|
|ВЫБРАТЬ
| ЗаказыКлиентов.ЗаказКлиента КАК ЗаказКлиента,
| ЗаказыКлиентов.ПорядокРасчетов КАК ПорядокРасчетов,
| ЗаказыКлиентов.Номенклатура КАК Номенклатура,
| ЗаказыКлиентов.Характеристика КАК Характеристика,
| ЗаказыКлиентов.КодСтроки КАК КодСтроки,
| ВЫБОР
| КОГДА ЗаказКлиентаТовары.Обособленно
| ТОГДА ЗаказыКлиентов.ЗаказКлиента.Назначение
| ИНАЧЕ Значение(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК Назначение,
| ЗаказыКлиентов.КОформлениюОстаток КАК КОформлениюОстаток,
| ЗаказКлиентаТовары.ВидЦены КАК ВидЦены,
| ЗаказКлиентаТовары.Цена КАК Цена,
| ЗаказКлиентаТовары.ПроцентРучнойСкидки КАК ПроцентРучнойСкидки,
| ЗаказКлиентаТовары.СтавкаНДС КАК СтавкаНДС,
| 0 КАК Распределено,
| ДублиУслуг.КоличествоДублей КАК КоличествоДублей
|ИЗ
| ЗаказыКлиентов КАК ЗаказыКлиентов
| ЛЕВОЕ СОЕДИНЕНИЕ ДублиУслуг КАК ДублиУслуг
| ПО ЗаказыКлиентов.Номенклатура = ДублиУслуг.Номенклатура
| И ЗаказыКлиентов.Характеристика = ДублиУслуг.Характеристика
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
| ПО (ЗаказКлиентаТовары.Ссылка = ЗаказыКлиентов.ЗаказКлиента)
| И (ЗаказКлиентаТовары.КодСтроки = ЗаказыКлиентов.КодСтроки)
|
|УПОРЯДОЧИТЬ ПО
| ЗаказКлиентаТовары.Номенклатура,
| ЗаказКлиентаТовары.Характеристика,
| ЗаказКлиентаТовары.ДатаОтгрузки,
| ЗаказКлиентаТовары.Ссылка,
| ЗаказКлиентаТовары.НомерСтроки");
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"Регистратор = &Регистратор
| И ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА Распоряжение = &ЗаказКлиента
| ИНАЧЕ Распоряжение.Партнер = &Партнер
| И Распоряжение.Контрагент = &Контрагент
| И Распоряжение.Договор = &Договор
| И Распоряжение.Организация = &Организация
| И Распоряжение.ХозяйственнаяОперация В
| (ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратТоваровОтКлиента))
| И Распоряжение.Соглашение = &Соглашение
| И Распоряжение.Сделка = &Сделка
| И Распоряжение.Валюта = &ВалютаВзаиморасчетов
| И ВЫБОР
| КОГДА Распоряжение.НалогообложениеНДС В (ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ЭкспортСырьевыхТоваровУслуг), ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ЭкспортНесырьевыхТоваров))
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаНаЭкспорт)
| ИНАЧЕ Распоряжение.НалогообложениеНДС
| КОНЕЦ = &НалогообложениеНДС
| И Распоряжение.ЦенаВключаетНДС = &ЦенаВключаетНДС
| И Распоряжение.НаправлениеДеятельности = &НаправлениеДеятельности
| КОНЕЦ
| И Активность
| И Номенклатура.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.АктВыполненныхРабот)
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| Услуги.Номенклатура КАК Номенклатура,
| Услуги.Характеристика КАК Характеристика
| ИЗ
| Услуги КАК Услуги)
| ";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение, Номенклатура, Характеристика, КодСтроки";
ПараметрыФормированияТаблицы.Показатели = "КОформлению, Оформлено";
ПараметрыФормированияТаблицы.Ресурсы = "Количество";
ПараметрыФормированияТаблицы.ФизическаяТаблица = Истина;
РаспоряженияНаОтгрузкуДвиженияРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"#РаспоряженияНаОтгрузкуДвиженияРазвернутая",
РаспоряженияНаОтгрузкуДвиженияРазвернутая);
ПараметрыФормированияТаблицы = РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.НовыйПараметрыФормированияРазвернутойТаблицы();
ПараметрыФормированияТаблицы.ТекстУсловия =
"ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА Распоряжение = &ЗаказКлиента
| ИНАЧЕ Распоряжение.Партнер = &Партнер
| И Распоряжение.Контрагент = &Контрагент
| И Распоряжение.Договор = &Договор
| И Распоряжение.Организация = &Организация
| И Распоряжение.ХозяйственнаяОперация В
| (ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.РеализацияКлиенту),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратОтРозничногоПокупателя),
| ЗНАЧЕНИЕ(Перечисление.ХозяйственныеОперации.ВозвратТоваровОтКлиента))
| И Распоряжение.Соглашение = &Соглашение
| И Распоряжение.Сделка = &Сделка
| И Распоряжение.Валюта = &ВалютаВзаиморасчетов
| И ВЫБОР
| КОГДА Распоряжение.НалогообложениеНДС В (ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ЭкспортСырьевыхТоваровУслуг), ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ЭкспортНесырьевыхТоваров))
| ТОГДА ЗНАЧЕНИЕ(Перечисление.ТипыНалогообложенияНДС.ПродажаНаЭкспорт)
| ИНАЧЕ Распоряжение.НалогообложениеНДС
| КОНЕЦ = &НалогообложениеНДС
| И Распоряжение.ЦенаВключаетНДС = &ЦенаВключаетНДС
| И Распоряжение.НаправлениеДеятельности = &НаправлениеДеятельности
| КОНЕЦ
| И Номенклатура.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.АктВыполненныхРабот)
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| Услуги.Номенклатура КАК Номенклатура,
| Услуги.Характеристика КАК Характеристика
| ИЗ
| Услуги КАК Услуги)";
ПараметрыФормированияТаблицы.Группировка = "Распоряжение, Номенклатура, Характеристика, КодСтроки";
ПараметрыФормированияТаблицы.Показатели = "КОформлению, Оформлено";
ПараметрыФормированияТаблицы.Ресурсы = "Количество";
РаспоряженияНаОтгрузкуОборотыРазвернутая =
РегистрыНакопления.РаспоряженияНаОтгрузкуИВозврат.ТекстЗапросаРазвернутаяТаблица(
ПараметрыФормированияТаблицы);
Запрос.Текст = СтрЗаменить(Запрос.Текст,
"#РаспоряженияНаОтгрузкуОборотыРазвернутая",
РаспоряженияНаОтгрузкуОборотыРазвернутая);
Запрос.УстановитьПараметр("ЗаказКлиента", Объект.ЗаказКлиента);
Запрос.УстановитьПараметр("Партнер", Объект.Партнер);
Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
Запрос.УстановитьПараметр("Договор", Объект.Договор);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Запрос.УстановитьПараметр("Сделка", Объект.Сделка);
Запрос.УстановитьПараметр("Соглашение", Объект.Соглашение);
Запрос.УстановитьПараметр("ВалютаВзаиморасчетов", Объект.ВалютаВзаиморасчетов);
Запрос.УстановитьПараметр("НалогообложениеНДС", Объект.НалогообложениеНДС);
Запрос.УстановитьПараметр("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
Запрос.УстановитьПараметр("Регистратор", Объект.Ссылка);
Запрос.УстановитьПараметр("ОтобратьПоЗаказу", ОтобратьПоЗаказу);
Запрос.УстановитьПараметр("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
Запрос.УстановитьПараметр("Услуги", Объект.Услуги.Выгрузить(,"КодСтроки,Номенклатура,Характеристика,ЗаказКлиента"));
УстановитьПривилегированныйРежим(Истина);
РезультатЗапроса = Запрос.ВыполнитьПакет();
Если РезультатЗапроса[1].Пустой() Тогда
Возврат Ложь;
КонецЕсли;
Выборка = РезультатЗапроса[3].Выбрать();
МассивПорядковРасчетов = Новый Массив();
Пока Выборка.Следующий() Цикл
Если ЗначениеЗаполнено(Выборка.ПорядокРасчетов)
И МассивПорядковРасчетов.Найти(Выборка.ПорядокРасчетов) = Неопределено Тогда
МассивПорядковРасчетов.Добавить(Выборка.ПорядокРасчетов);
КонецЕсли;
КонецЦикла;
Если МассивПорядковРасчетов.Количество() > 1 Тогда
ОбщегоНазначения.СообщитьПользователю(НСтр("ru='У найденных заказов отличается поле ""Порядок расчетов""'"));
Возврат Ложь;
КонецЕсли;
Выборка.Сбросить();
ТаблицаНераспределенныхУслуг = Новый ТаблицаЗначений();
ТаблицаНераспределенныхУслуг.Колонки.Добавить("Номенклатура");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("Характеристика");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("ЗаказКлиента");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("КодСтроки");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("Количество");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("ВидЦены");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("Цена");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("ПроцентРучнойСкидки");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("СтавкаНДС");
ТаблицаНераспределенныхУслуг.Колонки.Добавить("Назначение");
Пока Выборка.Следующий() Цикл
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("Номенклатура", Выборка.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", Выборка.Характеристика);
СтруктураПоиска.Вставить("ВидЦены", Выборка.ВидЦены);
СтруктураПоиска.Вставить("Цена", Выборка.Цена);
СтруктураПоиска.Вставить("ПроцентРучнойСкидки", Выборка.ПроцентРучнойСкидки);
СтруктураПоиска.Вставить("СтавкаНДС", Выборка.СтавкаНДС);
СтруктураПоиска.Вставить("КодСтроки", 0);
НайденныеСтроки = Объект.Услуги.НайтиСтроки(СтруктураПоиска);
НераспределенноеКоличество = Выборка.КОформлениюОстаток;
Если Выборка.КоличествоДублей < 2 Тогда
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
ТекСтрока.КодСтроки = Выборка.КодСтроки;
ТекСтрока.ЗаказКлиента = Выборка.ЗаказКлиента;
НераспределенноеКоличество = НераспределенноеКоличество - ТекСтрока.Количество;
Если НераспределенноеКоличество <= 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
НайденаПодходящаяСтрока = Ложь;
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Количество = Выборка.КОформлениюОстаток Тогда
НайденаПодходящаяСтрока = Истина;
ЗаполнитьЗначенияСвойств(ТекСтрока, Выборка, "КодСтроки,ЗаказКлиента,Назначение");
Прервать;
КонецЕсли;
КонецЦикла;
Если Не НайденаПодходящаяСтрока Тогда
НоваяСтрока = ТаблицаНераспределенныхУслуг.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.Количество = НераспределенноеКоличество;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТаблицаНераспределенныхУслуг.Количество() > 0 Тогда
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("КодСтроки", 0);
СтруктураПоиска.Вставить("ЗаказКлиента", Неопределено);
СтрокиУслуги = Объект.Услуги.НайтиСтроки(СтруктураПоиска);
Для Каждого СтрокаУслуги Из СтрокиУслуги Цикл
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("Номенклатура", СтрокаУслуги.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", СтрокаУслуги.Характеристика);
СтруктураПоиска.Вставить("ВидЦены", СтрокаУслуги.ВидЦены);
СтруктураПоиска.Вставить("Цена", СтрокаУслуги.Цена);
СтруктураПоиска.Вставить("ПроцентРучнойСкидки", СтрокаУслуги.ПроцентРучнойСкидки);
СтруктураПоиска.Вставить("СтавкаНДС", СтрокаУслуги.СтавкаНДС);
НайденныеСтроки = ТаблицаНераспределенныхУслуг.НайтиСтроки(СтруктураПоиска);
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Номенклатура = СтрокаУслуги.Номенклатура И
ТекСтрока.Характеристика = СтрокаУслуги.Характеристика И
ТекСтрока.ВидЦены = СтрокаУслуги.ВидЦены И
ТекСтрока.Цена = СтрокаУслуги.Цена И
ТекСтрока.ПроцентРучнойСкидки = СтрокаУслуги.ПроцентРучнойСкидки И
ТекСтрока.СтавкаНДС = СтрокаУслуги.СтавкаНДС И
ТекСтрока.Количество > 0 Тогда
ЗаполнитьЗначенияСвойств(СтрокаУслуги, ТекСтрока, "КодСтроки,ЗаказКлиента,Назначение");
ТекСтрока.Количество = ТекСтрока.Количество - СтрокаУслуги.Количество;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
МассивУдаляемыхСтрок = Новый Массив();
Для Каждого ТекСтрока Из Объект.Услуги Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.КодСтроки)
Или Не ЗначениеЗаполнено(ТекСтрока.ЗаказКлиента) Тогда
МассивУдаляемыхСтрок.Добавить(ТекСтрока);
КонецЕсли;
КонецЦикла;
Для Каждого ТекЭлемент Из МассивУдаляемыхСтрок Цикл
Объект.Услуги.Удалить(ТекЭлемент);
КонецЦикла;
Для Каждого ТекСтрока Из Объект.Услуги Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.КодСтроки) Тогда
ТекСтрока.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецФункции
&НаСервере
Процедура ОтвязатьСтрокиОтЗаказовКлиентов()
Для Каждого ТекСтрока Из Объект.Услуги Цикл
ТекСтрока.КодСтроки = 0;
ТекСтрока.ЗаказКлиента = Неопределено;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УслугиПослеУдаленияСервер()
ОбновитьИнформациюПоЗаказам();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Контрагент)
Возврат ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент);
КонецФункции
&НаСервере
Функция АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(ТолькоВыделенныеСтроки)
СтруктураПараметров = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыАдресДанныхДляРасчетаРучныхСкидок();
СтруктураПараметров.ИмяТаблицы = "Услуги";
СтруктураПараметров.ТолькоДляВыделенныхСтрок = ТолькоВыделенныеСтроки;
Возврат СкидкиНаценкиЗаполнениеСервер.АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(
ЭтаФорма, УникальныйИдентификатор, СтруктураПараметров);
КонецФункции
&НаСервереБезКонтекста
Процедура ПроверитьНаличиеКорректировок(Ссылка, ЕстьКорректировки) Экспорт
ПродажиСервер.ПроверитьНаличиеКорректировок(Ссылка, Ссылка, ЕстьКорректировки)
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЕстьПравоДобавленияКорректировок()
Возврат ПравоДоступа("Добавление", Метаданные.Документы.КорректировкаРеализации);
КонецФункции
&НаСервере
Процедура ЗаполнитьУсловияПродаж(МассивРеквизитов)
ДокументПродажи = РеквизитФормыВЗначение("Объект");
ДокументПродажи.ЗаполнитьУсловияПродажПоУмолчанию();
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(ДокументПродажи.Соглашение) Тогда
ВалютаДокумента = Объект.Валюта;
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецЕсли;
ЗначениеВРеквизитФормы(ДокументПродажи, "Объект");
Если ВалютаДокумента <> Объект.Валюта Тогда
МассивРеквизитов.Добавить("Валюта");
КонецЕсли;
ВалютаДокумента = Объект.Валюта;
Если ВалютаВзаиморасчетов <> Объект.ВалютаВзаиморасчетов Тогда
МассивРеквизитов.Добавить("ВалютаВзаиморасчетов");
КонецЕсли;
ВалютаВзаиморасчетов = Объект.Валюта;
ЗаполнитьДоговорПоУмолчанию();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЗапретаОтгрузкиПартнеру()
СегментыСервер.УстановитьВидимостьЗапретаОтгрузкиПартнеру(Объект.Партнер, Элементы);
КонецПроцедуры
&НаСервере
Процедура ПолучитьЗагруженныеТоварыИзХранилища(АдресТоваровВХранилище)
УслугиИзХранилища = ПолучитьИзВременногоХранилища(АдресТоваровВХранилище);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьСодержание", ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Истина));
ДобавитьВСтруктуруДействияПриИзмененииКоличества(СтруктураДействий,Объект);
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначенияУслуг();
ОбрабатываемыеСтроки = Новый Массив();
Для Каждого СтрокаУслуга Из УслугиИзХранилища Цикл
СтрокаТЧУслуги = Объект.Услуги.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧУслуги, СтрокаУслуга,, "КодСтроки");
ОбрабатываемыеСтроки.Добавить(СтрокаТЧУслуги);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Услуги,
КэшированныеЗначения);
РассчитатьИтоговыеПоказателиАктовВыполненныхРабот(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбновитьТекстСчетаФактурыВыданные()
ПараметрыРегистрации = ПараметрыРегистрацииСчетовФактурВыданныхСервер(Объект);
СчетаФактурыВыданныеНаОсновании = УчетНДСУП.СчетаФактурыВыданныеНаОсновании(ПараметрыРегистрации);
ТекстСчетаФактурыВыданные = ПродажиСервер.СформироватьПредставлениеКомандФормированияСчетаФактурыНаОсновании(Объект.Ссылка, СчетаФактурыВыданныеНаОсновании);
ФормированиеФискальныхЧековСервер.ОбновитьГиперссылкуПробитияФискальногоЧека(Объект.Ссылка, ЭтотОбъект, ТекстСчетаФактурыВыданные);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНалогообложениеНДСПродажи()
ПараметрыЗаполнения = Документы.АктВыполненныхРабот.ПараметрыЗаполненияНалогообложенияНДСПродажи(Объект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(Объект.НалогообложениеНДС, ПараметрыЗаполнения, УчетНДСКэшированныеЗначенияПараметров);
УчетНДСУП.ЗаполнитьСписокВыбораНалогообложенияНДСПродажи(Элементы.НалогообложениеНДС, Объект.НалогообложениеНДС, ПараметрыЗаполнения, УчетНДСКэшированныеЗначенияПараметров);
КонецПроцедуры
&НаСервере
Процедура ОбновитьПризнакЕстьКорректировки();
ПроверитьНаличиеКорректировок(Объект.Ссылка, ЕстьКорректировки);
КонецПроцедуры
&НаСервере
Процедура Запись_КорректировкаРеализацииНаСервере()
ОбновитьТекстСчетаФактурыВыданные();
ОбновитьПризнакЕстьКорректировки();
ВзаиморасчетыСервер.ПриИзмененииПараметровМеханизма(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПодразделение(Команда)
СкладыКлиент.ЗаполнитьПодразделениеВТабличнойЧасти(Объект, ЭтаФорма, Объект.Услуги, "Услуги",
Элементы.Услуги.ВыделенныеСтроки);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности()
Элементы.ГруппаТоварыБонусныеБаллы.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
Элементы.ТоварыСуммаБонусныхБалловКСписаниюВВалюте.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
Элементы.ТоварыСуммаНачисленныхБонусныхБалловВВалюте.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
КонецПроцедуры
&НаСервере
Функция АдресТабличнойЧастиУслуги()
Если ИспользоватьРасширенныеВозможностиЗаказаКлиента Тогда
МассивСтрок = Новый Массив();
Для Каждого Строка Из Объект.Услуги Цикл
Если Не Строка.КодСтроки = 0 Тогда
Продолжить;
КонецЕсли;
МассивСтрок.Добавить(Строка);
КонецЦикла;
ТаблицаУслуги = Объект.Услуги.Выгрузить(МассивСтрок);
Иначе
ТаблицаУслуги = Объект.Услуги.Выгрузить();
КонецЕсли;
ТаблицаУслуги.Колонки.Количество.Имя = "КоличествоУпаковок";
Возврат ПоместитьВоВременноеХранилище(ТаблицаУслуги, УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция ПоместитьТоварыИВидыЗапасовВХранилище()
ПараметрыРедактированияВидовЗапасов = ЗапасыСервер.ПараметрыРедактированияВидовЗапасов();
ПараметрыРедактированияВидовЗапасов.ИмяТЧТовары = "Услуги";
Возврат ЗапасыСервер.ПоместитьТоварыИВидыЗапасовВХранилище(ЭтотОбъект, ПараметрыРедактированияВидовЗапасов);
КонецФункции
&НаСервере
Процедура ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение)
ЗапасыСервер.ОбработатьВводВидовЗапасовВручную(ВыбранноеЗначение, ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область КонтрольНесогласованныхИзменений
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент)
Если Элемент.Имя = "Дата" Тогда
ДатаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "Партнер" Тогда
ПартнерПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "Соглашение" Тогда
СоглашениеПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "Договор" Тогда
ДоговорПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "ЦенаВключаетНДС" Тогда
ЦенаВключаетНДСПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "Организация" Тогда
ОрганизацияПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "Контрагент" Тогда
КонтрагентПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "НалогообложениеНДС" Тогда
НалогообложениеНДСПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "АктВыполненныхРаботПоЗаказу" Тогда
АктВыполненныхРаботПоЗаказамПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "АктВыполненныхРаботПоЗаказам" Тогда
АктВыполненныхРаботПоЗаказамПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиНоменклатура" Тогда
УслугиНоменклатураПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиХарактеристика" Тогда
УслугиХарактеристикаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиОбособленно" Тогда
УслугиОбособленноПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиКоличество" Тогда
УслугиКоличествоПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиВидЦены" Тогда
УслугиВидЦеныПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиЦена" Тогда
УслугиЦенаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиПроцентРучнойСкидки" Тогда
УслугиПроцентРучнойСкидкиПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиСуммаРучнойСкидки" Тогда
УслугиСуммаРучнойСкидкиПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиСумма" Тогда
УслугиСуммаПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиСтавкаНДС" Тогда
УслугиСтавкаНДСПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиСуммаНДС" Тогда
УслугиСуммаНДСПриИзменении(Элемент);
ИначеЕсли Элемент.Имя = "УслугиНоменклатураПартнера" Тогда
УслугиНоменклатураПартнераПриИзменении(Элемент);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда)
Если Команда.Имя = "ПоискПоШтрихкоду" Тогда
ПоискПоШтрихкодуВыполнить(Команда);
ИначеЕсли Команда.Имя = "РазбитьСтроку" Тогда
РазбитьСтроку(Команда);
ИначеЕсли Команда.Имя = "ОткрытьПодбор" Тогда
ОткрытьПодбор(Команда);
ИначеЕсли Команда.Имя = "ЗагрузитьИзВнешнегоФайла" Тогда
ЗагрузитьИзВнешнегоФайла(Команда);
ИначеЕсли Команда.Имя = "НазначитьАвтоматическиеСкидки" Тогда
НазначитьАвтоматическиеСкидки(Команда);
ИначеЕсли Команда.Имя = "ЗаполнитьЦеныПоСоглашению" Тогда
ЗаполнитьЦеныПоСоглашению(Команда);
ИначеЕсли Команда.Имя = "ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен" Тогда
ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен(Команда);
ИначеЕсли Команда.Имя = "ОтменитьРучныеСкидки" Тогда
ОтменитьРучныеСкидки(Команда);
ИначеЕсли Команда.Имя = "НазначитьРучнуюСкидку" Тогда
НазначитьРучнуюСкидку(Команда);
ИначеЕсли Команда.Имя = "НазначитьРучнуюСкидкуВыделенныхСтрок" Тогда
НазначитьРучнуюСкидкуДляВыделенныхСтрок(Команда);
ИначеЕсли Команда.Имя = "ПодобратьУслугиИзЗаказа" Тогда
ПодобратьУслугиИзЗаказа(Команда);
ИначеЕсли Команда.Имя = "ЗаполнитьПоЗаказу" Тогда
ЗаполнитьПоЗаказу(Команда);
ИначеЕсли Команда.Имя = "РассчитатьСкидкиНаценки" Тогда
РассчитатьСкидкиНаценки(Команда);
ИначеЕсли Команда.Имя = "СчитатьКартуЛояльности" Тогда
СчитатьКартуЛояльности(Команда);
ИначеЕсли Команда.Имя = "УстановитьОтметкуОбособленно" Тогда
УстановитьОтметкуОбособленно(Команда);
ИначеЕсли Команда.Имя = "СнятьОтметкуОбособленно" Тогда
СнятьОтметкуОбособленно(Команда);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Команда);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ)
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ)
Если Элемент.Имя = "Услуги" Тогда
УслугиПередУдалением(Элемент, Отказ);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если Элемент.Имя = "Услуги" Тогда
УслугиПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа);
Иначе
ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ВыполнитьПроверкиПередИзменениемСтатуса()
РеквизитМожноИзменить = Ложь;
ДополнительныеПараметры = Новый Структура;
Оповещение = Новый ОписаниеОповещения(
"РезультатВопросаЗавершение", ЭтотОбъект, ДополнительныеПараметры);
Если СтруктураДействийКонтрольНеСогласованныхИзменений = Неопределено
Или СтруктураДействийКонтрольНеСогласованныхИзменений.ОжидаетсяОповещение Тогда
ВыполнитьОбработкуОповещения(Оповещение, "ИзменитьРеквизит");
РеквизитМожноИзменить = Истина;
КонецЕсли;
ОчиститьСообщения();
ПроверитьНаличиеКорректировок(Объект.Ссылка, ЕстьКорректировки);
Если НЕ ЕстьПравоДобавленияКорректировок()
И ЕстьКорректировки
И ИспользоватьКорректировкиРеализаций Тогда
ТекстСообщения = НСтр("ru='На основании документа введена корректировка реализации.
|Недостаточно прав для создания корректировки реализации.'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
ВыполнитьОбработкуОповещения(Оповещение, "ОтменитьИзменения");
ИначеЕсли ЕстьКорректировки И ИспользоватьКорректировкиРеализаций Тогда
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("ВвестиКорректировку", НСтр("ru='Ввести корректировку'"));
СписокКнопок.Добавить("ОтменитьИзменения", НСтр("ru='Отмена'"));
ПоказатьВопрос(
Оповещение,
НСтр("ru='На основании документа введена корректировка реализации.
|Изменение исходного документа запрещено.'"),
СписокКнопок,
,
"ВвестиКорректировку");
Иначе
ВыполнитьОбработкуОповещения(Оповещение, "ИзменитьРеквизит");
РеквизитМожноИзменить = Истина;
КонецЕсли;
Возврат РеквизитМожноИзменить;
КонецФункции
&НаКлиенте
Процедура РезультатВопросаЗавершение(КодОтвета, ДополнительныеПараметры) Экспорт
Если КодОтвета = "ВвестиКорректировку" Тогда
ОткрытьФорму("Документ.КорректировкаРеализации.ФормаОбъекта", Новый Структура("Основание", Объект.Ссылка));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзменении_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент)
Если Не ВыполнитьПроверкиПередИзменениемСтатуса() Тогда
ОбщегоНазначенияУТКлиент.ВернутьПредыдущееЗначениеРеквизита(ЭтаФорма, Элемент);
Возврат;
Иначе
ОбщегоНазначенияУТКлиент.СохранитьЗначениеРеквизита(ЭтаФорма, Элемент);
КонецЕсли;
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПриИзменении.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Нажатие_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент)
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.Нажатие.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_Команда_УстановитьДоступностьЭлементовПоСтатусуСервер(Команда)
Если Не ВыполнитьПроверкиПередИзменениемСтатуса() Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.Команды.Свойство(Команда.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередНачаломИзменения_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ)
Если СтруктураДействийКонтрольНеСогласованныхИзменений = Неопределено Тогда
Возврат;
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтруктураДействийКонтрольНеСогласованныхИзменений.ЗначенияРеквизитов[Элемент.Имя], Элемент.ТекущиеДанные);
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломИзменения.Свойство(Элемент.Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередУдалением_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ)
Если Не ВыполнитьПроверкиПередИзменениемСтатуса() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Имя = Элемент.Имя;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередУдалением.Свойство(Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПередНачаломДобавления_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ, Копирование, Родитель, Группа)
Если Не ВыполнитьПроверкиПередИзменениемСтатуса() Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда
Возврат;
КонецЕсли;
Имя = Элемент.Имя;
Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломДобавления.Свойство(Имя) Тогда
КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса()
УстановитьДоступностьЭлементовПоСтатусуСервер();
ОбщегоНазначенияУТКлиент.ПослеИзмененияРеквизитаЗависящегоОтСтатуса(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
#КонецОбласти
#Область РаботаСКонтрагентами
&НаКлиенте
Процедура Подключаемый_ПоказатьПредложениеИспользоватьПроверкуКонтрагентов()
ПроверкаКонтрагентовКлиент.ПредложитьВключитьПроверкуКонтрагентов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработатьРезультатПроверкиКонтрагентов()
ПроверкаКонтрагентовКлиент.ОбработатьРезультатПроверкиКонтрагентовВДокументе(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОтобразитьРезультатПроверкиКонтрагента() Экспорт
ПроверкаКонтрагентов.ОтобразитьРезультатПроверкиКонтрагентаВДокументе(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПроверитьКонтрагентовФоновоеЗадание(ПараметрыФоновогоЗадания) Экспорт
ПроверкаКонтрагентов.ПроверитьКонтрагентовВДокументеФоновоеЗадание(ЭтотОбъект, ПараметрыФоновогоЗадания);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКонтрагентов(Команда)
ПроверкаКонтрагентовКлиент.ПроверитьКонтрагентовВДокументеПоКнопке(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ФискальнаяОперация
&НаКлиенте
Процедура ФискальнаяОперацияОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылка, СтандартнаяОбработка)
Если "ПробитьЧек" = НавигационнаяСсылка Тогда
СтандартнаяОбработка = Ложь;
ФормированиеФискальныхЧековКлиент.ОтобразитьЧек(
ЭтотОбъект,
Новый ОписаниеОповещения("ФискальнаяОперацияЗавершение", ЭтотОбъект)
);
ИначеЕсли "ОткрытьЗаписьФискальнойОперации" = НавигационнаяСсылка Тогда
СтандартнаяОбработка = Ложь;
ПодключаемоеОборудованиеУТКлиент.ОткрытьЗаписьФискальнойОперации(ЭтотОбъект, Объект.Ссылка);
ИначеЕсли "НастроитьОборудование" = НавигационнаяСсылка Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФорму("Обработка.ПредпросмотрЧека.Форма.ОшибкаПодключенияККТ");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ФискальнаяОперацияЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОбновитьТекстСчетаФактурыВыданные();
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ОткрытьРеквизитыПечатиРеализации()
Попытка
ЗаблокироватьДанныеФормыДляРедактирования();
Исключение
ПоказатьПредупреждение(Неопределено, КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат;
КонецПопытки;
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("БанковскийСчетКонтрагента", Объект.БанковскийСчетКонтрагента);
СтруктураПараметров.Вставить("Договор", Объект.Договор);
СтруктураПараметров.Вставить("Основание", Объект.Основание);
СтруктураПараметров.Вставить("ОснованиеДата", Объект.ОснованиеДата);
СтруктураПараметров.Вставить("ОснованиеНомер", Объект.ОснованиеНомер);
СтруктураПараметров.Вставить("Партнер", Объект.Партнер);
СтруктураПараметров.Вставить("Контрагент", Объект.Контрагент);
СтруктураПараметров.Вставить("ТолькоПросмотр", ТолькоПросмотр);
СтруктураПараметров.Вставить("ТипОбъекта", "АктВыполненныхРабот");
СтруктураПараметров.Вставить("РеализацияПоЗаказам", Объект.АктПоЗаказам);
СтруктураПараметров.Вставить("БанковскийСчетОрганизации", Объект.БанковскийСчетОрганизации);
СтруктураПараметров.Вставить("БанковскийСчетОрганизацииПолучателя",Объект.БанковскийСчетОрганизации);
СтруктураПараметров.Вставить("Организация", Объект.Организация);
СтруктураПараметров.Вставить("Дата", Объект.Дата);
СтруктураПараметров.Вставить("Руководитель", Объект.Руководитель);
СтруктураПараметров.Вставить("ГлавныйБухгалтер", Объект.ГлавныйБухгалтер);
СтруктураПараметров.Вставить("ТаблицаОснованийДляПечати", ТаблицаОснованийДляПечати);
СтруктураПараметров.Вставить("КодСпециальныхОбстоятельств", Объект.КодСпециальныхОбстоятельств);
СтруктураПараметров.Вставить("АдресДоставки");
СтруктураПараметров.Вставить("БанковскийСчетГрузоотправителя");
СтруктураПараметров.Вставить("БанковскийСчетГрузополучателя");
СтруктураПараметров.Вставить("Грузоотправитель");
СтруктураПараметров.Вставить("Грузополучатель");
СтруктураПараметров.Вставить("ДоверенностьВыдана");
СтруктураПараметров.Вставить("ДоверенностьДата");
СтруктураПараметров.Вставить("ДоверенностьЛицо");
СтруктураПараметров.Вставить("ДоверенностьНомер");
СтруктураПараметров.Вставить("Отпустил");
СтруктураПараметров.Вставить("ОтпустилДолжность");
ОткрытьФорму("ОбщаяФорма.РеквизитыПечатиРеализации", СтруктураПараметров, ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОснованиеДляПечати()
Если Не ОснованиеИзменено Тогда
СтруктураОснования = Документы.АктВыполненныхРабот.СтруктураОснованияДляПечати(Объект);
ЗаполнитьЗначенияСвойств(Объект, СтруктураОснования);
КонецЕсли;
ТаблицаОснованийДляПечати.Загрузить(Документы.АктВыполненныхРабот.ТаблицаОснованийДляПечати(Объект));
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьПоляПартнер(Форма)
ВидимостьКЛ = Форма.Элементы.СчитатьКартуЛояльностиКлиент.Видимость;
Если ВидимостьКЛ Тогда
ВидимостьКЛ = ИспользоватьКартыЛояльности();
КонецЕсли;
Форма.Элементы.ПартнерБезКЛ.Видимость = НЕ ВидимостьКЛ;
Форма.Элементы.Партнер.Видимость = ВидимостьКЛ;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИспользоватьКартыЛояльности()
Возврат ПолучитьФункциональнуюОпцию("ИспользоватьКартыЛояльности");
КонецФункции
&НаСервере
Процедура ПоместитьРасшифровкуПлатежаВоВременноеХранилище()
ВзаиморасчетыСервер.ПоместитьРасшифровкуПлатежаВоВременноеХранилище(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаКлиентеСервер()
ВзаиморасчетыВызовСервера.ФормаПередЗаписьюНаКлиентеСервер(ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ИспользоватьРасширенныеВозможностиЗаказаКлиента()
Если СписокЗаказов.Количество() = 0 Тогда
Возврат ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента");
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Т.ЭтоЗаказКакСчет КАК ЭтоЗаказКакСчет
|ИЗ
| (ВЫБРАТЬ
| Документ.ЭтоЗаказКакСчет КАК ЭтоЗаказКакСчет
| ИЗ
| Документ.ЗаказКлиента КАК Документ
| ГДЕ
| Документ.Ссылка В(&Ссылка)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Документ.ЭтоЗаказКакСчет
| ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК Документ
| ГДЕ
| Документ.Ссылка В(&Ссылка)) КАК Т
|
|СГРУППИРОВАТЬ ПО
| Т.ЭтоЗаказКакСчет";
Запрос.УстановитьПараметр("Ссылка", СписокЗаказов);
Выгрузка = Запрос.Выполнить().Выгрузить();
Если Выгрузка.Количество() = 1 Тогда
Возврат Не Выгрузка[0].ЭтоЗаказКакСчет;
Иначе
Возврат ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента");
КонецЕсли;
КонецФункции
#КонецОбласти