&НаКлиенте Перем КэшированныеЗначения; //используется механизмом обработки изменения реквизитов ТЧ &НаКлиенте Перем ТекущиеДанныеИдентификатор; //используется для передачи текущей строки в обработчик ожидания #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); // Обработчик механизма "ВерсионированиеОбъектов" ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтаФорма); // Обработчик подсистемы "Внешние обработки" ДополнительныеОтчетыИОбработки.ПриСозданииНаСервере(ЭтаФорма); // Обработчик механизма "Свойства" ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Объект", Объект); ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры); ИспользоватьПодразделения = ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения"); ИспользоватьРучныеСкидкиВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах"); ИспользоватьАвтоматическиеСкидкиВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах"); ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма); ИспользоватьОграниченияРучныхСкидок = ПолучитьФункциональнуюОпцию("ИспользоватьОграниченияРучныхСкидокВПродажахПоПользователям") Или ПолучитьФункциональнуюОпцию("ИспользоватьОграниченияРучныхСкидокВПродажахПоСоглашениям"); ИспользоватьПричиныОтменыЗаказовКлиентов = ПолучитьФункциональнуюОпцию("ИспользоватьПричиныОтменыЗаказовКлиентов"); ПараметрыВыбораРеквизитов = ЭтапыОплатыСервер.ПараметрыВыбораРеквизитовОплаты(Метаданные.Документы.ЗаказКлиента); Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда ПриЧтенииСозданииНаСервере(); НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); Если ЗначениеЗаполнено(Объект.Партнер) Тогда ЗаполнитьУстановитьРеквизитыДоставкиСервер("Партнер"); КонецЕсли; КонецЕсли; Если ТекущийВариантИнтерфейсаКлиентскогоПриложения() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда Элементы.ГруппаИтого.ЦветФона = Новый Цвет(); КонецЕсли; ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ДокументОснование", "Видимость", ЗначениеЗаполнено(Объект.ДокументОснование)); ПродажиСервер.УстановитьОтметкуНезаполненногоДоговора(Элементы, "Договор"); ПродажиСервер.УстановитьРежимВыбораГруппЭлементовСклада(Элементы.Склад); ПравоНаЧтениеВидаЦены = ПравоДоступа("Просмотр", Метаданные.Документы.ЗаказКлиента.ТабличныеЧасти.Товары.Реквизиты.ВидЦены); НаправлениеДеятельностиОбязательно = НаправленияДеятельностиСервер.УказаниеНаправленияДеятельностиОбязательно(Объект.ХозяйственнаяОперация); СкидкиНаценкиСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения); Элементы.ДекорацияДатаОтгрузки.Видимость = НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента") И Объект.НеОтгружатьЧастями; Элементы.ТоварыГруппаОтмена.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьПричиныОтменыЗаказовКлиентов"); Элементы.ТоварыОтмененоПричиныОтменыНеИспользуются.Видимость = Не ПолучитьФункциональнуюОпцию("ИспользоватьПричиныОтменыЗаказовКлиентов"); Перечисления.СтатусыЗаказовКлиентов.ЗаполнитьСписокВыбора(Элементы.Статус.СписокВыбора, Объект.Статус); Элементы.ЗакрытьЗаказ.Доступность = ПравоДоступа("Изменение",Метаданные.Документы.ЗаказКлиента); УстановитьДоступностьКомандБуфераОбмена(); ДоставкаТоваровКлиентСервер.ЗаполнитьСписокВыбораПоляВремени(Элементы.ВремяДоставкиС); ДоставкаТоваровКлиентСервер.ЗаполнитьСписокВыбораПоляВремени(Элементы.ВремяДоставкиПо); ДоставкаТоваровКлиентСервер.ЗаполнитьСписокВыбораПоляВремени(Элементы.ВремяДоставкиС1); ДоставкаТоваровКлиентСервер.ЗаполнитьСписокВыбораПоляВремени(Элементы.ВремяДоставкиПо1); // СтандартныеПодсистемы.Печать УправлениеПечатью.ПриСозданииНаСервере(ЭтаФорма, Элементы.ПодменюПечать); // Конец СтандартныеПодсистемы.Печать ВводНаОсновании.ПриСозданииНаСервере(ЭтаФорма, Элементы.ПодменюСоздатьНаОсновании); МенюОтчеты.ПриСозданииНаСервере(ЭтаФорма, Элементы.ПодменюОтчеты); // ИнтеграцияС1СДокументооборотом ИнтеграцияС1СДокументооборот.ПриСозданииНаСервере(ЭтаФорма); // Конец ИнтеграцияС1СДокументооборотом // Подсистема "ОбменСКонтрагентами". ПараметрыЭДОПриСоздании= ОбменСКонтрагентами.ПараметрыПриСозданииНаСервере_ФормаДокумента(); ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект; ПараметрыЭДОПриСоздании.ДокументССылка = Объект.Ссылка; ПараметрыЭДОПриСоздании.ДекорацияСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО; ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО; ОбменСКонтрагентами.ПриСозданииНаСервере_ФормаДокумента(Отказ, СтандартнаяОбработка, ПараметрыЭДОПриСоздании); // Конец подсистема "ОбменСКонтрагентами". // ИнтернетПоддержкаПользователей.СПАРКРиски, ПриСозданииНаСервере. ПараметрыПроцедуры = Новый Структура("ВариантОтображения", "Однострочный"); СПАРКРиски.ПриСозданииНаСервере( ЭтотОбъект, Неопределено, Объект.Контрагент, ПараметрыПроцедуры); // Конец ИнтернетПоддержкаПользователей.СПАРКРиски, ПриСозданииНаСервере. СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка); //{{Доработка Если УТ_ДоработкиСервер.ЭтоРозничныйПродавец(ПараметрыСеанса.ТекущийПользователь) И Не ЗначениеЗаполнено(Объект.Ссылка) Тогда Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован; Объект.УТ_ВидПродажи = Перечисления.УТ_ЗаказКлиентаВидПродажи.Розница; Объект.УТ_ФормаОплаты = Перечисления.УТ_ФормыОплат.Безнал; Объект.ФормаОплаты = Перечисления.ФормыОплаты.Безналичная; УстановитьСоглашениеРозница(); КонецЕсли; //}}Доработка КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ПриЧтенииСозданииНаСервере(); УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); МодификацияКонфигурацииПереопределяемый.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект); КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если НеВыполнятьПроверкуПередЗаписью Тогда НеВыполнятьПроверкуПередЗаписью = Ложь; Возврат; КонецЕсли; // Если документ проводится, проверим рассчитанность скидок и корректность графика оплаты по заказу Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи); Отказ = Истина; МногооборотнаяТараКлиент.ПредложитьПодобратьМногооборотнуюТару( ЭтаФорма, "Товары", "Номенклатура,Характеристика,Количество,Склад,ДатаОтгрузки", Новый ОписаниеОповещения("ПередЗаписьюПредложитьПодобратьМногооборотнуюТаруЗавершение", ЭтотОбъект, ДополнительныеПараметры)); Возврат; КонецЕсли; ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыЗаписи, Отказ); КонецПроцедуры &НаКлиенте Процедура ПередЗаписьюПредложитьПодобратьМногооборотнуюТаруЗавершение(Результат, ДополнительныеПараметры) Экспорт Отказ = Ложь; Если ИспользоватьАвтоматическиеСкидкиВПродажах И Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") Тогда Если Не Объект.СкидкиРассчитаны И СкидкиИзменились() Тогда ПрименитьИзмененияСкидокНаценокНаКлиенте(Отказ); Иначе Объект.СкидкиРассчитаны = Истина; КонецЕсли; КонецЕсли; Если Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") И Объект.ПорядокРасчетов <> ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоНакладным") И НЕ (ГрафикИсполненияВДоговоре И Объект.ПорядокРасчетов = ПредопределенноеЗначение("Перечисление.ПорядокРасчетов.ПоДоговорамКонтрагентов")) Тогда СуммаЭтаповОплаты = Объект.ЭтапыГрафикаОплаты.Итог("СуммаПлатежа"); СуммаЗалогаПоЭтапам = Объект.ЭтапыГрафикаОплаты.Итог("СуммаЗалогаЗаТару"); СуммаОтклоненияПоЭтапам = Объект.ЭтапыГрафикаОплаты.Итог("СуммаОтклоненияМерныхТоваров"); СуммаОтклоненияПоОплате = ?(СуммаЭтаповОплаты+СуммаЗалогаПоЭтапам = 0, 0, Окр(СуммаОтклоненияПоЭтапам * СуммаЭтаповОплаты /(СуммаЭтаповОплаты+СуммаЗалогаПоЭтапам),2)); КоличествоЭтапов = Объект.ЭтапыГрафикаОплаты.Количество(); Если СуммаЗаказано = 0 И СуммаЗалогаЗаТару = 0 И КоличествоЭтапов > 0 Тогда Объект.ЭтапыГрафикаОплаты.Очистить(); ИначеЕсли СуммаЗаказано - СуммаОтклоненияПоОплате <> СуммаЭтаповОплаты ИЛИ СуммаЗалогаЗаТару-(СуммаОтклоненияПоЭтапам - СуммаОтклоненияПоОплате) <> СуммаЗалогаПоЭтапам Тогда ГрафикСоглашенияЗаполнен = ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) И ПродажиВызовСервера.ГрафикСоглашенияЗаполнен(Объект.Соглашение); ГрафикЗаполнен = ИспользоватьГрафикиОплаты И ЗначениеЗаполнено(Объект.ГрафикОплаты); Если КоличествоЭтапов = 0 Тогда Если Не (ГрафикЗаполнен Или ГрафикСоглашенияЗаполнен) Тогда ЭтапыОплатыКлиентСервер.ДобавитьЭтапОплатыПоУмолчанию( Объект, ПредопределенноеЗначение("Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки"), Объект.ЖелаемаяДатаОтгрузки, СуммаЗаказано, СуммаЗалогаЗаТару); Иначе ЗаполнитьЭтапыОплатыСервер(ГрафикСоглашенияЗаполнен, ГрафикЗаполнен); КонецЕсли; Иначе //{{Доработка Если Не ЭтоРозничныйПродавецСервер() Тогда ЭтапыОплатыКлиентСервер.РаспределитьСуммуПоЭтапамГрафикаОплаты( Объект.ЭтапыГрафикаОплаты, СуммаЗаказано, СуммаЗалогаЗаТару); КонецЕсли; //}}Доработка КонецЕсли; ЭтапыОплатыКлиент.ОповеститьОбОкончанииЗаполненияЭтаповГрафикаОплаты(); КонецЕсли; НадписьЭтапыОплаты = ЭтапыОплатыКлиентСервер.НадписьЭтапыОплаты(ЭтаФорма, Истина); КонецЕсли; РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Если ЗначениеЗаполнено(Объект.ЖелаемаяДатаОтгрузки) Тогда МаксДатаАванса = ПродажиКлиент.МаксимальнаяДатаАванса(Объект.ЭтапыГрафикаОплаты); Если ЗначениеЗаполнено(МаксДатаАванса) И МаксДатаАванса > Объект.ЖелаемаяДатаОтгрузки Тогда Объект.ЖелаемаяДатаОтгрузки = МаксДатаАванса; ПродажиКлиент.ОповеститьОПерезаполненииЖелаемойДатыОтгрузки(); КонецЕсли; КонецЕсли; ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтаФорма, ДополнительныеПараметры.ПараметрыЗаписи, Отказ); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // Обработчик механизма "Свойства" УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи); КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) УстановитьДоступностьЭлементовПоСтатусуСервер(); ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ОбновитьДубликатыЗависимыхРеквизитов(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); // Подсистема "ОбменСКонтрагентами". ПараметрыПослеЗаписи = ОбменСКонтрагентами.ПараметрыПослеЗаписиНаСервере(); ПараметрыПослеЗаписи.Форма = ЭтотОбъект; ПараметрыПослеЗаписи.ДокументСсылка = Объект.Ссылка; ПараметрыПослеЗаписи.ДекорацияСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО; ПараметрыПослеЗаписи.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО; ОбменСКонтрагентами.ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи, ПараметрыПослеЗаписи); // Конец подсистема "ОбменСКонтрагентами". // ИнтернетПоддержкаПользователей.СПАРКРиски СПАРКРиски.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи); // Конец ИнтернетПоддержкаПользователей.СПАРКРиски ОбновитьСостояниеСервер(); //{{Доработка Если ЭтоРозничныйПродавецСервер() Тогда УстановитьСуммуОплаты(); КонецЕсли; //{{Доработка ОбновитьСостояниеЭлементовУправленияИтоговПоРасчетам(); ОбновитьОграничениеЗадолженности(); МодификацияКонфигурацииПереопределяемый.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ПараметрыЗаписи.Вставить("Сделка", Объект.Сделка); Оповестить("Запись_ЗаказКлиента", ПараметрыЗаписи, Объект.Ссылка); МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи); ОбщегоНазначенияУТКлиент.ВыполнитьДействияПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // Обработчик механизма "Свойства" Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // ПодключаемоеОборудование Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда Если ИмяСобытия = "ScanData" И МенеджерОборудованияКлиентПереопределяемый.ЕстьНеобработанноеСобытие() Тогда ОбработатьШтрихкоды(ПодключаемоеОборудованиеУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр)); КонецЕсли; КонецЕсли; // Конец ПодключаемоеОборудование // Неизвестные штрихкоды Если Источник = "ПодключаемоеОборудование" И ИмяСобытия = "НеизвестныеШтрихкоды" И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда КэшированныеЗначения.Штрихкоды.Очистить(); ДанныеШтрихкодов = Новый Массив; Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод); КонецЦикла; Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод); КонецЦикла; ОбработатьШтрихкоды(ДанныеШтрихкодов); КонецЕсли; Если (ИмяСобытия = "ЗачтенаОплата" И Параметр = Объект.Ссылка) Или ПродажиКлиент.ИзменилисьДокументыОплатыКлиентам(ИмяСобытия) Тогда ИзмененаОплатаСервер(); КонецЕсли; Если ИмяСобытия = "ОбновитьДокументИБПослеЗаполнения" И Параметр.Найти(Объект.Ссылка) <> Неопределено Тогда ЭтаФорма.Прочитать(); ИначеЕсли ИмяСобытия = "ОбновитьДокументИБПослеЗаполненияИзФайла" И Параметр.Найти(Объект.Ссылка) <> Неопределено Тогда ПриЧтенииСозданииНаСервере(); КонецЕсли; Если ИмяСобытия = "СчитанаКартаЛояльности" И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда СчитанаКартаЛояльности(Новый ОписаниеОповещения("ОбработкаОповещенияЗавершение", ЭтотОбъект, Новый Структура("ИмяСобытия, Параметр", ИмяСобытия, Параметр)), Параметр.КартаЛояльности); Возврат; КонецЕсли; // Подсистема "ОбменСКонтрагентами". ПараметрыОповещения = ОбменСКонтрагентамиКлиент.ПараметрыОповещенияЭДО_ФормаДокумента(); ПараметрыОповещения.Форма = ЭтотОбъект; ПараметрыОповещения.ДокументСсылка = Объект.Ссылка; ПараметрыОповещения.ДекорацияСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО; ПараметрыОповещения.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО; ОбменСКонтрагентамиКлиент.ОбработкаОповещения_ФормаДокумента(ИмяСобытия, Параметр, Источник, ПараметрыОповещения); // Конец подсистема "ОбменСКонтрагентами". // ИнтернетПоддержкаПользователей.СПАРКРиски СПАРКРискиКлиент.ОбработкаОповещения(ЭтотОбъект, Неопределено, ИмяСобытия, Параметр, Источник); // Конец ИнтернетПоддержкаПользователей.СПАРКРиски ОбработкаОповещенияФрагмент(ИмяСобытия, Параметр); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещенияЗавершение(Результат, ДополнительныеПараметры) Экспорт ИмяСобытия = ДополнительныеПараметры.ИмяСобытия; Параметр = ДополнительныеПараметры.Параметр; ОбработкаОповещенияФрагмент(ИмяСобытия, Параметр); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещенияФрагмент(Знач ИмяСобытия, Знач Параметр) Перем АдресНабораВоВременномХранилище, ПараметрыНабора, ПараметрыОткрытия; Если ИмяСобытия = "ПолученыСообщения" И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда ПолученыСообщения(Параметр.Сообщения); КонецЕсли; Если ИмяСобытия = "ИзмененРеквизитЗависящийОтСтатуса" И Параметр.УникальныйИдентификатор = УникальныйИдентификатор Тогда Если Объект.Согласован Тогда Объект.Согласован = Ложь; КонецЕсли; ПодключитьОбработчикОжидания("Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса", 0.1, Истина); КонецЕсли; Если ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда УстановитьДоступностьКомандБуфераОбменаНаКлиенте(); КонецЕсли; Если ИмяСобытия = "ДобавлениеПартнераВСегмент" ИЛИ ИмяСобытия = "УдалениеПартнераИзСегмента" Тогда УстановитьВидимостьЗапретаОтгрузкиПартнеру(); КонецЕсли; Если ИмяСобытия = "Закрытие_РедактированиеКомплекта" И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда ПриОкончанииРедактированияНабора(Параметр.АдресВоВременномХранилище); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); КонецЕсли; Если ИмяСобытия = "РедактироватьНабор" И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда ПараметрыНабора = Новый Структура; ПараметрыНабора.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора); ПараметрыНабора.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора); ПараметрыНабора.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма)); АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыНабора); ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище); ПараметрыОткрытия.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора); ПараметрыОткрытия.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора); ПараметрыОткрытия.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС); ПараметрыОткрытия.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС); ПараметрыОткрытия.Вставить("Валюта", Объект.Валюта); ПараметрыОткрытия.Вставить("Соглашение", Объект.Соглашение); ПараметрыОткрытия.Вставить("Дата", Объект.Дата); ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка); ПараметрыОткрытия.Вставить("Склад", Объект.Склад); ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Ложь); ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.Свойства УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); // Конец СтандартныеПодсистемы.Свойства МенеджерОборудованияКлиентПереопределяемый.НачатьПодключениеОборудованиеПриОткрытииФормы(ЭтаФорма, "СканерШтрихкода"); // Подсистема "ОбменСКонтрагентами". ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект); // Конец подсистема "ОбменСКонтрагентами". // ИнтернетПоддержкаПользователей.СПАРКРиски, ПриОткрытии. СПАРКРискиКлиент.ПриОткрытии(ЭтотОбъект, Неопределено); // Конец ИнтернетПоддержкаПользователей.СПАРКРиски, ПриОткрытии. КонецПроцедуры &НаСервере Процедура ПередЗагрузкойДанныхИзНастроекНаСервере(Настройки) СкрыватьОтмененныеСтроки = Настройки.Получить("СкрыватьОтмененныеСтроки"); Если СкрыватьОтмененныеСтроки Тогда Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("Отменено", Ложь); Иначе Элементы.Товары.ОтборСтрок = Неопределено; КонецЕсли; Элементы.ТоварыСкрыватьОтмененныеСтроки.Пометка = СкрыватьОтмененныеСтроки; ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента = ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента"); Если НЕ Объект.Ссылка.Пустая() ИЛИ НЕ ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента Тогда Настройки.Удалить("Объект.НеОтгружатьЧастями"); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) УстановитьВидимостьЭлементовФормыДатОтгрузки(); КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) // &ЗамерПроизводительности ОценкаПроизводительностиКлиент.НачатьЗамерВремени( Истина, "Документ.ЗаказКлиента.Форма.ФормаДокумента.Событие.ОбработкаВыбора"); Если ИсточникВыбора.ИмяФормы = "Перечисление.ВариантыОбеспечения.Форма.ИсполнениеЗаказа" Тогда Детали = ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение); Если Детали.Ошибки <> Неопределено Тогда ОчиститьСообщения(); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Детали.Ошибки); Иначе ПоказатьОповещениеПользователя(ОбеспечениеКлиентСервер.ТекстЗаполнениеОбеспечения(), , Детали.Оповещение); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецЕсли; ИначеЕсли ИсточникВыбора.ИмяФормы = "Перечисление.ВариантыОбеспечения.Форма.ВыборВариантаОбеспечения" Тогда Оповещение = ЗаполнитьВариантОбеспечения(ВыбранноеЗначение); ПоказатьОповещениеПользователя(ОбеспечениеКлиентСервер.ТекстЗаполнениеОбеспечения(), , Оповещение); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.СостояниеОбеспечения.Форма.Форма" Тогда Оповещение = ЗаполнитьОбеспечениеЗаказа(ВыбранноеЗначение); ПоказатьОповещениеПользователя(ОбеспечениеКлиентСервер.ТекстЗаполнениеОбеспечения(), , Оповещение); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); ИначеЕсли ИсточникВыбора.ИмяФормы = "Документ.ЗаказКлиента.Форма.РеквизитыПечати" Тогда Если ВыбранноеЗначение <> Неопределено Тогда ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение); КонецЕсли; ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение); ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборМногооборотнойТары.Форма.Форма" Тогда ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(ВыбранноеЗначение.АдресМногооборотнойТарыВХранилище); МногооборотнаяТараКлиент.ОповеститьПользователяОЗаполненииМногооборотнойТарой(); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); ИначеЕсли НоменклатураКлиент.ЭтоУказаниеСерий(ИсточникВыбора) Тогда НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение); ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма" Тогда ПолучитьЗагруженныеТоварыИзХранилища(ВыбранноеЗначение.АдресТоваровВХранилище); ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПомощникЗакрытияЗаказов.Форма.ФормаЗакрытия" Тогда СкорректироватьСтрокиЗаказа(ВыбранноеЗначение); КонецЕсли; ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка) ПринудительноЗакрытьФорму = Истина; КонецПроцедуры &НаКлиенте Процедура ПриЗакрытии() МенеджерОборудованияКлиентПереопределяемый.НачатьОтключениеОборудованиеПриЗакрытииФормы(ЭтаФорма); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) // СтандартныеПодсистемы.Свойства Если ТекущаяСтраница.Имя = "ГруппаДополнительно" И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда СвойстваВыполнитьОтложеннуюИнициализацию(); УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаКлиенте Процедура СоглашениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПараметрыВыбораСоглашения = ПродажиКлиент.ПараметрыНачалаВыбораСоглашенияСКлиентом(); ПараметрыВыбораСоглашения.Элемент = Элемент; ПараметрыВыбораСоглашения.Партнер = Объект.Партнер; ПараметрыВыбораСоглашения.Документ = Объект.Соглашение; ПараметрыВыбораСоглашения.ДатаДокумента = Объект.Дата; ПараметрыВыбораСоглашения.ДанныеФормыСтруктура = Объект; ПродажиКлиент.НачалоВыбораСоглашенияСКлиентом(ПараметрыВыбораСоглашения, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура ДоговорПриИзменении(Элемент) ДоговорПриИзмененииСервер(); КонецПроцедуры &НаСервере Процедура ДоговорПриИзмененииСервер() ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Объект.Договор, Объект.БанковскийСчет, Объект.БанковскийСчетКонтрагента); ВзаиморасчетыСервер.ЗаполнитьПорядокРасчетовВФорме(ЭтаФорма, Ложь); ЗаполнитьГруппуФинУчета(); ОбновитьОграничениеЗадолженности(); Если ИспользоватьНаправленияДеятельности Тогда НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор); КонецЕсли; НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельностиСервер(ЭтаФорма); ЗаполнитьПодчиненныеСвойстваПоСтатистике("Договор"); Если ЗначениеЗаполнено(Объект.Договор) Тогда Объект.ПорядокОплаты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор,"ПорядокОплаты"); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПартнерПриИзменении(Элемент) Если Не ЗначениеЗаполнено (Объект.Партнер) Тогда ДоставкаТоваровКлиентСервер.ОчиститьРеквизитыДоставки(Элементы,Объект); УстановитьВидимостьЗапретаОтгрузкиПартнеру(); Возврат; КонецЕсли; ПриИзмененииПартнераСервер(); // ИнтернетПоддержкаПользователей.СПАРКРиски, ОбновитьОтображениеИндексов. // Отображать не по ссылке, а по ИНН, НЕ сохраняя в кэше. ЭтотОбъект.ИндексыСПАРКРиски = Неопределено; // Сбросить полученные значения. ОбновитьОтображениеИндексыСПАРК(); // Конец ИнтернетПоддержкаПользователей.СПАРКРиски, ОбновитьОтображениеИндексов. СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура КонтактноеЛицоПриИзменении(Элемент) Если Объект.КонтактноеЛицо.Пустая() Тогда Возврат; ИначеЕсли Не Объект.Партнер.Пустая() Тогда Возврат; КонецЕсли; ПартнерИзменился = Ложь; КонтактноеЛицоПриИзмененииСервер(ПартнерИзменился); Если Не ПартнерИзменился Тогда Возврат; КонецЕсли; Если Не ЗначениеЗаполнено (Объект.Партнер) Тогда ДоставкаТоваровКлиентСервер.ОчиститьРеквизитыДоставки(Элементы,Объект); Иначе СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура КонтрагентПриИзменении(Элемент) КонтрагентПриИзмененииСервер(); // ИнтернетПоддержкаПользователей.СПАРКРиски, ОбновитьОтображениеИндексов. // Отображать не по ссылке, а по ИНН, НЕ сохраняя в кэше. ЭтотОбъект.ИндексыСПАРКРиски = Неопределено; // Сбросить полученные значения. ОбновитьОтображениеИндексыСПАРК(); // Конец ИнтернетПоддержкаПользователей.СПАРКРиски, ОбновитьОтображениеИндексов. КонецПроцедуры &НаСервере Процедура КонтрагентПриИзмененииСервер() ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор); Если ЗначениеЗаполнено(Объект.Контрагент) Тогда ЗаполнитьДоговорПоУмолчанию(); ПродажиСервер.ПартнерПриИзменении(Объект); Если Не ЗначениеЗаполнено(Объект.БанковскийСчетКонтрагента) Тогда Объект.БанковскийСчетКонтрагента = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Объект.Контрагент); КонецЕсли; КонецЕсли; Если ИспользоватьНаправленияДеятельности Тогда НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор); КонецЕсли; НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельностиСервер(ЭтаФорма); ЗаполнитьПодчиненныеСвойстваПоСтатистике("Контрагент"); //{{Доработка УстановитьСоглашениеРозница(); //}}Доработка КонецПроцедуры &НаКлиенте Процедура СоглашениеПриИзменении(Элемент) Если Не ЗначениеЗаполнено (Объект.Соглашение) Тогда НалогообложениеИзСоглашения = Ложь; Возврат; КонецЕсли; СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); ПриИзмененииСоглашенияСервер(); ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродаж(); КонецПроцедуры &НаКлиенте Процедура СтатусПриИзменении(Элемент) Если Объект.Согласован И Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.НеСогласован") Тогда Объект.Согласован = Ложь; КонецЕсли; СтатусПриИзмененииСервер(); КонецПроцедуры &НаКлиенте Процедура НалогообложениеНДСПриИзменении(Элемент) НалогообложениеНДСПриИзмененииСервер(КэшированныеЗначения); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ЦенаВключаетНДСПриИзменении(Элемент) ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ВалютаПриИзменении(Элемент) Если ЗначениеЗаполнено(Объект.Валюта) Тогда ПриИзмененииВалютыСервер( Объект.Валюта, ЦенообразованиеКлиент.НеобходимПересчетВВалюту(Объект,ВалютаДокумента)); ЦенообразованиеКлиент.ОповеститьОбОкончанииПересчетаСуммВВалюту(ВалютаДокумента, Объект.Валюта); КонецЕсли; СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); ВалютаДокумента = Объект.Валюта; ЗаполнитьПорядокОплатыПоУмолчанию(); КонецПроцедуры &НаКлиенте Процедура ДатаПриИзменении(Элемент) СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); Оповещение = Новый ОписаниеОповещения("ДатаПриИзмененииЗавершение", ЭтотОбъект); ЦенообразованиеКлиент.ЗадатьВопросПересчетаЦеныПриИзмененииДаты(Объект, Оповещение); КонецПроцедуры &НаКлиенте Процедура ДатаПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт Если РезультатВопроса Тогда ПересчитыватьЦены = Истина; ЦеныРассчитаны = ДатаПриИзмененииСервер(ПересчитыватьЦены); Если ПересчитыватьЦены Тогда ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОрганизацияПриИзменении(Элемент) ПриИзмененииОрганизацииСервер(); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура СкладПриИзменении(Элемент) СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); ПриИзмененииСкладаСервер(); КонецПроцедуры &НаКлиенте Процедура ХозяйственнаяОперацияПриИзменении(Элемент) ПриИзмененииХозяйственнойОперацииСервер(); КонецПроцедуры &НаКлиенте Процедура МенеджерПриИзменении(Элемент) ЗаполнитьПодчиненныеСвойстваПоСтатистике("Менеджер"); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура КартаЛояльностиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) КартыЛояльностиКлиент.НачалоВыбораКартыЛояльности(Элемент, СтандартнаяОбработка, Объект.Партнер, Объект.Дата); КонецПроцедуры &НаКлиенте Процедура КартаЛояльностиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; СчитанаКартаЛояльности(Неопределено, ВыбранноеЗначение); КонецПроцедуры &НаКлиенте Процедура ДатаОтгрузкиПриИзменении(Элемент) ЗаполнитьДатуОтгрузкиСервер(Объект.ДатаОтгрузки, Неопределено); КонецПроцедуры &НаКлиенте Процедура НеОтгружатьЧастямиПриИзменении(Элемент) НеОтгружатьЧастямиПриИзмененииСервер(); КонецПроцедуры &НаКлиенте Процедура ТекстОстатокДопустимогоКредитаНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДанныеПоСуммеПродажи = Новый Структура("СуммаВзаиморасчетов", ЦенообразованиеКлиентСервер.ПолучитьСуммуДокумента(Объект.Товары, Объект.ЦенаВключаетНДС)); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("КлючНазначенияИспользования", Объект.Ссылка); ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина); ПараметрыФормы.Вставить("Отбор", Новый Структура("Договор", Объект.Договор)); ПараметрыФормы.Вставить("Договор", Объект.Договор); ПараметрыФормы.Вставить("ДанныеПоСуммеПродажи", ДанныеПоСуммеПродажи); ОткрытьФорму("Отчет.ПричиныЗапретаОтгрузки.Форма", ПараметрыФормы, , "Договор=" + Объект.Договор); КонецПроцедуры &НаКлиенте Процедура ДекорацияИндексыСПАРКРискиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СПАРКРискиКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка); КонецПроцедуры // ИнтернетПоддержкаПользователей.СПАРКРиски &НаКлиенте Процедура ДекорацияСПАРКПодробноНажатие(Элемент) СПАРКРискиКлиент.ПоказатьЗначенияИндексовКонтрагента(ИндексыСПАРКРиски, ЭтотОбъект); КонецПроцедуры // Конец ИнтернетПоддержкаПользователей.СПАРКРиски &НаКлиенте Процедура ВернутьМногооборотнуюТаруПриИзменении(Элемент) ВернутьМногооборотнуюТаруПриИзмененииСервер(); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТекстОтгрузкаПартнеруЗапрещенаНажатие(Элемент) ОткрытьФорму("Справочник.Партнеры.Форма.ФормаСегментовЗапретаОтгрузки", Новый Структура("Партнер", Объект.Партнер)); КонецПроцедуры &НаКлиенте Процедура ТребуетсяЗалогЗаТаруПриИзменении(Элемент) РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура СостояниеНажатие(Элемент, СтандартнаяОбработка) ПродажиКлиент.СостояниеВФормеДокументаНажатие(СтандартнаяОбработка, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ДекорацияЭДОНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОбменСКонтрагентамиКлиент.ОткрытьДеревоЭД(Объект.Ссылка); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытий &НаКлиенте Процедура СпособМестоДоставкиПеревозчикПриИзменении(Элемент) ЗаполнитьУстановитьРеквизитыДоставкиСервер(Элемент.Имя); КонецПроцедуры &НаКлиенте Процедура АдресДоставкиПриИзменении(Элемент) ИмяРеквизитаАдресаДоставки = ПолучитьИмяРеквизитаАдресаДоставки(Элемент); ДоставкаТоваровКлиент.ПриИзмененииПредставленияАдреса( Элемент, Объект[ИмяРеквизитаАдресаДоставки], Объект[ИмяРеквизитаАдресаДоставки + "ЗначенияПолей"]); КонецПроцедуры &НаКлиенте Процедура АдресДоставкиОчистка(Элемент, СтандартнаяОбработка) АдресДоставкиПриИзменении(Элемент); КонецПроцедуры &НаКлиенте Процедура АдресДоставкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ИмяРеквизитаАдресаДоставки = ПолучитьИмяРеквизитаАдресаДоставки(Элемент); ДоставкаТоваровКлиент.ОткрытьФормуВыбораАдресаИОбработатьРезультат( Элемент, Объект, ИмяРеквизитаАдресаДоставки, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура АдресДоставкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; АдресДоставкиПриИзменении(Элемент); ДоставкаТоваровКлиент.АдресДоставкиОбработкаВыбора(Элементы, Объект, Элемент.Имя, ВыбранноеЗначение); Модифицированность = Истина; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Функция ПолучитьИмяРеквизитаАдресаДоставки(Элемент) Если СтрНайти(Элемент.Имя, "АдресДоставкиПеревозчика") > 0 Тогда ИмяРеквизитаАдреса = "АдресДоставкиПеревозчика"; Иначе ИмяРеквизитаАдреса = "АдресДоставки"; КонецЕсли; Возврат ИмяРеквизитаАдреса; КонецФункции &НаКлиенте Процедура НаправлениеДеятельностиПриИзменении(Элемент) НаправлениеДеятельностиПриИзмененииСервер(); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыТовары &НаКлиенте Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) // &ЗамерПроизводительности ОценкаПроизводительностиКлиент.НачатьЗамерВремени( Истина, "Документ.ЗаказКлиента.Форма.ФормаДокумента.Элементы.Товары.Выбор"); Если Элемент.ТекущийЭлемент = Элементы.ТоварыВариантОбеспечения И Не ТолькоПросмотр Тогда СтандартнаяОбработка = Ложь; Если ИспользоватьРасширеннуюФормуПодбораКоличестваИВариантовОбеспечения Тогда ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(); Если ТипЗнч(ПараметрыФормы) = Тип("Структура") Тогда ОткрытьФорму( "Обработка.ПодборТоваровВДокументПродажи.Форма.ЗапросКоличестваИСерий", ПараметрыФормы, ЭтаФорма, , , , Новый ОписаниеОповещения("ОбработатьВыборВариантаОбеспечения", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; Иначе ПараметрыПроверки = ОбеспечениеКлиентСервер.ИнициализироватьПараметрыПроверкиЗаполнения(); ПараметрыПроверки.Поля.Удалить("Подразделение"); Если ОбеспечениеКлиентСервер.ПроверитьЗаполнение( Объект, Объект.Товары, Элементы.Товары.ТекущаяСтрока, ПараметрыПроверки, Неопределено, Объект.Склад) Тогда ПараметрыФормы = ПараметрыВыбораОбеспечения(); Если ТипЗнч(ПараметрыФормы) = Тип("Структура") Тогда ОткрытьФорму("Перечисление.ВариантыОбеспечения.Форма.ВыборВариантаОбеспечения", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор); Иначе Ошибки = ОбеспечениеКлиентСервер.ОшибкиКонтроляОтгрузкиИОбеспечения(ПараметрыФормы, "Товары", НСтр("ru = 'Товары'")); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки); КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли Элемент.ТекущийЭлемент = Элементы.ТоварыПроцентАвтоматическойСкидки Или Элемент.ТекущийЭлемент = Элементы.ТоварыСуммаАвтоматическойСкидки Тогда СтандартнаяОбработка = Ложь; Если НЕ Объект.СкидкиРассчитаны Тогда СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина); СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь); СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина); СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки); СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры); Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(АдресПримененныхСкидокВоВременномХранилище) Тогда РассчитатьСкидкиБезПримененияКОбъекту(); КонецЕсли; ТекущиеДанные = Элементы.Товары.ТекущиеДанные; СкидкиНаценкиКлиент.ОткрытьФормуПримененныеСкидки(ТекущиеДанные, Объект, ЭтаФорма); ИначеЕсли Поле = Элементы.ТоварыЦена Тогда ТекущиеДанные = Элементы.Товары.ТекущиеДанные; Если ПравоНаЧтениеВидаЦены Тогда Если ЗначениеЗаполнено(ТекущиеДанные.ВидЦены) И НЕ Объект.Согласован Тогда ОчиститьСообщения(); ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru='Для редактирования цены выберите вид цены ""<произвольная>""'"), Объект.Ссылка, ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Товары", ТекущиеДанные.НомерСтроки, "ВидЦены"),); КонецЕсли; КонецЕсли; ИначеЕсли НаборыКлиент.БлокируемыйЭлемент(Поле) Тогда ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока); Если ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда ПараметрОповещения = Новый Структура; ПараметрОповещения.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора); ПараметрОповещения.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора); ПараметрОповещения.Вставить("ФормаВладелец", УникальныйИдентификатор); Оповестить("РедактироватьНабор", ПараметрОповещения, ЭтаФорма); КонецЕсли; ИначеЕсли Поле = Элементы.ТоварыНоменклатураНабора Тогда ПоказатьЗначение(Неопределено, Элементы.Товары.ТекущиеДанные.НоменклатураНабора); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование) ОбщегоНазначенияУТКлиент.КешироватьТекущуюСтроку(ЭтотОбъект, "Товары"); ТекущиеДанные = Элементы.Товары.ТекущиеДанные; ПродажиКлиент.СтрокаНоменклатурыПриНачалеРедактирования(ЭтаФорма, "Товары", ТекущиеДанные, НоваяСтрока, Копирование); Если НоваяСтрока Тогда ТекущиеДанные.КодСтроки = 0; КонецЕсли; Если Копирование Тогда СтруктураДействий = Новый Структура; ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения, Объект.ЖелаемаяДатаОтгрузки); СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекущиеДанные.Склад, ПараметрыУказанияСерий)); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования) ТекущиеДанные = Элементы.Товары.ТекущиеДанные; Если Не ОтменаРедактирования Тогда КешСтроки = ?(НоваяСтрока, Неопределено, ТоварыКешТекущейСтроки); Если ЗначениеЗаполнено(ТекущиеДанные.ДатаОтгрузки) И Объект.НеОтгружатьЧастями И (КешСтроки = Неопределено Или КешСтроки.ДатаОтгрузки <> ТекущиеДанные.ДатаОтгрузки) Тогда ПриИзмененииДатыОтгрузкиВТабЧасти(); // вызов сервера. КонецЕсли; СкладыКлиент.ОбновитьТаблицуСкладов(ТаблицаСкладов, ТекущиеДанные, КешСтроки, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); КонецЕсли; Если ТекущиеДанные <> Неопределено И Объект.НеОтгружатьЧастями Тогда ТекущиеДанные.ДатаОтгрузки = Объект.ДатаОтгрузки; КонецЕсли; МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыПередУдалением(Элемент, Отказ) ОбщегоНазначенияУТКлиент.КешироватьТекущуюСтроку(ЭтотОбъект, "Товары"); НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтаФорма, "Товары", Отказ); КонецПроцедуры &НаКлиенте Процедура ТоварыПослеУдаления(Элемент) СкладыКлиент.ОбновитьТаблицуСкладов(ТаблицаСкладов, Неопределено, ТоварыКешТекущейСтроки, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); КонецПроцедуры &НаКлиенте Процедура ТоварыСодержаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария( Элемент.ТекстРедактирования, ЭтотОбъект, "Элементы.Товары.ТекущиеДанные.Содержание", НСтр("ru='Содержание услуги'")); КонецПроцедуры &НаКлиенте Процедура ТоварыНоменклатураПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика); СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущаяСтрока.Упаковка); СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц"); СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа)); Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект)); Иначе СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(Объект)); КонецЕсли; СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Объект.НалогообложениеНДС); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействий.Вставить("ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ВариантОформленияПродажи")); СтруктураДействий.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекущаяСтрока.Склад, ПараметрыУказанияСерий)); ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения, Объект.ЖелаемаяДатаОтгрузки); СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти", ЭтаФорма.ИмяФормы, "Товары")); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыХарактеристикаПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект)); Иначе СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(Объект)); КонецЕсли; СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); СтруктураДействий.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения, Объект.ЖелаемаяДатаОтгрузки); СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти", ЭтаФорма.ИмяФормы, "Товары")); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыУпаковкаПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц"); Если ТекущаяСтрока.Количество > 0 Тогда СтруктураДействий.Вставить("ПересчитатьЦенуЗаУпаковку", ТекущаяСтрока.Количество); ИначеЕсли ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект)); ИначеЕсли ЗначениеЗаполнено(ТекущаяСтрока.ВидЦены) Тогда СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(Объект)); КонецЕсли; СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураДействий = Новый Структура; ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения,Объект.Ссылка); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыВидЦеныПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(Объект)); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыЦенаПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения,Объект.Ссылка); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыСтавкаНДСПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыОтмененоПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; Если Не ТекущаяСтрока.Отменено Тогда ТекущаяСтрока.ПричинаОтмены = ПредопределенноеЗначение("Справочник.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка"); КонецЕсли; СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекущаяСтрока.Склад, ПараметрыУказанияСерий)); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыПроцентРучнойСкидкиПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки"); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения,Объект.Ссылка); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыСуммаРучнойСкидкиПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьПроцентРучнойСкидки"); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ПересчитыватьСуммуРучнойСкидки", Ложь, Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыСуммаПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураПересчетаЦены = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаЦеныСкидкиВПродажахВТЧ(Объект, Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию")); СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьЦенуСкидкуПоСуммеВПродажах", СтруктураПересчетаЦены); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ТоварыСкладПриИзменении(Элемент) ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("Склад, ПараметрыУказанияСерий", ТекущаяСтрока.Склад, ПараметрыУказанияСерий)); ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения, Объект.ЖелаемаяДатаОтгрузки); СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); ОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаКлиенте Процедура Подключаемый_ВыполнитьНазначаемуюКоманду(Команда) Если НЕ ДополнительныеОтчетыИОбработкиКлиент.ВыполнитьНазначаемуюКомандуНаКлиенте(ЭтаФорма, Команда.Имя) Тогда РезультатВыполнения = Неопределено; ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(Команда.Имя, РезультатВыполнения); КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки #Область Обеспечение &НаКлиенте Процедура ЗаполнитьОбеспечение(Команда) ПараметрыПроверки = ОбеспечениеКлиентСервер.ИнициализироватьПараметрыПроверкиЗаполнения(); ПараметрыПроверки.Поля.Удалить("Подразделение"); Если ОбеспечениеКлиентСервер.ПроверитьЗаполнение( Объект, Объект.Товары, Элементы.Товары.ВыделенныеСтроки, ПараметрыПроверки, Неопределено, Объект.Склад) Тогда ПараметрыФормы = ОбеспечениеКлиентСервер.ПараметрыФормыИсполнениеЗаказа(ТипЗнч(Объект.Ссылка)); ПараметрыФормы.НаправлениеДеятельности = Объект.НаправлениеДеятельности; ОткрытьФорму("Перечисление.ВариантыОбеспечения.Форма.ИсполнениеЗаказа", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СостояниеОбеспечения(Команда) Если ОбеспечениеКлиент.ПроверитьВозможностьВыполненияКомандыСостояниеОбеспеченияВДокументе(ЭтаФорма) Тогда ДанныеДляОбеспечения = ПодготовитьДанныеДляОбеспеченияЗаказа(); ОткрытьФорму("Обработка.СостояниеОбеспечения.Форма", ДанныеДляОбеспечения, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьДатуОтгрузки(Команда) МассивВыделенныхСтрок = Элементы.Товары.ВыделенныеСтроки; Если МассивВыделенныхСтрок.Количество() > 0 Тогда ДатаОтгрузки = Объект.ЖелаемаяДатаОтгрузки; Оповещение = Новый ОписаниеОповещения("ЗаполнитьДатуОтгрузкиЗавершение", ЭтотОбъект, Новый Структура("МассивВыделенныхСтрок", МассивВыделенныхСтрок)); ОбщегоНазначенияУТКлиент.ВвестиДатуСКонтролемПустогоЗначения(ДатаОтгрузки, НСтр("ru='Введите дату отгрузки'"), ЧастиДаты.Дата, Оповещение); Иначе ТекстПредупреждения = НСтр("ru='В документе не выбраны строки для заполнения. Дата отгрузки не будет заполнена.'"); ПоказатьПредупреждение(Неопределено, ТекстПредупреждения); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьДатуОтгрузкиЗавершение(ВыбраннаяДата, ДополнительныеПараметры) Экспорт Если ВыбраннаяДата <> Неопределено И ЗначениеЗаполнено(ВыбраннаяДата) Тогда ДатаОтгрузки = ВыбраннаяДата; МассивВыделенныхСтрок = ДополнительныеПараметры.МассивВыделенныхСтрок; ЗаполнитьДатуОтгрузкиСервер(ДатаОтгрузки, МассивВыделенныхСтрок); ПродажиКлиент.ОповеститьОбОкончанииЗаполненияДатОтгрузки(ДатаОтгрузки, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СоздатьКорректировкуНазначенияРезервирование(Команда) ОбъектыОснований = Новый Массив(); ОбъектыОснований.Добавить(Объект.Ссылка); ОписаниеКоманды = Новый Структура(); ОписаниеКоманды.Вставить("ОбъектыОснований", ОбъектыОснований); ОписаниеКоманды.Вставить("Форма", ЭтаФорма); Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.НеСогласован") Тогда МинимальныйСтатус = НСтр("ru = 'К выполнению'"); ОбеспечениеКлиент.СообщитьОНеобходимомМинимальномСтатусеДокумента(Истина, МинимальныйСтатус); ИначеЕсли Не Объект.Проведен Или Модифицированность Тогда ДополнительныеПараметры = Новый Структура(); ДополнительныеПараметры.Вставить("Резервирование", Истина); ДополнительныеПараметры.Вставить("ОписаниеКоманды", ОписаниеКоманды); ТекстВопроса = НСтр("ru = 'Для резервирования под назначение необходимо предварительно провести документ. Выполнить проведение документа и продолжить?'"); ПоказатьВопрос( Новый ОписаниеОповещения("СоздатьКорректировкуНазначенияЗавершение", ЭтотОбъект, ДополнительныеПараметры), ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе Если ЕстьТоварыКОбособленномуОбеспечению() Тогда ВводНаОснованииУТКлиент.ОткрытьМастерРезервирования(ОписаниеКоманды); Иначе ОбеспечениеКлиент.СообщитьОбОтсутствииТовараКОбособленномуОбеспечению(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СоздатьКорректировкуНазначенияСнятиеРезерва(Команда) ОбъектыОснований = Новый Массив(); ОбъектыОснований.Добавить(Объект.Ссылка); ОписаниеКоманды = Новый Структура(); ОписаниеКоманды.Вставить("ОбъектыОснований", ОбъектыОснований); ОписаниеКоманды.Вставить("Форма", ЭтаФорма); Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.НеСогласован") Тогда МинимальныйСтатус = НСтр("ru = 'К выполнению'"); ОбеспечениеКлиент.СообщитьОНеобходимомМинимальномСтатусеДокумента(Ложь, МинимальныйСтатус); ИначеЕсли Не Объект.Проведен Или Модифицированность Тогда ДополнительныеПараметры = Новый Структура(); ДополнительныеПараметры.Вставить("Резервирование", Ложь); ДополнительныеПараметры.Вставить("ОписаниеКоманды", ОписаниеКоманды); ТекстВопроса = НСтр("ru = 'Для снятия резерва под назначение необходимо предварительно провести документ. Выполнить проведение документа и продолжить?'"); ПоказатьВопрос( Новый ОписаниеОповещения("СоздатьКорректировкуНазначенияЗавершение", ЭтотОбъект, ДополнительныеПараметры), ТекстВопроса, РежимДиалогаВопрос.ДаНет); Иначе Если ЕстьТоварыКОбособленномуОбеспечению() Тогда ВводНаОснованииУТКлиент.ОткрытьМастерСнятияРезерва(ОписаниеКоманды); Иначе ОбеспечениеКлиент.СообщитьОбОтсутствииТовараКОбособленномуОбеспечению(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Функция ЕстьТоварыКОбособленномуОбеспечению() НазначениеДокумента = Документы.КорректировкаНазначенияТоваров.ПолучитьНазначениеЗаказа(Объект.Ссылка); Возврат Документы.КорректировкаНазначенияТоваров.ЕстьТоварыКОбособленномуОбеспечению(НазначениеДокумента); КонецФункции #КонецОбласти &НаКлиенте Процедура АвтоТест_ЗаполнитьЦеныПоСоглашению(Команда) Экспорт Если ПродажиКлиент.НеобходимоЗаполнениеЦенПоСоглашению(Объект, "Товары", НСтр("ru='Товары'")) Тогда ЦеныРассчитаны = ЗаполнитьЦеныПоСоглашениюСервер(); ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны); КонецЕсли; СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен(Команда) Если ПродажиКлиент.НеобходимоЗаполнениеЦенПоВидуЦен(Объект, "Товары", НСтр("ru='Товары'")) Тогда ДополнительныеПараметры = Новый Структура; ПродажиКлиент.ВыбратьВидЦен( Новый ОписаниеОповещения("ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенЗавершение", ЭтотОбъект, ДополнительныеПараметры), Объект.ЦенаВключаетНДС, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенЗавершение(ВидЦен, ДополнительныеПараметры) Экспорт Если ЗначениеЗаполнено(ВидЦен) Тогда ЦеныРассчитаны = ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен); ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоВидуЦен(ЦеныРассчитаны, ВидЦен); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОтменитьВыделенныеСтроки(Команда) Если Не ПродажиКлиент.НеобходимоЗаполнениеПричиныОтменыВыделенныхСтрок(Объект.Товары, НСтр("ru='Товары'"), Элементы.Товары.ВыделенныеСтроки) Тогда Возврат; КонецЕсли; ПричинаОтмены = ПредопределенноеЗначение("Справочник.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка"); Если ИспользоватьПричиныОтменыЗаказовКлиентов Тогда ОткрытьФорму("Справочник.ПричиныОтменыЗаказовКлиентов.ФормаВыбора",,,,,, Новый ОписаниеОповещения("ОтменитьВыделенныеСтрокиЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); Возврат; КонецЕсли; ОтменитьВыделенныеСтрокиФрагмент(ПричинаОтмены); КонецПроцедуры &НаКлиенте Процедура ОтменитьВыделенныеСтрокиЗавершение(Результат, ДополнительныеПараметры) Экспорт ПричинаОтмены = Результат; Если Не ЗначениеЗаполнено(ПричинаОтмены) Тогда Возврат; КонецЕсли; ОтменитьВыделенныеСтрокиФрагмент(ПричинаОтмены); КонецПроцедуры &НаКлиенте Процедура ОтменитьВыделенныеСтрокиФрагмент(Знач ПричинаОтмены) Перем ВыделенныеСтроки, СтруктураДействий; СтруктураДействий = Новый Структура(); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); ВыделенныеСтроки = ДополнитьДоПолногоНабора(); ПродажиКлиент.ОтменитьВыделенныеСтроки( Объект.Товары, ВыделенныеСтроки, ПричинаОтмены, СтруктураДействий); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); ПродажиКлиент.ОповеститьОбОтменеВыделенныхСтрок(ПричинаОтмены); ОтменитьВыделенныеСтрокиНаСервере(); КонецПроцедуры &НаКлиенте Процедура ОтменитьНепоставленныеСтроки(Команда) Если Не ПродажиКлиент.НеобходимоЗаполнениеПричиныОтменыВыделенныхСтрок(Объект.Товары, НСтр("ru='Товары'"), Элементы.Товары.ВыделенныеСтроки) Тогда Возврат; КонецЕсли; ПроверятьОстатки = Истина; Если Не Объект.Проведен Тогда ПроверятьОстатки = Ложь; ИначеЕсли Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.НеСогласован") Или Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыЗаказовКлиентов.КОбеспечению") Тогда ПроверятьОстатки = Истина; КонецЕсли; ПричинаОтмены = ПредопределенноеЗначение("Справочник.ПричиныОтменыЗаказовКлиентов.ПустаяСсылка"); Если ИспользоватьПричиныОтменыЗаказовКлиентов Тогда ОткрытьФорму("Справочник.ПричиныОтменыЗаказовКлиентов.ФормаВыбора",,,,,, Новый ОписаниеОповещения("ОтменитьНепоставленныеСтрокиЗавершение", ЭтотОбъект, Новый Структура("ПроверятьОстатки", ПроверятьОстатки)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); Возврат; КонецЕсли; ОтменитьНепоставленныеСтрокиФрагмент(ПричинаОтмены, ПроверятьОстатки); КонецПроцедуры &НаКлиенте Процедура ОтменитьНепоставленныеСтрокиЗавершение(Результат, ДополнительныеПараметры) Экспорт ПроверятьОстатки = ДополнительныеПараметры.ПроверятьОстатки; ПричинаОтмены = Результат; Если Не ЗначениеЗаполнено(ПричинаОтмены) Тогда Возврат; КонецЕсли; ОтменитьНепоставленныеСтрокиФрагмент(ПричинаОтмены, ПроверятьОстатки); КонецПроцедуры &НаКлиенте Процедура ОтменитьНепоставленныеСтрокиФрагмент(Знач ПричинаОтмены, Знач ПроверятьОстатки) Перем КоличествоСтрокОтменено; КоличествоСтрокОтменено = ОтменитьНепоставленныеСтрокиСервер(ПричинаОтмены, ПроверятьОстатки); Если КоличествоСтрокОтменено = 0 Тогда ПродажиКлиент.ОповеститьОбОтменеНепоставленныхСтрок(ПричинаОтмены, КоличествоСтрокОтменено, ПроверятьОстатки); Иначе РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); ПродажиКлиент.ОповеститьОбОтменеНепоставленныхСтрок(ПричинаОтмены, КоличествоСтрокОтменено, ПроверятьОстатки); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СкрыватьОтмененныеСтроки(Команда) СкрыватьОтмененныеСтроки = Не СкрыватьОтмененныеСтроки; Если СкрыватьОтмененныеСтроки Тогда Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("Отменено", Ложь); Иначе Элементы.Товары.ОтборСтрок = Неопределено; КонецЕсли; Элементы.ТоварыСкрыватьОтмененныеСтроки.Пометка = СкрыватьОтмененныеСтроки; КонецПроцедуры &НаКлиенте Процедура РассчитатьСкидкиНаценки(Команда) РассчитатьСкидкиНаценкиКлиент(); КонецПроцедуры &НаКлиенте Процедура ОткрытьПодбор(Команда) // &ЗамерПроизводительности ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, "Документ.ЗаказКлиента.ФормаДокумента.Команда.ОткрытьПодбор"); Отказ = Ложь; Если (ИспользоватьСоглашенияСКлиентами И Не ЗначениеЗаполнено(Объект.Соглашение)) Или Не ЗначениеЗаполнено(Объект.Валюта) Тогда ОчиститьСообщения(); СообщитьОбОшибкахОткрытияПодбора(Отказ); КонецЕсли; Если Отказ Тогда Возврат; КонецЕсли; ПараметрЗаголовок = НСтр("ru = 'Подбор товаров в %Документ%'"); Если ЗначениеЗаполнено(Объект.Ссылка) Тогда ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", Объект.Ссылка); Иначе ПараметрЗаголовок = СтрЗаменить(ПараметрЗаголовок, "%Документ%", НСтр("ru='заказ клиента'")); КонецЕсли; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Соглашение", Объект.Соглашение); ПараметрыФормы.Вставить("Организация", Объект.Организация); ПараметрыФормы.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС); Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") Тогда ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый ФиксированныйМассив(НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре())); ПараметрыФормы.Вставить("СкрыватьРучныеСкидки", Истина); КонецЕсли; ПараметрыФормы.Вставить("РежимПодбораИспользоватьСкладыВТабличнойЧасти", Истина); ПараметрыФормы.Вставить("ИспользоватьДатыОтгрузки", Истина); ПараметрыФормы.Вставить("СкрыватьПодакцизныеТовары", Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД")); ПараметрыФормы.Вставить("ОтображатьФлагСкрыватьПодакцизныеТовары", Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД")); ПараметрыФормы.Вставить("Склад", Объект.Склад); ПараметрыФормы.Вставить("Валюта", Объект.Валюта); ПараметрыФормы.Вставить("Заголовок", ПараметрЗаголовок); ПараметрыФормы.Вставить("Дата", Объект.Дата); ПараметрыФормы.Вставить("Документ", Объект.Ссылка); ПараметрыФормы.Вставить("ПараметрыУказанияСерий", ПараметрыУказанияСерий); ПараметрыФормы.Вставить("Назначение", Объект.Назначение); ПараметрыФормы.Вставить("Подразделение", Объект.Подразделение); ПараметрыФормы.Вставить("ПодборВариантовОбеспечения", Истина); ПараметрыФормы.Вставить("ВариантыОбеспечения", ВариантыОбеспечения); ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ОткрытьИнформациюОСкидках(Команда) Если НЕ Объект.СкидкиРассчитаны Тогда СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина); СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь); СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина); СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки); СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры); Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; КонецЕсли; Если НЕ ЗначениеЗаполнено(АдресПримененныхСкидокВоВременномХранилище) Тогда РассчитатьСкидкиБезПримененияКОбъекту(); КонецЕсли; ТекущиеДанные = Элементы.Товары.ТекущиеДанные; СкидкиНаценкиКлиент.ОткрытьФормуПримененныеСкидки(ТекущиеДанные, Объект, ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура НазначитьАвтоматическиеСкидки(Команда) АдресВХранилище = ВыполнитьПредварительныйРасчетСкидокНаСервере(); Оповещение = Новый ОписаниеОповещения("НазначитьАвтоматическиеСкидкиЗавершение", ЭтотОбъект); СкидкиНаценкиКлиент.ОткрытьФормуНазначенияУправляемыхСкидокНаценок(АдресВХранилище, Оповещение); КонецПроцедуры &НаКлиенте Процедура НазначитьАвтоматическиеСкидкиЗавершение(ВозвращенноеЗначение, ДополнительныеПараметры) Экспорт Если ВозвращенноеЗначение <> Неопределено Тогда УправляемыеСкидки = ВозвращенноеЗначение; СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина); СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь); СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Ложь); СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки); СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры); Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; ПоказатьОповещениеПользователя( НСтр("ru = 'Скидки (наценки)'"), , НСтр("ru = 'Скидки (наценки) рассчитаны'"), БиблиотекаКартинок.Информация32); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура НазначитьРучнуюСкидку(Команда) Если Не СкидкиНаценкиКлиент.ВозможноНазначениеРучнойСкидкиНаценки(Объект, "Товары", НСтр("ru='Товары'")) Тогда Возврат; КонецЕсли; АдресВоВременномХранилище = АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(Ложь); Оповещение = Новый ОписаниеОповещения( "НазначитьРучнуюСкидкуЗавершение", ЭтотОбъект, Новый Структура("АдресВоВременномХранилище", АдресВоВременномХранилище)); СкидкиНаценкиКлиент.ОткрытьФормуНазначенияРучныхСкидок( АдресВоВременномХранилище, Объект.Валюта, Оповещение); КонецПроцедуры &НаКлиенте Процедура НазначитьРучнуюСкидкуЗавершение(СуммаРучнойСкидкиНаценки, ДополнительныеПараметры) Экспорт АдресВоВременномХранилище = ДополнительныеПараметры.АдресВоВременномХранилище; Если СуммаРучнойСкидкиНаценки <> Неопределено Тогда НазначитьРучнуюСкидкуНаСервере(СуммаРучнойСкидкиНаценки, Неопределено, АдресВоВременномХранилище); СкидкиНаценкиКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок(СуммаРучнойСкидкиНаценки, Объект.Валюта); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура НазначитьРучнуюСкидкуДляВыделенныхСтрок(Команда) Если Не СкидкиНаценкиКлиент.ВозможноНазначениеРучнойСкидкиНаценки(Объект, "Товары", НСтр("ru='Товары'")) Тогда Возврат; КонецЕсли; АдресВоВременномХранилище = АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(Истина); Оповещение = Новый ОписаниеОповещения( "НазначитьРучнуюСкидкуДляВыделенныхСтрокЗавершение", ЭтотОбъект, Новый Структура("АдресВоВременномХранилище", АдресВоВременномХранилище)); СкидкиНаценкиКлиент.ОткрытьФормуНазначенияРучныхСкидок( АдресВоВременномХранилище, Объект.Валюта, Оповещение); КонецПроцедуры &НаКлиенте Процедура НазначитьРучнуюСкидкуДляВыделенныхСтрокЗавершение(СуммаРучнойСкидкиНаценки, ДополнительныеПараметры) Экспорт АдресВоВременномХранилище = ДополнительныеПараметры.АдресВоВременномХранилище; Если СуммаРучнойСкидкиНаценки <> Неопределено Тогда НазначитьРучнуюСкидкуНаСервере(СуммаРучнойСкидкиНаценки, Элементы.Товары.ВыделенныеСтроки, АдресВоВременномХранилище); СкидкиНаценкиКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок(СуммаРучнойСкидкиНаценки, Объект.Валюта); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОтменитьРучныеСкидки(Команда) Если Не СкидкиНаценкиКлиент.ВозможнаОтменаРучныхСкидокНаценок(Объект, "Товары", НСтр("ru='Товары'")) Тогда Возврат; КонецЕсли; ОтменитьРучныеСкидкиНаСервере(); СкидкиНаценкиКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок(); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура Подключаемый_РедактироватьСоставСвойств(Команда) УправлениеСвойствамиКлиент.РедактироватьСоставСвойств(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ПоискПоШтрихкодуВыполнить(Команда) ОчиститьСообщения(); Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект); ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение); КонецПроцедуры &НаКлиенте Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт ОбработатьШтрихкоды(ДанныхШтрихкода); КонецПроцедуры &НаКлиенте Процедура ЗаполнитьСкладВВыделенныхСтроках(Команда) ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки; Если СкладыКлиент.ПроверитьВозможностьЗаполненияСкладовВТабличнойЧасти(Объект, Объект.Товары, НСтр("ru='Товары'"), ВыделенныеСтроки) Тогда МассивОтбора = Новый Массив(); МассивОтбора.Добавить(ПредопределенноеЗначение("Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказах")); МассивОтбора.Добавить(ПредопределенноеЗначение("Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных")); СтруктураОтбора = Новый Структура("ВыборГруппы, ЭтоГруппа", МассивОтбора, Ложь); СтруктураПараметров = Новый Структура("Отбор,ГруппаСкладов", СтруктураОтбора, Объект.Склад); ВыбранныйСклад = Неопределено; ОткрытьФорму("Справочник.Склады.ФормаВыбора", СтруктураПараметров, ЭтаФорма,,,, Новый ОписаниеОповещения("ЗаполнитьСкладВВыделенныхСтрокахЗавершение", ЭтотОбъект, Новый Структура("ВыделенныеСтроки", ВыделенныеСтроки)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаполнитьСкладВВыделенныхСтрокахЗавершение(Результат, ДополнительныеПараметры) Экспорт ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки; ВыбранныйСклад = Результат; Если ЗначениеЗаполнено(ВыбранныйСклад) Тогда ЗаполненоСтрок = ЗаполнитьСкладВВыделенныхСтрокахНаСервере(ВыделенныеСтроки, ВыбранныйСклад); СкладыКлиент.ПоказатьОповещениеОЗаполненииСкладаВТабличнойЧасти(ВыбранныйСклад, ЗаполненоСтрок, ВыделенныеСтроки.Количество()); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура РазбитьСтроку(Команда) ТаблицаФормы = Элементы.Товары; ДанныеТаблицы = Объект.Товары; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаСуммы( "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаРучнойСкидки, СуммаАвтоматическойСкидки", ЗависимыеРеквизиты(), "КоличествоУпаковок"); Если ТаблицаФормы.ТекущиеДанные <> Неопределено Тогда ОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьСтруктуруПересчетаСуммы(СтруктураПересчетаСуммы, ТаблицаФормы.ТекущиеДанные); КонецЕсли; ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("СтруктураПересчетаСуммы", СтруктураПересчетаСуммы); ОбщегоНазначенияУТКлиент.РазбитьСтрокуТЧ( ДанныеТаблицы, ТаблицаФормы, Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект, ДополнительныеПараметры)); КонецПроцедуры &НаКлиенте Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; Если НоваяСтрока <> Неопределено Тогда НоваяСтрока.КодСтроки = 0; ОбработкаТабличнойЧастиКлиентСервер.ДобавитьСтрокуДляПересчетаСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы, ТекущаяСтрока); ОбработкаТабличнойЧастиКлиентСервер.ДобавитьСтрокуДляПересчетаСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы, НоваяСтрока); ОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗагрузитьДанныеИзТСД(Команда) ОчиститьСообщения(); МенеджерОборудованияКлиент.НачатьЗагрузкуДанныеИзТСД( Новый ОписаниеОповещения("ЗагрузитьИзТСДЗавершение", ЭтотОбъект), УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ЗагрузитьИзТСДЗавершение(Результат, Параметры) Экспорт Если Результат.Результат Тогда ОбработатьШтрихкоды(Результат.ТаблицаТоваров); Иначе МенеджерОборудованияКлиентПереопределяемый.СообщитьОбОшибке(Результат); КонецЕсли; КонецПроцедуры &НаСервере Функция ПолучитьСтруктуруСообщений() Возврат СкидкиНаценкиСервер.ПолучитьСтруктуруСообщений(Объект); КонецФункции &НаКлиенте Процедура ПоказатьСообщения(Команда) СкидкиНаценкиКлиент.ОткрытьФормуСообщений(ПолучитьСтруктуруСообщений(), ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура СчитатьКартуЛояльности(Команда) Если Объект.Согласован Тогда Возврат; КонецЕсли; ОткрытьФорму( "Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности", Новый Структура("Партнер", Объект.Партнер), ЭтаФорма, ЭтаФорма.УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура РеквизитыПечати(Команда) СтруктураПараметров = Новый Структура(); СтруктураПараметров.Вставить("АдресДоставки", Объект.АдресДоставки); СтруктураПараметров.Вставить("БанковскийСчетГрузоотправителя", Объект.БанковскийСчетГрузоотправителя); СтруктураПараметров.Вставить("БанковскийСчетГрузополучателя", Объект.БанковскийСчетГрузополучателя); СтруктураПараметров.Вставить("БанковскийСчетКонтрагента", Объект.БанковскийСчетКонтрагента); СтруктураПараметров.Вставить("Грузоотправитель", Объект.Грузоотправитель); СтруктураПараметров.Вставить("Грузополучатель", Объект.Грузополучатель); СтруктураПараметров.Вставить("Партнер", Объект.Партнер); СтруктураПараметров.Вставить("ХозяйственнаяОперация", Объект.ХозяйственнаяОперация); СтруктураПараметров.Вставить("Контрагент", Объект.Контрагент); СтруктураПараметров.Вставить("БанковскийСчет", Объект.БанковскийСчет); СтруктураПараметров.Вставить("Организация", Объект.Организация); СтруктураПараметров.Вставить("Дата", Объект.Дата); СтруктураПараметров.Вставить("Руководитель", Объект.Руководитель); СтруктураПараметров.Вставить("ГлавныйБухгалтер", Объект.ГлавныйБухгалтер); СтруктураПараметров.Вставить("НазначениеПлатежа", Объект.НазначениеПлатежа); СтруктураПараметров.Вставить("НомерЗаказа", ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(Объект.Номер)); СтруктураПараметров.Вставить("ДатаЗаказа", Формат(Объект.Дата, "ДЛФ = D")); СтруктураПараметров.Вставить("ПараметрыВыбораРеквизитов", ПараметрыВыбораРеквизитов); ОткрытьФорму("Документ.ЗаказКлиента.Форма.РеквизитыПечати", СтруктураПараметров, ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Процедура ВставитьСтроки(Команда) КоличествоТоваровДоВставки = Объект.Товары.Количество(); ПолучитьСтрокиИзБуфераОбмена(); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); КоличествоВставленных = Объект.Товары.Количество()-КоличествоТоваровДоВставки; КопированиеСтрокКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных); КонецПроцедуры &НаКлиенте Процедура СкопироватьСтроки(Команда) Если КопированиеСтрокКлиент.ВозможноКопированиеСтрок(Элементы.Товары.ТекущаяСтрока) Тогда СкопироватьСтрокиНаСервере(); КопированиеСтрокКлиент.ОповеститьПользователяОКопированииСтрок(Элементы.Товары.ВыделенныеСтроки.Количество()); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДополнитьМногооборотнойТарой(Команда) МногооборотнаяТараКлиент.ПодобратьМногооборотнуюТару( ЭтаФорма, "Товары", "Номенклатура,Характеристика,Количество,Склад,ДатаОтгрузки"); КонецПроцедуры &НаКлиенте Процедура ЗагрузитьИзВнешнегоФайла(Команда) ПараметрыФормы = Новый Структура(); ПараметрыФормы.Вставить("ЗагружатьЦены", Истина); ПараметрыФормы.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС); ПараметрыФормы.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС); ПараметрыФормы.Вставить("ВернутьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару); ПараметрыФормы.Вставить("Соглашение", Объект.Соглашение); ПараметрыФормы.Вставить("Дата", Объект.Дата); ПараметрыФормы.Вставить("Валюта", Объект.Валюта); Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") Тогда ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый ФиксированныйМассив(НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре())); КонецЕсли; ОткрытьФорму( "Обработка.ЗагрузкаДанныхИзВнешнихФайлов.Форма.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура ПровестиИЗакрыть(Команда) ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма, Истина); КонецПроцедуры // ИнтеграцияС1СДокументооборотом &НаКлиенте Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда) ИнтеграцияС1СДокументооборотКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтаФорма, Объект); КонецПроцедуры //Конец ИнтеграцияС1СДокументооборотом &НаКлиенте Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда) СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда) ЭлектронноеВзаимодействиеСлужебныйКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтаФорма, Объект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбработчикОжиданияЭДО() ОбменСКонтрагентамиКлиент.ОбработчикОжиданияЭДО(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ЗакрытьЗаказ(Команда) Если Модифицированность Или Не Объект.Проведен Тогда Ответ = Неопределено; ПоказатьВопрос(Новый ОписаниеОповещения("ЗакрытьЗаказЗавершение", ЭтотОбъект), НСтр("ru = 'Необходимо провести документ для выполнения операции. Провести документ?'"), РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; ЗакрытьЗаказФрагмент(); КонецПроцедуры &НаКлиенте Процедура ЗакрытьЗаказФрагмент() СписокЗаказовКЗакрытию = Новый СписокЗначений; СписокЗаказовКЗакрытию.Добавить(Объект.Ссылка); СтруктураЗакрытия = Новый Структура; СтруктураЗакрытия.Вставить("Заказы", СписокЗаказовКЗакрытию); СтруктураЗакрытия.Вставить("ДокументИнициатор", Объект.Ссылка); СтруктураЗакрытия.Вставить("ОтменитьНеотработанныеСтроки", Истина); СтруктураЗакрытия.Вставить("ЗакрыватьЗаказы", Истина); СтруктураЗакрытия.Вставить("ТаблицаТоваровРасход", ПоместитьВоВременноеХранилищеНаСервере("Товары", Новый УникальныйИдентификатор)); ОткрытьФорму("Обработка.ПомощникЗакрытияЗаказов.Форма.ФормаЗакрытия", СтруктураЗакрытия, ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецПроцедуры &НаКлиенте Процедура ЗакрытьЗаказЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт Ответ = РезультатВопроса; Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; ИначеЕсли Не Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)) Тогда Возврат; КонецЕсли; ЗакрытьЗаказФрагмент(); КонецПроцедуры &НаКлиенте Процедура ЗаписатьДокумент(Команда) ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма, Истина); КонецПроцедуры &НаКлиенте Процедура ПровестиДокумент(Команда) ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма, Истина); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // СтандартныеПодсистемы.Свойства &НаСервере Процедура СвойстваВыполнитьОтложеннуюИнициализацию() УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ОбновитьЗависимостиДополнительныхРеквизитов() УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства &НаСервере Процедура ЗаполнитьПодчиненныеСвойстваПоСтатистике(ИмяРеквизитаРодителя) ЗаполнениеСвойствПоСтатистикеСервер.ЗаполнитьПодчиненныеСвойства(Объект, ИмяРеквизитаРодителя); КонецПроцедуры &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); // Условное оформление обеспечения. ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного( УсловноеОформление,"ДатаОтгрузки", "ДатаОтгрузки", "", "ДатаОтгрузкиОбязательна"); ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного( УсловноеОформление, "ТоварыДатаОтгрузки", "ДатаОтгрузки", "Товары", "ДатаОтгрузкиОбязательна"); ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного( УсловноеОформление, "ТоварыСклад", "Склад", "Товары", "СкладОбязателен"); ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного( УсловноеОформление, "Склад", "Склад", "", "СкладОбязателен"); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Состояние.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СостояниеПросрочено"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПросроченныйДокумент); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Состояние.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Состояние"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Перечисления.СостоянияЗаказовКлиентов.Закрыт; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗакрытыйДокумент); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыПроцентАвтоматическойСкидки.Имя); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаАвтоматическойСкидки.Имя); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыПроцентРучнойСкидки.Имя); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСуммаРучнойСкидки.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Отменено"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; Элемент.Оформление.УстановитьЗначениеПараметра("ВыделятьОтрицательные", Истина); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЦена.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВидЦены"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСумма.Имя); ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ; ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВидЦены"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; ГруппаОтбора3 = ГруппаОтбора2.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора3.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; ОтборЭлемента = ГруппаОтбора3.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьРучныеСкидкиВПродажах"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; ОтборЭлемента = ГруппаОтбора3.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ХозяйственнаяОперация"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию; Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); // Ценообразование.УстановитьУсловноеОформлениеСуммНДС(ЭтаФорма); // Ценообразование.УстановитьУсловноеОформлениеСтавкиНДС(ЭтаФорма); // Ценообразование.УстановитьУсловноеОформлениеЦенаВключаетНДС(ЭтаФорма); // НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма); // ОбщегоНазначенияУТ.УстановитьУсловноеОформлениеПриоритета(ЭтаФорма); // НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма); // СкладыСервер.УстановитьУсловноеОформлениеСкладаВТЧ(ЭтаФорма); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СкладГруппа"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; Элемент.Оформление.УстановитьЗначениеПараметра("Доступность", Ложь); // Ценообразование.УстановитьУсловноеОформлениеВидовЦен(ЭтаФорма); // НоменклатураСервер.УстановитьУсловноеОформлениеСодержания(ЭтаФорма); // ПараметрыУстановки = МногооборотнаяТараСервер.ПараметрыУстановкиУсловногоОформленияДляСтрокСМногооборотнойТарой(); ПараметрыУстановки.Форма = ЭтаФорма; ПараметрыУстановки.ЭтоПоступление = Истина; МногооборотнаяТараСервер.УстановитьУсловноеОформлениеДляСтрокСМногооборотнойТарой(ПараметрыУстановки); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСклад.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке; СписокЗначений = Новый СписокЗначений; СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.Товар); СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.МногооборотнаяТара); ОтборЭлемента.ПравоеЗначение = СписокЗначений; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Склад"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы); Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<для товаров>'")); Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина); // НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииВсегдаВТЧТовары"); // Запрос = Новый Запрос( "ВЫБРАТЬ | Приоритеты.Ссылка КАК Приоритет, | Приоритеты.Цвет КАК Цвет |ИЗ | Справочник.Приоритеты КАК Приоритеты"); РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Приоритет.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Приоритет"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Выборка.Приоритет; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", Выборка.Цвет.Получить()); КонецЦикла; КонецЕсли; // НаборыСервер.УстановитьУсловноеОформление(ЭтаФорма, "Товары"); // ЗаказыСервер.УстановитьОформлениеОтмененнойСтроки(УсловноеОформление, Элементы.Товары, Элементы.ТоварыОтменено.Имя, Элементы.ТоварыПричинаОтмены.Имя, Элементы.ТоварыЦена.Имя, Элементы.ТоварыСумма.Имя); НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеНаправленияДеятельности(ЭтаФорма); КонецПроцедуры // СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки &НаСервере Процедура ДополнительныеОтчетыИОбработкиВыполнитьНазначаемуюКомандуНаСервере(ИмяЭлемента, РезультатВыполнения) ДополнительныеОтчетыИОбработки.ВыполнитьНазначаемуюКомандуНаСервере(ЭтаФорма, ИмяЭлемента, РезультатВыполнения); КонецПроцедуры // Конец СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки #Область Обеспечение &НаСервере Функция ПараметрыВыбораОбеспечения() ПутиКДанным = Новый Соответствие(); ПутиКДанным.Вставить("ДатаОтгрузкиРабот", "ДатаОтгрузки"); ПараметрыЗаполнения = Новый Структура("СтатусКВыполнению, ГруппаСкладов, МенеджерРегистра", Объект.Статус <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован, Объект.Склад, РегистрыНакопления.ЗаказыКлиентов); Результат = ОбеспечениеСервер.ПараметрыВыбораОбеспечения( Элементы.Товары.ТекущаяСтрока, Объект, Объект.Товары, ПутиКДанным, ПараметрыЗаполнения); ОбеспечениеСервер.ДобавитьСвойствоАдресТаблицыПодобраноРанее(Результат, УникальныйИдентификатор); Возврат Результат; КонецФункции &НаКлиенте Функция ПараметрыФормыЗапросаКоличестваИСерий() ПараметрыПроверки = ОбеспечениеКлиентСервер.ИнициализироватьПараметрыПроверкиЗаполнения(); ПараметрыПроверки.Поля.Удалить("Подразделение"); Если Не ОбеспечениеКлиентСервер.ПроверитьЗаполнение( Объект, Объект.Товары, Элементы.Товары.ТекущаяСтрока, ПараметрыПроверки, Неопределено, Объект.Склад) Тогда Возврат Неопределено; КонецЕсли; ПараметрыФормы = ПараметрыВыбораОбеспечения(); // получен, в том числе, параметр "АдресТаблицыПодобраноРанее". Если Не ТипЗнч(ПараметрыФормы) = Тип("Структура") Тогда Ошибки = ОбеспечениеКлиентСервер.ОшибкиКонтроляОтгрузкиИОбеспечения(ПараметрыФормы, "Товары", НСтр("ru = 'Товары'")); ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки); Возврат Неопределено; КонецЕсли; ПараметрыФормы.Вставить("ПодборТоваров", Ложь); ТекущаяСтрока = Элементы.Товары.ТекущиеДанные; ПараметрыФормы.Вставить("Дата", Объект.Дата); ПараметрыФормы.Вставить("Склад", Объект.Склад); ПараметрыФормы.Вставить("ИспользоватьСкладыВТабличнойЧасти", Истина); ПараметрыФормы.Вставить("Упаковка", ТекущаяСтрока.Упаковка); ПараметрыФормы.Вставить("Серия", ТекущаяСтрока.Серия); ПараметрыФормы.Вставить("ПараметрыУказанияСерий", ПараметрыУказанияСерий); ПараметрыФормы.Вставить("Регистратор", Объект.Ссылка); // Остальные параметры получены при вызове ПараметрыВыбораОбеспечения() ПараметрыФормы.Вставить("Назначение", ПараметрыФормы.Отбор.Назначение); ПараметрыФормы.Вставить("Подразделение", ПараметрыФормы.Отбор.Подразделение); ПараметрыФормы.Вставить("Номенклатура", ПараметрыФормы.Отбор.Номенклатура); ПараметрыФормы.Вставить("Характеристика", ПараметрыФормы.Отбор.Характеристика); ПараметрыФормы.Вставить("ТипНоменклатуры", ПараметрыФормы.Отбор.ТипНоменклатуры); ПараметрыФормы.Вставить("СкладВТЧ", ПараметрыФормы.Отбор.Склад); ПараметрыФормы.Вставить("ВариантОбеспечения", ПараметрыФормы.ТекущийВариант.ВариантОбеспечения); ПараметрыФормы.Вставить("Количество", ПараметрыФормы.ТекущийВариант.Количество); Возврат ПараметрыФормы КонецФункции &НаСервере Функция ПодготовитьДанныеДляОбеспеченияЗаказа() РеквизитыЗаказа = Новый Структура("ЖелаемаяДатаОтгрузки, Ссылка, НеОтгружатьЧастями, Статус, Дата, Партнер, Менеджер"); ЗаполнитьЗначенияСвойств(РеквизитыЗаказа, Объект); //Описание особенностей формы - дату отгрузки работ необходимо брать из поля "Дата отгрузки". ПутиКДанным = Новый Соответствие(); ПутиКДанным.Вставить("ДатаОтгрузкиРабот", "ДатаОтгрузки"); ТаблицаТовары = ОбеспечениеСервер.СтрокиВТаблицу(Объект.Товары, Объект, ПутиКДанным); АдресТаблицыТовары = ПоместитьВоВременноеХранилище(ТаблицаТовары); ПараметрыЗаполнения = Новый Структура("СтатусКВыполнению, ИмяМенеджераРегистра", Объект.Статус <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован, "ЗаказыКлиентов"); ПараметрыФормы = ОбеспечениеКлиентСервер.ПараметрыФормыСостояниеОбеспеченияЗаказов(); ПараметрыФормы.ВызовИзФормыЗаказа = Истина; ПараметрыФормы.РеквизитыЗаказа = РеквизитыЗаказа; ПараметрыФормы.АдресТаблицыТовары = АдресТаблицыТовары; ПараметрыФормы.ПараметрыВыполненияДействий = ПараметрыЗаполнения; Возврат ПараметрыФормы; КонецФункции &НаКлиенте Процедура ОбработатьВыборВариантаОбеспечения(СтруктураПодобранныеТовары, ДополнительныеПараметры) Экспорт Если Не ЗначениеЗаполнено(СтруктураПодобранныеТовары) Тогда Возврат; КонецЕсли; ЗначенияРеквизитов = ОбеспечениеКлиентСервер.ЗначенияРеквизитовДокументаДляВопросаОбОтгрузкеОднойДатой(); ЗначенияРеквизитов.ДатаОтгрузки = Объект.ДатаОтгрузки; ЗначенияРеквизитов.ЖелаемаяДатаОтгрузки = Объект.ЖелаемаяДатаОтгрузки; ЗначенияРеквизитов.НеОтгружатьЧастями = Объект.НеОтгружатьЧастями; ОбеспечениеКлиент.ПоказатьВопросОбОтгрузкеОднойДатой( ЭтаФорма, ЗначенияРеквизитов, СтруктураПодобранныеТовары, "ЗаполнитьВариантОбеспеченияПослеВопроса", Объект.Товары.Количество() > 1); КонецПроцедуры &НаКлиенте Процедура ЗаполнитьВариантОбеспеченияПослеВопроса(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда Объект.НеОтгружатьЧастями = Ложь; УстановитьВидимостьЭлементовФормыДатОтгрузки(); КонецЕсли; Оповещение = ЗаполнитьВариантОбеспечения(ДополнительныеПараметры.ПодобранныеТовары); ПоказатьОповещениеПользователя(ОбеспечениеКлиентСервер.ТекстЗаполнениеОбеспечения(), , Оповещение); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаСервере Функция ЗаполнитьВариантОбеспечения(ВыбранноеЗначение) Для Каждого Элемент Из ВыбранноеЗначение Цикл Элемент.Вставить("Идентификатор", Элементы.Товары.ТекущаяСтрока); КонецЦикла; ТекстОповещения = Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения( Объект, ЭтаФорма, "СтрокаТовары", ВыбранноеЗначение, ПараметрыУказанияСерий, ЗависимыеРеквизиты()); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); Возврат ТекстОповещения; КонецФункции &НаСервере Функция ЗаполнитьОбеспечениеВУстановленномПорядке(ВыбранноеЗначение) ПараметрыЗаполнения = Новый Структура("ПереченьВариантов, ИзменятьОбособление, ЗаполнятьЦелымиУпаковками", Неопределено, Истина, Ложь); ЗаполнитьЗначенияСвойств(ПараметрыЗаполнения, ВыбранноеЗначение); ПутиКДанным = Новый Соответствие; //Описание особенностей формы ПутиКДанным.Вставить("ДатаОтгрузкиРабот", "ДатаОтгрузки"); // дату отгрузки работ необходимо брать из поля "Дата отгрузки". ПараметрыДокумента = Новый Структура; ПараметрыДокумента.Вставить("СтатусКВыполнению", Объект.Статус <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован); ПараметрыДокумента.Вставить("ГруппаСкладов", Объект.Склад); ПараметрыДокумента.Вставить("МенеджерРегистра", РегистрыНакопления.ЗаказыКлиентов); ПараметрыДокумента.Вставить("ПутиКДанным", ПутиКДанным); Таблица = ОбеспечениеСервер.ТаблицаЗаполнениеОбеспечения( Элементы.Товары.ВыделенныеСтроки, Объект, Объект.Товары, ПараметрыЗаполнения, ПараметрыДокумента); Если ТипЗнч(Таблица) <> Тип("ТаблицаЗначений") Тогда Возврат Новый Структура( "Ошибки", ОбеспечениеКлиентСервер.ОшибкиКонтроляОтгрузкиИОбеспечения( Таблица, "Товары", НСтр("ru = 'Товары'"))); КонецЕсли; //Перенос результатов в документ. ТекстОповещения = Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения( Объект, ЭтаФорма, "СтрокиТовары", Таблица, ПараметрыУказанияСерий, ЗависимыеРеквизиты()); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Возврат Новый Структура("Ошибки, Оповещение", Неопределено, ТекстОповещения); КонецФункции &НаСервере Функция ЗаполнитьОбеспечениеЗаказа(ВыбранноеЗначение) Если ВыбранноеЗначение.ОтгружатьЧастями Тогда Объект.НеОтгружатьЧастями = Ложь; УстановитьВидимостьЭлементовФормыДатОтгрузки(); КонецЕсли; ТаблицаОбеспечения = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресВХранилище); ТекстОповещения = Документы.ЗаказКлиента.ЗаполнитьВариантОбеспечения( Объект, ЭтаФорма, "Заказ", ТаблицаОбеспечения, ПараметрыУказанияСерий, ЗависимыеРеквизиты()); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Возврат ТекстОповещения; КонецФункции &НаКлиенте Процедура СоздатьКорректировкуНазначенияЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт Ответ = РезультатВопроса; Если Ответ = КодВозвратаДиалога.Нет Тогда Возврат; Иначе Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)); КонецЕсли; ЕстьТоварыКОбособленномуОбеспечению = ЕстьТоварыКОбособленномуОбеспечению(); Если ЕстьТоварыКОбособленномуОбеспечению И Объект.Проведен И Не Модифицированность Тогда // Если документ записан впервые, в ОбъектыОснований находится пустая ссылка, нужно актуализировать ОбъектыОснований = Новый Массив(); ОбъектыОснований.Добавить(Объект.Ссылка); ДополнительныеПараметры.ОписаниеКоманды.Вставить("ОбъектыОснований", ОбъектыОснований); Если ДополнительныеПараметры.Резервирование Тогда ВводНаОснованииУТКлиент.ОткрытьМастерРезервирования(ДополнительныеПараметры.ОписаниеКоманды); Иначе ВводНаОснованииУТКлиент.ОткрытьМастерСнятияРезерва(ДополнительныеПараметры.ОписаниеКоманды); КонецЕсли; ИначеЕсли Не ЕстьТоварыКОбособленномуОбеспечению И Объект.Проведен Тогда ОбеспечениеКлиент.СообщитьОбОтсутствииТовараКОбособленномуОбеспечению(); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ДатыОтгрузки &НаСервере Процедура УстановитьВидимостьЭлементовФормыДатОтгрузки() Элементы.ТоварыДатаОтгрузки.Видимость = Не Объект.НеОтгружатьЧастями; Элементы.ДатаОтгрузки.Видимость = Объект.НеОтгружатьЧастями; Элементы.ЗаполнитьДатуОтгрузки.Видимость = Не Объект.НеОтгружатьЧастями; КонецПроцедуры &НаСервере Процедура ЗаполнитьДатуОтгрузкиСервер(ДатаОтгрузки, МассивВыделенныхСтрок) ОбеспечениеСервер.ЗаполнитьРеквизитВКоллекции(Объект.Товары, "ДатаОтгрузки", ДатаОтгрузки, МассивВыделенныхСтрок); КонецПроцедуры &НаСервере Процедура ПриИзмененииДатыОтгрузкиВТабЧасти() Если Объект.НеОтгружатьЧастями Тогда МаксимальнаяДата = ОбеспечениеСервер.МаксимальноеЗначениеВКоллекции(Объект.Товары, "ДатаОтгрузки", '00010101'); Объект.ДатаОтгрузки = ?(ЗначениеЗаполнено(МаксимальнаяДата), МаксимальнаяДата, Объект.ДатаОтгрузки); ОбеспечениеСервер.ЗаполнитьРеквизитВКоллекции(Объект.Товары, "ДатаОтгрузки", Объект.ДатаОтгрузки); КонецЕсли; КонецПроцедуры &НаСервере Процедура НеОтгружатьЧастямиПриИзмененииСервер() Если Объект.НеОтгружатьЧастями Тогда Объект.ДатаОтгрузки = ОбеспечениеСервер.МаксимальноеЗначениеВКоллекции(Объект.Товары, "ДатаОтгрузки", '00010101'); ОбеспечениеСервер.ЗаполнитьРеквизитВКоллекции(Объект.Товары, "ДатаОтгрузки", Объект.ДатаОтгрузки); КонецЕсли; УстановитьВидимостьЭлементовФормыДатОтгрузки(); КонецПроцедуры #КонецОбласти #Область ПриИзмененииРеквизитов &НаСервере Процедура ПриИзмененииПартнераСервер() Если ИспользоватьСоглашенияСКлиентами Тогда ЗаполнитьУсловияПродаж(); КонецЕсли; ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Объект.Партнер, Объект.Контрагент); ПриИзмененииСкладаСервер(); ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); ОбновитьДубликатыЗависимыхРеквизитов(); Объект.БанковскийСчетКонтрагента = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Объект.Контрагент); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор); ОбновитьДоступностьЭлементовВозвратнойТары(ЭтаФорма); ЗаполнитьУстановитьРеквизитыДоставкиСервер("Партнер"); ВзаиморасчетыСервер.ЗаполнитьПорядокРасчетовВФорме(ЭтаФорма, Ложь); ОбновитьОграничениеЗадолженности(); ЗаполнитьПодчиненныеСвойстваПоСтатистике("Контрагент"); ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект); УстановитьВидимостьЗапретаОтгрузкиПартнеру(); ПродажиСервер.ПартнерПриИзменении(Объект); РассылкиИОповещенияКлиентам.УстановитьВидимостьПодпискиНаОповещенияВОбъекте( Элементы.ГруппаПодпискаНаОповещения, Объект.Партнер, ПредопределенноеЗначение("Перечисление.ТипыСобытийОповещений.ИзменениеСостоянияЗаказа")); Если ИспользоватьНаправленияДеятельности Тогда НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор); КонецЕсли; НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельностиСервер(ЭтаФорма); //{{Доработка УстановитьСоглашениеРозница(); //}}Доработка КонецПроцедуры &НаСервере Процедура КонтактноеЛицоПриИзмененииСервер(ПартнерИзменился) ВладелецКонтактногоЛица = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.КонтактноеЛицо, "Владелец"); Если ВладелецКонтактногоЛица <> Объект.Партнер Тогда Объект.Партнер = ВладелецКонтактногоЛица; ПриИзмененииПартнераСервер(); ПартнерИзменился = Истина; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриИзмененииСоглашенияСервер() ГрафикОплаты = Объект.ГрафикОплаты; ДокументПродажи = РеквизитФормыВЗначение("Объект"); ДокументПродажи.ЗаполнитьУсловияПродажПоСоглашению(); ЗначениеВРеквизитФормы(ДокументПродажи, "Объект"); ВалютаДокумента = Объект.Валюта; НалогообложениеИзСоглашения = ПродажиСервер.НалогообложениеОпределяетсяИзСоглашения(Объект.Соглашение); ПриИзмененииХозяйственнойОперацииСервер(Ложь); ПриИзмененииСкладаСервер(); НекорректнаяДатаОплаты = Объект.ЭтапыГрафикаОплаты.Количество() = 0 ИЛИ Объект.ЭтапыГрафикаОплаты.Получить(0).ДатаПлатежа < Объект.Дата; ЗаполнитьЭтапыОплатыСервер( ИспользоватьСоглашенияСКлиентами И ПродажиВызовСервера.ГрафикСоглашенияЗаполнен(Объект.Соглашение), ИспользоватьГрафикиОплаты И ЗначениеЗаполнено(Объект.ГрафикОплаты) И (ГрафикОплаты <> Объект.ГрафикОплаты ИЛИ НекорректнаяДатаОплаты)); ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); ОбновитьДубликатыЗависимыхРеквизитов(); Объект.БанковскийСчетКонтрагента = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Объект.Контрагент); ДенежныеСредстваСервер.ПроверитьЗаполнитьБанковскийСчетОрганизацииПоВладельцу(Объект.Организация, Объект.БанковскийСчет, , Объект.НаправлениеДеятельности); ДенежныеСредстваСервер.ПроверитьЗаполнитьКассуОрганизацииПоВладельцу(Объект.Организация, Объект.Касса, Объект.ФормаОплаты, Объект.НаправлениеДеятельности); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); УстановитьВидимостьОпераций(); ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор); ЗаполнитьГруппуФинУчета(); ОбновитьДоступностьЭлементовВозвратнойТары(ЭтаФорма); ВзаиморасчетыСервер.ЗаполнитьПорядокРасчетовВФорме(ЭтаФорма, Ложь); ОбновитьОграничениеЗадолженности(); ЗаполнитьПодчиненныеСвойстваПоСтатистике("Договор"); ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект); ВариантыОбеспечения = ПродажиСервер.ВариантыОбеспеченияПоУмолчанию(Объект.Соглашение, Объект.Статус); Если ИспользоватьНаправленияДеятельности Тогда НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор); КонецЕсли; НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельностиСервер(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ПриИзмененииВалютыСервер(НоваяВалюта, ПересчитатьСуммы = Истина) ЗаполнитьДоговорПоУмолчанию(); Если ПересчитатьСуммы Тогда СтараяВалюта = ВалютаДокумента; ДатаДокумента = ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, ТекущаяДата()); СтруктураКурсовСтаройВалюты = РаботаСКурсамиВалют.ПолучитьКурсВалюты(СтараяВалюта, ДатаДокумента); СтруктураКурсовНовойВалюты = РаботаСКурсамиВалют.ПолучитьКурсВалюты(НоваяВалюта, ДатаДокумента); Ценообразование.ПересчитатьСуммыТабличнойЧастиВВалюту( Объект.Товары, Объект.ЦенаВключаетНДС, СтараяВалюта, НоваяВалюта, СтруктураКурсовСтаройВалюты, СтруктураКурсовНовойВалюты, Истина, Истина); ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты()); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Ценообразование.РаспределитьСуммуПоЭтапамОплаты(Объект, СуммаЗаказано, СуммаЗалогаЗаТару); КонецЕсли; ЗаполнитьПодчиненныеСвойстваПоСтатистике("Валюта"); ЗаполнитьПорядокОплатыПоУмолчанию(); КонецПроцедуры &НаСервере Процедура НалогообложениеНДСПриИзмененииСервер(КэшированныеЗначения = Неопределено) СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Объект.НалогообложениеНДС); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения); ОбновитьДубликатыЗависимыхРеквизитов(); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения) СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения); ОбновитьДубликатыЗависимыхРеквизитов(); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Если НЕ ИспользоватьСоглашенияСКлиентами Тогда ПараметрыВыбораВидаЦены = ЗначениеНастроекПовтИсп.ПараметрыВыбораВидаЦеныПоУмолчанию(); ПараметрыВыбораВидаЦены.ЦенаВключаетНДС = Объект.ЦенаВключаетНДС; ПараметрыВыбораВидаЦены.ИспользоватьПриПродаже = Истина; ПараметрыВыбораВидаЦены.Статус = Перечисления.СтатусыДействияВидовЦен.Действует; ВидЦеныПоУмолчанию = ЗначениеНастроекПовтИсп.ВидЦеныПоУмолчанию(ПараметрыВыбораВидаЦены); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриИзмененииОрганизацииСервер() ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор); Если ЗначениеЗаполнено(Объект.Организация) Тогда ЗаполнитьДоговорПоУмолчанию(); Если ИспользоватьНаправленияДеятельности Тогда НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение, Объект.Договор); КонецЕсли; Если Не (ИспользоватьСоглашенияСКлиентами И НалогообложениеИзСоглашения) Тогда Объект.НалогообложениеНДС = ЗначениеНастроекПовтИсп.ПолучитьНалогообложениеНДС(Объект.Организация, Объект.Склад, Объект.Дата); НалогообложениеНДСПриИзмененииСервер(); КонецЕсли; КонецЕсли; ДенежныеСредстваСервер.ПроверитьЗаполнитьБанковскийСчетОрганизацииПоВладельцу(Объект.Организация, Объект.БанковскийСчет, , Объект.НаправлениеДеятельности); ДенежныеСредстваСервер.ПроверитьЗаполнитьКассуОрганизацииПоВладельцу(Объект.Организация, Объект.Касса, Объект.ФормаОплаты, Объект.НаправлениеДеятельности); ЗаполнитьПодчиненныеСвойстваПоСтатистике("Организация"); ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект); НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельностиСервер(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ПриИзмененииСкладаСервер() СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Объект.Склад); СкладыСервер.ЗаполнитьСкладыВТабличнойЧасти(Объект.Склад, СкладГруппа, Объект.Товары, Ложь); УстановитьПараметрыВыбораТоварыСклад(); Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Доступность = СкладГруппа; ПодготовитьЗаполнитьУстановитьВидимостьСерий(); Если Не (ИспользоватьСоглашенияСКлиентами И НалогообложениеИзСоглашения) Тогда Объект.НалогообложениеНДС = ЗначениеНастроекПовтИсп.ПолучитьНалогообложениеНДС(Объект.Организация, Объект.Склад, Объект.Дата); НалогообложениеНДСПриИзмененииСервер(); КонецЕсли; СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); КонецПроцедуры &НаСервере Процедура СтатусПриИзмененииСервер() ВариантыОбеспечения = ПродажиСервер.ВариантыОбеспеченияПоУмолчанию(Объект.Соглашение, Объект.Статус); Если НЕ ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента") Тогда Если ОбеспечениеСервер.ЗаполнитьВариантОбеспеченияПоУмолчанию(Объект.Товары, Ложь, Объект.Статус) Тогда НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); КонецЕсли; КонецЕсли; УстановитьДоступностьЭлементовПоСтатусуСервер(); КонецПроцедуры &НаСервере Процедура ПриИзмененииХозяйственнойОперацииСервер(ВызовПоКоманде=Истина) Если ВызовПоКоманде Тогда ЗаполнитьДоговорПоУмолчанию(); КонецЕсли; Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию Тогда Если (ИспользоватьРучныеСкидкиВПродажах Или ИспользоватьАвтоматическиеСкидкиВПродажах)Тогда СкидкиНаценкиСервер.ОтменитьСкидки(Объект, "Товары", Истина); СкидкиНаценкиСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения, Ложь); КонецЕсли; Если Объект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД Тогда Объект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПустаяСсылка(); КонецЕсли; Если Объект.ТребуетсяЗалогЗаТару Тогда Объект.ТребуетсяЗалогЗаТару = Ложь; КонецЕсли; КонецЕсли; ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); ОбновитьДубликатыЗависимыхРеквизитов(); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); УстановитьВидимостьЭлементовПоОперацииСервер(); ОбновитьСостояниеЭлементовУправленияИтоговПоРасчетам(); КонецПроцедуры &НаСервере Функция ДатаПриИзмененииСервер(ПересчитыватьЦены) Если ПересчитыватьЦены Тогда ЦеныРассчитаны = ЗаполнитьЦеныПоСоглашениюСервер(Истина); Иначе ЦеныРассчитаны = Ложь; КонецЕсли; ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект); Возврат ЦеныРассчитаны; КонецФункции &НаСервере Процедура НаправлениеДеятельностиПриИзмененииСервер() Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда ЗаполнитьДоговорПоУмолчанию(); КонецЕсли; НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельностиСервер(ЭтаФорма); КонецПроцедуры #КонецОбласти #Область ЦенообразованиеИСкидки &НаСервере Функция ЗаполнитьЦеныПоСоглашениюСервер(ПоВсемСтрокам = Ложь) Если ПоВсемСтрокам Тогда МассивСтрок = Неопределено; Иначе МассивСтрок = Новый Массив; Для Каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл МассивСтрок.Добавить(Объект.Товары.НайтиПоИдентификатору(Строка)); КонецЦикла; КонецЕсли; НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Товары, МассивСтрок); СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку"); ПараметрыЗаполнения = Новый Структура(); ПараметрыЗаполнения.Вставить("Дата", Объект.Дата); ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта); ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение); ПараметрыЗаполнения.Вставить("Организация", Объект.Организация); ПараметрыЗаполнения.Вставить("РасчитыватьНаборы", Истина); ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС, ВидЦены, СрокПоставки"); ЦеныРассчитаны = ПродажиСервер.ЗаполнитьЦены( Объект.Товары, МассивСтрок, // Массив строк или структура отбора ПараметрыЗаполнения, СтруктураДействий); ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты()); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Возврат ЦеныРассчитаны; КонецФункции &НаСервере Функция ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен) МассивСтрок = Новый Массив; Для Каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл МассивСтрок.Добавить(Объект.Товары.НайтиПоИдентификатору(Строка)); КонецЦикла; НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Товары, МассивСтрок); СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку"); ПараметрыЗаполнения = Новый Структура(); ПараметрыЗаполнения.Вставить("Дата", Объект.Дата); ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта); ПараметрыЗаполнения.Вставить("ВидЦены", ВидЦен); ПараметрыЗаполнения.Вставить("РасчитыватьНаборы", Истина); ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, ВидЦены"); ЦеныРассчитаны = ПродажиСервер.ЗаполнитьЦены( Объект.Товары, МассивСтрок, // Массив строк или структура отбора ПараметрыЗаполнения, СтруктураДействий); ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты()); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Возврат ЦеныРассчитаны; КонецФункции &НаСервере Процедура РассчитатьСкидкиБезПримененияКОбъекту() СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("ПрименятьКОбъекту", Ложь); СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь); СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина); СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки); ПримененныеСкидки = СкидкиНаценкиСервер.Рассчитать(Объект, СтруктураПараметры); АдресПримененныхСкидокВоВременномХранилище = ПоместитьВоВременноеХранилище(ПримененныеСкидки, УникальныйИдентификатор); КонецПроцедуры &НаСервере Функция РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры, ВзятьИзВременногоХранилища = Ложь) Если ВзятьИзВременногоХранилища Тогда ПримененныеСкидки = ПолучитьИзВременногоХранилища(АдресПримененныхСкидокВоВременномХранилище); СкидкиНаценкиСервер.ПрименитьРезультатРасчета(Объект, ПримененныеСкидки); Иначе ПримененныеСкидки = СкидкиНаценкиСервер.Рассчитать(Объект, СтруктураПараметры); АдресПримененныхСкидокВоВременномХранилище = ПоместитьВоВременноеХранилище(ПримененныеСкидки, УникальныйИдентификатор); КонецЕсли; Объект.СкидкиРассчитаны = Истина; ОбновитьДубликатыЗависимыхРеквизитов(); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СтруктураСообщений = СкидкиНаценкиСервер.ПолучитьСтруктуруСообщений(Объект); СкидкиНаценкиСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения); Возврат СтруктураСообщений; КонецФункции &НаСервере Процедура НазначитьРучнуюСкидкуНаСервере(СуммаСкидкиНаценки, Знач ВыделенныеСтроки, АдресВоВременномХранилище) ПараметрыСкидки = Новый Структура(); ПараметрыСкидки.Вставить("ИспользуютсяАвтоматическиеСкидки", Истина); ПараметрыСкидки.Вставить("ТолькоДляАктивныхСтрок", Ложь); ПараметрыСкидки.Вставить("РассчитыватьСуммуСНДС", Истина); ПараметрыСкидки.Вставить("ВыделенныеСтроки", ВыделенныеСтроки); ПараметрыСкидки.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище); СкидкиНаценкиСервер.НазначитьРучнуюСкидку(Объект, "Товары", СуммаСкидкиНаценки, ПараметрыСкидки); ОбновитьДубликатыЗависимыхРеквизитов(); КонецПроцедуры &НаСервере Функция ВыполнитьПредварительныйРасчетСкидокНаСервере() СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("ПрименятьКОбъекту", Ложь); СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Истина); СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина); СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки); Возврат ПоместитьВоВременноеХранилище(СкидкиНаценкиСервер.Рассчитать(Объект, СтруктураПараметры), УникальныйИдентификатор); КонецФункции &НаСервере Процедура ОтменитьРучныеСкидкиНаСервере() СкидкиНаценкиСервер.ОтменитьРучныеСкидки(Объект, "Товары", Истина, Истина); ОбновитьДубликатыЗависимыхРеквизитов(); КонецПроцедуры &НаКлиенте Процедура РассчитатьСкидкиНаценкиКлиент() СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина); СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь); СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина); СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки); СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры); Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор); КонецЕсли; ПоказатьОповещениеПользователя( НСтр("ru = 'Скидки (наценки)'"), , НСтр("ru = 'Скидки (наценки) рассчитаны'"), БиблиотекаКартинок.Информация32); КонецПроцедуры &НаКлиенте Процедура ПрименитьИзмененияСкидокНаценокНаКлиенте(Отказ) СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(Неопределено, Истина); Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтаФорма, УникальныйИдентификатор); Отказ = Истина; КонецЕсли; ПоказатьОповещениеПользователя( НСтр("ru = 'Скидки (наценки)'"), , НСтр("ru = 'Скидки (наценки) рассчитаны'"), БиблиотекаКартинок.Информация32); КонецПроцедуры &НаСервере Процедура ПолученыСообщения(Сообщения) СкидкиНаценкиСервер.СохранитьОтработанныеСообщения(Объект, Сообщения); СкидкиНаценкиСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения); КонецПроцедуры &НаСервере Функция СкидкиИзменились() СтруктураПараметры = Новый Структура; СтруктураПараметры.Вставить("ПрименятьКОбъекту", Ложь); СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь); СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина); СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки); ПримененныеСкидки = СкидкиНаценкиСервер.Рассчитать(Объект, СтруктураПараметры); СкидкиИзменились = Ложь; КоличествоСтрок = ПримененныеСкидки.ТаблицаСкидкиНаценки.Количество(); Если КоличествоСтрок <> Объект.СкидкиНаценки.Количество() Тогда СкидкиИзменились = Истина; Иначе Если Объект.Товары.Итог("СуммаАвтоматическойСкидкиБезВозвратнойТары") <> Объект.СкидкиНаценки.Итог("Сумма") Тогда СкидкиИзменились = Истина; КонецЕсли; Для НомерСтроки = 1 По КоличествоСтрок Цикл Если Объект.СкидкиНаценки[НомерСтроки-1].Сумма <> ПримененныеСкидки.ТаблицаСкидкиНаценки[НомерСтроки-1].Сумма ИЛИ Объект.СкидкиНаценки[НомерСтроки-1].КлючСвязи <> ПримененныеСкидки.ТаблицаСкидкиНаценки[НомерСтроки-1].КлючСвязи ИЛИ Объект.СкидкиНаценки[НомерСтроки-1].СкидкаНаценка <> ПримененныеСкидки.ТаблицаСкидкиНаценки[НомерСтроки-1].СкидкаНаценка ИЛИ Объект.СкидкиНаценки[НомерСтроки-1].НапомнитьПозже <> ПримененныеСкидки.ТаблицаСкидкиНаценки[НомерСтроки-1].НапомнитьПозже Тогда СкидкиИзменились = Истина; Прервать; КонецЕсли; КонецЦикла; КонецЕсли; Если СкидкиИзменились Тогда АдресПримененныхСкидокВоВременномХранилище = ПоместитьВоВременноеХранилище(ПримененныеСкидки, УникальныйИдентификатор); КонецЕсли; Возврат СкидкиИзменились; КонецФункции #КонецОбласти #Область ПодборыИОбработкаПроверкиКоличества &НаСервере Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение) ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище); КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента = ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента"); Для каждого СтрокаТовара Из ТаблицаТоваров Цикл ТекущаяСтрока = Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара, "НоменклатураНабора, ХарактеристикаНабора, Номенклатура, Характеристика, Упаковка, Склад, ДатаОтгрузки, ВидЦены, Цена, КоличествоУпаковок, СрокПоставки, ПроцентРучнойСкидки, ВариантОбеспечения, Серия"); ТекущаяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора), 1, 0); СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Объект.НалогообложениеНДС); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); СтруктураДействий.Вставить("ПоместитьОбработанныеСтрокиВКэшированныеЗначения"); Если Не ЗначениеЗаполнено(СтрокаТовара.ВариантОбеспечения) Тогда ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения); СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); Если ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента Тогда СтруктураДействий.Вставить("ЗаполнитьВариантОбеспеченияПоДатеОтгрузки", ОбеспечениеКлиентСервер.СтруктураЗаполненияВариантаОбеспечения(Объект, СтрокаТовара.ДатаОтгрузки)); КонецЕсли; СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); КонецЕсли; ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект); ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); КонецЦикла; ОбеспечениеСервер.РассчитатьДатуОтгрузкиВСтрокахТабличнойЧасти(КэшированныеЗначения.ОбработанныеСтроки, Объект, Объект.Товары); Если Объект.НеОтгружатьЧастями И ИспользоватьРасширеннуюФормуПодбораКоличестваИВариантовОбеспечения Тогда Объект.ДатаОтгрузки = Макс(ВыбранноеЗначение.МаксимальнаяДатаОтгрузки, Объект.ДатаОтгрузки, НачалоДня(ТекущаяДатаСеанса())); ОбеспечениеСервер.ЗаполнитьРеквизитВКоллекции(Объект.Товары, "ДатаОтгрузки", Объект.ДатаОтгрузки); КонецЕсли; ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); ПриИзмененииДатыОтгрузкиВТабЧасти(); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары); КонецПроцедуры &НаКлиенте Процедура СообщитьОбОшибкахОткрытияПодбора(Отказ) Если ИспользоватьСоглашенияСКлиентами И Не ЗначениеЗаполнено(Объект.Соглашение) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Соглашение"" не заполнено'"), Объект.Ссылка, "Объект.Соглашение",,Отказ); КонецЕсли; Если Не ЗначениеЗаполнено(Объект.Валюта) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Валюта"" не заполнено'"), Объект.Ссылка, "Объект.Валюта",,Отказ); КонецЕсли; Если Не ЗначениеЗаполнено(Объект.Склад) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Склад"" не заполнено'"), Объект.Ссылка, "Объект.Склад",,Отказ); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ШтрихкодыИТорговоеОборудование &НаКлиенте Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов) ИзменятьКоличество = Истина; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействийСДобавленнымиСтроками = Новый Структура; СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа)); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСтавкуНДС", Объект.НалогообложениеНДС); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", Новый Структура("Номенклатура", "ХарактеристикиИспользуются")); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ВариантОформленияПродажи")); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьУсловияПродаж", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект)); Иначе СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(Объект)); КонецЕсли; ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения); СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействийСДобавленнымиСтроками.Вставить("ПоместитьОбработанныеСтрокиВКэшированныеЗначения"); СтруктураДействийСДобавленнымиСтроками.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСДобавленнымиСтроками,Объект); СтруктураДействийСИзмененнымиСтроками = Новый Структура; ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСИзмененнымиСтроками,Объект); СтруктураДействий = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов(); СтруктураДействий.Штрихкоды = ДанныеШтрихкодов; СтруктураДействий.СтруктураДействийСДобавленнымиСтроками = СтруктураДействийСДобавленнымиСтроками; СтруктураДействий.СтруктураДействийСИзмененнымиСтроками = СтруктураДействийСИзмененнымиСтроками; СтруктураДействий.ПараметрыУказанияСерий = ПараметрыУказанияСерий; СтруктураДействий.ИзменятьКоличество = ИзменятьКоличество; СтруктураДействий.РассчитыватьНаборы = Истина; ОбработатьШтрихкодыСервер(СтруктураДействий,КэшированныеЗначения); ОбеспечениеКлиент.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен); ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураДействий,КэшированныеЗначения,ЭтаФорма); Если ШтрихкодированиеНоменклатурыКлиент.НужноОткрытьФормуУказанияСерийПослеОбработкиШтрихкодов(СтруктураДействий) Тогда ТекущиеДанныеИдентификатор = СтруктураДействий.МассивСтрокССериями[0]; ПодключитьОбработчикОжидания("ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры",0.1,Истина); КонецЕсли; Если ИзменятьКоличество Тогда РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецЕсли; Если СтруктураДействий.ТекущаяСтрока <> Неопределено Тогда Элементы.Товары.ТекущаяСтрока = СтруктураДействий.ТекущаяСтрока; КонецЕсли; КонецПроцедуры &НаСервере Процедура ОбработатьШтрихкодыСервер(СтруктураПараметровДействия,КэшированныеЗначения) ШтрихкодированиеНоменклатурыСервер.ОбработатьШтрихкоды(ЭтаФорма,Объект,СтруктураПараметровДействия,КэшированныеЗначения); ОбеспечениеСервер.РассчитатьДатуОтгрузкиВСтрокахТабличнойЧасти(КэшированныеЗначения.ОбработанныеСтроки, Объект, Объект.Товары); КэшированныеЗначения.ОбработанныеСтроки.Очистить(); ПриИзмененииДатыОтгрузкиВТабЧасти(); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); КонецПроцедуры #КонецОбласти #Область Серии &НаСервере Процедура ЗаполнитьСтатусыУказанияСерий() НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); КонецПроцедуры &НаКлиенте Процедура ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры() Если ТекущиеДанныеИдентификатор = Неопределено Тогда Возврат; КонецЕсли; ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(ТекущиеДанныеИдентификатор); ОткрытьПодборСерий(,ТекущиеДанные); КонецПроцедуры #КонецОбласти #Область РаботаСБуферомОбмена &НаСервере Процедура СкопироватьСтрокиНаСервере() КопированиеСтрокСервер.ПоместитьВыделенныеСтрокиВБуферОбмена(Элементы.Товары.ВыделенныеСтроки, Объект.Товары); КонецПроцедуры &НаСервере Процедура ПолучитьСтрокиИзБуфераОбмена() Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") Тогда ПараметрыОтбора = Новый Структура(); ПараметрыОтбора.Вставить("ОтборПоТипуНоменклатуры",НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре()); ТаблицаТоваров = КопированиеСтрокСервер.ПолучитьСтрокиИзБуфераОбмена(ПараметрыОтбора); Иначе ТаблицаТоваров = КопированиеСтрокСервер.ПолучитьСтрокиИзБуфераОбмена(); КонецЕсли; Для каждого СтрокаТовара Из ТаблицаТоваров Цикл ТекущаяСтрока = Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара); ТекущаяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора), 1, 0); Если НЕ ИспользоватьРучныеСкидкиВПродажах Тогда ТекущаяСтрока.ПроцентРучнойСкидки = 0; ТекущаяСтрока.СуммаРучнойСкидки = 0; КонецЕсли; Если Объект.НеОтгружатьЧастями Тогда ТекущаяСтрока.ДатаОтгрузки = Объект.ДатаОтгрузки; КонецЕсли; СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа)); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", Объект.НалогообложениеНДС); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения); СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействий.Вставить("ПоместитьОбработанныеСтрокиВКэшированныеЗначения"); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект); КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения); КонецЦикла; ОбеспечениеСервер.РассчитатьДатуОтгрузкиВСтрокахТабличнойЧасти(КэшированныеЗначения.ОбработанныеСтроки, Объект, Объект.Товары); ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); ПриИзмененииДатыОтгрузкиВТабЧасти(); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары); КонецПроцедуры &НаСервере Процедура УстановитьДоступностьКомандБуфераОбмена() МассивЭлементов = Новый Массив(); МассивЭлементов.Добавить("ТоварыВставитьСтроки"); МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки"); ПустойБуферОбмена = ОбщегоНазначения.ПустойБуферОбмена("Строки"); ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", НЕ ПустойБуферОбмена); КонецПроцедуры &НаКлиенте Процедура УстановитьДоступностьКомандБуфераОбменаНаКлиенте() МассивЭлементов = Новый Массив(); МассивЭлементов.Добавить("ТоварыВставитьСтроки"); МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки"); ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", Истина); КонецПроцедуры #КонецОбласти #Область Доставка &НаСервере Процедура ЗаполнитьУстановитьРеквизитыДоставкиСервер(ИмяЭлементаФормы); ДоставкаТоваров.ЗаполнитьРеквизитыДоставки(Элементы, ИмяЭлементаФормы, Объект); КонецПроцедуры #КонецОбласти #Область КонтрольНесогласованныхИзменений &НаКлиенте Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент) Если Элемент.Имя = "Дата" Тогда ДатаПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "Партнер" Тогда ПартнерПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "Соглашение" Тогда СоглашениеПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "Валюта" Тогда ВалютаПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ЦенаВключаетНДС" Тогда ЦенаВключаетНДСПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "НалогообложениеНДС" Тогда НалогообложениеНДСПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "Организация" Тогда ОрганизацияПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "Контрагент" Тогда КонтрагентПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "Договор" Тогда ДоговорПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "Склад" Тогда СкладПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "НеОтгружатьЧастями" Тогда НеОтгружатьЧастямиПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ДатаОтгрузки" Тогда ДатаОтгрузкиПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ХозяйственнаяОперация" Тогда ХозяйственнаяОперацияПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ВернутьМногооборотнуюТару" Тогда ВернутьМногооборотнуюТаруПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТребуетсяЗалогЗаТару" Тогда ТребуетсяЗалогЗаТаруПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыНоменклатура" Тогда ТоварыНоменклатураПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыХарактеристика" Тогда ТоварыХарактеристикаПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыКоличествоУпаковок" Тогда ТоварыКоличествоУпаковокПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыУпаковка" Тогда ТоварыУпаковкаПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыВидЦены" Тогда ТоварыВидЦеныПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыЦена" Тогда ТоварыЦенаПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыСтавкаНДС" Тогда ТоварыСтавкаНДСПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыПроцентРучнойСкидки" Тогда ТоварыПроцентРучнойСкидкиПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыСуммаРучнойСкидки" Тогда ТоварыСуммаРучнойСкидкиПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыСумма" Тогда ТоварыСуммаПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыСерия" Тогда ТоварыСерияПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыСклад" Тогда ТоварыСкладПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыОтмененоПричиныОтменыНеИспользуются" Тогда ТоварыОтмененоПриИзменении(Элемент); ИначеЕсли Элемент.Имя = "ТоварыОтменено" Тогда ТоварыОтмененоПриИзменении(Элемент); Иначе ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда) Если Команда.Имя = "ОткрытьПодбор" Тогда ОткрытьПодбор(Команда); ИначеЕсли Команда.Имя = "ДополнитьМногооборотнойТарой" Тогда ДополнитьМногооборотнойТарой(Команда); ИначеЕсли Команда.Имя = "ПоискПоШтрихкоду" Тогда ПоискПоШтрихкодуВыполнить(Команда); ИначеЕсли Команда.Имя = "ЗагрузитьДанныеИзТСД" Тогда ЗагрузитьДанныеИзТСД(Команда); ИначеЕсли Команда.Имя = "ЗаполнитьСкладВВыделенныхСтроках" Тогда ЗаполнитьСкладВВыделенныхСтроках(Команда); ИначеЕсли Команда.Имя = "ЗагрузитьИзВнешнегоФайла" Тогда ЗагрузитьИзВнешнегоФайла(Команда); ИначеЕсли Команда.Имя = "ЗаполнитьЦеныПоСоглашению" Тогда АвтоТест_ЗаполнитьЦеныПоСоглашению(Команда); ИначеЕсли Команда.Имя = "ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен" Тогда ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен(Команда); ИначеЕсли Команда.Имя = "СчитатьКартуЛояльности" Тогда СчитатьКартуЛояльности(Команда); ИначеЕсли Команда.Имя = "РассчитатьСкидкиНаценки" Тогда РассчитатьСкидкиНаценки(Команда); ИначеЕсли Команда.Имя = "ОтменитьРучныеСкидки" Тогда ОтменитьРучныеСкидки(Команда); ИначеЕсли Команда.Имя = "НазначитьРучнуюСкидку" Тогда НазначитьРучнуюСкидку(Команда); ИначеЕсли Команда.Имя = "НазначитьРучнуюСкидкуВыделенныхСтрок" Тогда НазначитьРучнуюСкидкуДляВыделенныхСтрок(Команда); ИначеЕсли Команда.Имя = "НазначитьАвтоматическиеСкидки" Тогда НазначитьАвтоматическиеСкидки(Команда); ИначеЕсли Команда.Имя = "СоставНабора" Тогда СоставНабора(Команда); Иначе ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Команда); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент) ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент); КонецПроцедуры &НаКлиенте Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ) ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент); КонецПроцедуры &НаКлиенте Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ) Если Элемент.Имя = "Товары" Тогда ТоварыПередУдалением(Элемент, Отказ); Иначе ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Если Элемент.Имя = "Товары" Тогда ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа); Иначе ОбщегоНазначенияУТКлиент.КонтрольНеСогласованныхИзмененийВызватьИсключение(ЭтаФорма, Элемент); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзменении_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент) Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда Возврат; КонецЕсли; Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПриИзменении.Свойство(Элемент.Имя) Тогда КонтрольНеСогласованныхИзмененийОбработатьСобытиеПриИзменении(Элемент); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_Нажатие_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент) Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда Возврат; КонецЕсли; Если СтруктураДействийКонтрольНеСогласованныхИзменений.Нажатие.Свойство(Элемент.Имя) Тогда КонтрольНеСогласованныхИзмененийОбработатьСобытиеНажатие(Элемент); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_Команда_УстановитьДоступностьЭлементовПоСтатусуСервер(Команда) Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда Возврат; КонецЕсли; Если СтруктураДействийКонтрольНеСогласованныхИзменений.Команды.Свойство(Команда.Имя) Тогда КонтрольНеСогласованныхИзмененийОбработатьСобытиеКоманды(Команда); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПередНачаломИзменения_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ) Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда Возврат; КонецЕсли; Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломИзменения.Свойство(Элемент.Имя) Тогда КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломИзменения(Элемент, Отказ); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПередУдалением_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ) Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда Возврат; КонецЕсли; Имя = Элемент.Имя; Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередУдалением.Свойство(Имя) Тогда КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередУдалением(Элемент, Отказ); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПередНачаломДобавления_УстановитьДоступностьЭлементовПоСтатусуСервер(Элемент, Отказ, Копирование, Родитель, Группа) Если ОбщегоНазначенияУТКлиент.ПриДействииСЭлементомЗависящимОтСтатуса(ЭтаФорма) Тогда Возврат; КонецЕсли; Имя = Элемент.Имя; Если СтруктураДействийКонтрольНеСогласованныхИзменений.ПередНачаломДобавления.Свойство(Имя) Тогда КонтрольНеСогласованныхИзмененийОбработатьСобытиеПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзмененииРеквизитаЗависящегоОтСтатуса() УстановитьДоступностьЭлементовПоСтатусуСервер(); ОбщегоНазначенияУТКлиент.ПослеИзмененияРеквизитаЗависящегоОтСтатуса(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ВернутьМногооборотнуюТаруПриИзмененииСервер() Если Не Объект.ВернутьМногооборотнуюТару Тогда Объект.ТребуетсяЗалогЗаТару = Ложь; КонецЕсли; СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВТЧ(Объект); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, Неопределено); ОбновитьДубликатыЗависимыхРеквизитов(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); ОбновитьДоступностьЭлементовВозвратнойТары(ЭтаФорма); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ПодготовитьЗаполнитьУстановитьВидимостьСерий() ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЗаказКлиента)); НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); Элементы.ТоварыСерия.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;; КонецПроцедуры &НаКлиенте Процедура ТоварыСерияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОткрытьПодборСерий(Элемент.ТекстРедактирования); КонецПроцедуры &НаКлиенте Процедура ТоварыСерияПриИзменении(Элемент) ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия(); ВыбранноеЗначение.Значение = Элементы.Товары.ТекущиеДанные.Серия; ВыбранноеЗначение.ИдентификаторТекущейСтроки = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор(); НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение); КонецПроцедуры &НаСервере Процедура ЗаполнитьСлужебныеРеквизитыПоНоменклатуре() ПараметрыЗаполненияРеквизитов = Новый Структура; ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", Новый Структура("Номенклатура", "ХарактеристикиИспользуются")); ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ВариантОформленияПродажи")); НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары,ПараметрыЗаполненияРеквизитов); НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ОткрытьПодборСерий(Текст = "", ТекущиеДанные = Неопределено) Если ИспользоватьРасширеннуюФормуПодбораКоличестваИВариантовОбеспечения Тогда ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(); Если ПараметрыФормы = Неопределено Тогда Возврат; КонецЕсли; ПараметрыФормы.Вставить("ВыборСерии", Истина); Если ТипЗнч(ПараметрыФормы) = Тип("Структура") Тогда ОткрытьФорму( "Обработка.ПодборТоваровВДокументПродажи.Форма.ЗапросКоличестваИСерий", ПараметрыФормы, ЭтаФорма, , , , Новый ОписаниеОповещения("ОбработатьВыборВариантаОбеспечения", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; Возврат; КонецЕсли; Если НоменклатураКлиент.ДляУказанияСерийНуженСерверныйВызов(ЭтаФорма,ПараметрыУказанияСерий,Текст, ТекущиеДанные)Тогда ТекстИсключения = НСтр("ru = 'Ошибка при попытке указать серии - в этом документе для указания серий не нужен серверный вызов.'"); ВызватьИсключение ТекстИсключения; КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьСписокВыбораЖелаемаяДатаОтгрузки() МаксДатаАванса = ПродажиСервер.МаксимальнаяДатаАванса(Объект.ЭтапыГрафикаОплаты); ЖелаемаяДатаОтгрузкиСписокВыбора = Элементы.ЖелаемаяДатаОтгрузки.СписокВыбора; Если ЗначениеЗаполнено(МаксДатаАванса) Тогда ПредставлениеМаксДатаАванса = "%МаксДатаАванса%"; ПредставлениеМаксДатаАванса = СтрЗаменить(ПредставлениеМаксДатаАванса, "%МаксДатаАванса%", Формат(МаксДатаАванса,"ДЛФ=DD")); ЖелаемаяДатаОтгрузкиСписокВыбора.Очистить(); ЖелаемаяДатаОтгрузкиСписокВыбора.Добавить(МаксДатаАванса, ПредставлениеМаксДатаАванса); КонецЕсли; КонецПроцедуры // СтандартныеПодсистемы.Печать &НаКлиенте Процедура Подключаемый_ВыполнитьКомандуПечати(Команда) УправлениеПечатьюКлиент.ВыполнитьПодключаемуюКомандуПечати(Команда, ЭтаФорма, Объект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ВыполнитьКомандуОтчет(Команда) МенюОтчетыКлиент.ВыполнитьПодключаемуюКомандуОтчет(Команда, ЭтаФорма, Объект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ВыполнитьКомандуСоздатьНаОсновании(Команда) ВводНаОснованииКлиент.ВыполнитьПодключаемуюКомандуСоздатьНаОсновании(Команда, ЭтаФорма, Объект); КонецПроцедуры #КонецОбласти #Область Прочее &НаКлиенте Процедура Подключаемый_ЗакрытьФорму() Закрыть(); КонецПроцедуры &НаСервере Процедура ПриЧтенииСозданииНаСервере() ИспользоватьСтатусы = ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента"); Элементы.Статус.Видимость = ИспользоватьСтатусы; Элементы.ЗакрытьЗаказ.Видимость = ИспользоватьСтатусы; ВалютаДокумента = Объект.Валюта; СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Объект.Склад); Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Доступность = СкладГруппа; ВзаиморасчетыСервер.ЗаполнитьПорядокРасчетовВФорме(ЭтаФорма, Ложь , Ложь); УстановитьПараметрыВыбораТоварыСклад(); ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами"); ИспользоватьОтгрузкуБезПереходаПраваСобственности = ПолучитьФункциональнуюОпцию("ИспользоватьОтгрузкуБезПереходаПраваСобственности"); ИспользоватьУпрощеннуюСхемуОплаты = ПолучитьФункциональнуюОпцию("ИспользоватьУпрощеннуюСхемуОплатыВПродажах"); ИспользоватьГрафикиОплаты = ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиОплаты"); ИспользоватьНесколькоОрганизаций = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций"); ИспользоватьНаправленияДеятельности = ПолучитьФункциональнуюОпцию("ИспользоватьУчетДоходовПоНаправлениямДеятельности"); ИспользоватьРасширеннуюФормуПодбораКоличестваИВариантовОбеспечения = ПолучитьФункциональнуюОпцию("ИспользоватьРасширеннуюФормуПодбораКоличестваИВариантовОбеспечения") И ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента"); Если НЕ ИспользоватьСоглашенияСКлиентами Тогда ПараметрыВыбораВидаЦены = ЗначениеНастроекПовтИсп.ПараметрыВыбораВидаЦеныПоУмолчанию(); ПараметрыВыбораВидаЦены.ЦенаВключаетНДС = Объект.ЦенаВключаетНДС; ПараметрыВыбораВидаЦены.ИспользоватьПриПродаже = Истина; ПараметрыВыбораВидаЦены.Статус = Перечисления.СтатусыДействияВидовЦен.Действует; ВидЦеныПоУмолчанию = ЗначениеНастроекПовтИсп.ВидЦеныПоУмолчанию(ПараметрыВыбораВидаЦены); Иначе НалогообложениеИзСоглашения = ПродажиСервер.НалогообложениеОпределяетсяИзСоглашения(Объект.Соглашение); КонецЕсли; УстановитьВидимостьОпераций(); УстановитьДоступностьЭлементовПоСтатусуСервер(); ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); ОбновитьДубликатыЗависимыхРеквизитов(); ОбновитьСостояниеСервер(); УстановитьВидимостьЭлементовПоОперацииСервер(); УстановитьСвойстваЭлементовПоПорядкуРасчетов(); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ЗаказКлиента)); Элементы.ТоварыСерия.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры; ЗаполнитьСписокВыбораЖелаемаяДатаОтгрузки(); ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость); Элементы.Организация.Видимость = ИспользоватьНесколькоОрганизаций; УстановитьВидимостьЭлементовФормыДатОтгрузки(); ОбновитьДоступностьЭлементовВозвратнойТары(ЭтаФорма); ДоставкаТоваров.ПриЧтенииСозданииРаспоряженийНаСервере(Элементы, Объект); УстановитьВидимостьЗапретаОтгрузкиПартнеру(); УстановитьВидимостьОбеспечения(); Элементы.ТоварыЗаполнитьОбеспечение.Доступность = Не ТолькоПросмотр; РассылкиИОповещенияКлиентам.УстановитьВидимостьПодпискиНаОповещенияВОбъекте( Элементы.ГруппаПодпискаНаОповещения, Объект.Партнер, ПредопределенноеЗначение("Перечисление.ТипыСобытийОповещений.ИзменениеСостоянияЗаказа")); ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "ГруппаСостояниеЭДО", "Видимость", ИспользоватьСтатусы, Истина); УстановитьПривилегированныйРежим(Истина); ВариантыОбеспечения = ПродажиСервер.ВариантыОбеспеченияПоУмолчанию(Объект.Соглашение, Объект.Статус); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); ОбщегоНазначенияУТ.ИнициализироватьКешТекущейСтроки(ЭтотОбъект, "Товары"); МетаданныеФормы = ОбщегоНазначения.МенеджерОбъектаПоСсылке(Объект.Ссылка).ОписаниеФормыДокументаДляЗаполненияРеквизитовСвязанныхСНаправлениемДеятельности(); НаправленияДеятельностиСервер.ПриЧтенииСозданииНаСервере(ЭтаФорма); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура РассчитатьИтоговыеПоказателиЗаказа(Форма) // Заполнение итогов по таблице "Товары" КоллекцияТовары = Форма.Объект.Товары; Форма.СуммаЗаказаноСЗалоговойТарой = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("СуммаСНДС") - КоллекцияТовары.Итог("СуммаСНДСОтменено"), КоллекцияТовары.Итог("СуммаСНДСБезВозвратнойТары") - КоллекцияТовары.Итог("СуммаСНДСОтмененоБезВозвратнойТары")); Форма.СуммаЗаказано = КоллекцияТовары.Итог("СуммаСНДСБезВозвратнойТары") - КоллекцияТовары.Итог("СуммаСНДСОтмененоБезВозвратнойТары"); Форма.СуммаЗалогаЗаТару = ?(Форма.Объект.ТребуетсяЗалогЗаТару,(КоллекцияТовары.Итог("СуммаСНДС") - КоллекцияТовары.Итог("СуммаСНДСОтменено")) - (КоллекцияТовары.Итог("СуммаСНДСБезВозвратнойТары") - КоллекцияТовары.Итог("СуммаСНДСОтмененоБезВозвратнойТары")),0); Форма.СуммаНДСЗаказано = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("СуммаНДС") - КоллекцияТовары.Итог("СуммаНДСОтменено"), КоллекцияТовары.Итог("СуммаНДСБезВозвратнойТары") - КоллекцияТовары.Итог("СуммаНДСОтмененоБезВозвратнойТары")); Форма.СуммаАвтоСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("СуммаАвтоматическойСкидки") - КоллекцияТовары.Итог("СуммаАвтоматическойСкидкиОтменено"), КоллекцияТовары.Итог("СуммаАвтоматическойСкидкиБезВозвратнойТары") - КоллекцияТовары.Итог("СуммаАвтоматическойСкидкиОтмененоБезВозвратнойТары")); Форма.СуммаРучнойСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("СуммаРучнойСкидки") - КоллекцияТовары.Итог("СуммаРучнойСкидкиОтменено"), КоллекцияТовары.Итог("СуммаРучнойСкидкиБезВозвратнойТары") - КоллекцияТовары.Итог("СуммаРучнойСкидкиОтмененоБезВозвратнойТары")); Форма.СуммаСкидки = Форма.СуммаАвтоСкидки + Форма.СуммаРучнойСкидки; Форма.СуммаОтменено = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("СуммаСНДСОтменено"), КоллекцияТовары.Итог("СуммаСНДСОтмененоБезВозвратнойТары")); Если КоллекцияТовары.Итог("СуммаСНДСОтменено") = КоллекцияТовары.Итог("СуммаСНДС") Тогда Форма.ВсеСтрокиОтменены = Истина; Иначе Форма.ВсеСтрокиОтменены = Ложь; КонецЕсли; СуммаЗаказано = ?(Форма.Объект.ТребуетсяЗалогЗаТару, КоллекцияТовары.Итог("Сумма") - КоллекцияТовары.Итог("СуммаОтменено"), КоллекцияТовары.Итог("СуммаБезВозвратнойТары") - КоллекцияТовары.Итог("СуммаОтмененоБезВозвратнойТары")); Если СуммаЗаказано > 0 И (СуммаЗаказано + Форма.СуммаСкидки) <> 0 Тогда Форма.ПроцентАвтоСкидки = Форма.СуммаАвтоСкидки * 100 / (СуммаЗаказано + Форма.СуммаСкидки); Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / (СуммаЗаказано + Форма.СуммаСкидки); Форма.ПроцентСкидки = Форма.ПроцентАвтоСкидки + Форма.ПроцентРучнойСкидки; ИначеЕсли Форма.СуммаСкидки > 0 Тогда Форма.ПроцентАвтоСкидки = Форма.СуммаАвтоСкидки * 100 / Форма.СуммаСкидки; Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / Форма.СуммаСкидки; Форма.ПроцентСкидки = 100; Иначе Форма.ПроцентАвтоСкидки = 0; Форма.ПроцентРучнойСкидки = 0; Форма.ПроцентСкидки = 0; КонецЕсли; // Заполнение итогов по этапам оплаты Форма.СуммаАвансаДоОбеспечения = 0; Форма.СуммаПредоплатыДоОтгрузки = 0; Форма.СуммаКредитаПослеОтгрузки = 0; Форма.ПроцентАвансаДоОбеспечения = 0; Форма.ПроцентПредоплатыДоОтгрузки = 0; Форма.ПроцентКредитаПослеОтгрузки = 0; СоответствиеВариантовОплаты = Новый Соответствие; СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыОплатыКлиентом.АвансДоОбеспечения"), Новый Структура("Сумма, Проценты", "СуммаАвансаДоОбеспечения", "ПроцентАвансаДоОбеспечения")); СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыОплатыКлиентом.ПредоплатаДоОтгрузки"), Новый Структура("Сумма, Проценты", "СуммаПредоплатыДоОтгрузки", "ПроцентПредоплатыДоОтгрузки")); СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыОплатыКлиентом.КредитПослеОтгрузки"), Новый Структура("Сумма, Проценты", "СуммаКредитаПослеОтгрузки", "ПроцентКредитаПослеОтгрузки")); Для Каждого ТекСтрока Из Форма.Объект.ЭтапыГрафикаОплаты Цикл ИменаЭлементов = СоответствиеВариантовОплаты[ТекСтрока.ВариантОплаты]; Если ИменаЭлементов <> Неопределено Тогда Форма[ИменаЭлементов.Сумма] = Форма[ИменаЭлементов.Сумма] + ТекСтрока.СуммаПлатежа + ?(Форма.Объект.ТребуетсяЗалогЗаТару, ТекСтрока.СуммаЗалогаЗаТару, 0); КонецЕсли; КонецЦикла; СуммаВсегоПоЭтапам = Форма.СуммаАвансаДоОбеспечения + Форма.СуммаПредоплатыДоОтгрузки + Форма.СуммаКредитаПослеОтгрузки; Если СуммаВсегоПоЭтапам <> 0 Тогда Форма.ПроцентАвансаДоОбеспечения = (Форма.СуммаАвансаДоОбеспечения/СуммаВсегоПоЭтапам)*100; Форма.ПроцентПредоплатыДоОтгрузки = (Форма.СуммаПредоплатыДоОтгрузки/СуммаВсегоПоЭтапам)*100;; Форма.ПроцентКредитаПослеОтгрузки = (Форма.СуммаКредитаПослеОтгрузки/СуммаВсегоПоЭтапам)*100; КонецЕсли; // Выбор странцицы отображения НДС Если Форма.Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС") ИЛИ Форма.Объект.НалогообложениеНДС = ПредопределенноеЗначение("Перечисление.ТипыНалогообложенияНДС.ПродажаОблагаетсяЕНВД") Тогда Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоБезНДС; Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница = Форма.Элементы.СтраницаБезНДС; Иначе Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоСНДС; Форма.Элементы.ГруппаСтраницыНДС.ТекущаяСтраница = Форма.Элементы.СтраницаСНДС; КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Функция ЗависимыеРеквизиты() Возврат Новый Структура( "БезВозвратнойТары,ОтмененоБезВозвратнойТары,Отменено", "Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки", "Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки", "Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки"); КонецФункции &НаКлиентеНаСервереБезКонтекста Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект) СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц"); СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействий.Вставить("ПересчитатьСумму"); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь)); СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); КонецПроцедуры &НаСервере Процедура ОтменитьВыделенныеСтрокиНаСервере() Если ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры Тогда ЗаполнитьСтатусыУказанияСерий(); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьДоговорПоУмолчанию() Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов И ИспользоватьНаправленияДеятельности Тогда Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(Объект, Объект.ХозяйственнаяОперация, Объект.Валюта, Объект.НаправлениеДеятельности); Иначе Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(Объект, Объект.ХозяйственнаяОперация, Объект.Валюта); КонецЕсли; Если Договор <> Объект.Договор Тогда Объект.Договор = Договор; ЗаполнитьГруппуФинУчета(); ВзаиморасчетыСервер.ЗаполнитьПорядокРасчетовВФорме(ЭтаФорма, Ложь); ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Объект.Договор, Объект.БанковскийСчет, Объект.БанковскийСчетКонтрагента); ЗаполнитьПорядокОплатыПоУмолчанию(); КонецЕсли; ОбновитьОграничениеЗадолженности(); КонецПроцедуры &НаСервере Процедура УстановитьДоступностьЭлементовПоСтатусуСервер() УстановитьПодписку = Ложь; Если Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован И ИспользоватьСтатусы Тогда УстановитьПодписку = Ложь; ИначеЕсли (Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован И Не ИспользоватьСтатусы) ИЛИ Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.КОбеспечению ИЛИ Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.КОтгрузке ИЛИ Объект.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт Тогда УстановитьПодписку = Объект.Согласован; КонецЕсли; МассивЭлементов = Новый Массив; // Элементы управления шапки МассивЭлементов.Добавить("Дата"); МассивЭлементов.Добавить("Партнер"); МассивЭлементов.Добавить("Соглашение"); МассивЭлементов.Добавить("Валюта"); МассивЭлементов.Добавить("ЦенаВключаетНДС"); МассивЭлементов.Добавить("НалогообложениеНДС"); МассивЭлементов.Добавить("Организация"); МассивЭлементов.Добавить("Контрагент"); МассивЭлементов.Добавить("Договор"); МассивЭлементов.Добавить("Склад"); МассивЭлементов.Добавить("ЖелаемаяДатаОтгрузки"); МассивЭлементов.Добавить("НеОтгружатьЧастями"); МассивЭлементов.Добавить("ДатаОтгрузки"); МассивЭлементов.Добавить("ДатаСогласования"); МассивЭлементов.Добавить("ХозяйственнаяОперация"); МассивЭлементов.Добавить("КартаЛояльности"); МассивЭлементов.Добавить("ВернутьМногооборотнуюТару"); МассивЭлементов.Добавить("СрокВозвратаМногооборотнойТары"); МассивЭлементов.Добавить("ТребуетсяЗалогЗаТару"); // Элементы управления, связанные с таблицей Товары МассивЭлементов.Добавить("ТоварыНоменклатура"); МассивЭлементов.Добавить("ТоварыХарактеристика"); МассивЭлементов.Добавить("ТоварыКоличествоУпаковок"); МассивЭлементов.Добавить("ТоварыУпаковка"); МассивЭлементов.Добавить("ТоварыВидЦены"); МассивЭлементов.Добавить("ТоварыЦена"); МассивЭлементов.Добавить("ТоварыСтавкаНДС"); МассивЭлементов.Добавить("ТоварыПроцентРучнойСкидки"); МассивЭлементов.Добавить("ТоварыСуммаРучнойСкидки"); МассивЭлементов.Добавить("ТоварыСумма"); МассивЭлементов.Добавить("ТоварыСодержание"); // Элементы управления шапки МассивЭлементов.Добавить("Товары;ПередНачаломДобавления,ПередУдалением;ТоварыДатаОтгрузки"); МассивЭлементов.Добавить("ТоварыКонтекстноеМенюДобавить"); МассивЭлементов.Добавить("ТоварыКонтекстноеМенюСкопировать"); МассивЭлементов.Добавить("ТоварыКонтекстноеМенюУдалить"); МассивЭлементов.Добавить("ТоварыДобавить"); МассивЭлементов.Добавить("ТоварыИзменить"); МассивЭлементов.Добавить("ТоварыСкопировать"); МассивЭлементов.Добавить("ТоварыУдалить"); МассивЭлементов.Добавить("ТоварыОткрытьПодбор"); МассивЭлементов.Добавить("ТоварыДополнитьМногооборотнойТарой"); МассивЭлементов.Добавить("ТоварыПоискПоШтрихкоду"); МассивЭлементов.Добавить("ТоварыЗагрузитьДанныеИзТСД"); МассивЭлементов.Добавить("ТоварыЗаполнитьСкладВВыделенныхСтроках"); МассивЭлементов.Добавить("ТоварыЗагрузитьИзВнешнегоФайла"); МассивЭлементов.Добавить("ТоварыСоставНабора"); МассивЭлементов.Добавить("ТоварыЗаполнитьЦеныПоСоглашению"); МассивЭлементов.Добавить("ТоварыЗаполнитьЦеныВыделенныхСтрокПоВидуЦен"); МассивЭлементов.Добавить("СчитатьКартуЛояльности"); МассивЭлементов.Добавить("СчитатьКартуЛояльностиКлиент"); МассивЭлементов.Добавить("КартаЛояльности"); МассивЭлементов.Добавить("ТоварыРассчитатьСкидкиНаценки"); МассивЭлементов.Добавить("ТоварыОтменитьРучныеСкидки"); МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидку"); МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидкуВыделенныхСтрок"); МассивЭлементов.Добавить("ТоварыНазначитьАвтоматическиеСкидки"); ОбщегоНазначенияУТ.УстановитьПодпискуНаСобытияИзмененияЭлементовФормы(ЭтаФорма, МассивЭлементов, УстановитьПодписку); КонецПроцедуры &НаСервере Процедура УстановитьВидимостьЭлементовПоОперацииСервер() Перем МассивВсехРеквизитов; Перем МассивРеквизитовОперации; Документы.ЗаказКлиента.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации( Объект.ХозяйственнаяОперация, МассивВсехРеквизитов, МассивРеквизитовОперации); ДенежныеСредстваСервер.УстановитьВидимостьЭлементовПоМассиву( Элементы, МассивВсехРеквизитов, МассивРеквизитовОперации); ЭтоПередачаНаКомиссию = (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию); МассивЭлементов = Новый Массив(); МассивЭлементов.Добавить("НадписьЭтапыОплаты"); МассивЭлементов.Добавить("ТоварыРассчитатьСкидкиНаценки"); МассивЭлементов.Добавить("ТоварыОтменитьРучныеСкидки"); МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидку"); МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидкуВыделенныхСтрок"); МассивЭлементов.Добавить("ТоварыНазначитьАвтоматическиеСкидки"); МассивЭлементов.Добавить("ТоварыОткрытьИнформациюОСкидках"); МассивЭлементов.Добавить("КонтекстноеМенюТоварыОткрытьИнформациюОСкидках"); МассивЭлементов.Добавить("СчитатьКартуЛояльности"); МассивЭлементов.Добавить("СчитатьКартуЛояльностиКлиент"); МассивЭлементов.Добавить("КартаЛояльности"); МассивЭлементов.Добавить("СуммаСкидки"); МассивЭлементов.Добавить("ТребуетсяЗалогЗаТару"); МассивЭлементов.Добавить("ДекорацияОтступТребуетсяЗалогЗаТару"); МассивЭлементов.Добавить("ДекорацияЗаголовокОплата"); МассивЭлементов.Добавить("НадписьЭтапыОплаты"); МассивЭлементов.Добавить("Расчеты"); МассивЭлементов.Добавить("ЗачетОплатыФорма"); ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Видимость", Не ЭтоПередачаНаКомиссию); Элементы.Расчеты.Видимость = Не ЭтоПередачаНаКомиссию; НоменклатураСервер.УстановитьПараметрыВыбораНоменклатуры(Объект.ХозяйственнаяОперация, Элементы.ТоварыНоменклатура); УчетНДСУТ.ЗаполнитьСписокВыбораНалогообложенияПродажи(Элементы.НалогообложениеНДС, Объект.ХозяйственнаяОперация); УстановитьВидимостьПоляПартнер(); КонецПроцедуры &НаСервере Функция ЗаполнитьСкладВВыделенныхСтрокахНаСервере(Знач МассивВыделенныхСтрок, Склад) ЗаполненоСтрок = СкладыСервер.ЗаполнитьСкладыВВыделенныхСтроках(Объект.Товары, МассивВыделенныхСтрок, Склад); Если ЗаполненоСтрок > 0 Тогда НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); КонецЕсли; Возврат ЗаполненоСтрок; КонецФункции &НаСервере Функция ОтменитьНепоставленныеСтрокиСервер(ПричинаОтмены, Знач ПроверятьОстатки = Ложь) СтруктураКорректировки = ЗаказыСервер.ПолучитьСтруктуруКорректировкиСтрокЗаказа(); СтруктураКорректировки.ДокументОбъект = Объект; СтруктураКорректировки.ПричинаОтмены = ПричинаОтмены; СтруктураКорректировки.ПроверятьОстатки = ПроверятьОстатки; СтруктураКорректировки.ОтменитьНеотработанныеСтроки = Истина; СтруктураРезультата = ПродажиСервер.СкорректироватьСтрокиЗаказа(СтруктураКорректировки); КоличествоОтмененныхСтрок = СтруктураРезультата.КоличествоСтрок; ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); ОбновитьДубликатыЗависимыхРеквизитов(); Если КоличествоОтмененныхСтрок > 0 Тогда НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); КонецЕсли; Возврат КоличествоОтмененныхСтрок; КонецФункции &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ОбновитьСостояниеСервер() Документы.ЗаказКлиента.РассчитатьСостояние( Объект.Ссылка, Объект.Договор, ЭтаФорма); ОбновитьОграничениеЗадолженности(); Элементы.Состояние.Гиперссылка = ПравоДоступа("Просмотр", Метаданные.Отчеты.СостояниеВыполненияДокументов); КонецПроцедуры &НаСервере Процедура ОбновитьСостояниеЭлементовУправленияИтоговПоРасчетам() Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда Расчеты = НСтр("ru='Расчеты по договору'"); Иначе Расчеты = НСтр("ru='Оплачено по заказу'") + ": " + Формат(СуммаОплаты, "ЧЦ=15; ЧДЦ=2; ЧН=") + " " + ВалютаДокумента + " " + ПроцентОплаты + "%"; КонецЕсли; Элементы.Расчеты.Видимость = Объект.ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию И Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным И ИспользоватьСтатусы; КонецПроцедуры &НаСервереБезКонтекста Функция ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Контрагент) Возврат ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент); КонецФункции &НаКлиенте Процедура ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение) Если Не ЗначениеЗаполнено(ВыбранноеЗначение) Тогда Возврат; КонецЕсли; Если ИспользоватьРасширеннуюФормуПодбораКоличестваИВариантовОбеспечения Тогда ЗначенияРеквизитов = ОбеспечениеКлиентСервер.ЗначенияРеквизитовДокументаДляВопросаОбОтгрузкеОднойДатой(); ЗначенияРеквизитов.ДатаОтгрузки = Объект.ДатаОтгрузки; ЗначенияРеквизитов.ЖелаемаяДатаОтгрузки = Объект.ЖелаемаяДатаОтгрузки; ЗначенияРеквизитов.НеОтгружатьЧастями = Объект.НеОтгружатьЧастями; ОбеспечениеКлиент.ПоказатьВопросОбОтгрузкеОднойДатой( ЭтаФорма, ЗначенияРеквизитов, ВыбранноеЗначение, "ОбработкаВыбораПодборНаКлиентеПослеВопроса", Объект.Товары.Количество() > 0); Иначе ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение); КонецЕсли; СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбораПодборНаКлиентеПослеВопроса(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Да Тогда Объект.НеОтгружатьЧастями = Ложь; УстановитьВидимостьЭлементовФормыДатОтгрузки(); КонецЕсли; ОбработкаВыбораПодборНаСервере(ДополнительныеПараметры); КонецПроцедуры &НаСервере Процедура СчитанаКартаЛояльностиНаСервере(ДанныеКартыЛояльности) Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Партнер) И ДанныеКартыЛояльности.Партнер <> Объект.Партнер Тогда Объект.Партнер = ДанныеКартыЛояльности.Партнер; Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка(); Объект.Соглашение = Справочники.СоглашенияСКлиентами.ПустаяСсылка(); ПриИзмененииПартнераСервер(); КонецЕсли; Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Соглашение) И ДанныеКартыЛояльности.Соглашение <> Объект.Соглашение И ДанныеКартыЛояльности.СоглашениеДоступно Тогда Объект.Соглашение = ДанныеКартыЛояльности.Соглашение; ПриИзмененииСоглашенияСервер(); КонецЕсли; Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Контрагент) И ДанныеКартыЛояльности.Контрагент <> Объект.Контрагент И ДанныеКартыЛояльности.КонтрагентДоступен Тогда Объект.Контрагент = ДанныеКартыЛояльности.Контрагент; КонтрагентПриИзмененииСервер(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СчитанаКартаЛояльности(Знач Оповещение, КартаЛояльности) ДанныеКартыЛояльности = КартыЛояльностиВызовСервера.ПолучитьДанныеКартыЛояльности(КартаЛояльности); Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Ссылка) Тогда Если Не ДанныеКартыЛояльности.ПартнерДоступен Тогда ПоказатьПредупреждение(Новый ОписаниеОповещения("СчитанаКартаЛояльностиЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), НСтр("ru = 'Нет доступа к партнеру-владельцу карты лояльности.'")); Возврат; КонецЕсли; Если Не ЗначениеЗаполнено(ДанныеКартыЛояльности.Партнер) Тогда // Обезличенная карта СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); Модифицированность = Истина; Объект.КартаЛояльности = КартаЛояльности; ВыполнитьОбработкуОповещения(Оповещение); Возврат; ИначеЕсли Объект.Партнер <> ДанныеКартыЛояльности.Партнер Тогда // Партнер в карте отличается от партнера в документе. Если ЗначениеЗаполнено(Объект.Партнер) Тогда ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Оповещение", Оповещение); ДополнительныеПараметры.Вставить("КартаЛояльности", КартаЛояльности); ДополнительныеПараметры.Вставить("ДанныеКартыЛояльности", ДанныеКартыЛояльности); ПоказатьВопрос( Новый ОписаниеОповещения("СчитанаКартаЛояльностиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Карта лояльности принадлежит партнеру ""%1"". Изменить партнера в документе?'"), ДанныеКартыЛояльности.Партнер), РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; Иначе // Партнер в документе равен партнеру в карте. ВопросОбИзмененииКонтрагента = Ложь; Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Контрагент) И ЗначениеЗаполнено(Объект.Контрагент) И ДанныеКартыЛояльности.Контрагент <> Объект.Контрагент Тогда ВопросОбИзмененииКонтрагента = Истина; КонецЕсли; ВопросОбИзмененииСоглашения = Ложь; Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(ДанныеКартыЛояльности.Соглашение) И ЗначениеЗаполнено(Объект.Соглашение) И ДанныеКартыЛояльности.Соглашение <> Объект.Соглашение Тогда ВопросОбИзмененииСоглашения = Истина; КонецЕсли; Если ВопросОбИзмененииКонтрагента Или ВопросОбИзмененииСоглашения Тогда Если ВопросОбИзмененииКонтрагента И ВопросОбИзмененииСоглашения Тогда ТекстВопроса = НСтр("ru = 'Для карты лояльности заданы контрагент ""%1"" и соглашение ""%2"". Применить карту лояльности и подставить в документ контрагента ""%1"" и соглашение ""%2""?'"); ИначеЕсли ВопросОбИзмененииКонтрагента Тогда ТекстВопроса = НСтр("ru = 'Для карты лояльности задан контрагент ""%1"". Применить карту лояльности и подставить в документ контрагента ""%1""?'"); ИначеЕсли ВопросОбИзмененииСоглашения Тогда ТекстВопроса = НСтр("ru = 'Для карты лояльности задано соглашение ""%2"". Применить карту лояльности и подставить в документ соглашение ""%2""?'"); КонецЕсли; ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Оповещение", Оповещение); ДополнительныеПараметры.Вставить("КартаЛояльности", КартаЛояльности); ДополнительныеПараметры.Вставить("ДанныеКартыЛояльности", ДанныеКартыЛояльности); ПоказатьВопрос( Новый ОписаниеОповещения("СчитанаКартаЛояльностиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ДанныеКартыЛояльности.Контрагент, ДанныеКартыЛояльности.Соглашение), РежимДиалогаВопрос.ДаНет); Возврат; КонецЕсли; КонецЕсли; СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); Модифицированность = Истина; Объект.КартаЛояльности = КартаЛояльности; СчитанаКартаЛояльностиНаСервере(ДанныеКартыЛояльности); КонецЕсли; ВыполнитьОбработкуОповещения(Оповещение); КонецПроцедуры &НаКлиенте Процедура СчитанаКартаЛояльностиВопросЗавершение(Ответ, ДополнительныеПараметры) Экспорт Если Ответ = КодВозвратаДиалога.Нет Тогда ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение); ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); Модифицированность = Истина; Объект.КартаЛояльности = ДополнительныеПараметры.КартаЛояльности; СчитанаКартаЛояльностиНаСервере(ДополнительныеПараметры.ДанныеКартыЛояльности); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СчитанаКартаЛояльностиЗавершение(ДополнительныеПараметры) Экспорт Оповещение = ДополнительныеПараметры.Оповещение; ВыполнитьОбработкуОповещения(Оповещение); КонецПроцедуры &НаСервере Функция АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(ТолькоВыделенныеСтроки) Возврат СкидкиНаценкиСервер.АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(ЭтаФорма, "Товары", УникальныйИдентификатор, ТолькоВыделенныеСтроки); КонецФункции &НаКлиенте Процедура НадписьЭтапыОплатыНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Попытка ЗаблокироватьДанныеФормыДляРедактирования(); Исключение ПоказатьПредупреждение(Неопределено, КраткоеПредставлениеОшибки(ИнформацияОбОшибке())); Возврат; КонецПопытки; ПараметрыФормы = Новый Структура(); ПараметрыФормы.Вставить("ТолькоПросмотр", ТолькоПросмотр); ПараметрыФормы.Вставить("СуммаОплатыПоДокументу", СуммаЗаказано); ПараметрыФормы.Вставить("СуммаЗалогаПоДокументу", СуммаЗалогаЗаТару); ПараметрыФормы.Вставить("СуммаОтклоненияПоДокументу", Объект.ЭтапыГрафикаОплаты.Итог("СуммаОтклоненияМерныхТоваров")); ПараметрыФормы.Вставить("СуммаДопустимогоОтклоненияПоДокументу", ПолучитьСуммуДопустимогоОтклоненияПредоплатыПоДокументу()); ПараметрыФормы.Вставить("ТребуетсяЗалогЗаТару", Объект.ВернутьМногооборотнуюТару И Объект.ТребуетсяЗалогЗаТару); ПараметрыФормы.Вставить("ГрафикОплаты", Объект.ГрафикОплаты); Если ПроверитьПравоНаЧтениеСоглашения() Тогда ПараметрыФормы.Вставить("Соглашение", Объект.Соглашение); КонецЕсли; ПараметрыФормы.Вставить("ЖелаемаяДатаОтгрузки", Объект.ЖелаемаяДатаОтгрузки); ПараметрыФормы.Вставить("Дата", Объект.Дата); ПараметрыФормы.Вставить("Валюта", Объект.Валюта); ПараметрыФормы.Вставить("УчитыватьВариантОплаты", Истина); ПараметрыФормы.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); ПараметрыФормы.Вставить("АдресВоВременномХранилище", ПоместитьВоВременноеХранилищеНаСервере("ЭтапыГрафикаОплаты")); ПараметрыФормы.Вставить("ФормаОплаты", Объект.ФормаОплаты); ПараметрыФормы.Вставить("Касса", Объект.Касса); ПараметрыФормы.Вставить("БанковскийСчет", Объект.БанковскийСчет); ПараметрыФормы.Вставить("Организация", Объект.Организация); ПараметрыФормы.Вставить("ПараметрыВыбораРеквизитов", ПараметрыВыбораРеквизитов); ПараметрыФормы.Вставить("ИдентификаторПлатежа", Объект.ИдентификаторПлатежа); ПараметрыФормы.Вставить("ПорядокРасчетов", Объект.ПорядокРасчетов); ПараметрыФормы.Вставить("ДоступныеПорядкиРасчетов", ДоступныеПорядкиРасчетов); ПараметрыФормы.Вставить("ЭтоЗаказ", Истина); ПараметрыФормы.Вставить("Ключ", Объект.Ссылка); ПараметрыФормы.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности); ПараметрыФормы.Вставить("ГрафикИсполненияВДоговоре", ГрафикИсполненияВДоговоре); ПараметрыФормы.Вставить("ПорядокОплаты", Объект.ПорядокОплаты); ПараметрыФормы.Вставить("ВалютаВзаиморасчетов", Объект.Валюта); Оповещение = Новый ОписаниеОповещения("НадписьЭтапыОплатыНажатиеЗавершение", ЭтотОбъект); //{{Доработка Если ЭтоРозничныйПродавецСервер() Тогда ОткрытьФорму("ОбщаяФорма.УТ_ЭтапыОплатыКлиентом", ПараметрыФормы, ЭтаФорма,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); Иначе ОткрытьФорму("ОбщаяФорма.ЭтапыОплатыКлиентом", ПараметрыФормы, ЭтаФорма,,,, Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца); КонецЕсли; //}}Доработка КонецПроцедуры &НаКлиенте Процедура НадписьЭтапыОплатыНажатиеЗавершение(ПараметрыОплаты, ДополнительныеПараметры) Экспорт Если ПараметрыОплаты <> Неопределено Тогда Модифицированность = Истина; Объект.ЭтапыГрафикаОплаты.Очистить(); Объект.Согласован = Ложь; Объект.Касса = ПараметрыОплаты.Касса; Объект.БанковскийСчет = ПараметрыОплаты.БанковскийСчет; Объект.ГрафикОплаты = ПараметрыОплаты.ГрафикОплаты; Объект.ЖелаемаяДатаОтгрузки = ПараметрыОплаты.ЖелаемаяДатаОтгрузки; Объект.ПорядокОплаты = ПараметрыОплаты.ПорядокОплаты; Если Объект.ФормаОплаты <> ПараметрыОплаты.ФормаОплаты Тогда Объект.ФормаОплаты = ПараметрыОплаты.ФормаОплаты; СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецЕсли; Если Объект.ПорядокРасчетов <> ПараметрыОплаты.ПорядокРасчетов Тогда Объект.ПорядокРасчетов = ПараметрыОплаты.ПорядокРасчетов; КонецЕсли; Если ЗначениеЗаполнено(ПараметрыОплаты.АдресВоВременномХранилище) Тогда ЗаполнитьЭтапыОплатыИзВременногоХранилищаСервер(ПараметрыОплаты.АдресВоВременномХранилище); КонецЕсли; УстановитьСвойстваЭлементовПоПорядкуРасчетов(); УстановитьДоступностьЭлементовПоСтатусуСервер(); КонецЕсли; РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаСервере Функция ПоместитьВоВременноеХранилищеНаСервере(ИмяТЧ,Идентификатор = "") Возврат ПоместитьВоВременноеХранилище(Объект[ИМЯТЧ].Выгрузить(),Идентификатор); КонецФункции &НаСервере Процедура ЗаполнитьЭтапыОплатыИзВременногоХранилищаСервер(АдресВоВременномХранилище) ЭтапыОплаты = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище); Для Каждого ТекСтрока Из ЭтапыОплаты Цикл НоваяСтрока = Объект.ЭтапыГрафикаОплаты.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока); КонецЦикла; ЗаполнитьСписокВыбораЖелаемаяДатаОтгрузки(); КонецПроцедуры &НаСервере Процедура ЗаполнитьЭтапыОплатыСервер(ГрафикСоглашенияЗаполнен, ГрафикЗаполнен) ЭтапыОплатыСервер.ЗаполнитьЭтапыОплатыДокументаПродажи( Объект, ГрафикСоглашенияЗаполнен, ГрафикЗаполнен, СуммаЗаказано, СуммаЗалогаЗаТару); КонецПроцедуры &НаСервере Функция ПроверитьПравоНаЧтениеСоглашения() Возврат ПравоДоступа("Просмотр",Метаданные.Документы.ЗаказКлиента.Реквизиты.Соглашение); КонецФункции &НаСервере Процедура ОбновитьОграничениеЗадолженности() ПродажиСервер.ОбновитьОграничениеЗадолженности( Объект.Договор, Объект.Дата, ТекстОстатокДопустимогоКредита, Элементы.ТекстОстатокДопустимогоКредита.Видимость, Элементы.ТекстОстатокДопустимогоКредита.ЦветТекста, Элементы.КартинкаОтгрузкаЗапрещена.Видимость); КонецПроцедуры &НаСервере Процедура ЗаполнитьУсловияПродаж() ГрафикОплаты = Объект.ГрафикОплаты; ДокументПродажи = РеквизитФормыВЗначение("Объект"); ДокументПродажи.ЗаполнитьУсловияПродажПоУмолчанию(); ЗначениеВРеквизитФормы(ДокументПродажи, "Объект"); НалогообложениеИзСоглашения = ПродажиСервер.НалогообложениеОпределяетсяИзСоглашения(Объект.Соглашение); Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда ВалютаДокумента = Объект.Валюта; ПриИзмененииХозяйственнойОперацииСервер(Ложь); ЗаполнитьЭтапыОплатыСервер( ПродажиВызовСервера.ГрафикСоглашенияЗаполнен(Объект.Соглашение), ИспользоватьГрафикиОплаты И ЗначениеЗаполнено(Объект.ГрафикОплаты) И ГрафикОплаты <> Объект.ГрафикОплаты); КонецЕсли; УстановитьВидимостьОпераций(); ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор); НадписьЭтапыОплаты = ЭтапыОплатыКлиентСервер.НадписьЭтапыОплаты(ЭтаФорма, Истина); КонецПроцедуры &НаСервере Процедура УстановитьСвойстваЭлементовПоПорядкуРасчетов() Экспорт НадписьЭтапыОплаты = ЭтапыОплатыКлиентСервер.НадписьЭтапыОплаты(ЭтаФорма, Истина); ВзаиморасчетыСервер.УстановитьВидимостьГруппыФинансовогоУчета(ЭтаФорма, Истина); ВзаиморасчетыСервер.УстановитьВидимостьЗачетаОплаты(ЭтаФорма, Истина); ОбновитьСостояниеЭлементовУправленияИтоговПоРасчетам(); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура ОбновитьДоступностьЭлементовВозвратнойТары(Форма) МассивЭлементов = Новый Массив(); МассивЭлементов.Добавить("СрокВозвратаМногооборотнойТары"); МассивЭлементов.Добавить("ТребуетсяЗалогЗаТару"); ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы( Форма.Элементы, МассивЭлементов, "Доступность", Форма.Объект.ВернутьМногооборотнуюТару); КонецПроцедуры &НаСервере Процедура ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(АдресТарыВХранилище) КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); СтруктураДействийИзмененныеСтроки = Новый Структура; СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(Объект); СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьКоличествоУпаковок"); СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьСтавкуНДС", Объект.НалогообложениеНДС); СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы); СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСумму"); СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы); СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина)); СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения); СтруктураДействийИзмененныеСтроки.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействийИзмененныеСтроки.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); СтруктураДействийДобавленныеСтроки = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(СтруктураДействийИзмененныеСтроки);; СтруктураДействийДобавленныеСтроки.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа)); СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ВариантОформленияПродажи")); СтруктураДействийДобавленныеСтроки.Вставить("ПоместитьОбработанныеСтрокиВКэшированныеЗначения"); Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьУсловияПродаж", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект)); Иначе СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьЦенуПродажи", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияЦеныВСтрокеТЧ(Объект)); КонецЕсли; СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); СтруктураДействийДобавленныеСтроки.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); МногооборотнаяТараСервер.ЗаполнитьМногооборотнуюТаруИзХранилища( Объект, АдресТарыВХранилище, "Товары", "Номенклатура,Характеристика,Склад,ДатаОтгрузки", СтруктураДействийИзмененныеСтроки, СтруктураДействийДобавленныеСтроки, КэшированныеЗначения); ОбеспечениеСервер.РассчитатьДатуОтгрузкиВСтрокахТабличнойЧасти(КэшированныеЗначения.ОбработанныеСтроки, Объект, Объект.Товары); ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ПриИзмененииДатыОтгрузкиВТабЧасти(); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ОбновитьДубликатыЗависимыхРеквизитов() СтруктураДополнительныхДействий = Новый Структура; СтруктураДополнительныхДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); МногооборотнаяТараСервер.ОбновитьПризнакБезВозвратнойТары(Объект.Товары, Объект.ВернутьМногооборотнуюТару, СтруктураДополнительныхДействий); ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты()); КонецПроцедуры &НаСервере Процедура ИзмененаОплатаСервер() ОбновитьСостояниеСервер(); ОбновитьСостояниеЭлементовУправленияИтоговПоРасчетам(); ОбновитьОграничениеЗадолженности(); КонецПроцедуры &НаСервере Процедура УстановитьВидимостьОбеспечения() Элементы.ТоварыСостояниеОбеспечения.Видимость = ПравоДоступа("Просмотр", Метаданные.Обработки.СостояниеОбеспечения); Если Не ПравоДоступа("Добавление", Метаданные.Документы.КорректировкаНазначенияТоваров) Или Не ПолучитьФункциональнуюОпцию("ИспользоватьОбособленноеОбеспечениеЗаказов") Тогда Элементы.ТоварыСоздатьКорректировкуНазначенияСнятиеРезерва.Видимость = Ложь; Элементы.ТоварыСоздатьКорректировкуНазначенияРезервирование.Видимость = Ложь; КонецЕсли; КонецПроцедуры &НаСервере Процедура УстановитьВидимостьЗапретаОтгрузкиПартнеру() СегментыСервер.УстановитьВидимостьЗапретаОтгрузкиПартнеру(Объект.Партнер, Элементы); КонецПроцедуры &НаСервере Процедура ПолучитьЗагруженныеТоварыИзХранилища(АдресТоваровВХранилище) СтруктураДействий = Новый Структура; СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа)); СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействий.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); СтруктураДействий.Вставить("ЗаполнитьПризнакВариантОформленияПродажи", Новый Структура("Номенклатура", "ВариантОформленияПродажи")); СтруктураДействий.Вставить("ПоместитьОбработанныеСтрокиВКэшированныеЗначения"); СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект); КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); ТоварыИзХранилища = ПолучитьИзВременногоХранилища(АдресТоваровВХранилище); Для Каждого СтрокаТоваров Из ТоварыИзХранилища Цикл СтрокаТЧТовары = Объект.Товары.Добавить(); ЗаполнитьЗначенияСвойств(СтрокаТЧТовары, СтрокаТоваров,,"КодСтроки"); Если Объект.НеОтгружатьЧастями Тогда СтрокаТЧТовары.ДатаОтгрузки = Объект.ДатаОтгрузки; КонецЕсли; ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения); СтруктураДействий.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(СтрокаТЧТовары, СтруктураДействий, КэшированныеЗначения); КонецЦикла; ОбеспечениеСервер.РассчитатьДатуОтгрузкиВСтрокахТабличнойЧасти(КэшированныеЗначения.ОбработанныеСтроки, Объект, Объект.Товары); НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий); ПриИзмененииДатыОтгрузкиВТабЧасти(); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары); КонецПроцедуры &НаСервереБезКонтекста Функция ДанныеВыбораСкладов(Склад) Запрос = Новый Запрос( "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Склады.Ссылка КАК Ссылка |ИЗ | Справочник.Склады КАК Склады |ГДЕ | Склады.Ссылка В ИЕРАРХИИ(&ГруппаСкладов) | И Склады.ЭтоГруппа = ЛОЖЬ | И Склады.ВыборГруппы <> ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.Запретить)"); Запрос.УстановитьПараметр("ГруппаСкладов", Склад); МассивСкладов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); Возврат МассивСкладов; КонецФункции &НаКлиенте Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Если Копирование Тогда НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтаФорма, "Товары", Отказ, Истина); КонецЕсли; СкидкиНаценкиКлиент.СброситьФлагСкидкиРассчитаны(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура СоставНабора(Команда) ВыбраннаяСтрока = Элементы.Товары.ТекущаяСтрока; Если ВыбраннаяСтрока = Неопределено Тогда Возврат; КонецЕсли; ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока); Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда Возврат; КонецЕсли; ПараметрыКомплекта = Новый Структура; ПараметрыКомплекта.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора); ПараметрыКомплекта.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора); ПараметрыКомплекта.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма)); АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыКомплекта); ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище); ПараметрыОткрытия.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора); ПараметрыОткрытия.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора); ПараметрыОткрытия.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС); ПараметрыОткрытия.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС); ПараметрыОткрытия.Вставить("Валюта", Объект.Валюта); ПараметрыОткрытия.Вставить("Соглашение", Объект.Соглашение); ПараметрыОткрытия.Вставить("Дата", Объект.Дата); ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка); ПараметрыОткрытия.Вставить("Склад", Объект.Склад); ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Ложь); ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура НастроитьПодпискуНаОповещения(Команда) РассылкиИОповещенияКлиентамКлиент.НастроитьПодпискуНаОповещенияИзОбъекта( Объект.Партнер, ПредопределенноеЗначение("Перечисление.ТипыСобытийОповещений.ИзменениеСостоянияЗаказа")); КонецПроцедуры &НаСервере Процедура УстановитьВидимостьОпераций() Если Не ИспользоватьСоглашенияСКлиентами Тогда ВозможнаРеализацияБезПереходаПраваСобственности = ИспользоватьОтгрузкуБезПереходаПраваСобственности; ИначеЕсли Не ЗначениеЗаполнено(Объект.Соглашение) Тогда ВозможнаРеализацияБезПереходаПраваСобственности = Ложь; Иначе УстановитьПривилегированныйРежим(Истина); ВозможнаРеализацияБезПереходаПраваСобственности = ОбщегоНазначенияУТ.ЗначениеРеквизитаОбъектаТипаБулево(Объект.Соглашение, "ВозможнаРеализацияБезПереходаПраваСобственности"); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; Если Элементы.Найти("ХозяйственнаяОперация") <> Неопределено Тогда Если Не ПолучитьФункциональнуюОпциюФормы("ИспользоватьКомиссиюПриПродажах") Тогда ЭлементСписка = Элементы.ХозяйственнаяОперация.СписокВыбора.НайтиПоЗначению(Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию); Если ЭлементСписка <> Неопределено Тогда Элементы.ХозяйственнаяОперация.СписокВыбора.Удалить(ЭлементСписка); КонецЕсли; КонецЕсли; ЭлементСписка = Элементы.ХозяйственнаяОперация.СписокВыбора.НайтиПоЗначению( Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности); Если Не ВозможнаРеализацияБезПереходаПраваСобственности Тогда Если ЭлементСписка <> Неопределено Тогда Элементы.ХозяйственнаяОперация.СписокВыбора.Удалить(ЭлементСписка); КонецЕсли; Иначе Если ЭлементСписка = Неопределено Тогда Элементы.ХозяйственнаяОперация.СписокВыбора.Добавить( Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности); КонецЕсли; КонецЕсли; Если Элементы.ХозяйственнаяОперация.СписокВыбора.Количество() = 1 Тогда Элементы.ХозяйственнаяОперация.ТолькоПросмотр = Истина; Иначе Элементы.ХозяйственнаяОперация.ТолькоПросмотр = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Процедура УстановитьПараметрыВыбораТоварыСклад() Элементы.ТоварыСклад.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив); ОбщегоНазначенияУТКлиентСервер.ДобавитьПараметрВыбора(Элементы.ТоварыСклад, "Ссылка", ДанныеВыбораСкладов(Объект.Склад)); КонецПроцедуры &НаСервере Процедура ЗаполнитьГруппуФинУчета() Если ЗначениеЗаполнено(Объект.Договор) Тогда Объект.ГруппаФинансовогоУчета = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор, "ГруппаФинансовогоУчета"); КонецЕсли; КонецПроцедуры &НаСервере Процедура ЗаполнитьПорядокОплатыПоУмолчанию() ВалютаОплаты = ДенежныеСредстваСервер.ПолучитьВалютуОплаты(Объект.ФормаОплаты, Объект.БанковскийСчет, Объект.Касса); Объект.ПорядокОплаты = Перечисления.ПорядокОплатыПоСоглашениям.ПолучитьПорядокОплатыПоУмолчанию(ВалютаДокумента, Объект.НалогообложениеНДС, ВалютаОплаты); КонецПроцедуры &НаСервере Процедура СкорректироватьСтрокиЗаказа(СтруктураДополнительныхПараметров) СтруктураКорректировкиСтрокЗаказа = ЗаказыСервер.ПолучитьСтруктуруКорректировкиСтрокЗаказа(); ЗаполнитьЗначенияСвойств(СтруктураКорректировкиСтрокЗаказа, СтруктураДополнительныхПараметров); ДокументПродажи = РеквизитФормыВЗначение("Объект"); СтруктураКорректировкиСтрокЗаказа.ДокументОбъект = ДокументПродажи; СтруктураКорректировкиСтрокЗаказа.ПроверятьОстатки = Не (ДокументПродажи.Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован); СтруктураРезультата = ПродажиСервер.СкорректироватьСтрокиЗаказа(СтруктураКорректировкиСтрокЗаказа); Если СтруктураРезультата.КоличествоСтрок <> 0 ИЛИ СтруктураРезультата.СуммаКорректировки > 0 Тогда СуммаЗаказано = ДокументПродажи.ПолучитьСуммуЗаказанныхСтрок(); СуммаЗалогаЗаТару = ДокументПродажи.ПолучитьСуммуЗаказанныхСтрок(Истина); СуммаЗаказаноКРаспределению = СуммаЗаказано - СуммаЗалогаЗаТару; ЭтапыОплатыСервер.ЗаполнитьЭтапыОплатыДокументаПродажи( ДокументПродажи, Ложь, Ложь, СуммаЗаказаноКРаспределению, СуммаЗалогаЗаТару,,,Истина); ЭтапыОплатыСервер.РаспределитьСуммуОтклоненияПоЭтапамГрафикаОплаты( ДокументПродажи.ЭтапыГрафикаОплаты, СтруктураРезультата.СуммаКорректировки); КонецЕсли; Если СтруктураДополнительныхПараметров.ЗакрыватьЗаказы Тогда ДокументПродажи.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт; КонецЕсли; ЗначениеВРеквизитФормы(ДокументПродажи, "Объект"); ЗаполнитьСлужебныеРеквизитыПоНоменклатуре(); ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина); ОбеспечениеСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ПараметрыЗаполнения, ДатаОтгрузкиОбязательна, СкладОбязателен); ОбновитьДубликатыЗависимыхРеквизитов(); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); Модифицированность = Истина; КонецПроцедуры #КонецОбласти #Область Наборы &НаСервере Функция ДополнитьДоПолногоНабора() ТабличнаяЧасть = Объект.Товары; ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки; МассивСтрок = Новый Массив; Для Каждого ТекСтрока Из ВыделенныеСтроки Цикл СтрокаТаблицы = ТабличнаяЧасть.НайтиПоИдентификатору(ТекСтрока); МассивСтрок.Добавить(СтрокаТаблицы); КонецЦикла; НаборыВызовСервера.ДополнитьДоПолногоНабора(ТабличнаяЧасть, МассивСтрок); Результат = Новый Массив; Для Каждого СтрокаТЧ Из МассивСтрок Цикл Результат.Добавить(СтрокаТЧ.ПолучитьИдентификатор()); КонецЦикла; Возврат Результат; КонецФункции &НаКлиентеНаСервереБезКонтекста Функция КолонкиНабора(Форма) Колонки = Новый Массив; Колонки.Добавить("Номенклатура"); Колонки.Добавить("Характеристика"); Колонки.Добавить("Цена"); Колонки.Добавить("ВидЦены"); Колонки.Добавить("Упаковка"); Колонки.Добавить("Количество"); Колонки.Добавить("КоличествоУпаковок"); Если Форма.Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") Тогда Если Форма.ИспользоватьРучныеСкидкиВПродажах Тогда Колонки.Добавить("ПроцентРучнойСкидки"); Колонки.Добавить("СуммаРучнойСкидки"); КонецЕсли; Если Форма.ИспользоватьАвтоматическиеСкидкиВПродажах Тогда Колонки.Добавить("ПроцентАвтоматическойСкидки"); Колонки.Добавить("СуммаАвтоматическойСкидки"); КонецЕсли; КонецЕсли; Если Форма.ИспользоватьПричиныОтменыЗаказовКлиентов Тогда Колонки.Добавить("ПричинаОтмены"); КонецЕсли; Колонки.Добавить("Отменено"); Колонки.Добавить("СтавкаНДС"); Колонки.Добавить("СуммаНДС"); Колонки.Добавить("СуммаСНДС"); Колонки.Добавить("Сумма"); Возврат Колонки; КонецФункции &НаКлиенте // Вызывается через ОписаниеОповещения из общего модуля НаборыКлиент Процедура ПриУдаленииКомплектующих(Действие, ДополнительныйПараметр) Экспорт Если НаборыКлиент.ДействиеРедактироватьНабор(Действие) Тогда НаборыКлиент.ПриУдаленииКомплектующих(ЭтаФорма, "Товары", ДополнительныйПараметр); ИначеЕсли НаборыКлиент.ДействиеУдалитьВесьНабор(Действие) Тогда ПриУдаленииКомплектующихНаСервере("Товары", ДополнительныйПараметр); КонецЕсли; РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаСервере Процедура ПриУдаленииКомплектующихНаСервере(ИмяТЧ, ДополнительныйПараметр) НаборыСервер.ПриУдаленииКомплектующих(ЭтаФорма, ИмяТЧ, ДополнительныйПараметр); КонецПроцедуры &НаСервере Функция АдресНабораВоВременномХранилище(Параметры) Экспорт Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтаФорма, Параметры, "Товары"); КонецФункции &НаСервере Процедура ПриОкончанииРедактированияНабора(АдресВоВременномХранилище) КэшированныеЗначения = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(); СтруктураДействийСИзмененнымиСтроками = Новый Структура; СтруктураДействийСИзмененнымиСтроками.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); СтруктураДействийСИзмененнымиСтроками.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); // Склад будет вставлен позже СтруктураДействийСИзмененнымиСтроками.Вставить("ПроверитьСериюРассчитатьСтатус", Новый Структура("ПараметрыУказанияСерий", ПараметрыУказанияСерий)); СтруктураДействийСДобавленнымиСтроками = Новый Структура; СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьСклад", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа)); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты()); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры")); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул")); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакОтмененоБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару); СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь)); ПараметрыДействия = ОбеспечениеКлиентСервер.ПараметрыДействияПроверитьЗаполнитьОбеспечение(ВариантыОбеспечения); СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьОбеспечениеВДокументеПродажи", ПараметрыДействия); СтруктураДействийСДобавленнымиСтроками.Вставить("ПоместитьОбработанныеСтрокиВКэшированныеЗначения"); СтруктураДействийСДобавленнымиСтроками.Вставить("ПриИзмененииТипаНоменклатурыИлиВариантаОбеспечения", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Истина)); ПараметрыДанных = Новый Структура; ПараметрыДанных.Вставить("Данные", ПолучитьИзВременногоХранилища(АдресВоВременномХранилище)); ПараметрыДанных.Вставить("СтруктураДействийСИзмененнымиСтроками", СтруктураДействийСИзмененнымиСтроками); ПараметрыДанных.Вставить("СтруктураДействийСДобавленнымиСтроками", СтруктураДействийСДобавленнымиСтроками); ПараметрыДанных.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма)); НаборыСервер.ПриОкончанииРедактированияНабора(ЭтаФорма, "Товары", ПараметрыДанных); ОбеспечениеСервер.РассчитатьДатуОтгрузкиВСтрокахТабличнойЧасти(КэшированныеЗначения.ОбработанныеСтроки, Объект, Объект.Товары); СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа); ВсегоСкладов = ТаблицаСкладов.Количество(); СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов); РассчитатьИтоговыеПоказателиЗаказа(ЭтаФорма); КонецПроцедуры &НаКлиенте Процедура РасчетыНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОтчетыУТКлиентПереопределяемый.ОткрытьОтчетКарточкаРасчетовСКлиентами("КарточкаРасчетовСКлиентамиПоДокументамКонтекст", Объект.Ссылка); КонецПроцедуры #КонецОбласти &НаСервере Процедура УстановитьВидимостьПоляПартнер() ВидимостьКЛ = Элементы.СчитатьКартуЛояльностиКлиент.Видимость; Если ВидимостьКЛ Тогда ВидимостьКЛ = ПолучитьФункциональнуюОпцию("ИспользоватьКартыЛояльности"); КонецЕсли; Элементы.ПартнерБезКЛ.Видимость = НЕ ВидимостьКЛ; Элементы.Партнер.Видимость = ВидимостьКЛ; КонецПроцедуры &НаКлиенте Процедура ОсобыеУсловияПеревозкиПриИзменении(Элемент) ОсобыеУсловияПеревозкиПриИзмененииСервер(); КонецПроцедуры &НаКлиенте Процедура ДополнитьИнформациюПоДоставкеКонтактами(Команда) ДополнитьИнформациюПоДоставкеКонтактамиСервер(); КонецПроцедуры &НаСервере Процедура ОсобыеУсловияПеревозкиПриИзмененииСервер() ДоставкаТоваров.ОсобыеУсловияПеревозкиПриИзменении(Элементы, Объект); КонецПроцедуры &НаСервере Процедура ДополнитьИнформациюПоДоставкеКонтактамиСервер() ДоставкаТоваров.ДополнитьИнформациюПоДоставкеКонтактами(Объект); КонецПроцедуры &НаСервере Функция ПолучитьСуммуДопустимогоОтклоненияПредоплатыПоДокументу() Запрос = Новый Запрос; Запрос.Текст = " |ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.СуммаСНДС КАК СуммаСНДС |ПОМЕСТИТЬ ВТТоварыЗаказа |ИЗ &ТоварыЗаказа КАК Товары |; |/////////////////////////////////////////////////////////////////// | |ВЫБРАТЬ | СУММА(ВЫРАЗИТЬ(Товары.СуммаСНДС * &ДопустимоеОтклонениеМерныхТоваров/100 КАК ЧИСЛО(15,2))) КАК Сумма |ИЗ ВТТоварыЗаказа КАК Товары |ГДЕ Товары.Номенклатура.ЕдиницаИзмерения.ТипИзмеряемойВеличины В (&МерныеТипыЕдиницИзмерений)"; Запрос.УстановитьПараметр("ДопустимоеОтклонениеМерныхТоваров", Константы.ДопустимоеОтклонениеОтгрузкиПриемкиМерныхТоваров.Получить()); Запрос.УстановитьПараметр("ТоварыЗаказа",Объект.Товары.Выгрузить()); Запрос.УстановитьПараметр("МерныеТипыЕдиницИзмерений", Справочники.УпаковкиЕдиницыИзмерения.МерныеТипыЕдиницИзмерений()); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Возврат Выборка.Сумма; Иначе Возврат 0; КонецЕсли; КонецФункции // Обновляет отображение индексов СПАРК Риски. // // Параметры: // Нет. // &НаКлиенте Процедура Подключаемый_ОбновитьОтображениеИндексыСПАРК() ОбновитьОтображениеИндексыСПАРК(); КонецПроцедуры // Обновляет отображение индексов СПАРК Риски. // // Параметры: // Нет. // &НаКлиенте Процедура ОбновитьОтображениеИндексыСПАРК() ПараметрыОтображения = Новый Структура("ВариантОтображения", "Однострочный"); СПАРКРискиКлиент.ОтобразитьИндексыСПАРК( ЭтотОбъект.ИндексыСПАРКРиски, Неопределено, Объект.Контрагент, // Искать по ссылке ЭтотОбъект, ПараметрыОтображения, Истина); КонецПроцедуры #КонецОбласти #Область Доработка &НаСервере Функция ЭтоРозничныйПродавецСервер() Возврат УТ_ДоработкиСервер.ЭтоРозничныйПродавец(ПараметрыСеанса.ТекущийПользователь); КонецФункции // () &НаСервере Процедура УстановитьСоглашениеРозница(); Если УТ_ДоработкиСервер.ЭтоРозничныйПродавец(ПараметрыСеанса.ТекущийПользователь) Тогда //ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами"); // //Если ИспользоватьСоглашенияСКлиентами Тогда Если ЗначениеЗаполнено(Объект.Партнер) Тогда Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | СоглашенияСКлиентами.Ссылка |ИЗ | Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами |ГДЕ | СоглашенияСКлиентами.Наименование = &Наименование | И СоглашенияСКлиентами.Партнер = &Партнер"; Запрос.УстановитьПараметр("Наименование", "Розница"); Запрос.УстановитьПараметр("Партнер", Объект.Партнер); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Объект.Соглашение = ВыборкаДетальныеЗаписи.Ссылка; //ПриИзмененииСоглашенияСервер(); КонецЦикла; Иначе Объект.Соглашение = Справочники.СоглашенияСКлиентами.НайтиПоНаименованию("Розница"); КонецЕсли; //КонецЕсли; ПриИзмененииСоглашенияСервер(); КонецЕсли; КонецПроцедуры &НаСервере Процедура УстановитьСуммуОплаты() СумОплаты = 0; Запрос = Новый Запрос(" |ВЫБРАТЬ | РасчетыСКлиентами.СуммаРасход КАК СуммаОплаты |ИЗ | РегистрНакопления.РасчетыСКлиентами.Обороты(,,Период, | ЗаказКлиента = &Ссылка | ) КАК РасчетыСКлиентами | | ВНУТРЕННЕЕ СОЕДИНЕНИЕ | Документ.ЗаказКлиента КАК ДанныеДокумента | ПО | ДанныеДокумента.Ссылка = &Ссылка | И ДанныеДокумента.ХозяйственнаяОперация <> &ХозяйственнаяОперация |ГДЕ | РасчетыСКлиентами.СуммаРасход > 0 |"); Запрос.УстановитьПараметр("Ссылка", Объект.Ссылка); Запрос.УстановитьПараметр("ХозяйственнаяОперация", Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда СумОплаты = СумОплаты + Выборка.СуммаОплаты; КонецЕсли; СуммаОплаты = СумОплаты; Если СуммаЗаказано<>0 Тогда ПроцентОплаты = Окр(100 * СуммаОплаты / СуммаЗаказано, 0); КонецЕсли; КонецПроцедуры #КонецОбласти