#Область ОписаниеПеременных
&НаКлиенте
Перем ВыполняетсяЗакрытие;
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем ТекущиеДанныеИдентификатор;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПараметрыВстраивания = Обработки.ПомощникПродаж.ДоступныеОстаткиПараметрыВстраивания();
ОбеспечениеВДокументахСервер.ДоступныеОстаткиПриСозданииНаСервере(ЭтотОбъект, ПараметрыВстраивания);
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
Если СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда
ВызватьИсключение НСтр("ru = 'Помощник продаж недоступен в базовой версии программы.'");
КонецЕсли;
ИспользоватьПередачуТоваровНаХранение = Ложь;
ИспользоватьПередачуТоваровНаХранение = ПолучитьФункциональнуюОпцию("ИспользоватьПередачуНаОтветственноеХранениеСПравомПродажи");
ИспользоватьПодразделения = ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения");
ИспользоватьРучныеСкидкиВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах");
ИспользоватьАвтоматическиеСкидкиВПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах");
ИспользоватьЗаказыКлиентов = ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыКлиентов");
ИспользоватьТиповыеСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьТиповыеСоглашенияСКлиентами");
ИспользоватьИндивидуальныеСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьИндивидуальныеСоглашенияСКлиентами");
ИспользоватьСоглашенияСКлиентами = ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами");
ИспользоватьПодключаемоеОборудование = ПолучитьФункциональнуюОпцию("ИспользоватьПодключаемоеОборудование");
ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента = ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента");
ИспользоватьРасширенныеВозможностиЗаказаКлиента = ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента");
ИспользоватьГрафикиОплаты = ПолучитьФункциональнуюОпцию("ИспользоватьГрафикиОплаты");
ИспользоватьУпрощеннуюСхемуОплаты = ПолучитьФункциональнуюОпцию("ИспользоватьУпрощеннуюСхемуОплатыВПродажах");
ИспользоватьСтатусыРеализацийТоваровУслуг = ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыРеализацийТоваровУслуг");
ИспользоватьОрдерныеСклады = ПолучитьФункциональнуюОпцию("ИспользоватьОрдерныеСклады");
ИспользоватьНаправленияДеятельности = ПолучитьФункциональнуюОпцию("ИспользоватьУчетДоходовПоНаправлениямДеятельности");
ФормироватьВидыЗапасовПоПодразделениямМенеджерам = ПолучитьФункциональнуюОпцию("ФормироватьВидыЗапасовПоПодразделениямМенеджерам");
ИспользоватьУправлениеДоставкой = ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеДоставкой");
ИспользоватьКомиссиюПриПродажах = ПолучитьФункциональнуюОпцию("ИспользоватьКомиссиюПриПродажах");
ВыбиратьВерсиюКомиссионныхПродаж = ПолучитьФункциональнуюОпцию("ВыбиратьВерсиюКомиссионныхПродаж");
ИспользоватьОтгрузкуБезПереходаПраваСобственности =
ПолучитьФункциональнуюОпцию("ИспользоватьОтгрузкуБезПереходаПраваСобственности2_0");
ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5 =
ПолучитьФункциональнуюОпцию("ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5");
ВыводитьСкидкиВПечатныеФормы = Константы.ОтображениеСкидокВПечатныхФормахДокументовПродажи.Получить() <> Перечисления.ВариантыВыводаСкидокВПечатныхФормах.НеВыводитьСкидки;
ВариантКлассификацииЗадолженности = ОбщегоНазначенияУТВызовСервера.ВариантКлассификацииЗадолженностиПоУмолчанию();
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Обработки.ПомощникПродаж));
ПродажиСервер.УстановитьРежимВыбораГруппЭлементовСклада(Элементы.Склад);
ТолькоТиповые = ИспользоватьТиповыеСоглашенияСКлиентами
И НЕ ИспользоватьИндивидуальныеСоглашенияСКлиентами;
ТолькоИндивидуальные = НЕ ИспользоватьТиповыеСоглашенияСКлиентами
И ИспользоватьИндивидуальныеСоглашенияСКлиентами;
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Объект.КартаЛояльности);
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
СкрытьНедоступныеДополнительныеРеквизиты();
УстановитьЗаголовокРеквизитовПечати();
ПроверитьДоступностьПечатиПКО();
ПроверитьДоступностьПечатиДоверенности();
ИнициализироватьПомощникПродаж();
УстановитьВидимостьЭлементовПоНастройкам();
УстановитьДоступностьДоговора();
УстановитьВидимостьКомандыЗаполненияВидаЦенПоДоговору();
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтотОбъект, "Товары");
Если ИспользоватьУправлениеДоставкой Тогда
Объект.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз;
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
Элементы.СтраницыПеревозчик.ТекущаяСтраница = Элементы.СтраницаПеревозчикПусто;
Элементы.СтраницыДоставки.ТекущаяСтраница = Элементы.СтраницаДоставкаКоммерческоеПредложение;
Иначе
ДоставкаТоваров.ПриЧтенииСозданииРаспоряженийНаСервере(Элементы, Объект);
КонецЕсли;
КонецЕсли;
УстановитьВидимостьЭлементовПоОперацииСервер();
РежимФормированияРасходныхОрдеров = Константы.РежимФормированияРасходныхОрдеров.Получить();
ДоступноСозданиеРасходныхОрдеров = РежимФормированияРасходныхОрдеров = Перечисления.РежимыФормированияРасходныхОрдеров.Менеджером
И ПравоДоступа("Добавление", Метаданные.Документы.РасходныйОрдерНаТовары);
ЭлементыДляЗаполнения = Новый Массив;
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиС);
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиПо);
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиС1);
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиПо1);
ДоставкаТоваровКлиентСервер.ЗаполнитьСписокВыбораПоляВремени(ЭлементыДляЗаполнения);
Если КлиентскоеПриложение.ТекущийВариантИнтерфейса() = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2 Тогда
Элементы.ГруппаИтого.ЦветФона = Новый Цвет();
Элементы.ГруппаШапка.ЦветФона = Новый Цвет();
Элементы.ГруппаОсновнаяКоманднаяПанель.ЦветФона = Новый Цвет();
КонецЕсли;
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов,
ВсегоСкладов);
РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.Товары);
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
ПараметрыЗаполнения = Обработки.ПомощникПродаж.ПараметрыЗаполненияНалогообложенияНДСПродажи(Объект);
УчетНДСУП.ЗаполнитьСписокВыбораНалогообложенияНДСПродажи(Элементы.НалогообложениеНДС,
Объект.НалогообложениеНДС,
ПараметрыЗаполнения,
УчетНДСКэшированныеЗначенияПараметров);
ЗаполнитьСписокВыбораВариантаОформленияДокументовПродажи();
ФискализацияДоступна = РозничныеПродажиВызовСервера.ФискализацияДоступна();
ОперацияРеализацияКлиенту = Перечисления.ХозяйственныеОперации.РеализацияКлиенту;
Элементы.ТоварыВидЦены.БыстрыйВыбор = Не ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоВидовЦен");
ПараметрыПроцедуры = Новый Структура("ВариантОтображения", "Однострочный");
СПАРКРиски.ПриСозданииНаСервере(
ЭтотОбъект,
Неопределено,
Объект.Контрагент,
Перечисления.ЮрФизЛицо.ВидКонтрагентаСПАРКРиски(Объект.Контрагент),
ПараметрыПроцедуры);
КонецПроцедуры
&НаСервере
Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки)
Если ИспользоватьРасширенныеВозможностиЗаказаКлиента Тогда
СохраненныйСтатус = Настройки.Получить("Объект.СтатусЗаказаКлиента");
Если ЗначениеЗаполнено(СохраненныйСтатус) Тогда
ДоступныеСтатусы = Новый СписокЗначений;
Перечисления.СтатусыЗаказовКлиентов.ЗаполнитьСписокВыбора(ДоступныеСтатусы,
Перечисления.СтатусыЗаказовКлиентов.НеСогласован);
Если ДоступныеСтатусы.НайтиПоЗначению(СохраненныйСтатус) = Неопределено Тогда
РазмерСписка = ДоступныеСтатусы.Количество();
Объект.СтатусЗаказаКлиента = ДоступныеСтатусы[РазмерСписка - 1].Значение;
Настройки.Удалить("Объект.СтатусЗаказаКлиента");
КонецЕсли;
КонецЕсли;
Иначе
Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.НеТребуется;
Если Объект.УпрощенноеОбеспечение И ИспользоватьСоглашенияСКлиентами Тогда
ВариантИФлаг = Новый Структура("ВариантОбеспечения,Обособленно", Объект.ВариантОбеспечения, Неопределено);
ВариантОбеспеченияИФлагОбособленно = ПродажиСервер.ВариантОбеспеченияИФлагОбособленноПоУмолчанию(
Объект.Соглашение,
Объект.СтатусЗаказаКлиента,
ВариантИФлаг);
КонецЕсли
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ВариантОбеспечения) Тогда
Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.КОбеспечению;
КонецЕсли;
Если Объект.СпособПрогнозированияПродаж = Перечисления.СпособыПрогнозированияПродаж.ПоПланамПродаж
И НЕ ПравоДоступа("Чтение", Метаданные.РегистрыНакопления.ПланыПродаж) Тогда
Объект.СпособПрогнозированияПродаж = Неопределено;
КонецЕсли;
УстановитьВариантОформленияДокументовПродажиПоУмолчанию();
ВариантОформленияДокументовПриИзмененииСервер();
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
УправлениеСозданиемТранспортныхНакладных();
УправлениеСозданиемДоверенностей();
УстановитьОтметкаНезаполненногоСклада();
УстановитьВидимостьЭлементовПоНастройкам();
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если НЕ ВыполняетсяЗакрытие
И Модифицированность
И НЕ ЗавершениеРаботы Тогда
Отказ = Истина;
ОписаниеОповещения = Новый ОписаниеОповещения("ПередЗакрытиемЗавершение", ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'Работа помощника будет завершена, все введенные данные будут потеряны. Закрыть помощник?'");
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("Закрыть", НСтр("ru = 'Закрыть'"));
СписокКнопок.Добавить("НеЗакрывать", НСтр("ru = 'Не закрывать'"));
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, СписокКнопок);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = "Закрыть" Тогда
ВыполняетсяЗакрытие = Истина;
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СПАРКРискиКлиент.ПриОткрытии(ЭтотОбъект, Неопределено);
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтотОбъект, "СканерШтрихкода");
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Функция ДополнительныеПараметрыОбработкиЗавершения()
Результат = Новый Структура;
Результат.Вставить("ИмяСобытия", "");
Результат.Вставить("Источник", "");
Результат.Вставить("Параметр", Новый Структура());
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если Источник = "ПодключаемоеОборудование"
И ИмяСобытия = "НеизвестныеШтрихкоды"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
КэшированныеЗначения.Штрихкоды.Очистить();
ДанныеШтрихкодов = Новый Массив;
Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
ОбработатьШтрихкоды(ДанныеШтрихкодов);
КонецЕсли;
Если ИмяСобытия = "СчитанаКартаЛояльности"
И Параметр.ФормаВладелец = УникальныйИдентификатор
И Не ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
ДополнительныеПараметры = ДополнительныеПараметрыОбработкиЗавершения();
ДополнительныеПараметры.ИмяСобытия = ИмяСобытия;
ДополнительныеПараметры.Источник = Источник;
ДополнительныеПараметры.Параметр = Параметр;
ОписаниеОповещения = Новый ОписаниеОповещения("ОбработкаОповещенияЗавершение", ЭтотОбъект, ДополнительныеПараметры);
СчитанаКартаЛояльности(ОписаниеОповещения, Параметр.КартаЛояльности);
Возврат;
КонецЕсли;
СПАРКРискиКлиент.ОбработкаОповещения(ЭтотОбъект, Неопределено, ИмяСобытия, Параметр, Источник);
ОбработкаОповещенияФрагмент(ИмяСобытия, Источник, Параметр);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияЗавершение(Результат, ДополнительныеПараметры) Экспорт
ИмяСобытия = ДополнительныеПараметры.ИмяСобытия;
Источник = ДополнительныеПараметры.Источник;
Параметр = ДополнительныеПараметры.Параметр;
ОбработкаОповещенияФрагмент(ИмяСобытия, Источник, Параметр);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещенияФрагмент(Знач ИмяСобытия, Знач Источник, Знач Параметр)
Перем АдресНабораВоВременномХранилище, ПараметрыКомплекта, ПараметрыОткрытия, ЭтоСобытиеЗаписи;
Если ИмяСобытия = "ПолученыСообщения"
И Параметр.ФормаВладелец = УникальныйИдентификатор
И Не ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
ПолученыСообщения(Параметр.Сообщения);
КонецЕсли;
Если ИмяСобытия = "ВыборПартнераНайдено"
И Не Параметр.Перевозчик Тогда
Объект.Партнер = Параметр.Партнер;
ПартнерПриИзмененииСервер();
КонецЕсли;
Если ИмяСобытия = "ДобавлениеПартнераВСегмент"
ИЛИ ИмяСобытия = "УдалениеПартнераИзСегмента" Тогда
УстановитьВидимостьЗапретаОтгрузкиПартнеру();
КонецЕсли;
Если ИмяСобытия = "Закрытие_РедактированиеКомплекта"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ПриОкончанииРедактированияНабора(Параметр.АдресВоВременномХранилище);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
КонецЕсли;
Если ИмяСобытия = "РедактироватьНабор"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ПараметрыКомплекта = Новый Структура;
ПараметрыКомплекта.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора);
ПараметрыКомплекта.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
ПараметрыКомплекта.Вставить("КолонкиНабора", КолонкиНабора(ЭтотОбъект));
АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыКомплекта);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище);
ПараметрыОткрытия.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора);
ПараметрыОткрытия.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
ПараметрыОткрытия.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыОткрытия.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыОткрытия.Вставить("Валюта", Объект.Валюта);
ПараметрыОткрытия.Вставить("Партнер", Объект.Партнер);
Если Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ПараметрыОткрытия.Вставить("Соглашение", Неопределено);
Иначе
ПараметрыОткрытия.Вставить("Соглашение", Объект.Соглашение);
КонецЕсли;
ПараметрыОткрытия.Вставить("Дата", Объект.Дата);
ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтотОбъект, УникальныйИдентификатор);
КонецЕсли;
ЭтоСобытиеЗаписи = (Лев(ИмяСобытия,7) = "Запись_");
Если ЭтоСобытиеЗаписи Тогда
ОбновитьСостояниеДокумента(Источник);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
ПроверяемыеРеквизиты.Очистить();
ОбработкаОбъект = РеквизитФормыВЗначение("Объект");
ЭтоОперацияЗаказаКлиента = ЭтоОперацияЗаказаКлиента(Объект.ВариантОформленияДокументов);
ЭтоОперацияПередачи = ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация)
ИЛИ (ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация)
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю
ИЛИ Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю));
ВариантСозданияНеКоммерческоеПредложение =
Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
МассивНепроверяемыхРеквизитов = Новый Массив;
#Область ПроверкиРеквизитовШапки
Если Не ЗначениеЗаполнено(Объект.Партнер) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Клиент"" не заполнено'"), , "Объект.Партнер", ,
Отказ);
КонецЕсли;
Если ИспользоватьСоглашенияСКлиентами
И Не ЗначениеЗаполнено(Объект.Соглашение)
И ВариантСозданияНеКоммерческоеПредложение Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Соглашение"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ,"Объект.Соглашение", , Отказ);
КонецЕсли;
Если Не ВариантСозданияНеКоммерческоеПредложение
И Не ЗначениеЗаполнено(Объект.СрокДействия) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Срок действия"" не заполнено'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ,"СрокДействия", "Объект", Отказ);
КонецЕсли;
Если Не ВариантСозданияНеКоммерческоеПредложение Тогда
Если ЗначениеЗаполнено(Объект.Менеджер)Тогда
КонтактнаяИнформацияМенеджера = КоммерческиеПредложенияДокументы.КонтактнаяИнформацияМенеджера(Объект.Менеджер);
Если ПустаяСтрока(КонтактнаяИнформацияМенеджера.Email) Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Для менеджера %1 не указан адрес электронной почты.'"), Объект.Менеджер);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Менеджер", , Отказ);
ИначеЕсли Не КонтактнаяИнформацияМенеджера.EmailСоответствуетТребованиям Тогда
ТекстСообщения = СтрШаблон(НСтр("ru = 'Для менеджера %1 указан некорректный адрес электронной почты ""%2"".'"), Объект.Менеджер, КонтактнаяИнформацияМенеджера.Email);
ОбщегоНазначения.СообщитьПользователю(ТекстСообщения, , "Менеджер", , Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не ВариантСозданияНеКоммерческоеПредложение
И ЗначениеЗаполнено(Объект.СрокДействия)
И Объект.СрокДействия < НачалоДня(ТекущаяДатаСеанса()) Тогда
ТекстОшибки = НСтр("ru = '""Срок действия"" должен быть не меньше чем текущая дата'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ,"СрокДействия", "Объект", Отказ);
КонецЕсли;
ПараметрыОтбораТоваров = Новый Структура("ТипНоменклатуры", Перечисления.ТипыНоменклатуры.Товар);
ПараметрыОтбораТары = Новый Структура("ТипНоменклатуры", Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
ЕстьТовары = Объект.Товары.НайтиСтроки(ПараметрыОтбораТоваров).Количество() > 0;
ЕстьТара = Объект.Товары.НайтиСтроки(ПараметрыОтбораТары).Количество() > 0;
Если ДатаОтгрузкиОбязательна
И НЕ ЗначениеЗаполнено(Объект.ДатаОтгрузки)
И Объект.НеОтгружатьЧастями
И ЭтоОперацияЗаказаКлиента Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Дата отгрузки"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки,,"Объект.ДатаОтгрузки", ,Отказ);
КонецЕсли;
Если СкладОбязателен
И Не СкладГруппа
И Не ЗначениеЗаполнено(Объект.Склад)
И ВариантСозданияНеКоммерческоеПредложение Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Склад"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, ,"Объект.Склад", , Отказ);
ИначеЕсли (ЕстьТовары Или ЕстьТара)
И СкладГруппа
И ВариантСозданияНеКоммерческоеПредложение
И ЗначениеЗаполнено(Объект.Склад) Тогда
ВыборГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Склад, "ВыборГруппы");
Если (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг)
И ВыборГруппы = Перечисления.ВыборГруппыСкладов.Запретить Тогда
ТекстОшибки = НСтр("ru = 'Необходимо указать группу складов, разрешенную для выбора в заказах'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Склад", , Отказ);
ИначеЕсли (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю)
И (ВыборГруппы = Перечисления.ВыборГруппыСкладов.Запретить
Или ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказах) Тогда
ТекстОшибки = НСтр("ru = 'Необходимо указать группу складов, разрешенную для выбора в реализациях'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Склад", , Отказ);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Подразделение)
И ФормироватьВидыЗапасовПоПодразделениямМенеджерам
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Подразделение"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Подразделение", , Отказ);
КонецЕсли;
#КонецОбласти
#Область ПроверкиТабличнойЧастиТовары
ЕстьОшибкиТовары = Ложь;
Если Объект.Товары.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru='Не введено ни одной строки в список ""Товары""'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Товары", , ЕстьОшибкиТовары);
ИначеЕсли Объект.Товары.Итог("КоличествоУпаковок") = 0 И Объект.Товары.Итог("КоличествоКВозврату") = 0
И Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
ТекстОшибки = НСтр("ru='Не введено ни одной строки для оформления документов в список ""Товары"". Оформление только документов'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Товары", , ЕстьОшибкиТовары);
КонецЕсли;
Для ТекИндекс = 0 По Объект.Товары.Количество()-1 Цикл
ТекущаяСтрока = Объект.Товары[ТекИндекс];
АдресОшибки = " " + НСтр("ru='в строке %НомерСтроки% списка ""Товары""'");
АдресОшибки = СтрЗаменить(АдресОшибки, "%НомерСтроки%", ТекущаяСтрока.НомерСтроки);
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Номенклатура) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не заполнена колонка ""Номенклатура""'") + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "Номенклатура"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.КоличествоУпаковок)
И Не ЗначениеЗаполнено(ТекущаяСтрока.КоличествоУпаковокКВозврату) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не заполнена колонка ""Количество упаковок""'") + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "КоличествоУпаковок"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Цена)
И ?(Объект.ВернутьМногооборотнуюТару И Не Объект.ТребуетсяЗалогЗаТару,
ТекущаяСтрока.ТипНоменклатуры <> Перечисления.ТипыНоменклатуры.МногооборотнаяТара,
Истина) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не заполнена колонка ""Цена""'") + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "Цена"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.Сумма)
И Не ЗначениеЗаполнено(Объект.Товары[ТекИндекс].КоличествоУпаковокКВозврату)
И ?(Объект.ВернутьМногооборотнуюТару
И Не Объект.ТребуетсяЗалогЗаТару,
ТекущаяСтрока.ТипНоменклатуры <> Перечисления.ТипыНоменклатуры.МногооборотнаяТара,
Истина) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не заполнена колонка ""Сумма""'") + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "Сумма"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.СтавкаНДС)
И Не ЭтоОперацияПередачи Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не заполнена колонка ""Ставка НДС""'") + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "СтавкаНДС"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если ТекущаяСтрока.СкладОбязателен
И Не ЗначениеЗаполнено(ТекущаяСтрока.Склад)
И ВариантСозданияНеКоммерческоеПредложение
И СкладГруппа Тогда
ТекстСообщения = НСтр("ru='Не заполнена колонка ""%1""%2'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
СтрШаблон(ТекстСообщения, Элементы.ТоварыГруппаОтправитель.Заголовок, АдресОшибки),
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "Склад"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если Не ЗначениеЗаполнено(ТекущаяСтрока.ВариантОформления)
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не заполнена колонка ""Оформить""'") + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "ВариантОформления"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг) Тогда
Если ТекущаяСтрока.ДатаОтгрузкиОбязательна
И Не ЗначениеЗаполнено(ТекущаяСтрока.ДатаОтгрузки)
И Не Объект.НеотгружатьЧастями Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Не заполнена колонка ""Дата отгрузки""'") + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "ДатаОтгрузки"),
,
ЕстьОшибкиТовары);
КонецЕсли;
Если НЕ Объект.НеОтгружатьЧастями
И ЗначениеЗаполнено(ТекущаяСтрока.ДатаОтгрузки)
И ТекущаяСтрока.ДатаОтгрузки < НачалоДня(Объект.Дата) Тогда
ТекстОшибки = НСтр("ru='Дата отгрузки должна быть не меньше даты продажи ""%Дата%""'");
ТекстОшибки = СтрЗаменить(ТекстОшибки,"%Дата%", Формат(Объект.Дата, "ДЛФ=DD"));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
ТекстОшибки + АдресОшибки,
,
"Объект." + ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", ТекущаяСтрока.НомерСтроки, "ДатаОтгрузки"),
,
Отказ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
НоменклатураСервер.ПроверитьЗаполнениеКоличества(ОбработкаОбъект, ПроверяемыеРеквизиты, ЕстьОшибкиТовары);
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ОбработкаОбъект, МассивНепроверяемыхРеквизитов, ЕстьОшибкиТовары);
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(Объект, Обработки.ПомощникПродаж);
Если ЭтоРеализация(Объект.ВариантОформленияДокументов)
Или ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
НоменклатураСервер.ПроверитьЗаполнениеСерий(Объект, ПараметрыУказанияСерий.Реализация, ЕстьОшибкиТовары);
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента Тогда
НоменклатураСервер.ПроверитьЗаполнениеСерий(Объект, ПараметрыУказанияСерий.Заказ, ЕстьОшибкиТовары);
КонецЕсли;
НоменклатураСервер.ПроверитьЗаполнениеСодержания(ОбработкаОбъект, ЕстьОшибкиТовары, "Товары");
#КонецОбласти
#Область ПроверкиРеквизитовОплатыИОтгрузкиИТабличнойЧастиЭтапыоплаты
ЕстьОшибкиОплатаОтгрузка = Ложь;
Если Не ЗначениеЗаполнено(Объект.Организация) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Организация"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Организация", , ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровИКонтрагентов")
И Не ЗначениеЗаполнено(Объект.Контрагент) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Контрагент"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Контрагент", , ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если ВариантСозданияНеКоммерческоеПредложение
И ПолучитьФункциональнуюОпцию("ИспользоватьДоговорыСКлиентами")
И Не ЗначениеЗаполнено(Объект.Договор)
И (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи
Или (Объект.КомиссионныеПродажи25
И Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию)
Или (ИспользоватьСоглашенияСКлиентами
И ЗначениеЗаполнено(Объект.Соглашение)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Соглашение, "ИспользуютсяДоговорыКонтрагентов"))) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Договор"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Договор", , ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Менеджер) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Менеджер"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Менеджер", , ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Валюта) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Валюта"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.Валюта", , ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.ХозяйственнаяОперация) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Операция"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ХозяйственнаяОперация", ,
ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.НалогообложениеНДС)
И Не (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или ЭтоОперацияПередачи) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Налогообложение НДС"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.НалогообложениеНДС", ,
ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если Объект.НеОтгружатьЧастями
И ЗначениеЗаполнено(ОбработкаОбъект.ДатаОтгрузки)
И ЭтоОперацияЗаказаКлиента
И ОбработкаОбъект.ДатаОтгрузки < НачалоДня(ОбработкаОбъект.Дата) Тогда
ТекстОшибки = НСтр("ru='Дата отгрузки должна быть не меньше даты документа %Дата%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Дата%", Формат(ОбработкаОбъект.Дата,"ДЛФ=DD"));
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ДатаОтгрузки", , ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
Если ВариантСозданияНеКоммерческоеПредложение
И Объект.ФормаОплаты = Перечисления.ФормыОплаты.Наличная
И Объект.СоздаватьПриходныйКассовыйОрдер
И Не ЭтоОперацияПередачи
И Не ЗначениеЗаполнено(Объект.Касса) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Касса"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "НадписьЭтапыОплаты", , ЕстьОшибкиОплатаОтгрузка);
КонецЕсли;
ЗаказРасчетыПоНакладным = (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
И Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным);
Если ВариантСозданияНеКоммерческоеПредложение
И ЗначениеЗаполнено(Объект.ХозяйственнаяОперация)
И Не ЗаказРасчетыПоНакладным
И Не ЭтоОперацияПередачи Тогда
СуммаОплатыПоДокументу = Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары");
СуммаЗалогаЗаТару = ?(Объект.ТребуетсяЗалогЗаТару, Объект.Товары.Итог("СуммаСНДС") - СуммаОплатыПоДокументу, 0);
Если Не ЗаданГрафикИсполнения
Или Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда
СтруктураПараметровПроверки = ЭтапыОплатыСервер.ПараметрыПроверкиКорректностиЗаполненияЭтапов();
СтруктураПараметровПроверки.ДатаОтгрузки = ДатаОтгрузки;
СтруктураПараметровПроверки.Дата = НачалоДня(ТекущаяДатаСеанса());
СтруктураПараметровПроверки.Валюта = ВалютаДокумента;
СтруктураПараметровПроверки.ЭтоЗаказ =
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг;
СтруктураПараметровПроверки.НакладнаяИсточникГрафика =
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
И Не ЗаданГрафикИсполнения;
СтруктураПараметровПроверки.НадписьЭтапыОплаты = "ДекорацияЭтапыОплаты";
СтруктураПараметровПроверки.СуммаОплатыПоДокументу = СуммаОплатыПоДокументу;
СтруктураПараметровПроверки.СуммаЗалогаПоДокументу = СуммаЗалогаЗаТару;
ЭтапыОплатыСервер.ПроверитьКорректностьЭтаповГрафикаОплаты(
Объект.ЭтапыГрафикаОплаты,
ЕстьОшибкиОплатаОтгрузка,
СтруктураПараметровПроверки);
КонецЕсли;
КонецЕсли;
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
И Объект.СтатусЗаказаКлиента <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован Тогда
ПродажиСервер.ПроверитьЗапретОтгрузки(Объект.Партнер, Отказ);
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю Тогда
ПараметрыОтбораАкт = Новый Структура("ВариантОформленияПродажи",
Перечисления.ВариантыОформленияПродажи.АктВыполненныхРабот);
ТоварыАкт = Объект.Товары.Выгрузить(ПараметрыОтбораАкт);
Если (ТоварыАкт.Количество() > 0
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю
Или Объект.СтатусРеализацииТоваровУслуг <> Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате
Или СуммаАвансаДоОбеспечения + СуммаПредоплатыДоОтгрузки = 0) Тогда
ПродажиСервер.ПроверитьЗапретОтгрузки(Объект.Партнер, Отказ);
КонецЕсли;
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
ПараметрыОтбораЗаказ = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента);
ПараметрыОтбораЗаказ = Объект.Товары.Выгрузить(ПараметрыОтбораЗаказ);
Если ПараметрыОтбораЗаказ.Количество() = Объект.Товары.Количество()
И Объект.СтатусЗаказаКлиента <> Перечисления.СтатусыЗаказовКлиентов.НеСогласован Тогда
ПродажиСервер.ПроверитьЗапретОтгрузки(Объект.Партнер, Отказ);
КонецЕсли;
ПараметрыОтбораПродажа = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
СтрокиПродажи = Объект.Товары.НайтиСтроки(ПараметрыОтбораПродажа);
ПараметрыОтбораПередачи = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
СтрокиПередачи = Объект.Товары.НайтиСтроки(ПараметрыОтбораПередачи);
Если СтрокиПродажи.Количество() > 0
Или СтрокиПередачи.Количество() > 0 Тогда
ПродажиСервер.ПроверитьЗапретОтгрузки(Объект.Партнер, Отказ);
КонецЕсли;
КонецЕсли;
ЕстьОшибкиДоставки = Ложь;
Если ИспользоватьУправлениеДоставкой
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг) Тогда
Если НЕ ЗначениеЗаполнено(Объект.СпособДоставки) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Способ доставки"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.СпособДоставки", , ЕстьОшибкиДоставки);
КонецЕсли;
Если Объект.СпособДоставки <> Перечисления.СпособыДоставки.Самовывоз Тогда
Если НЕ ЗначениеЗаполнено(Объект.АдресДоставки) Тогда
Если Объект.СпособДоставки = Перечисления.СпособыДоставки.ДоКлиента Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Адрес доставки"" не заполнено'");
Иначе
ТекстОшибки = НСтр("ru = 'Поле ""Адрес доставки до получателя"" не заполнено'");
КонецЕсли;
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.АдресДоставки", , ЕстьОшибкиДоставки);
КонецЕсли;
Если (Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчика
Или Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаПоАдресу)
И Не ЗначениеЗаполнено(Объект.ПеревозчикПартнер) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Перевозчик"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.ПеревозчикПартнер", , ЕстьОшибкиДоставки);
КонецЕсли;
Если Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчикаПоАдресу
И Не ЗначениеЗаполнено(Объект.АдресДоставкиПеревозчика) Тогда
ТекстОшибки = НСтр("ru = 'Поле ""Адрес доставки до перевозчика"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстОшибки, , "Объект.АдресДоставкиПеревозчика", ,
ЕстьОшибкиДоставки);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ИспользоватьСоглашенияСКлиентами
И ЭтоОперацияПередачи
И ЗначениеЗаполнено(Объект.Соглашение)
И ЗначениеЗаполнено(Объект.ХозяйственнаяОперация)
И ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Соглашение,
"ВозможнаРеализацияБезПереходаПраваСобственности, Представление");
Если Не РеквизитыСоглашения.ВозможнаРеализацияБезПереходаПраваСобственности Тогда
ТекстОшибки = НСтр("ru = 'По соглашению ""%1"" невозможна отгрузка товаров без перехода права собственности.'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, РеквизитыСоглашения.Представление);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
КонецЕсли;
Если ЕстьОшибкиТовары Тогда
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиКорзина.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаКорзина;
ИначеЕсли ЕстьОшибкиОплатаОтгрузка Тогда
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиОтгрузкаОплата.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОплатаОтгрузка;
ИначеЕсли ЕстьОшибкиДоставки Тогда
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиДоставка.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДоставка;
ИначеЕсли Отказ Тогда
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиПартнер.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПартнер;
КонецЕсли;
Если ЕстьОшибкиТовары
Или ЕстьОшибкиОплатаОтгрузка
Или ЕстьОшибкиДоставки Тогда
Отказ = Истина;
КонецЕсли;
#КонецОбласти
Если Не Отказ Тогда
ЗначениеРеквизитаФормыОбъект = РеквизитФормыВЗначение("Объект");
ЗначениеРеквизитаФормыОбъект.СуммаДокумента = 1;
ПродажиСервер.ПроверитьКорректностьЗаполненияДокументаПродажи(ЗначениеРеквизитаФормыОбъект, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Перем ВыполняемаяОперация;
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ПомощникПродаж.Форма.Форма.Событие.ОбработкаВыбора");
Если ИсточникВыбора.ИмяФормы = "Обработка.СостояниеОбеспеченияЗаказов.Форма.Форма" Тогда
АдресТаблицыДвижений = ЗаполнитьОбеспечениеИзФормыСостоянияОбеспечения(
ВыбранноеЗначение.КодДействия,
ВыбранноеЗначение.АдресАналитик,
ВыбранноеЗначение.ПараметрыЗаполнения);
ВыполнитьОбработкуОповещения(ВыбранноеЗначение.ВыполняемоеОповещение, АдресТаблицыДвижений);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПомощникПродаж.Форма.Настройка" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
ОбработатьИзменениеПараметровСервер(ВыбранноеЗначение);
КонецЕсли;
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПомощникПродаж.Форма.РеквизитыПечатиАкта" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение);
КонецЕсли;
ИначеЕсли ИсточникВыбора.ИмяФормы = "ОбщаяФорма.РеквизитыПечатиРеализации" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
ЗаполнитьУстановитьРеквизитыДоставки = Объект.Грузополучатель <> ВыбранноеЗначение.Грузополучатель;
ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение);
Если ЗаполнитьУстановитьРеквизитыДоставки Тогда
ЗаполнитьРеквизитыДоставки("Грузополучатель");
КонецЕсли;
Объект.БанковскийСчет = ВыбранноеЗначение.БанковскийСчетОрганизации;
КонецЕсли;
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
ЗагрузитьДополнительныеРеквизитыИзХранилищаСервер(ВыбранноеЗначение);
КонецЕсли;
ИначеЕсли НоменклатураКлиент.ЭтоУказаниеСерий(ИсточникВыбора) Тогда
НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтотОбъект,
ОпределитьПараметрыСерийНаКлиенте(ВыбранноеЗначение.ИдентификаторТекущейСтроки),
ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборМногооборотнойТары.Форма.Форма" Тогда
ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(ВыбранноеЗначение.АдресМногооборотнойТарыВХранилище);
МногооборотнаяТараКлиент.ОповеститьПользователяОЗаполненииМногооборотнойТарой();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Справочник.СтруктураПредприятия.Форма.ФормаВыбора" Тогда
ПродажиКлиент.ОбработкаВыбораПодразделения(Объект.Товары, Элементы.Товары.ВыделенныеСтроки, ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение);
КонецЕсли;
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДополнительныеРеквизитыИзХранилищаСервер(ВыбранноеЗначение);
ИмяТаблицы = "";
Если ВыбранноеЗначение.ТипДокумента = "ДокументОбъект.ЗаказКлиента" Тогда
ИмяТаблицы = "ДополнительныеРеквизитыЗаказа";
ИначеЕсли ВыбранноеЗначение.ТипДокумента = "ДокументОбъект.РеализацияТоваровУслуг" Тогда
ИмяТаблицы = "ДополнительныеРеквизитыРеализации";
ИначеЕсли ВыбранноеЗначение.ТипДокумента = "ДокументОбъект.АктВыполненныхРабот" Тогда
ИмяТаблицы = "ДополнительныеРеквизитыАкта";
ИначеЕсли ВыбранноеЗначение.ТипДокумента = "ДокументОбъект.ЗаявкаНаВозвратТоваровОтКлиента" Тогда
ИмяТаблицы = "ДополнительныеРеквизитыЗаявки";
ИначеЕсли ВыбранноеЗначение.ТипДокумента = "ДокументОбъект.ПередачаТоваровХранителю" Тогда
ИмяТаблицы = "ДополнительныеРеквизитыПередачиТоваров";
ИначеЕсли ВыбранноеЗначение.ТипДокумента = "ДокументОбъект.ОтгрузкаТоваровКлиенту" Тогда
ИмяТаблицы = "ДополнительныеРеквизитыОтгрузкиТоваров";
Иначе
Продажи.ПриОпределенииИмениТаблицыЗагрузкиДополнительныхРеквизитов(ВыбранноеЗначение, ИмяТаблицы);
КонецЕсли;
Объект[ИмяТаблицы].Загрузить(ПолучитьИзВременногоХранилища(ВыбранноеЗначение.ДополнительныеРеквизиты));
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СоглашениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
Если ТолькоИндивидуальные
Или ЗначениеЗаполнено(Объект.Партнер) Тогда
ПараметрыВыбораСоглашения = ПродажиКлиент.ПараметрыНачалаВыбораСоглашенияСКлиентом();
ПараметрыВыбораСоглашения.Элемент = Элемент;
ПараметрыВыбораСоглашения.Партнер = Объект.Партнер;
ПараметрыВыбораСоглашения.Документ = Объект.Соглашение;
ПараметрыВыбораСоглашения.ДатаДокумента = Объект.Дата;
ПараметрыВыбораСоглашения.ДанныеФормыСтруктура = Объект;
Если ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
ПараметрыВыбораСоглашения.ТолькоОперацииПередачи = Истина;
Если ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5 Тогда
ПараметрыВыбораСоглашения.ОперацииПередачиОтгрузки = Истина;
КонецЕсли;
КонецЕсли;
ПродажиКлиент.НачалоВыбораСоглашенияСКлиентом(ПараметрыВыбораСоглашения, СтандартнаяОбработка);
Иначе
СтандартнаяОбработка = Ложь;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ДатаДокумента", Объект.Дата);
ПараметрыОткрытия.Вставить("ТолькоТиповые", Истина);
ПараметрыОткрытия.Вставить("ТекущаяСтрока", Объект.Соглашение);
Если ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5 И ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ПараметрыОткрытия.Вставить("ОтгрузкаБезПереходаПраваСобственности25", Истина);
ИначеЕсли ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
ПараметрыОткрытия.Вставить("ТолькоОперацииПередачи", Истина);
КонецЕсли;
ОткрытьФорму("Справочник.СоглашенияСКлиентами.ФормаВыбора", ПараметрыОткрытия, Элемент);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоглашениеПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ПомощникПродаж.Форма.Форма.СоглашениеСКлиентом.ПриИзменении");
Если Не ЗначениеЗаполнено(Объект.Соглашение) Тогда
Возврат;
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
СоглашениеПриИзмененииСервер();
ЗадатьВопросОбеспечение();
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродаж();
КонецПроцедуры
&НаКлиенте
Процедура ЗадатьВопросОбеспечение()
ЭтоЗаказ = Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента")
Или Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю")
Или Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю")
Или Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг");
Если ЗаполнитьОбособленно
И Объект.УпрощенноеОбеспечение
И Не Объект.НеЗадаватьВопросОбеспечение
И ЭтоЗаказ Тогда
ТекстВопроса = НСтр("ru='В соглашении указан признак ""Обеспечивать товары обособленно"".
|В таких случаях рекомендуется использовать расширенный режим обеспечения товаров.
|Включить расширенный режим обеспечения?'");
СписокКнопок = Новый СписокЗначений();
СписокКнопок.Добавить("ВключитьРежим", НСтр("ru = 'Включить режим'"));
СписокКнопок.Добавить("Продолжить", НСтр("ru = 'Продолжить'"));
ПоказатьВопрос(Новый ОписаниеОповещения("ЗадатьВопросОбеспечениеЗавершение", ЭтотОбъект), ТекстВопроса, СписокКнопок);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗадатьВопросОбеспечениеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = "ВключитьРежим" Тогда
Объект.УпрощенноеОбеспечение = Ложь;
УстановитьВидимостьЭлементовПоНастройкам();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПартнерПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ПомощникПродаж.Форма.Элемент.Партнер.ПриИзменении");
ПартнерПриИзмененииСервер();
ЭтотОбъект.ИндексыСПАРКРиски = Неопределено;
ОбновитьОтображениеИндексыСПАРК();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
СкладПриИзмененииСервер();
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
УстановитьОформлениеПодразделения();
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ОрганизацияПриИзмененииСервер();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура КонтрагентПриИзменении(Элемент)
КонтрагентПриИзмененииСервер();
ЭтотОбъект.ИндексыСПАРКРиски = Неопределено;
ОбновитьОтображениеИндексыСПАРК();
КонецПроцедуры
&НаКлиенте
Процедура ДоговорПриИзменении(Элемент)
ОснованиеИзменено = ОснованиеИзменено
И ЗначениеЗаполнено(Объект.Основание);
ДоговорПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ВалютаДокументаПриИзменении(Элемент)
Если ЗначениеЗаполнено(Объект.Валюта) Тогда
ПриИзмененииВалютыСервер(Объект.Валюта,
ЦенообразованиеКлиент.НеобходимПересчетВВалюту(Объект, ВалютаДокумента));
ЦенообразованиеКлиент.ОповеститьОбОкончанииПересчетаСуммВВалюту(ВалютаДокумента, Объект.Валюта);
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
ВалютаДокумента = Объект.Валюта;
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаКлиенте
Процедура ХозяйственнаяОперацияПриИзменении(Элемент)
ХозяйственнаяОперацияПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ЗаполнитьНалогообложениеНДСПродажи();
КонецПроцедуры
&НаКлиенте
Процедура НалогообложениеНДСПриИзменении(Элемент)
НалогообложениеНДСПриИзмененииСервер(КэшированныеЗначения);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЦенаВключаетНДСПриИзменении(Элемент)
ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НадписьЭтапыОплатыНажатие(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("НадписьЭтапыОплатыНажатиеЗавершение", ЭтотОбъект);
ПоместитьЭтапыОплатыВоВременноеХранилище(Элемент.Имя);
ВзаиморасчетыКлиент.НадписьЭтапыОплатыНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка, Оповещение );
КонецПроцедуры
&НаСервере
Процедура ПоместитьЭтапыОплатыВоВременноеХранилище(ИмяЭлемента)
ВзаиморасчетыСервер.ПоместитьЭтапыОплатыВоВременноеХранилище(ЭтотОбъект, ИмяЭлемента);
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьЭтапыОплатыИзВременногоХранилища()
ВзаиморасчетыСервер.ЗагрузитьЭтапыОплатыИзВременногоХранилища(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НадписьЭтапыОплатыНажатиеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Неопределено Тогда
ЗагрузитьЭтапыОплатыИзВременногоХранилища();
ИзмененныеРеквизиты = Результат.СтарыеЗначенияИзмененныхРеквизитов;
Если ИзмененныеРеквизиты.Количество() > 0 Тогда
НадписьЭтапыОплатыНажатиеЗавершениеСервер(ИзмененныеРеквизиты);
Если ИзмененныеРеквизиты.Свойство("ФормаОплаты") Тогда
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
КонецЕсли;
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаСервере
Процедура НадписьЭтапыОплатыНажатиеЗавершениеСервер(ИзмененныеРеквизиты)
Если ИзмененныеРеквизиты.Свойство("ПорядокРасчетов") Тогда
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
КонецЕсли;
ЗаполнитьСписокВыбораДатаОтгрузки();
КонецПроцедуры
&НаКлиенте
Процедура РеквизитыПечати(Элемент)
ОткрытьРеквизитыПечатиРеализации();
КонецПроцедуры
&НаКлиенте
Процедура РеквизитыПечатьАкта(Элемент)
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("Контрагент", Объект.Контрагент);
СтруктураПараметров.Вставить("ДополнительнаяИнформация", Объект.ДополнительнаяИнформация);
СтруктураПараметров.Вставить("ДополнительнаяИнформацияШапки", Объект.ДополнительнаяИнформацияШапки);
СтруктураПараметров.Вставить("БанковскийСчетКонтрагента", Объект.БанковскийСчетКонтрагента);
СтруктураПараметров.Вставить("ТолькоПросмотр", ДокументыСформированы И Не Модифицированность);
ОткрытьФорму("Обработка.ПомощникПродаж.Форма.РеквизитыПечатиАкта", СтруктураПараметров, ЭтотОбъект, , , , Неопределено,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НадписьСформированныеДокументыНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПерейтиКДокументам(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура НадписьВсегоПодобраноПозицийНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПерейтиКорзина(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура НеОтгружатьЧастямиПриИзменении(Элемент)
НеОтгружатьЧастямиПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ДатаОтгрузкиПриИзменении(Элемент)
ЗаполнитьДатуОтгрузкиСервер(Объект.ДатаОтгрузки, Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ВернутьМногооборотнуюТаруПриИзменении(Элемент)
ВернутьМногооборотнуюТаруПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ТребуетсяЗалогЗаТаруПриИзменении(Элемент)
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаКлиенте
Процедура КонтактноеЛицоПриИзменении(Элемент)
Если Объект.КонтактноеЛицо.Пустая() Тогда
Возврат;
ИначеЕсли Не Объект.Партнер.Пустая() Тогда
Возврат;
КонецЕсли;
ПартнерИзменился = Ложь;
КонтактноеЛицоПриИзмененииСервер(ПартнерИзменился);
Если Не ПартнерИзменился Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Партнер) Тогда
ДоставкаТоваровКлиентСервер.ОчиститьРеквизитыДоставки(Элементы,Объект);
Иначе
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Если ИспользоватьСоглашенияСКлиентами
И ЗначениеЗаполнено(Объект.Соглашение) Тогда
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДатаСледующейПоставкиПриИзменении(Элемент)
ЗаполнитьТоварыПоСоглашениюСерверСЗамером();
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияДосьеПартнераРасчетыОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если НавигационнаяСсылкаФорматированнойСтроки = "ДосьеПартнера" Тогда
ПараметрыФормы = Новый Структура("Партнер", Объект.Партнер);
ОткрытьФорму("Отчет.ДосьеПартнера.Форма.ФормаОтчета", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
Если НавигационнаяСсылкаФорматированнойСтроки = "ФормаСегментовЗапретаОтгрузки" Тогда
ПараметрыФормы = Новый Структура("Партнер", Объект.Партнер);
ОткрытьФорму("Справочник.Партнеры.Форма.ФормаСегментовЗапретаОтгрузки", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
Если НавигационнаяСсылкаФорматированнойСтроки = "ПричиныЗапретаОтгрузки" Тогда
ДанныеПоСуммеПродажи = Новый Структура("СуммаВзаиморасчетов",
ЦенообразованиеКлиентСервер.ПолучитьСуммуДокумента(Объект.Товары, Объект.ЦенаВключаетНДС));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("КлючНазначенияИспользования", Объект.Ссылка);
ПараметрыФормы.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыФормы.Вставить("Отбор", Новый Структура("Договор", Объект.Договор));
ПараметрыФормы.Вставить("Договор", Объект.Договор);
ПараметрыФормы.Вставить("ДанныеПоСуммеПродажи", ДанныеПоСуммеПродажи);
ОткрытьФорму("Отчет.ПричиныЗапретаОтгрузки.Форма", ПараметрыФормы, ЭтотОбъект, "Договор=" + Объект.Договор);
КонецЕсли;
Если НавигационнаяСсылкаФорматированнойСтроки = "СписокЗаказов" Тогда
СтруктураОтбора = Новый Структура;
СтруктураОтбора.Вставить("Отбор", Новый Структура("Партнер", Объект.Партнер));
ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов", СтруктураОтбора, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
#Область Обеспечение
&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияНажатие(Элемент)
ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияОтгружаетсяНажатие(Элемент)
ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
КонецПроцедуры
&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияПроблемаНажатие(Элемент)
ГиперссылкаСостояниеОбеспеченияНажатиеОбщий();
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТовары
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
ПриИзмененииКорзиныНаСервере();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ПомощникПродаж.Форма.Форма.Элементы.Товары.Выбор");
Если Не ТолькоПросмотрУстановлен
И Элемент.ТекущийЭлемент = Элементы.ТоварыДоступно Тогда
СтандартнаяОбработка = Ложь;
ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(Неопределено);
Если ПараметрыФормы <> Неопределено Тогда
ОткрытьФорму("Обработка.ЗапросКоличестваИСерий.Форма", ПараметрыФормы, ЭтотОбъект);
КонецЕсли;
ИначеЕсли Элемент.ТекущийЭлемент = Элементы.ТоварыПроцентАвтоматическойСкидки
Или Элемент.ТекущийЭлемент = Элементы.ТоварыСуммаАвтоматическойСкидки Тогда
СтандартнаяОбработка = Ложь;
Если Не Объект.СкидкиРассчитаны Тогда
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры);
Если СтруктураСообщений.Сообщения.Количество() > 0
И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтотОбъект, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(АдресПримененныхСкидокВоВременномХранилище) Тогда
РассчитатьСкидкиБезПримененияКОбъекту();
КонецЕсли;
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуПримененныеСкидки(ТекущиеДанные, Объект, ЭтотОбъект);
ИначеЕсли НаборыКлиент.БлокируемыйЭлемент(Поле) Тогда
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда
ПараметрОповещения = Новый Структура;
ПараметрОповещения.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрОповещения.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрОповещения.Вставить("ФормаВладелец", УникальныйИдентификатор);
Оповестить("РедактироватьНабор", ПараметрОповещения, ЭтотОбъект);
КонецЕсли;
ИначеЕсли Поле = Элементы.ТоварыНоменклатураНабора Тогда
ПоказатьЗначение(Неопределено, Элементы.Товары.ТекущиеДанные.НоменклатураНабора);
ИначеЕсли Поле = Элементы.ТоварыЦена Тогда
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ЗначениеЗаполнено(ТекущиеДанные.ВидЦены) Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(
НСтр("ru='Для редактирования цены очистите вид цены'"),
,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Объект.Товары", ТекущиеДанные.НомерСтроки, "ВидЦены"));
КонецЕсли;
ИначеЕсли Поле = Элементы.ТоварыКоличествоУпаковокПрогноз Тогда
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ТекущаяСтрока.ИндексИконкиВыбора = 1 Тогда
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковокПрогноз;
ТекущаяСтрока.Количество = ТекущаяСтрока.КоличествоПрогноз;
ТекущаяСтрока.КоличествоУпаковокПрогноз = ТекущаяСтрока.КоличествоУпаковокОбъемПредыдущегоЗаказа;
ТекущаяСтрока.КоличествоПрогноз = ТекущаяСтрока.КоличествоОбъемПредыдущегоЗаказа;
ТекущаяСтрока.ИндексИконкиВыбора = ТекущаяСтрока.ИндексИконкиВыбора + 1;
ИначеЕсли ТекущаяСтрока.ИндексИконкиВыбора = 2 Тогда
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковокПрогноз;
ТекущаяСтрока.Количество = ТекущаяСтрока.КоличествоПрогноз;
ТекущаяСтрока.ИндексИконкиВыбора = ТекущаяСтрока.ИндексИконкиВыбора + 1;
ИначеЕсли ТекущаяСтрока.ИндексИконкиВыбора = 3 Тогда
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковок + ТекущаяСтрока.КоличествоУпаковокПрогноз;
ТекущаяСтрока.Количество = ТекущаяСтрока.КоличествоУпаковок + ТекущаяСтрока.КоличествоПрогноз;
КонецЕсли;
Если ТекущаяСтрока.ИндексИконкиВыбора <> 0 Тогда
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриАктивизацииСтроки(Элемент)
ЭтоПередачаТоваров = ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов);
ТекстСтатистики = ?(ЭтоПередачаТоваров, НСтр("ru='передаче'"), НСтр("ru='продаже'"));
ТекстПродажи = ?(ЭтоПередачаТоваров, НСтр("ru='передача'"), НСтр("ru='продажа'"));
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
СтрокаБыло = НСтр("ru='В предыдущем заказе от %1 было %2 %3.'") + " ";
СтрокаСтатистика = НСтр("ru='При среднедневной %1 %2 %3 в день, хватит на %4 дн.'") + " ";
СтрокаОстаток = НСтр("ru='Осталось у клиента %1 %2.'") + " ";
СтрокаСреднедневнаяПродажа = НСтр("ru='Среднедневная %1 %2 %3 в день.'") + " ";
СтрокаНетДанных = НСтр("ru='Нет данных для расчета прогноза.'") + " ";
СтрокаПрогноз = "";
Если ТекущиеДанные <> Неопределено Тогда
ЭтоТоварТара = ТекущиеДанные.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар")
Или ТекущиеДанные.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.МногооборотнаяТара");
Если ЗначениеЗаполнено(ТекущиеДанные.КоличествоОбъемПредыдущегоЗаказа) Тогда
СтрокаБыло = СтрШаблон(СтрокаБыло,
Формат(ТекущиеДанные.ДатаПредыдущегоЗаказа,"ДЛФ=D"),
ТекущиеДанные.КоличествоОбъемПредыдущегоЗаказа,
ТекущиеДанные.ЕдиницаИзмеренияПрогноз);
СтрокаПрогноз = Новый ФорматированнаяСтрока(СтрокаПрогноз, СтрокаБыло);
КонецЕсли;
Если ЭтоТоварТара
И ЗначениеЗаполнено(ТекущиеДанные.КоличествоПрогнозныйОстаток) Тогда
СтрокаОстаток = СтрШаблон(СтрокаОстаток,
ТекущиеДанные.КоличествоПрогнозныйОстаток,
ТекущиеДанные.ЕдиницаИзмеренияПрогноз);
СтрокаПрогноз = Новый ФорматированнаяСтрока(СтрокаПрогноз, СтрокаОстаток);
КонецЕсли;
Если ЭтоТоварТара
И ЗначениеЗаполнено(ТекущиеДанные.КоличествоДнейДоОкончанияЗапаса) Тогда
СтрокаСтатистика = СтрШаблон(СтрокаСтатистика,
ТекстСтатистики,
ТекущиеДанные.СреднесуточнаяПродажа,
ТекущиеДанные.ЕдиницаИзмеренияПрогноз,
ТекущиеДанные.КоличествоДнейДоОкончанияЗапаса);
СтрокаПрогноз = Новый ФорматированнаяСтрока(СтрокаПрогноз, СтрокаСтатистика);
ИначеЕсли ЗначениеЗаполнено(ТекущиеДанные.СреднесуточнаяПродажа) Тогда
СтрокаСреднедневнаяПродажа = СтрШаблон(СтрокаСреднедневнаяПродажа,
ТекстПродажи,
ТекущиеДанные.СреднесуточнаяПродажа,
ТекущиеДанные.ЕдиницаИзмеренияПрогноз);
СтрокаПрогноз = Новый ФорматированнаяСтрока(СтрокаПрогноз, СтрокаСреднедневнаяПродажа);
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(СтрокаПрогноз) Тогда
СтрокаПрогноз = Новый ФорматированнаяСтрока(СтрокаПрогноз, СтрокаНетДанных);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередУдалением(Элемент, Отказ)
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Товары, ЭтотОбъект);
НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтотОбъект, "Товары", Отказ);
Если Не Отказ Тогда
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент, КэшированныеЗначения,
ОпределитьПараметрыСерийНаКлиенте(Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор()));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
ПриИзмененииСкладаВТабличнойЧастиСервер();
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент,КэшированныеЗначения,
ПараметрыУказанияСерий.Реализация);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент,КэшированныеЗначения,
ПараметрыУказанияСерий.Заказ);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
НеобходимоОбновитьСтатусыСерий = Ложь;
Если ТекущиеДанные <> Неопределено Тогда
ТекущаяСтрокаИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
НеобходимоОбновитьСтатусыСерий = НоменклатураКлиент.НеобходимоОбновитьСтатусыСерий(Элемент, КэшированныеЗначения,
ОпределитьПараметрыСерийНаКлиенте(ТекущаяСтрокаИдентификатор));
Если НеобходимоОбновитьСтатусыСерий Тогда
ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения);
КонецЕсли;
КонецЕсли;
Если НеобходимоОбновитьСтатусыСерий Тогда
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент, КэшированныеЗначения,
ОпределитьПараметрыСерийНаКлиенте(ТекущаяСтрокаИдентификатор));
КонецЕсли;
МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
ОбновитьКолонкуДоступноСервер();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииСкладаВТабличнойЧастиСервер()
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Товары, ЭтотОбъект);
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если НоваяСтрока И Не Копирование Тогда
ТекущиеДанные.Подразделение = Объект.Подразделение;
КонецЕсли;
ПродажиКлиент.СтрокаНоменклатурыПриНачалеРедактирования(ЭтотОбъект, "Товары", ТекущиеДанные, НоваяСтрока, Копирование);
Если Копирование Тогда
СтруктураДействий = Новый Структура;
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий,
"ВариантОбеспечения,Доступно,СкладОбязателен,ДатаОтгрузкиОбязательна");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
КонецЕсли;
Если НоваяСтрока Тогда
Если Не Копирование Тогда
ЗаполнитьВариантОформленияВСтрокеТабличнойЧасти(ТекущиеДанные, Объект.ВариантОформленияДокументов, Объект.Дата, Объект.НеОтгружатьЧастями);
КонецЕсли;
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
КонецЕсли;
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(
Элемент,
КэшированныеЗначения,
ОпределитьПараметрыСерийНаКлиенте(ТекущиеДанные.ПолучитьИдентификатор()),
Копирование);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если Не ОтменаРедактирования Тогда
КэшСтроки = ?(НоваяСтрока, Неопределено, РаботаСТабличнымиЧастямиКлиентСервер.КэшСтроки(Элементы.Товары, ЭтотОбъект));
Если ТекущиеДанные <> Неопределено Тогда
Если Объект.НеОтгружатьЧастями Тогда
ТекущиеДанные.ДатаОтгрузки = Объект.ДатаОтгрузки;
КонецЕсли;
Если КэшированныеЗначения <> Неопределено
И КэшированныеЗначения.Свойство("ВариантОформления")
И ТекущиеДанные.ВариантОформления <> КэшированныеЗначения.ВариантОформления Тогда
КэшированныеЗначения.ВариантОформления = ТекущиеДанные.ВариантОформления;
КонецЕсли;
КонецЕсли;
СкладыКлиент.ОбновитьТаблицуСкладов(ТаблицаСкладов, ТекущиеДанные, КэшСтроки, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
КонецЕсли;
Если ТекущиеДанные <> Неопределено Тогда
Если НоменклатураКлиент.НеобходимоОбновитьСтатусыСерий(Элемент,КэшированныеЗначения, ОпределитьПараметрыСерийНаКлиенте(ТекущиеДанные.ПолучитьИдентификатор())) Тогда
ТекущаяСтрокаИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения);
СкладыКлиент.ОбновитьКешированныеЗначения(Элемент, КэшированныеЗначения,
ОпределитьПараметрыСерийНаКлиенте(ТекущаяСтрокаИдентификатор));
КонецЕсли;
КонецЕсли;
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСодержаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ОбщегоНазначенияКлиент.ПоказатьФормуРедактированияКомментария(Элемент.ТекстРедактирования,
ЭтотОбъект,
"Элементы.Товары.ТекущиеДанные.Содержание",
НСтр("ru='Содержание услуги'"));
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ТекущиеДанныеИдентификатор = ТекущаяСтрока.ПолучитьИдентификатор();
ТекущаяСтрока.КоличествоКВозврату = 0;
ТекущаяСтрока.КоличествоУпаковокКВозврату = 0;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
ПараметрыЗаполнитьСтавкуНДС = ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущаяСтрока.Упаковка);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПроверитьЗаполнитьСклад",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа));
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
Иначе
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
СтруктураДействий.Вставить("ЗаполнитьСодержание",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь));
СтруктураДействий.Вставить("ЗаполнитьПризнакНаличияНоменклатурыПродаваемойСовместно",
ПредопределенноеЗначение("Перечисление.ВариантыАнализаНоменклатурыПродаваемойСовместно.ОптоваяТорговля"));
СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус",
Новый Структура("Склад, ПараметрыУказанияСерий",
ТекущаяСтрока.Склад,
ОпределитьПараметрыСерийНаКлиенте(ТекущиеДанныеИдентификатор)));
СтруктураДействий.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий,
"ВариантОбеспечения,ДоступноВДругихСтроках,СкладОбязателен,ДатаОтгрузкиОбязательна");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
ОчиститьРеквизитыПрогнозирования(ТекущаяСтрока);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
Иначе
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ЗаполнитьСодержание",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь));
СтруктураДействий.Вставить("ЗаполнитьПризнакНаличияНоменклатурыПродаваемойСовместно",
ПредопределенноеЗначение("Перечисление.ВариантыАнализаНоменклатурыПродаваемойСовместно.ОптоваяТорговля"));
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий,
"ВариантОбеспечения,ДоступноВДругихСтроках,СкладОбязателен,ДатаОтгрузкиОбязательна");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
ОчиститьРеквизитыПрогнозирования(ТекущаяСтрока);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыУпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ИдентификаторТекущейСтроки = ТекущаяСтрока.ПолучитьИдентификатор();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокСуффикс", "Прогноз");
ПересчитатьКоличествоУпаковокОбъемПредыдущегоЗаказа(ТекущаяСтрока, КэшированныеЗначения);
Если Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов Тогда
ПересчитатьКоличествоУпаковокКВозврату(ИдентификаторТекущейСтроки, КэшированныеЗначения);
КонецЕсли;
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
Если ТекущаяСтрока.Количество > 0 Тогда
СтруктураДействий.Вставить("ПересчитатьЦенуЗаУпаковку", ТекущаяСтрока.Количество);
ИначеЕсли ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействий.Вставить("ЗаполнитьУсловияПродаж",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
ИначеЕсли ЗначениеЗаполнено(ТекущаяСтрока.ВидЦены) Тогда
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект);
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКоличествоУпаковокКВозвратуПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиницСуффикс", "КВозврату");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВидЦеныПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСтавкаНДСПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПроцентРучнойСкидкиПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки");
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСуммаРучнойСкидкиПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьПроцентРучнойСкидки");
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки",
Новый Структура("Очищать, ПересчитыватьСуммуРучнойСкидки", Ложь, Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСуммаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ЭтоОперацияПередачи = ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация);
СтруктураПересчетаЦены = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаЦеныСкидкиВПродажахВТЧ(Объект,
ЭтоОперацияПередачи);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьЦенуСкидкуПоСуммеВПродажах", СтруктураПересчетаЦены);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСкладПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ТекущиеДанныеИдентификатор = ТекущаяСтрока.ПолучитьИдентификатор();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус",
Новый Структура("Склад, ПараметрыУказанияСерий",
ТекущаяСтрока.Склад,
ОпределитьПараметрыСерийНаКлиенте(ТекущиеДанныеИдентификатор)));
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий,
"ДоступноВДругихСтроках");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСерияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьПодборСерий(Элемент.ТекстРедактирования);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия();
ВыбранноеЗначение.Значение = Элементы.Товары.ТекущиеДанные.Серия;
ВыбранноеЗначение.ИдентификаторТекущейСтроки = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор();
НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтотОбъект,
ОпределитьПараметрыСерийНаКлиенте(ВыбранноеЗначение.ИдентификаторТекущейСтроки),
ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВариантОформленияПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ТекущиеДанныеИдентификатор = ТекущаяСтрока.ПолучитьИдентификатор();
ПараметрыСерий = ОпределитьПараметрыСерийНаКлиенте(ТекущиеДанныеИдентификатор);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус",
Новый Структура("Склад, ПараметрыУказанияСерий",
ТекущаяСтрока.Склад, ПараметрыСерий));
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий,
"ВариантОбеспечения,ДоступноВДругихСтроках,СкладОбязателен,ДатаОтгрузкиОбязательна");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элементы.Товары, КэшированныеЗначения, ПараметрыСерий);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа)
Если Копирование Тогда
НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтотОбъект, "Товары", Отказ, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСуммаНДСПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ЭтоОперацияПередачи = ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация);
СтруктураПересчетаЦены = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаЦеныСкидкиВПродажахВТЧ(Объект,
ЭтоОперацияПередачи);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВариантОбеспеченияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
ОбеспечениеВДокументахКлиент.ВариантОбеспеченияОбработкаВыбора(
ЭтотОбъект,
Элементы.Товары.ТекущиеДанные,
ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВариантОбеспеченияПриИзменении(Элемент)
Перем ПараметрыФормы;
Если ОбеспечениеВДокументахКлиент.ОткрытьФормуВыбораСкладаИСерий(ЭтотОбъект) Тогда
ВариантПолученияПараметров = ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия();
ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(ВариантПолученияПараметров);
КонецЕсли;
ОбеспечениеВДокументахКлиент.ВариантОбеспеченияПриИзменении(
ЭтотОбъект,
ПараметрыФормы,
"ОбработатьВыборСкладаИСерии",
Истина,
"ТоварыВариантОбеспеченияПриИзмененииПослеВопроса");
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВариантОбеспеченияОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыОбособленноПриИзменении(Элемент)
СтрокаТаблицы = Элементы.Товары.ТекущиеДанные;
ОбеспечениеВДокументахКлиент.ОбособленноПриИзменении(СтрокаТаблицы);
СтруктураДействий = Новый Структура();
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ДоступноВДругихСтроках");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(СтрокаТаблицы, СтруктураДействий, Неопределено);
Если ОбеспечениеВДокументахКлиент.ТребуетсяОбновитьКолонкуДоступно(СтруктураДействий) Тогда
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСкладНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(ОбеспечениеВДокументахКлиентСервер.РежимПодборСкладов());
Если ТипЗнч(ПараметрыФормы) = Тип("Структура") Тогда
СтандартнаяОбработка = Ложь;
ОткрытьФорму(
"Обработка.ЗапросКоличестваИСерий.Форма",
ПараметрыФормы,
ЭтотОбъект,
,
,
,
Новый ОписаниеОповещения("ОбработатьВыборСкладаИСерии", ЭтотОбъект, ПараметрыФормы));
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыОформленныеДокументы
&НаКлиенте
Процедура ОформленныеДокументыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Элемент.ТекущийЭлемент = Элементы.ОформленныеДокументыДокумент Тогда
СтандартнаяОбработка = Ложь;
Если Элементы.ОформленныеДокументы.ТекущиеДанные <> Неопределено Тогда
ПоказатьЗначение(Неопределено, Элементы.ОформленныеДокументы.ТекущиеДанные.Документ);
КонецЕсли;
ИначеЕсли Элемент.ТекущийЭлемент = Элементы.ОформленныеДокументыПечать Тогда
СтандартнаяОбработка = Ложь;
Если Элементы.ОформленныеДокументы.ТекущиеДанные <> Неопределено И Элементы.ОформленныеДокументы.ТекущиеДанные.Печать Тогда
МассивОбъектов = Новый Массив();
МассивОбъектов.Добавить(Элементы.ОформленныеДокументы.ТекущиеДанные.Документ);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ТипОбъекта", ПолноеИмяДокумента(Элементы.ОформленныеДокументы.ТекущиеДанные.Документ));
ПараметрыФормы.Вставить("Объекты", МассивОбъектов);
ОткрытьФорму("РегистрСведений.НастройкиПечатиОбъектов.Форма.НастройкаПечатиКомплекта", ПараметрыФормы, ЭтаФорма);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДоступнаПечатьКомплекта(Документ)
ПараметрыОбъекта = РегистрыСведений.НастройкиПечатиОбъектов.ПараметрыОбъектаДляПечатиКомплектно(
Документ.Метаданные().ПолноеИмя());
Возврат ПараметрыОбъекта.ДоступнаПечатьКомплекта;
КонецФункции
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура НоваяПродажа(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ПомощникПродаж.Форма.Команда.НоваяПродажа");
Если Модифицированность Тогда
ОтветНаВопрос = Неопределено;
ОписаниеОповещения = Новый ОписаниеОповещения("НоваяПродажаЗавершение", ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'Все несохраненные данные будут потеряны. Начать новую продажу?'");
СписокКнопок = Новый СписокЗначений();
СписокКнопок.Добавить("Начать", НСтр("ru = 'Начать новую продажу'"));
СписокКнопок.Добавить("НеНачинать", НСтр("ru = 'Завершить текущую продажу'"));
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, СписокКнопок);
Возврат;
КонецЕсли;
НоваяПродажаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура НоваяПродажаЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = "НеНачинать" Тогда
Возврат;
КонецЕсли;
НоваяПродажаФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура НоваяПродажаФрагмент()
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиПартнер.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПартнер;
НоваяПродажаСервер();
Если ИспользоватьСоглашенияСКлиентами
И ЗначениеЗаполнено(Объект.Соглашение) Тогда
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияУсловийПродажПоУмолчанию();
КонецЕсли;
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКорзина(Команда)
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиКорзина.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаКорзина;
ЗаполнитьСтатусыУказанияСерий();
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиПартнер(Команда)
СброситьПометкиКомандШапки(Элементы);
ВзаиморасчетыКлиент.ОбновитьТекстГиперссылкиЭтапыОплаты(ЭтотОбъект);
ВзаиморасчетыКлиентСервер.ОбновитьТекстГиперссылкиВалюты(ЭтотОбъект);
Элементы.ПерейтиПартнер.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаПартнер;
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиОтгрузкаОплата(Команда)
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиОтгрузкаОплата.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаОплатаОтгрузка;
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиДокументы(Команда)
ПерейтиКДокументам(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКДокументам(Знач Оповещение)
ЗаполнитьСтатусыУказанияСерий();
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиДокументы.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДокументы;
Если Модифицированность
Или Не ДокументыСформированы Тогда
ПараметрыОповещения = Новый Структура("Оповещение", Оповещение);
ОписаниеОповещения = Новый ОписаниеОповещения("ПерейтиКДокументамЗавершение", ЭтотОбъект, ПараметрыОповещения);
СоздатьДокументыКлиент(ОписаниеОповещения);
Возврат;
КонецЕсли;
ПерейтиКДокументамФрагмент(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКДокументамЗавершение(Результат, ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
ПерейтиКДокументамФрагмент(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПерейтиКДокументамФрагмент(Знач Оповещение)
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура Настройка(Команда)
ОткрытьФормуНастроек();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьФормуНастроек()
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("ПечататьАктВыполненныхРабот", Объект.ПечататьАктВыполненныхРабот);
СтруктураПараметров.Вставить("ПечататьЗаказКлиента", Объект.ПечататьЗаказКлиента);
СтруктураПараметров.Вставить("ПечататьКоммерческоеПредложение", Объект.ПечататьКоммерческоеПредложение);
СтруктураПараметров.Вставить("ПечататьПриходныйКассовыйОрдер", Объект.ПечататьПриходныйКассовыйОрдер);
СтруктураПараметров.Вставить("ПечататьРеализациюТоваровУслуг", Объект.ПечататьРеализациюТоваровУслуг);
СтруктураПараметров.Вставить("ПечататьПередачуТоваровХранителю", Объект.ПечататьПередачуТоваровХранителю);
СтруктураПараметров.Вставить("ПечататьСчетНаОплату", Объект.ПечататьСчетНаОплату);
СтруктураПараметров.Вставить("ПечататьСчетФактуру", Объект.ПечататьСчетФактуру);
СтруктураПараметров.Вставить("СоздаватьДокументПродажи", Объект.СоздаватьДокументПродажи);
СтруктураПараметров.Вставить("СоздаватьПередачуТоваровХранителю", Объект.СоздаватьПередачуТоваровХранителю);
СтруктураПараметров.Вставить("СоздаватьЗаказКлиента", Объект.СоздаватьЗаказКлиента);
СтруктураПараметров.Вставить("СоздаватьКоммерческоеПредложение", Объект.СоздаватьКоммерческоеПредложение);
СтруктураПараметров.Вставить("СоздаватьПриходныйКассовыйОрдер", Объект.СоздаватьПриходныйКассовыйОрдер);
СтруктураПараметров.Вставить("СоздаватьСчетНаОплату", Объект.СоздаватьСчетНаОплату);
СтруктураПараметров.Вставить("СтатусЗаказаКлиента", Объект.СтатусЗаказаКлиента);
СтруктураПараметров.Вставить("СтатусКоммерческогоПредложения", Объект.СтатусКоммерческогоПредложения);
СтруктураПараметров.Вставить("СтатусРеализацииТоваровУслуг", Объект.СтатусРеализацииТоваровУслуг);
СтруктураПараметров.Вставить("СоздаватьТранспортнуюНакладнуюПоУмолчанию", Объект.СоздаватьТранспортнуюНакладнуюПоУмолчанию);
СтруктураПараметров.Вставить("СоздаватьДоверенностьНаПолучениеДСПоУмолчанию", Объект.СоздаватьДоверенностьНаПолучениеДСПоУмолчанию);
СтруктураПараметров.Вставить("ВариантОформленияДокументов", Объект.ВариантОформленияДокументов);
СтруктураПараметров.Вставить("СоздаватьЗаявкуНаВозвратТоваровОтКлиентов", Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов);
СтруктураПараметров.Вставить("ПечататьЗаявкуНаВозвратТоваровОтКлиентов", Объект.ПечататьЗаявкуНаВозвратТоваровОтКлиентов);
СтруктураПараметров.Вставить("СтатусЗаявкиНаВозвратТоваровОтКлиентов", Объект.СтатусЗаявкиНаВозвратТоваровОтКлиентов);
СтруктураПараметров.Вставить("ЗаполнятьТоварыПоСоглашению", Объект.ЗаполнятьТоварыПоСоглашению);
СтруктураПараметров.Вставить("ОтображатьРекомендацииКПокупке", Объект.ОтображатьРекомендацииКПокупке);
СтруктураПараметров.Вставить("СпособПрогнозированияПродаж", Объект.СпособПрогнозированияПродаж);
СтруктураПараметров.Вставить("ПериодСбораСтатистики", Объект.ПериодСбораСтатистики);
СтруктураПараметров.Вставить("УпрощенноеОбеспечение", Объект.УпрощенноеОбеспечение);
СтруктураПараметров.Вставить("ВариантОбеспечения", Объект.ВариантОбеспечения);
СтруктураПараметров.Вставить("НеЗадаватьВопросОбеспечение", Объект.НеЗадаватьВопросОбеспечение);
СтруктураПараметров.Вставить("ПробиватьФискальныйЧек", Объект.ПробиватьФискальныйЧек);
СтруктураПараметров.Вставить("ОтдельныеНакладныеПоТоварамСОсобенностьюУчета", Объект.ОтдельныеНакладныеПоТоварамСОсобенностьюУчета);
ОписаниеОповещения = Новый ОписаниеОповещения("НастройкиФормыЗавершение", ЭтотОбъект);
ОткрытьФорму("Обработка.ПомощникПродаж.Форма.Настройка", СтруктураПараметров, ЭтотОбъект, , , , ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура НастройкиФормыЗавершение(РезультатНастройки, ДополнительныеПараметры = Неопределено) Экспорт
Если РезультатНастройки = Неопределено Тогда
Возврат;
КонецЕсли;
УстановитьОтметкаНезаполненногоСклада();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьПартнера(Команда)
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
ОтветНаВопрос = Неопределено;
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьПартнераЗавершение", ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'Текущий клиент %Партнер% будет заменен на нового. Создать нового клиента?'");
ТекстВопроса = СтрЗаменить(ТекстВопроса, "%Партнер%", Объект.Партнер);
СписокКнопок = Новый СписокЗначений();
СписокКнопок.Добавить("СоздатьНовогоКлиента", НСтр("ru = 'Создать нового'"));
СписокКнопок.Добавить("ОставитьТекущегоКлиента", НСтр("ru = 'Оставить текущего'"));
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, СписокКнопок);
Возврат;
КонецЕсли;
СоздатьПартнераФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьПартнераЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = "ОставитьТекущегоКлиента" Тогда
Возврат;
КонецЕсли;
СоздатьПартнераФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура СоздатьПартнераФрагмент()
ПараметрыОткрытия = Новый Структура("ЗаголовокФормыВладельца", НСтр("ru='Партнеры (Клиенты)'"));
ОткрытьФорму("Справочник.Партнеры.Форма.ПомощникНового", ПараметрыОткрытия, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтроку(Команда)
ТаблицаФормы = Элементы.Товары;
ДанныеТаблицы = Объект.Товары;
ОбрабатываемыеРеквизиты = "Количество, Сумма, СуммаНДС, СуммаСНДС, СуммаРучнойСкидки, СуммаАвтоматическойСкидки, "
+ ЗависимыеРеквизитыСтрокой();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.СтруктураПересчетаСуммы(
ОбрабатываемыеРеквизиты, "КоличествоУпаковок");
Если ТаблицаФормы.ТекущиеДанные <> Неопределено Тогда
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ЗаполнитьСтруктуруПересчетаСуммы(СтруктураПересчетаСуммы, ТаблицаФормы.ТекущиеДанные);
КонецЕсли;
ДополнительныеПараметры = Новый Структура("СтруктураПересчетаСуммы", СтруктураПересчетаСуммы);
ОписаниеОповещения = Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект, ДополнительныеПараметры);
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если НоваяСтрока <> Неопределено Тогда
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ДобавитьСтрокуДляПересчетаСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы, ТекущаяСтрока);
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ДобавитьСтрокуДляПересчетаСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы, НоваяСтрока);
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПересчитатьСуммы(ДополнительныеПараметры.СтруктураПересчетаСуммы);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СтруктураДействий = Новый Структура();
ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, "ОбновитьКэшНоменклатура");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецЕсли;
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
КонецПроцедуры
&НаКлиенте
Процедура УказатьСерии(Команда)
ОткрытьПодборСерий();
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборСерий(Текст = "", ТекущиеДанные = Неопределено)
Если ТекущиеДанные = Неопределено Тогда
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
ТекстСообщения = НСтр("ru='Выберите строку товаров, для которой необходимо указать серии.'");
ПоказатьПредупреждение(,ТекстСообщения);
Возврат;
КонецЕсли;
ТекущиеДанныеИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
Иначе
ТекущиеДанныеИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
КонецЕсли;
Если Не ЭтоРеализация(ТекущиеДанные.ВариантОформления)
И Не ЭтоПередачаТоваров(ТекущиеДанные.ВариантОформления) Тогда
Если ТекущиеДанные.СтатусУказанияСерий = 0 Тогда
ТекстСообщения = НСтр("ru='Для этого товара серии указывать не нужно. На возможность указания серий могут влиять: вид номенклатуры, склад, политика указания серий, статус документа.'");
ПоказатьПредупреждение(,ТекстСообщения);
Возврат;
КонецЕсли;
Если ТекущиеДанные.ВариантОбеспечения <> ПредопределенноеЗначение("Перечисление.ВариантыОбеспечения.Отгрузить") Тогда
ТекстСообщения = НСтр("ru='Для выбора серий необходимо указать действие ""Отгрузить"".'");
ПоказатьПредупреждение(,ТекстСообщения);
Возврат;
КонецЕсли;
ПараметрыФормы = ПараметрыФормыЗапросаКоличестваИСерий(ОбеспечениеВДокументахКлиентСервер.РежимПодборСерий());
Если ПараметрыФормы <> Неопределено Тогда
ОткрытьФорму(
"Обработка.ЗапросКоличестваИСерий.Форма",
ПараметрыФормы,
ЭтотОбъект,
,
,
,
Новый ОписаниеОповещения("ОбработатьВыборСкладаИСерии", ЭтотОбъект, ПараметрыФормы));
КонецЕсли;
Возврат;
КонецЕсли;
Если Объект.Товары.Количество() > 0 Тогда
ЭтоРеализация = ЭтоРеализация(Элементы.Товары.ТекущиеДанные.ВариантОформления)
Или ЭтоПередачаТоваров(Элементы.Товары.ТекущиеДанные.ВариантОформления);
Если НоменклатураКлиент.ДляУказанияСерийНуженСерверныйВызов(ЭтотОбъект, ОпределитьПараметрыСерийНаКлиенте(ТекущиеДанныеИдентификатор), Текст, ТекущиеДанные) Тогда
ПараметрыФормыУказанияСерий = ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор, ЭтоРеализация);
ЗначениеВозврата = Неопределено;
ДополнительныеПараметры = Новый Структура("ПараметрыФормыУказанияСерий, ЭтоРеализация",
ПараметрыФормыУказанияСерий, ЭтоРеализация);
ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьПодборСерийЗавершение",
ЭтотОбъект,
ДополнительныеПараметры);
ОткрытьФорму(ПараметрыФормыУказанияСерий.ИмяФормы ,ПараметрыФормыУказанияСерий, ЭтотОбъект, , , , ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборСерийЗавершение(Результат, ДополнительныеПараметры) Экспорт
ЗначениеВозврата = Результат;
ЭтоРеализация = ДополнительныеПараметры.ЭтоРеализация;
ПараметрыФормыУказанияСерий = ДополнительныеПараметры.ПараметрыФормыУказанияСерий;
Если ЗначениеВозврата <> Неопределено Тогда
ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий, ЭтоРеализация);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СчитатьКартуЛояльности(Команда)
ПараметрыОткрытия = Новый Структура("Партнер, Организация", Объект.Партнер, Объект.Организация);
ОткрытьФорму("Справочник.КартыЛояльности.Форма.СчитываниеКартыЛояльности", ПараметрыОткрытия, ЭтотОбъект,
ЭтотОбъект.УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДанныеИзТСД(Команда)
ОчиститьСообщения();
МенеджерОборудованияКлиент.НачатьЗагрузкуДанныеИзТСД(
Новый ОписаниеОповещения("ЗагрузитьИзТСДЗавершение", ЭтотОбъект),
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзТСДЗавершение(Результат, Параметры) Экспорт
Если Результат.Результат Тогда
ОбработатьШтрихкоды(Результат.ТаблицаТоваров);
Иначе
МенеджерОборудованияУТКлиент.СообщитьОбОшибке(Результат);
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьАвтоматическиеСкидки(Команда)
АдресВХранилище = ВыполнитьПредварительныйРасчетСкидокНаСервере();
Оповещение = Новый ОписаниеОповещения("НазначитьАвтоматическиеСкидкиЗавершение", ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуНазначенияУправляемыхСкидокНаценок(АдресВХранилище, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьАвтоматическиеСкидкиЗавершение(ВозвращенноеЗначение, ДополнительныеПараметры) Экспорт
Если ВозвращенноеЗначение <> Неопределено Тогда
УправляемыеСкидки = ВозвращенноеЗначение;
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Ложь);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры);
Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтотОбъект, УникальныйИдентификатор);
КонецЕсли;
ПоказатьОповещениеПользователя(
НСтр("ru = 'Скидки (наценки)'"),
,
НСтр("ru = 'Скидки (наценки) рассчитаны'"),
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидку(Команда)
Если Не СкидкиНаценкиЗаполнениеКлиент.ВозможноНазначениеРучнойСкидкиНаценки(Объект, "Товары", НСтр("ru='Товары'")) Тогда
Возврат;
КонецЕсли;
АдресВоВременномХранилище = АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(Ложь);
Оповещение = Новый ОписаниеОповещения(
"НазначитьРучнуюСкидкуЗавершение",
ЭтотОбъект,
Новый Структура("АдресВоВременномХранилище", АдресВоВременномХранилище));
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуНазначенияРучныхСкидок(
АдресВоВременномХранилище,
Объект.Валюта,
Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидкуЗавершение(СуммаРучнойСкидкиНаценки, ДополнительныеПараметры) Экспорт
АдресВоВременномХранилище = ДополнительныеПараметры.АдресВоВременномХранилище;
Если СуммаРучнойСкидкиНаценки <> Неопределено Тогда
НазначитьРучнуюСкидкуНаСервере(СуммаРучнойСкидкиНаценки, Неопределено, АдресВоВременномХранилище);
СкидкиНаценкиЗаполнениеКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок(СуммаРучнойСкидкиНаценки, Объект.Валюта);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидкуДляВыделенныхСтрок(Команда)
Если Не СкидкиНаценкиЗаполнениеКлиент.ВозможноНазначениеРучнойСкидкиНаценки(Объект, "Товары", НСтр("ru='Товары'")) Тогда
Возврат;
КонецЕсли;
АдресВоВременномХранилище = АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(Истина);
Оповещение = Новый ОписаниеОповещения(
"НазначитьРучнуюСкидкуДляВыделенныхСтрокЗавершение",
ЭтотОбъект,
Новый Структура("АдресВоВременномХранилище", АдресВоВременномХранилище));
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуНазначенияРучныхСкидок(
АдресВоВременномХранилище,
Объект.Валюта,
Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура НазначитьРучнуюСкидкуДляВыделенныхСтрокЗавершение(СуммаРучнойСкидкиНаценки, ДополнительныеПараметры) Экспорт
АдресВоВременномХранилище = ДополнительныеПараметры.АдресВоВременномХранилище;
Если СуммаРучнойСкидкиНаценки <> Неопределено Тогда
НазначитьРучнуюСкидкуНаСервере(СуммаРучнойСкидкиНаценки, Элементы.Товары.ВыделенныеСтроки, АдресВоВременномХранилище);
СкидкиНаценкиЗаполнениеКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок(СуммаРучнойСкидкиНаценки, Объект.Валюта);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьРучныеСкидки(Команда)
Если Не СкидкиНаценкиЗаполнениеКлиент.ВозможнаОтменаРучныхСкидокНаценок(Объект, "Товары", НСтр("ru='Товары'")) Тогда
Возврат;
КонецЕсли;
ОтменитьРучныеСкидкиНаСервере();
СкидкиНаценкиЗаполнениеКлиент.ОповеститьОбОкончанииНазначенияРучныхСкидокНаценок();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОтменитьОплатуБонуснымиБаллами(Команда)
ПрименитьОплатуБонуснымиБаллами(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьОплатуБонуснымиБаллами(Команда) Экспорт
ЗаполнитьКлючиСвязиВТабличнойЧастиТовары();
ПараметрыОткрытияФормы = Новый Структура;
ПараметрыОткрытияФормы.Вставить("Партнер", Объект.Партнер);
ПараметрыОткрытияФормы.Вставить("КартаЛояльности", Объект.КартаЛояльности);
ПараметрыОткрытияФормы.Вставить("АдресТабличнойЧастиТовары", АдресТабличнойЧастиТовары());
ПараметрыОткрытияФормы.Вставить("Валюта", Объект.Валюта);
ОткрытьФорму(
"Справочник.БонусныеПрограммыЛояльности.Форма.ОплатаБонуснымиБаллами",
ПараметрыОткрытияФормы,
ЭтотОбъект,,,,
Новый ОписаниеОповещения("ДобавитьОплатуБонуснымиБалламиЗавершение", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьОплатуБонуснымиБалламиЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не ЗначениеЗаполнено(Результат) Тогда
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
Возврат;
КонецЕсли;
ПрименитьОплатуБонуснымиБаллами(Результат.АдресВоВременномХранилище);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьИнформациюОСкидках(Команда)
Если НЕ Объект.СкидкиРассчитаны Тогда
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту", Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет", Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры);
Если СтруктураСообщений.Сообщения.Количество() > 0 И СтруктураСообщений.АвтоматическиОткрывать Тогда
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтотОбъект, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(АдресПримененныхСкидокВоВременномХранилище) Тогда
РассчитатьСкидкиБезПримененияКОбъекту();
КонецЕсли;
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуПримененныеСкидки(ТекущиеДанные, Объект, ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныПоСоглашению(Команда)
Если ЦеныПредприятияЗаполнениеКлиент.НеобходимоЗаполнениеЦенПоСоглашению(Объект, "Товары", НСтр("ru='Товары'")) Тогда
ЦеныРассчитаны = ЗаполнитьЦеныПоСоглашениюСервер();
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны);
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныПоДоговору(Команда)
ВидЦеныДоговора = УчетныйВидЦеныДоговора();
Если ЦеныПредприятияЗаполнениеКлиент.НеобходимоЗаполнениеЦенПоВиду(Объект, ВидЦеныДоговора) Тогда
ЦеныРассчитаны = ЗаполнитьЦеныПоСоглашениюСервер();
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоСоглашению(ЦеныРассчитаны);
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦен(Команда)
Если ЦеныПредприятияЗаполнениеКлиент.НеобходимоЗаполнениеЦенПоВидуЦен(Объект, "Товары", НСтр("ru='Товары'")) Тогда
ПараметрыВыбораЦен = ЦеныПредприятияЗаполнениеКлиент.НовыйПараметрыЗаполненияВыбратьВидЦен();
ПараметрыВыбораЦен.ОписаниеОповещения =
Новый ОписаниеОповещения("ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенЗавершение", ЭтотОбъект);
ПараметрыВыбораЦен.ЦенаВключаетНДС = Объект.ЦенаВключаетНДС;
ПараметрыВыбораЦен.ИспользоватьПриПродаже = Истина;
ПараметрыВыбораЦен.ВладелецИндивидуальногоВидаЦен = ?(ИспользоватьСоглашенияСКлиентами,Объект.Соглашение,Объект.Партнер);
ЦеныПредприятияЗаполнениеКлиент.ВыбратьВидЦен(ПараметрыВыбораЦен);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенЗавершение(ВидЦен, ДополнительныеПараметры) Экспорт
Если ЗначениеЗаполнено(ВидЦен) Тогда
ЦеныРассчитаны = ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен);
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияЦенПоВидуЦен(ЦеныРассчитаны, ВидЦен);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСкладВВыделенныхСтроках(Команда)
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;
Если СкладыКлиент.ПроверитьВозможностьЗаполненияСкладовВТабличнойЧасти(Объект, Объект.Товары, НСтр("ru='Товары'"), ВыделенныеСтроки) Тогда
МассивОтбора = Новый Массив();
МассивОтбора.Добавить(ПредопределенноеЗначение("Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказах"));
МассивОтбора.Добавить(ПредопределенноеЗначение("Перечисление.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных"));
СтруктураОтбора = Новый Структура("ВыборГруппы, ЭтоГруппа", МассивОтбора, Ложь);
СтруктураПараметров = Новый Структура("Отбор,ГруппаСкладов,ОтображениеТаблицы",
СтруктураОтбора, Объект.Склад, ОтображениеТаблицы.Список);
ВыбранныйСклад = Неопределено;
ОткрытьФорму("Справочник.Склады.ФормаВыбора", СтруктураПараметров, ЭтотОбъект,,,, Новый ОписаниеОповещения("ЗаполнитьСкладВВыделенныхСтрокахЗавершение", ЭтотОбъект, Новый Структура("ВыделенныеСтроки", ВыделенныеСтроки)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСкладВВыделенныхСтрокахЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
ВыбранныйСклад = Результат;
Если ЗначениеЗаполнено(ВыбранныйСклад) Тогда
ЗаполненоСтрок = ЗаполнитьСкладВВыделенныхСтрокахНаСервере(ВыделенныеСтроки, ВыбранныйСклад);
СкладыКлиент.ПоказатьОповещениеОЗаполненииСкладаВТабличнойЧасти(ВыбранныйСклад, ЗаполненоСтрок, ВыделенныеСтроки.Количество());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументы(Команда)
ОчиститьСообщения();
Если ДокументыСформированы Тогда
СписокКнопок = Новый СписокЗначений();
СписокКнопок.Добавить("Создать", НСтр("ru = 'Создать'"));
СписокКнопок.Добавить("НеСоздавать", НСтр("ru = 'Не создавать'"));
ОтветНаВопрос = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("СоздатьДокументыЗавершение", ЭтотОбъект), НСтр("ru = 'Документы уже были созданы. Создать документы заново?'"), СписокКнопок);
Возврат;
КонецЕсли;
СоздатьДокументыКлиент(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументыЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = "НеСоздавать" Тогда
Возврат;
КонецЕсли;
СоздатьДокументыКлиент(Неопределено);
КонецПроцедуры
&НаКлиенте
Процедура ПометитьНаУдаление(Команда)
ВыделенныеДокументы = Неопределено;
ПолучитьВыделенныеДокументы(Новый ОписаниеОповещения("ПометитьНаУдалениеПослеПолучитьВыделение", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ПометитьНаУдалениеЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОчиститьСообщения();
ВыделенныеДокументы = ДополнительныеПараметры.ВыделенныеДокументы;
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
Возврат;
КонецЕсли;
КоличествоИзмененныхДокументов = УстановитьПометкуУдаленияСервер(ВыделенныеДокументы);
Если КоличествоИзмененныхДокументов > 0 Тогда
ПоказатьОповещениеПользователя(
СтрЗаменить(НСтр("ru = 'Пометка удаления установлена (%КоличествоИзмененныхДокументов%)'"), "%КоличествоИзмененныхДокументов%", КоличествоИзмененныхДокументов),
,
,
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Провести(Команда)
ВыделенныеДокументы = Неопределено;
ПолучитьВыделенныеДокументы(Новый ОписаниеОповещения("ПровестиЗавершение", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ПровестиЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОчиститьСообщения();
ВыделенныеДокументы = Результат;
Если ВыделенныеДокументы = Неопределено Тогда
Возврат;
КонецЕсли;
КоличествоИзмененныхДокументов = ПровестиОтменитьПроведениеДокументовСервер(ВыделенныеДокументы, Истина);
УправлениеПометкойКомандыТранспортнойНакладной();
УправлениеПометкойКомандыДоверенность();
Если КоличествоИзмененныхДокументов > 0 Тогда
ПоказатьОповещениеПользователя(
СтрЗаменить(НСтр("ru = 'Выполнено проведение документов (%КоличествоИзмененныхДокументов%)'"), "%КоличествоИзмененныхДокументов%", КоличествоИзмененныхДокументов),
,,БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОтменаПроведения(Команда)
ВыделенныеДокументы = Неопределено;
ПолучитьВыделенныеДокументы(Новый ОписаниеОповещения("ОтменаПроведенияЗавершение", ЭтотОбъект));
КонецПроцедуры
&НаКлиенте
Процедура ОтменаПроведенияЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОчиститьСообщения();
ВыделенныеДокументы = Результат;
Если ВыделенныеДокументы = Неопределено Тогда
Возврат;
КонецЕсли;
КоличествоИзмененныхДокументов = ПровестиОтменитьПроведениеДокументовСервер(ВыделенныеДокументы, Ложь);
УправлениеПометкойКомандыТранспортнойНакладной();
УправлениеПометкойКомандыДоверенность();
Если КоличествоИзмененныхДокументов > 0 Тогда
ПоказатьОповещениеПользователя(
СтрЗаменить(НСтр("ru = 'Выполнена отмена проведения документов (%КоличествоИзмененныхДокументов%)'"), "%КоличествоИзмененныхДокументов%", КоличествоИзмененныхДокументов),
,,БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НапечататьДокументы(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Обработка.ПомощникПродаж.Форма.Команда.НапечататьДокументы");
ОчиститьСообщения();
МассивДокументов = Новый Массив;
Для Каждого ТекСтрока Из Объект.Документы Цикл
Если ТекСтрока.Состояние = 0 Тогда
ТипДокумента = ТипЗнч(ТекСтрока.Документ);
Если Объект.ПечататьЗаказКлиента
И ТипДокумента = Тип("ДокументСсылка.ЗаказКлиента") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
ИначеЕсли Объект.ПечататьЗаявкуНаВозвратТоваровОтКлиентов
И ТипДокумента = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
ИначеЕсли Объект.ПечататьСчетНаОплату
И ТипДокумента = Тип("ДокументСсылка.СчетНаОплатуКлиенту") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
ИначеЕсли Объект.ПечататьРеализациюТоваровУслуг
И ТипДокумента = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
ИначеЕсли Объект.ПечататьАктВыполненныхРабот
И ТипДокумента = Тип("ДокументСсылка.АктВыполненныхРабот") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
ИначеЕсли Объект.ПечататьПриходныйКассовыйОрдер
И ТипДокумента = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
ИначеЕсли Объект.ПечататьПередачуТоваровХранителю
И ТипДокумента = Тип("ДокументСсылка.ПередачаТоваровХранителю") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
ИначеЕсли Объект.ПечататьКоммерческоеПредложение
И ТипДокумента = Тип("ДокументСсылка.КоммерческоеПредложениеКлиенту") Тогда
МассивДокументов.Добавить(ТекСтрока.Документ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если МассивДокументов.Количество() > 0 Тогда
ИмяМенеджераПечати = "РегистрСведений.НастройкиПечатиОбъектов";
ИменаМакетов = "КомплектДокументов";
Если Объект.ВариантОформленияДокументов =
ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ИмяМенеджераПечати = "Документ.КоммерческоеПредложениеКлиенту";
ИменаМакетов = "КоммерческоеПредложениеКлиенту";
КонецЕсли;
ПараметрыПечати = Новый Структура("ОтображатьСкидки", ВыводитьСкидкиВПечатныеФормы);
УправлениеПечатьюКлиент.ВыполнитьКомандуПечатиНаПринтер(ИмяМенеджераПечати, ИменаМакетов, МассивДокументов,
ПараметрыПечати);
Если МассивДокументов.Количество() > 0 Тогда
ТекстОповещения = НСтр("ru = 'Документы напечатаны (%КоличествоДокументов%)'");
ТекстОповещения = СтрЗаменить(ТекстОповещения, "%КоличествоДокументов%", МассивДокументов.Количество());
ПоказатьОповещениеПользователя(ТекстОповещения, , , БиблиотекаКартинок.Информация32);
КонецЕсли;
ИначеЕсли Объект.Документы.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru='Печать недоступна. Не создано ни одного документа.'"));
Иначе
ПоказатьПредупреждение(, НСтр("ru='Не настроена печать документов в меню Настройка...'"));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Изменить(Команда)
ОтветНаВопрос = Неопределено;
ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьЗавершение", ЭтотОбъект);
ТекстВопроса = НСтр("ru = 'Сформированные документы будут заменены. Изменить реквизиты текущей продажи?'");
СписокКнопок = Новый СписокЗначений;
СписокКнопок.Добавить("Изменить", НСтр("ru = 'Изменить'"));
СписокКнопок.Добавить("НеИзменять", НСтр("ru = 'Не изменять'"));
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, СписокКнопок);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = "НеИзменять" Тогда
Возврат;
КонецЕсли;
УстановитьТолькоПросмотрЭлементовФормы(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОбОшибкахОткрытияПодбора(Отказ)
Если ИспользоватьСоглашенияСКлиентами
И Не ЗначениеЗаполнено(Объект.Соглашение)
И Объект.ВариантОформленияДокументов <> ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Соглашение"" не заполнено'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,,"Объект.Соглашение",,Отказ);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Валюта) Тогда
ТекстСообщения = НСтр("ru = 'Поле ""Валюта"" не заполнено'");
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения,, "Объект.Валюта",,Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодбор(Команда)
Отказ = Ложь;
Если (ИспользоватьСоглашенияСКлиентами И Не ЗначениеЗаполнено(Объект.Соглашение))
Или Не ЗначениеЗаполнено(Объект.Валюта) Тогда
ОчиститьСообщения();
СообщитьОбОшибкахОткрытияПодбора(Отказ);
КонецЕсли;
Если Отказ Тогда
Возврат;
КонецЕсли;
ПараметрЗаголовок = НСтр("ru = 'Подбор товаров в помощник продаж'");
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Партнер", Объект.Партнер);
Если Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ПараметрыФормы.Вставить("Соглашение", Неопределено);
Иначе
ПараметрыФормы.Вставить("Соглашение", Объект.Соглашение);
КонецЕсли;
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыФормы.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыФормы.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару);
Если ЗначениеЗаполнено(Объект.Склад) Тогда
ПараметрыФормы.Вставить("Склад", Объект.Склад);
Иначе
ПараметрыФормы.Вставить("ОстаткиПоВсемСкладам", Истина);
КонецЕсли;
ПараметрыФормы.Вставить("Валюта", Объект.Валюта);
ПараметрыФормы.Вставить("Заголовок", ПараметрЗаголовок);
ПараметрыФормы.Вставить("Дата", Объект.Дата);
ПараметрыФормы.Вставить("РежимПодбораИспользоватьСкладыВТабличнойЧасти", Истина);
Если ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
ПараметрыФормы.Вставить("СкрыватьРучныеСкидки",Истина);
ИначеЕсли ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ОтборПоТипуНоменклатуры = Новый Массив;
ОтборПоТипуНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"));
ОтборПоТипуНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Набор"));
ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый ФиксированныйМассив(ОтборПоТипуНоменклатуры));
ПараметрыФормы.Вставить("СкрыватьРучныеСкидки", Истина);
КонецЕсли;
ОперативноеЗаполнение = (Объект.ДатаОтгрузки = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса())
Или Не ЗначениеЗаполнено(Объект.ДатаОтгрузки));
ОграниченноеОбеспечение = Объект.ВариантОформленияДокументов <> ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента")
И Объект.ВариантОформленияДокументов <> ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю")
И Объект.ВариантОформленияДокументов <> ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг");
УстановитьОтгрузить = Объект.НеОтгружатьЧастями
И (Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю")
Или Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг"));
Если (ОграниченноеОбеспечение Или Объект.НеОтгружатьЧастями И ОперативноеЗаполнение И ИспользоватьСоглашенияСКлиентами)
Или УстановитьОтгрузить Тогда
ВариантИФлагДляПодбора = ПолучитьВариантОбеспеченияИФлагОбособленно(
ПредопределенноеЗначение("Перечисление.ВариантыОбеспечения.Отгрузить"),
Объект.Соглашение,
Объект.СтатусЗаказаКлиента);
ОграничиватьВариантыОбеспечения = Истина;
ИначеЕсли Объект.УпрощенноеОбеспечение Тогда
ВариантИФлагДляПодбора = ПолучитьВариантОбеспеченияИФлагОбособленно(
Объект.ВариантОбеспечения,
Объект.Соглашение,
Объект.СтатусЗаказаКлиента);
ОграничиватьВариантыОбеспечения = Истина;
Иначе
ОграничиватьВариантыОбеспечения = Ложь;
ВариантИФлагДляПодбора = ВариантОбеспеченияИФлагОбособленно;
КонецЕсли;
ПараметрыУказанияСерийРеализации = ЭтоРеализация(Объект.ВариантОформленияДокументов)
Или ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов);
ПараметрыУказанияСерийПараметр = ?(ПараметрыУказанияСерийРеализации,
ПараметрыУказанияСерий.Реализация,
ПараметрыУказанияСерий.Заказ);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("ИспользоватьДатыОтгрузки", НЕ Объект.НеОтгружатьЧастями);
ПараметрыФормы.Вставить("ПараметрыУказанияСерий", ПараметрыУказанияСерийПараметр);
ПараметрыФормы.Вставить("Назначение", Объект.Назначение);
ПараметрыФормы.Вставить("Подразделение", Объект.Подразделение);
ПараметрыФормы.Вставить("ПодборВариантовОбеспечения", Не ОграничиватьВариантыОбеспечения);
ПараметрыФормы.Вставить("ВариантОбеспеченияИФлагОбособленно", ВариантИФлагДляПодбора);
ПараметрыФормы.Вставить("ДоступныеОстаткиПараметрыДокумента",
ОбеспечениеВДокументахКлиент.ДоступныеОстаткиПараметрыДокумента(ЭтотОбъект));
ПараметрыФормы.Вставить("ОграничиватьВариантыОбеспечения", ОграничиватьВариантыОбеспечения);
ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьМногооборотнойТарой(Команда)
ИменаПолей = ИменяПолейПодбораМногооборотнойТары(Объект.ВариантОформленияДокументов);
МногооборотнаяТараКлиент.ПодобратьМногооборотнуюТару(
ЭтотОбъект,
"Товары",
ИменаПолей);
КонецПроцедуры
&НаКлиенте
Процедура СоставНабора(Команда)
ВыбраннаяСтрока = Элементы.Товары.ТекущаяСтрока;
Если ВыбраннаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если Не ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда
ПоказатьПредупреждение(,НСтр("ru = 'Открытие состава набора возможно только для набора.'"));
Возврат;
КонецЕсли;
ПараметрыКомплекта = Новый Структура;
ПараметрыКомплекта.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрыКомплекта.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрыКомплекта.Вставить("КолонкиНабора", КолонкиНабора(ЭтотОбъект));
АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыКомплекта);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище);
ПараметрыОткрытия.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрыОткрытия.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрыОткрытия.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыОткрытия.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыОткрытия.Вставить("Валюта", Объект.Валюта);
ПараметрыОткрытия.Вставить("Партнер", Объект.Партнер);
Если Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ПараметрыОткрытия.Вставить("Соглашение", Неопределено);
Иначе
ПараметрыОткрытия.Вставить("Соглашение", Объект.Соглашение);
КонецЕсли;
ПараметрыОткрытия.Вставить("Дата", Объект.Дата);
ПараметрыОткрытия.Вставить("Склад", Объект.Склад);
ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Ложь);
ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтотОбъект, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ТранспортнаяНакладная(Команда)
ОчиститьСообщения();
Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка = НЕ Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка;
СоздаватьТранспортнуюНакладную = Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка;
УправлениеТранспортнымиНакладными();
УправлениеПометкойКомандыТранспортнойНакладной();
КонецПроцедуры
&НаКлиенте
Процедура ВыданнаяДоверенность(Команда)
ОчиститьСообщения();
Элементы.ОформленныеДокументыВыданнаяДоверенность.Пометка = Не Элементы.ОформленныеДокументыВыданнаяДоверенность.Пометка;
СоздаватьДоверенностьНаПолучениеДС = Элементы.ОформленныеДокументыВыданнаяДоверенность.Пометка;
УправлениеДоверенностями();
УправлениеПометкойКомандыДоверенность();
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьИнформациюПоДоставкеКонтактами(Команда)
ДополнитьИнформациюПоДоставкеКонтактамиСервер();
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьПоПрогнозу(Команда)
ЗаполнитьПоПрогнозуНаСервер();
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура СписокЗаказов(Команда)
ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов", , ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеРеквизитыЗаказКлиента(Команда)
АдресВоВременномХранилище = ПоместитьДополнительныеРеквизитыВоВременноеХранилище("ДополнительныеРеквизитыЗаказа");
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ТолькоПросмотр", ДокументыСформированы И Не Модифицированность);
ПараметрыФормы.Вставить("ТипДокумента", "ДокументОбъект.ЗаказКлиента");
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище);
ОткрытьФорму(
"Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты",
ПараметрыФормы,
ЭтотОбъект,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеРеквизитыЗаявки(Команда)
АдресВоВременномХранилище = ПоместитьДополнительныеРеквизитыВоВременноеХранилище("ДополнительныеРеквизитыЗаявки");
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ТолькоПросмотр", ДокументыСформированы И Не Модифицированность);
ПараметрыФормы.Вставить("ТипДокумента", "ДокументОбъект.ЗаявкаНаВозвратТоваровОтКлиента");
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище);
ОткрытьФорму(
"Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты",
ПараметрыФормы,
ЭтотОбъект,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеРеквизитыКоммерческоеПредложение(Команда)
ПараметрыЗагрузки = Новый Структура;
ПараметрыЗагрузки.Вставить("ИмяТаблицыДополнительныхРеквизитов", "");
ПараметрыЗагрузки.Вставить("ИмяОбъекта", "");
Если Команда.Имя = "ДополнительныеРеквизитыКоммерческоеПредложение" Тогда
ПараметрыЗагрузки.ИмяТаблицыДополнительныхРеквизитов = "ДополнительныеРеквизитыКоммерческогоПредложения";
ПараметрыЗагрузки.ИмяОбъекта = "ДокументОбъект.КоммерческоеПредложениеКлиенту";
КонецЕсли;
АдресВоВременномХранилище = ПоместитьДополнительныеРеквизитыВоВременноеХранилище(ПараметрыЗагрузки.ИмяТаблицыДополнительныхРеквизитов);
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ТолькоПросмотр", ДокументыСформированы И Не Модифицированность);
ПараметрыФормы.Вставить("ТипДокумента", ПараметрыЗагрузки.ИмяОбъекта);
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище);
ОткрытьФорму(
"Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты",
ПараметрыФормы,
ЭтотОбъект,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеРеквизитыРеализацияТоваровУслуг(Команда)
АдресВоВременномХранилище = ПоместитьДополнительныеРеквизитыВоВременноеХранилище("ДополнительныеРеквизитыРеализации");
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ТолькоПросмотр", ДокументыСформированы И Не Модифицированность);
ПараметрыФормы.Вставить("ТипДокумента", "ДокументОбъект.РеализацияТоваровУслуг");
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище);
ОткрытьФорму(
"Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты",
ПараметрыФормы,
ЭтотОбъект,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеРеквизитыПередачаТоваровХранителю(Команда)
ВариантОткрытия = Не Модифицированность
И ДокументыСформированы;
АдресВоВременномХранилище = ПоместитьДополнительныеРеквизитыВоВременноеХранилище("ДополнительныеРеквизитыПередачиТоваров");
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТолькоПросмотр", ВариантОткрытия);
ПараметрыФормы.Вставить("ТипДокумента", "ДокументОбъект.ПередачаТоваровХранителю");
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище);
ОткрытьФорму("Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты", ПараметрыФормы, ЭтотОбъект, , , , Неопределено,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеРеквизитыОтгрузкаТоваровКлиенту(Команда)
ВариантОткрытия = Не Модифицированность
И ДокументыСформированы;
АдресВоВременномХранилище = ПоместитьДополнительныеРеквизитыВоВременноеХранилище("ДополнительныеРеквизитыОтгрузкиТоваров");
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ТолькоПросмотр", ВариантОткрытия);
ПараметрыФормы.Вставить("ТипДокумента", "ДокументОбъект.ОтгрузкаТоваровКлиенту");
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище);
ОткрытьФорму("Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты", ПараметрыФормы, ЭтотОбъект, , , , Неопределено,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ДополнительныеРеквизитыАктВыполненныхРабот(Команда)
АдресВоВременномХранилище = ПоместитьДополнительныеРеквизитыВоВременноеХранилище("ДополнительныеРеквизитыАкта");
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("ТолькоПросмотр", ДокументыСформированы И Не Модифицированность);
ПараметрыФормы.Вставить("ТипДокумента", "ДокументОбъект.АктВыполненныхРабот");
ПараметрыФормы.Вставить("АдресВоВременномХранилище", АдресВоВременномХранилище);
ОткрытьФорму(
"Обработка.ПомощникПродаж.Форма.ДополнительныеРеквизиты",
ПараметрыФормы,
ЭтотОбъект,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#Область Обеспечение
&НаКлиенте
Процедура ВключитьОбособленноеОбеспечение(Команда)
ОбеспечениеУстановитьДействие("ФЛАГ_ОБОСОБЛЕННО");
КонецПроцедуры
&НаКлиенте
Процедура ВыключитьОбособленноеОбеспечение(Команда)
ОбеспечениеУстановитьДействие("ФЛАГ_НЕОБОСОБЛЕННО");
КонецПроцедуры
&НаКлиенте
Процедура КОбеспечению(Команда)
ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_КОБЕСПЕЧЕНИЮ");
КонецПроцедуры
&НаКлиенте
Процедура РезервироватьПоМереПоступления(Команда)
ОбеспечениеУстановитьДействие("ДЕЙСТВИЕ_РЕЗЕРВИРОВАТЬПОМЕРЕПОСТУПЛЕНИЯ");
КонецПроцедуры
&НаКлиенте
Процедура НеОбеспечивать(Команда)
ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_НЕОБЕСПЕЧИВАТЬ");
КонецПроцедуры
&НаКлиенте
Процедура Отгрузить(Команда)
ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_ОТГРУЗИТЬ");
КонецПроцедуры
&НаКлиенте
Процедура Резервировать(Команда)
ОбеспечениеУстановитьДействиеСВопросом("ДЕЙСТВИЕ_РЕЗЕРВИРОВАТЬ");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
ОбеспечениеВДокументахСервер.УстановитьУсловноеОформлениеОбособленно(
УсловноеОформление,
Элементы.ТоварыОбособленно,
"Объект.Товары.ВариантОбеспечения",
"Объект.Товары.ТипНоменклатуры");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыВариантОбеспечения.Имя);
СписокВариантовОформления = Новый СписокЗначений();
СписокВариантовОформления.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
СписокВариантовОформления.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВариантОформления");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = СписокВариантовОформления;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
ОбеспечениеВДокументахСервер.ДоступныеОстаткиДобавитьОформлениеКолонкиДоступно(ЭтотОбъект);
ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(УсловноеОформление,
"ДатаОтгрузки",
"Объект.ДатаОтгрузки",
"ДатаОтгрузкиОбязательна");
ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(УсловноеОформление,
"ТоварыДатаОтгрузки",
"Объект.Товары.ДатаОтгрузки",
"Объект.Товары.ДатаОтгрузкиОбязательна");
ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(УсловноеОформление,
"Склад",
"Объект.Склад",
"СкладОбязателен");
ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(УсловноеОформление,
"ТоварыСклад",
"Объект.Товары.Склад",
"Объект.Товары.СкладОбязателен");
УстановкаОтметкиНезаполненногоСкладаИДатыОтгрузкиДляВариантаОформления();
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыВариантОбеспечения.Имя);
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыОбособленно.Имя);
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыДоступно.Имя);
ВариантыОформленияДокументов = Новый СписокЗначений;
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение);
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг);
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборЭлемента.ПравоеЗначение = ВариантыОформленияДокументов;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтотОбъект);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЦена.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСумма.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВидЦены");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЦена.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВидЦены");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСумма.Имя);
ОперацииПередачиТоваров = Новый СписокЗначений;
ОперацииПередачиТоваров.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
ОперацииПередачиТоваров.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ВидЦены");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьРучныеСкидкиВПродажах");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ХозяйственнаяОперация");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборЭлемента.ПравоеЗначение = ОперацииПередачиТоваров;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
УчетНДСУП.УстановитьУсловноеОформлениеСуммНДСПоНалогообложениюПродажи(ЭтотОбъект);
ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеЦенаВключаетНДС(ЭтотОбъект);
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтотОбъект);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтотОбъект);
НоменклатураСервер.УстановитьУсловноеОформлениеСодержания(ЭтотОбъект);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСклад.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.Товар);
СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.МногооборотнаяТара);
ОтборЭлемента.ПравоеЗначение = СписокЗначений;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<для товаров>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСклад.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Подразделение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.НезаполненноеПолеТаблицы);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<необходимо заполнить номенклатуру>'"));
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Контрагент.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Договор.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСклад.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.КартинкаНесколькоСкладов.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСтатусУказанияСерий.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформленныеДокументыПечать.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Документы.Печать");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Документы.Документ");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеСодержит;
ОтборЭлемента.ПравоеЗначение = НСтр("ru = 'Расходный ордер'");
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Печатные формы'"));
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформленныеДокументыПечать.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Документы.Печать");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", "");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ОформленныеДокументыФискализирован.Имя);
ГруппаОтбора = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПробиватьФискальныйЧек");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ОтборЭлемента = ГруппаОтбора.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФискализацияДоступна");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ЦеныПредприятияЗаполнениеСервер.УстановитьУсловноеОформлениеВидовЦен(ЭтотОбъект);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыВариантОформления.Имя);
ВариантыОформленияДокументов = Новый СписокЗначений;
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
ОтборЭлемента.ПравоеЗначение = ВариантыОформленияДокументов;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
СкладыСервер.УстановитьУсловноеОформлениеСкладаВТЧ(ЭтотОбъект);
ПараметрыУстановки = МногооборотнаяТараСервер.ПараметрыУстановкиУсловногоОформленияДляСтрокСМногооборотнойТарой();
ПараметрыУстановки.Форма = ЭтотОбъект;
ПараметрыУстановки.ЭтоПоступление = Ложь;
МногооборотнаяТараСервер.УстановитьУсловноеОформлениеДляСтрокСМногооборотнойТарой(ПараметрыУстановки);
НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтотОбъект, "СерииПриПланированииОтгрузкиУказываютсяВТЧТовары");
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСерия.Имя);
СписокСтатусовСерий = Новый СписокЗначений;
СписокСтатусовСерий.Добавить(11);
СписокСтатусовСерий.Добавить(15);
ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.СтатусУказанияСерий");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборЭлемента.ПравоеЗначение = СписокСтатусовСерий;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтотОбъект, Ложь);
НаборыСервер.УстановитьУсловноеОформление(ЭтотОбъект, "Товары");
НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеНаправленияДеятельности(ЭтотОбъект);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоУпаковок.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСумма.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КоличествоУпаковокКВозврату");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКоличествоУпаковокКВозврату.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
СписокТиповУслуга = Новый СписокЗначений;
СписокТиповУслуга.Добавить(Перечисления.ТипыНоменклатуры.Услуга);
СписокТиповУслуга.Добавить(Перечисления.ТипыНоменклатуры.Работа);
ОтборЭлемента.ПравоеЗначение = СписокТиповУслуга;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#Область ОтметкаНезаполненногоПодразделения
ВариантыОформленияДокументов = Новый СписокЗначений;
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг);
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Подразделение.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФормироватьВидыЗапасовПоПодразделениямМенеджерам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ОтборЭлемента.ПравоеЗначение = ВариантыОформленияДокументов;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Подразделение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Подразделение.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИ;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФормироватьВидыЗапасовПоПодразделениямМенеджерам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ГруппаОтбора2 = ГруппаОтбора1.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора2.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИЛИ;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
ОтборЭлемента.ПравоеЗначение = ВариантыОформленияДокументов;
ОтборЭлемента = ГруппаОтбора2.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Подразделение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
СкладыСервер.УстановитьУсловноеОформлениеПодразделенияВТЧ(ЭтотОбъект);
#КонецОбласти
КонецПроцедуры
&НаСервере
Процедура УстановкаОтметкиНезаполненногоСкладаИДатыОтгрузкиДляВариантаОформления()
ВариантыОформленияПродажи = Новый СписокЗначений;
ВариантыОформленияПродажи.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг);
ВариантыОформленияПродажи.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Склад");
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = ВариантыОформленияПродажи;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Склад");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("СкладОбязателен");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Истина;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("Склад");
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Склад");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ДатаОтгрузки");
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = ВариантыОформленияПродажи;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ДатаОтгрузки");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТоварыДатаОтгрузки");
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = ВариантыОформленияПродажи;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ДатаОтгрузки");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТоварыСклад");
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
Отбор.ПравоеЗначение = ВариантыОформленияПродажи;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Склад");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ТипНоменклатуры");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеВСписке;
СписокЗначений = Новый СписокЗначений;
СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.Услуга);
СписокЗначений.Добавить(Перечисления.ТипыНоменклатуры.Работа);
Отбор.ПравоеЗначение = СписокЗначений;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных("ТоварыСклад");
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ВариантОформленияДокументов");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
Отбор.ПравоеЗначение = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Отбор = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Склад");
Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
КонецПроцедуры
&НаСервере
Процедура УстановитьОтметкаНезаполненногоСклада()
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю Или
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
СкладОбязателен = 1;
Элементы.Склад.АвтоОтметкаНезаполненного = Истина;
Иначе
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
КонецЕсли;
КонецПроцедуры
#Область Подбор
&НаКлиенте
Процедура ОбработкаВыбораПодборНаКлиенте(ВыбранноеЗначение)
Если Не ЗначениеЗаполнено(ВыбранноеЗначение) Тогда
Возврат;
КонецЕсли;
ОбеспечениеВДокументахКлиент.ПоказатьВопросСнятьФлагОтгружатьОднойДатойПослеПодбора(
ЭтотОбъект,
ВыбранноеЗначение,
"ОбработкаВыбораПодборНаКлиентеПослеВопроса");
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбораПодборНаКлиентеПослеВопроса(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Отмена Тогда
Возврат;
КонецЕсли;
Если Ответ = КодВозвратаДиалога.Да Тогда
Объект.НеОтгружатьЧастями = Ложь;
УстановитьВидимостьЭлементовФормыДатОтгрузки();
КонецЕсли;
ОбработкаВыбораПодборНаСервере(ДополнительныеПараметры);
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение, СписокСвойств = Неопределено)
ЗаполнитьСклады = Ложь;
ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
ПараметрыЗаполнитьСтавкуНДС = ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки");
СтруктураДействий.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул",
Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
СтруктураДействий.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьСодержание",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь));
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковокСуффикс", "Прогноз");
СтруктураДействий.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
Если Не ЗначениеЗаполнено(СписокСвойств) Тогда
СписокСвойств = "НоменклатураНабора, ХарактеристикаНабора, Номенклатура, Характеристика, Упаковка, ВидЦены, Цена,
|КоличествоУпаковок, СрокПоставки, ПроцентРучнойСкидки, ВариантОбеспечения, Серия, ДатаОтгрузки, Обособленно";
Если ЗначениеЗаполнено(Объект.Склад) Тогда
СписокСвойств = СписокСвойств + ", Склад";
КонецЕсли;
КонецЕсли;
ЗаполнитьСклады = СтрНайти(СписокСвойств, "Склад") = 0;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект);
ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, "СкладОбязателен,ДатаОтгрузкиОбязательна");
НачалоДня = НачалоДня(ТекущаяДатаСеанса());
ОбрабатываемыеСтроки = Новый Массив();
ПоляПоиска = "НоменклатураНабора, ХарактеристикаНабора, Номенклатура, Характеристика, Упаковка, ВидЦены,
|СрокПоставки, ВариантОбеспечения, Серия, Обособленно";
Если Не ЗаполнитьСклады Тогда
ПоляПоиска = ПоляПоиска + ", Склад";
КонецЕсли;
Если Не Объект.НеОтгружатьЧастями Тогда
ПоляПоиска = ПоляПоиска + ", ДатаОтгрузки";
КонецЕслИ;
ПараметрыОтбора = Новый Структура(ПоляПоиска);
Для каждого СтрокаТовара Из ТаблицаТоваров Цикл
Если ЗначениеЗаполнено(СтрокаТовара.НоменклатураНабора) Тогда
ЗаполнитьЗначенияСвойств(ПараметрыОтбора, СтрокаТовара);
НайденныеСтроки = Объект.Товары.НайтиСтроки(ПараметрыОтбора);
Если НайденныеСтроки.Количество() > 0 Тогда
ТекущаяСтрока = НайденныеСтроки[0];
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковок + СтрокаТовара.КоличествоУпаковок;
Иначе
ТекущаяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара, СписокСвойств);
КонецЕсли;
Иначе
ТекущаяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара, СписокСвойств);
КонецЕсли;
Если ТекущаяСтрока.ИндексИконкиВыбора = 0 Тогда
Если ТекущаяСтрока.КоличествоПрогноз > 0 Тогда
ТекущаяСтрока.ИндексИконкиВыбора = 1;
ИначеЕсли ТекущаяСтрока.КоличествоОбъемПредыдущегоЗаказа > 0 Тогда
ТекущаяСтрока.ИндексИконкиВыбора = 2;
ТекущаяСтрока.КоличествоПрогноз = ТекущаяСтрока.КоличествоОбъемПредыдущегоЗаказа;
Иначе
ТекущаяСтрока.ИндексИконкиВыбора = 0;
КонецЕсли;
КонецЕсли;
ТекущаяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора), 1, 0);
ПересчитатьКоличествоУпаковокОбъемПредыдущегоЗаказа(ТекущаяСтрока, КэшированныеЗначения);
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары,
КэшированныеЗначения);
Для каждого ТекущаяСтрока Из ОбрабатываемыеСтроки Цикл
ТекущаяСтрока.ДатаОтгрузки = ОбеспечениеВДокументахСервер.ДатаОтгрузкиОбработкаВыбораПодбор(
ТекущаяСтрока.ДатаОтгрузки,
ТекущаяСтрока.ВариантОбеспечения,
НачалоДня);
ЗаполнитьВариантОформленияВСтрокеТабличнойЧасти(ТекущаяСтрока, Объект.ВариантОформленияДокументов, Объект.Дата, Объект.НеОтгружатьЧастями);
КонецЦикла;
ОбеспечениеВДокументахСервер.АктуализироватьДатуОтгрузкиОднойДатой(
Объект.НеОтгружатьЧастями,
Объект.ДатаОтгрузки,
Объект.Товары,
"ДатаОтгрузки");
Если ЗаполнитьСклады Тогда
СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Объект.Склад);
СкладыСервер.ЗаполнитьСкладыВТабличнойЧасти(Объект.Склад, СкладГруппа, Объект.Товары, Ложь);
Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Доступность = СкладГруппа;
КонецЕсли;
ЗаполнитьСтатусыУказанияСерий();
ПриИзмененииКорзиныНаСервере();
ОбновитьКолонкуДоступноСервер();
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияИндексыСПАРКРискиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СПАРКРискиКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьОтображениеИндексыСПАРК()
ОбновитьОтображениеИндексыСПАРК();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьОтображениеИндексыСПАРК()
ПараметрыОтображения = Новый Структура("ВариантОтображения", "Однострочный");
СПАРКРискиКлиент.ОтобразитьИндексыСПАРК(
ЭтотОбъект.ИндексыСПАРКРиски,
Неопределено,
Объект.Контрагент,
ВидКонтрагентаСПАРКРиски(Объект.Контрагент),
ЭтотОбъект,
ПараметрыОтображения);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ВидКонтрагентаСПАРКРиски(Контрагент)
Возврат Перечисления.ЮрФизЛицо.ВидКонтрагентаСПАРКРиски(Контрагент)
КонецФункции
&НаСервере
Процедура УстановитьПараметрыВыбораСоглашения()
ЭлементФормы = Элементы.Соглашение;
НовыеПараметрыВыбора = Новый Массив;
Если Не ЗначениеЗаполнено(Объект.Партнер) Тогда
НовыйПараметр = Новый ПараметрВыбора("ТолькоТиповые", Истина);
НовыеПараметрыВыбора.Добавить(НовыйПараметр);
НовыйПараметр = Новый ПараметрВыбора("Отбор.СегментПартнеров", Справочники.СегментыПартнеров.ПустаяСсылка());
НовыеПараметрыВыбора.Добавить(НовыйПараметр);
КонецЕсли;
Если ЭтоРеализация(Объект.ВариантОформленияДокументов) Тогда
ОперацииПродажи = Элементы.ХозяйственнаяОперация.СписокВыбора.ВыгрузитьЗначения();
ПараметрВыбора = Новый ПараметрВыбора("Отбор.ХозяйственнаяОперация", ОперацииПродажи);
НовыеПараметрыВыбора.Добавить(ПараметрВыбора);
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг Тогда
ПараметрВыбора = Новый ПараметрВыбора("Отбор.КомиссионныеПродажи25", Ложь);
НовыеПараметрыВыбора.Добавить(ПараметрВыбора);
КонецЕсли
КонецЕсли;
Если ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
ПараметрВыбора = Новый ПараметрВыбора("ТолькоОперацииПередачи", Истина);
НовыеПараметрыВыбора.Добавить(ПараметрВыбора);
КонецЕсли;
ЭлементФормы.ПараметрыВыбора = Новый ФиксированныйМассив(НовыеПараметрыВыбора);
КонецПроцедуры
&НаСервере
Процедура УстановитьСвязиПараметровВыбораДоговора()
ЭлементФормы = Элементы.Договор;
НовыеСвязиПараметровВыбора = Новый Массив;
ПутьКДаннымХО = "";
Для Каждого СвязьПараметровВыбора Из ЭлементФормы.СвязиПараметровВыбора Цикл
Если Не СвязьПараметровВыбора.Имя = "Отбор.ХозяйственнаяОперация" Тогда
НовыеСвязиПараметровВыбора.Добавить(СвязьПараметровВыбора);
Иначе
ПутьКДаннымХО = СвязьПараметровВыбора.ПутьКДанным;
КонецЕсли;
КонецЦикла;
ПутьКДанным = "Объект.ХозяйственнаяОперация";
Если ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ПутьКДанным = "ОперацияРеализацияКлиенту";
КонецЕсли;
Если ПутьКДаннымХО = ПутьКДанным Тогда
Возврат;
КонецЕсли;
СвязьПараметраВыбора = Новый СвязьПараметраВыбора("Отбор.ХозяйственнаяОперация",
ПутьКДанным,
РежимИзмененияСвязанногоЗначения.Очищать);
НовыеСвязиПараметровВыбора.Добавить(СвязьПараметраВыбора);
ЭлементФормы.СвязиПараметровВыбора = Новый ФиксированныйМассив(НовыеСвязиПараметровВыбора);
КонецПроцедуры
#КонецОбласти
#Область ЦенообразованиеИСкидки
&НаСервере
Функция ЗаполнитьЦеныПоСоглашениюСервер()
МассивСтрок = Новый Массив;
Для Каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл
МассивСтрок.Добавить(Объект.Товары.НайтиПоИдентификатору(Строка));
КонецЦикла;
НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Товары, МассивСтрок);
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку");
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор, "КомиссионныеПродажи25") Тогда
ПараметрыЗаполнения.Вставить("ВидЦены", ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор,"ВидЦенУчетный"));
Иначе
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
КонецЕсли;
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару);
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, ВидЦены, СрокПоставки");
ЦеныРассчитаны = ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
Объект.Товары,
МассивСтрок,
ПараметрыЗаполнения,
СтруктураДействий);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
Для каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(Строка);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
КонецЦикла;
Возврат ЦеныРассчитаны;
КонецФункции
&НаСервере
Функция ЗаполнитьЦеныВыделенныхСтрокПоВидуЦенСервер(ВидЦен)
МассивСтрок = Новый Массив;
Для Каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл
МассивСтрок.Добавить(Объект.Товары.НайтиПоИдентификатору(Строка));
КонецЦикла;
НаборыВызовСервера.ДополнитьДоПолногоНабора(Объект.Товары, МассивСтрок);
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
ПараметрыЗаполнения.Вставить("ВидЦены", ВидЦен);
ПараметрыЗаполнения.Вставить("ЦенаВключаетНДС", Объект.ЦенаВключаетНДС);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, ВидЦены");
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку");
ЦеныРассчитаны = ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(
Объект.Товары,
МассивСтрок,
ПараметрыЗаполнения,
СтруктураДействий);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
Для каждого Строка Из Элементы.Товары.ВыделенныеСтроки Цикл
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(Строка);
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
КонецЦикла;
Возврат ЦеныРассчитаны;
КонецФункции
&НаСервере
Процедура РассчитатьСкидкиБезПримененияКОбъекту()
СтруктураПараметры = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыРассчитать();
СтруктураПараметры.ПрименятьКОбъекту = Ложь;
СтруктураПараметры.ТолькоПредварительныйРасчет = Ложь;
СтруктураПараметры.ВосстанавливатьУправляемыеСкидки = Истина;
СтруктураПараметры.УправляемыеСкидки = УправляемыеСкидки;
ПримененныеСкидки = СкидкиНаценкиЗаполнениеСервер.Рассчитать(Объект, СтруктураПараметры);
АдресПримененныхСкидокВоВременномХранилище = ПоместитьВоВременноеХранилище(ПримененныеСкидки, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Функция РассчитатьСкидкиНаценкиНаСервере(СтруктураПараметры, ВзятьИзВременногоХранилища = Ложь)
Если ВзятьИзВременногоХранилища Тогда
ПримененныеСкидки = ПолучитьИзВременногоХранилища(АдресПримененныхСкидокВоВременномХранилище);
СкидкиНаценкиЗаполнениеСервер.ПрименитьРезультатРасчета(Объект, ПримененныеСкидки);
Иначе
ПримененныеСкидки = СкидкиНаценкиЗаполнениеСервер.Рассчитать(Объект, СтруктураПараметры);
АдресПримененныхСкидокВоВременномХранилище = ПоместитьВоВременноеХранилище(ПримененныеСкидки, УникальныйИдентификатор);
КонецЕсли;
Объект.СкидкиРассчитаны = Истина;
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
СтруктураСообщений = СкидкиНаценкиЗаполнениеСервер.СтруктураСообщений(Объект);
СкидкиНаценкиЗаполнениеСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения);
Возврат СтруктураСообщений;
КонецФункции
&НаСервере
Процедура НазначитьРучнуюСкидкуНаСервере(СуммаСкидкиНаценки, Знач ВыделенныеСтроки, АдресВоВременномХранилище)
Если СуммаСкидкиНаценки <> 0 Тогда
ПараметрыСкидки = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыНазначитьРучнуюСкидку();
ПараметрыСкидки.ИспользуютсяАвтоматическиеСкидки = Истина;
ПараметрыСкидки.ТолькоДляАктивныхСтрок = Ложь;
ПараметрыСкидки.РассчитыватьСуммуСНДС = Истина;
ПараметрыСкидки.ВыделенныеСтроки = ВыделенныеСтроки;
ПараметрыСкидки.АдресВоВременномХранилище = АдресВоВременномХранилище;
ПараметрыСкидки.РеализацияСверхЗаказа = Ложь;
СкидкиНаценкиЗаполнениеСервер.НазначитьРучнуюСкидку(Объект, "Товары", СуммаСкидкиНаценки, ПараметрыСкидки);
Иначе
СкидкиНаценкиЗаполнениеСервер.ОтменитьРучныеСкидки(Объект, "Товары", Истина, Истина);
КонецЕсли;
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаСервере
Функция ВыполнитьПредварительныйРасчетСкидокНаСервере()
СтруктураПараметры = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыРассчитать();
СтруктураПараметры.ПрименятьКОбъекту = Ложь;
СтруктураПараметры.ТолькоПредварительныйРасчет = Истина;
СтруктураПараметры.ВосстанавливатьУправляемыеСкидки = Истина;
СтруктураПараметры.УправляемыеСкидки = УправляемыеСкидки;
Возврат ПоместитьВоВременноеХранилище(
СкидкиНаценкиЗаполнениеСервер.Рассчитать(Объект, СтруктураПараметры), УникальныйИдентификатор);
КонецФункции
&НаСервере
Функция АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(ТолькоВыделенныеСтроки)
СтруктураПараметров = СкидкиНаценкиЗаполнениеСервер.НовыйПараметрыАдресДанныхДляРасчетаРучныхСкидок();
СтруктураПараметров.ИмяТаблицы = "Товары";
СтруктураПараметров.ТолькоДляВыделенныхСтрок = ТолькоВыделенныеСтроки;
Возврат СкидкиНаценкиЗаполнениеСервер.АдресДанныхДляРасчетаРучныхСкидокВоВременномХранилище(
ЭтотОбъект, УникальныйИдентификатор, СтруктураПараметров);
КонецФункции
&НаСервере
Процедура ОтменитьРучныеСкидкиНаСервере()
СкидкиНаценкиЗаполнениеСервер.ОтменитьРучныеСкидки(Объект, "Товары", Истина, Истина);
КонецПроцедуры
&НаКлиенте
Процедура СчитанаКартаЛояльности(Знач Оповещение, КартаЛояльности)
ДанныеКартыЛояльности = КартыЛояльностиВызовСервера.ПолучитьДанныеКартыЛояльности(КартаЛояльности);
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Ссылка) Тогда
Если Не ДанныеКартыЛояльности.ПартнерДоступен Тогда
ПоказатьПредупреждение(Новый ОписаниеОповещения("СчитанаКартаЛояльностиЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), НСтр("ru = 'Нет доступа к партнеру-владельцу карты лояльности.'"));
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(ДанныеКартыЛояльности.Партнер) Тогда
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Модифицированность = Истина;
Объект.КартаЛояльности = КартаЛояльности;
ВыполнитьОбработкуОповещения(Оповещение);
Возврат;
ИначеЕсли Объект.Партнер <> ДанныеКартыЛояльности.Партнер Тогда
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Оповещение", Оповещение);
ДополнительныеПараметры.Вставить("КартаЛояльности", КартаЛояльности);
ДополнительныеПараметры.Вставить("ДанныеКартыЛояльности", ДанныеКартыЛояльности);
ПоказатьВопрос(
Новый ОписаниеОповещения("СчитанаКартаЛояльностиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Карта лояльности принадлежит партнеру ""%1"". Изменить партнера в помощнике?'"), ДанныеКартыЛояльности.Партнер),
РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
Иначе
ВопросОбИзмененииКонтрагента = Ложь;
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Контрагент)
И ЗначениеЗаполнено(Объект.Контрагент) И ДанныеКартыЛояльности.Контрагент <> Объект.Контрагент Тогда
ВопросОбИзмененииКонтрагента = Истина;
КонецЕсли;
ВопросОбИзмененииСоглашения = Ложь;
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(ДанныеКартыЛояльности.Соглашение)
И ЗначениеЗаполнено(Объект.Соглашение) И ДанныеКартыЛояльности.Соглашение <> Объект.Соглашение Тогда
ВопросОбИзмененииСоглашения = Истина;
КонецЕсли;
Если ВопросОбИзмененииКонтрагента Или ВопросОбИзмененииСоглашения Тогда
НедоступноИзменениеКонтрагента = ВопросОбИзмененииКонтрагента И НЕ ДанныеКартыЛояльности.КонтрагентДоступен;
НедоступноИзменениеСоглашения = ВопросОбИзмененииСоглашения И НЕ ДанныеКартыЛояльности.СоглашениеДоступно;
Если НедоступноИзменениеКонтрагента И НедоступноИзменениеСоглашения Тогда
ТекстПредупреждения = НСтр("ru = 'Для карты лояльности заданы контрагент и соглашение, недоступные текущему пользователю. Применить карту лояльности может другой пользователь, имеющий доступ к ее контрагенту и соглашению.'");
ИначеЕсли НедоступноИзменениеКонтрагента Тогда
ТекстПредупреждения = НСтр("ru = 'Для карты лояльности задан контрагент, недоступный текущему пользователю. Применить карту лояльности может другой пользователь, имеющий доступ к ее контрагенту.'");
ИначеЕсли НедоступноИзменениеСоглашения Тогда
ТекстПредупреждения = НСтр("ru = 'Для карты лояльности задано соглашение, недоступное текущему пользователю. Применить карту лояльности может другой пользователь, имеющий доступ к ее соглашению.'");
КонецЕсли;
Если НедоступноИзменениеКонтрагента Или НедоступноИзменениеСоглашения Тогда
ПоказатьПредупреждение(, ТекстПредупреждения, 30);
ВыполнитьОбработкуОповещения(Оповещение);
Иначе
Если ВопросОбИзмененииКонтрагента И ВопросОбИзмененииСоглашения Тогда
ТекстВопроса = НСтр("ru = 'Для карты лояльности заданы контрагент ""%1"" и соглашение ""%2"". Применить карту лояльности и подставить в помощник контрагента ""%1"" и соглашение ""%2""?'");
ИначеЕсли ВопросОбИзмененииКонтрагента Тогда
ТекстВопроса = НСтр("ru = 'Для карты лояльности задан контрагент ""%1"". Применить карту лояльности и подставить в помощник контрагента ""%1""?'");
ИначеЕсли ВопросОбИзмененииСоглашения Тогда
ТекстВопроса = НСтр("ru = 'Для карты лояльности задано соглашение ""%2"". Применить карту лояльности и подставить в помощник соглашение ""%2""?'");
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Оповещение", Оповещение);
ДополнительныеПараметры.Вставить("КартаЛояльности", КартаЛояльности);
ДополнительныеПараметры.Вставить("ДанныеКартыЛояльности", ДанныеКартыЛояльности);
ПоказатьВопрос(
Новый ОписаниеОповещения("СчитанаКартаЛояльностиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстВопроса, ДанныеКартыЛояльности.Контрагент, ДанныеКартыЛояльности.Соглашение),
РежимДиалогаВопрос.ДаНет);
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Модифицированность = Истина;
Объект.КартаЛояльности = КартаЛояльности;
СчитанаКартаЛояльностиНаСервере(ДанныеКартыЛояльности);
Иначе
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Неопределено);
ПрименитьОплатуБонуснымиБаллами(Неопределено);
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
КонецЕсли;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура СчитанаКартаЛояльностиВопросЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Нет Тогда
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Объект.КартаЛояльности);
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение);
ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
Модифицированность = Истина;
Объект.КартаЛояльности = ДополнительныеПараметры.КартаЛояльности;
СчитанаКартаЛояльностиНаСервере(ДополнительныеПараметры.ДанныеКартыЛояльности);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СчитанаКартаЛояльностиЗавершение(ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаСервере
Процедура СчитанаКартаЛояльностиНаСервере(ДанныеКартыЛояльности)
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Партнер) И ДанныеКартыЛояльности.Партнер <> Объект.Партнер Тогда
Объект.Партнер = ДанныеКартыЛояльности.Партнер;
Объект.Контрагент = Справочники.Контрагенты.ПустаяСсылка();
Объект.Соглашение = Справочники.СоглашенияСКлиентами.ПустаяСсылка();
ПартнерПриИзмененииСервер();
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Соглашение)
И ДанныеКартыЛояльности.Соглашение <> Объект.Соглашение
И ДанныеКартыЛояльности.СоглашениеДоступно Тогда
Объект.Соглашение = ДанныеКартыЛояльности.Соглашение;
СоглашениеПриИзмененииСервер();
КонецЕсли;
Если ЗначениеЗаполнено(ДанныеКартыЛояльности.Контрагент)
И ДанныеКартыЛояльности.Контрагент <> Объект.Контрагент
И ДанныеКартыЛояльности.КонтрагентДоступен Тогда
Объект.Контрагент = ДанныеКартыЛояльности.Контрагент;
КонтрагентПриИзмененииСервер();
КонецЕсли;
ИспользоватьБонусныеПрограммыЛояльности = ИспользоватьБонусныеПрограммыЛояльности(Объект.КартаЛояльности);
УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ИспользоватьБонусныеПрограммыЛояльности(КартаЛояльности)
Если Не ЗначениеЗаполнено(КартаЛояльности) Тогда
Возврат Ложь;
КонецЕсли;
Возврат СкидкиНаценкиСервер.ИспользоватьБонусныеПрограммыЛояльности(КартаЛояльности);
КонецФункции
&НаСервере
Процедура ПолученыСообщения(Сообщения)
СкидкиНаценкиЗаполнениеСервер.СохранитьОтработанныеСообщения(Объект, Сообщения);
СкидкиНаценкиЗаполнениеСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения);
КонецПроцедуры
&НаСервере
Функция СкидкиИзменились()
СкидкиИзменились = СкидкиНаценкиЗаполнениеСервер.НеобходимПерерасчетСкидок(
Объект,
УправляемыеСкидки,
УникальныйИдентификатор,
АдресПримененныхСкидокВоВременномХранилище);
Если Объект.Товары.Итог("СуммаАвтоматическойСкидки") <> Объект.СкидкиНаценки.Итог("Сумма") Тогда
СкидкиИзменились = Истина;
КонецЕсли;
Возврат СкидкиИзменились;
КонецФункции
&НаКлиенте
Процедура ПрименитьИзмененияСкидокНаценокНаКлиенте(Знач Оповещение)
СтруктураСообщений = РассчитатьСкидкиНаценкиНаСервере(Неопределено, Истина);
Если СтруктураСообщений.Сообщения.Количество() > 0
И СтруктураСообщений.АвтоматическиОткрывать Тогда
ДополнительныеПараметры = Новый Структура("Оповещение", Оповещение);
ОписаниеОповещения = Новый ОписаниеОповещения("ПрименитьИзмененияСкидокНаценокНаКлиентеЗавершение",
ЭтотОбъект,
ДополнительныеПараметры);
ОткрытьФорму("ОбщаяФорма.СообщенияСкидокНаценок", СтруктураСообщений, ЭтотОбъект, , , , ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецЕсли;
ПрименитьИзмененияСкидокНаценокНаКлиентеФрагмент(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьИзмененияСкидокНаценокНаКлиентеЗавершение(Результат, ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
ПрименитьИзмененияСкидокНаценокНаКлиентеФрагмент(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПрименитьИзмененияСкидокНаценокНаКлиентеФрагмент(Знач Оповещение)
ТекстСообщения = НСтр("ru = 'Скидки (наценки)'");
ТекстПояснения = НСтр("ru = 'Скидки (наценки) рассчитаны'");
ПоказатьОповещениеПользователя(ТекстСообщения, , ТекстПояснения, БиблиотекаКартинок.Информация32);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаСервере
Функция СтруктураСообщений()
Возврат СкидкиНаценкиЗаполнениеСервер.СтруктураСообщений(Объект);
КонецФункции
&НаКлиенте
Процедура ПоказатьСообщения(Команда)
СкидкиНаценкиЗаполнениеКлиент.ОткрытьФормуСообщений(СтруктураСообщений(), ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПрименитьОплатуБонуснымиБаллами(АдресВоВременномХранилище)
УдалениеОплаты = Ложь;
Если АдресВоВременномХранилище <> Неопределено Тогда
ТаблицаТоваров = ПолучитьИзВременногоХранилища(АдресВоВременномХранилище);
Иначе
ТаблицаТоваров = Объект.Товары;
УдалениеОплаты = Истина;
КонецЕсли;
СтруктураДействий = Новый Структура;
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ПересчитыватьСуммуРучнойСкидки", Ложь, Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
ОбрабатываемыеСтроки = Новый Массив;
Для Каждого СтрокаТаблицы Из ТаблицаТоваров Цикл
Если УдалениеОплаты Тогда
СтрокаТЧ = СтрокаТаблицы;
СтрокаТЧ.СуммаБонусныхБалловКСписанию = 0;
СтрокаТЧ.СуммаБонусныхБалловКСписаниюВВалюте = 0;
Иначе
СтрокаТЧ = Объект.Товары.НайтиСтроки(Новый Структура("КлючСвязи", СтрокаТаблицы.КлючСвязи))[0];
СтрокаТЧ.СуммаБонусныхБалловКСписанию = СтрокаТаблицы.СуммаБонусныхБалловКСписанию;
СтрокаТЧ.СуммаБонусныхБалловКСписаниюВВалюте = СтрокаТаблицы.СуммаБонусныхБалловКСписаниюВВалюте;
КонецЕсли;
ОбрабатываемыеСтроки.Добавить(СтрокаТЧ);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьКлючиСвязиВТабличнойЧастиТовары()
СкидкиНаценкиСервер.ЗаполнитьКлючиСвязиВТабличнойЧастиТовары(Объект, "Товары");
КонецПроцедуры
&НаСервере
Функция УчетныйВидЦеныДоговора()
СтруктураПараметров = ЦеныПредприятияЗаполнениеСервер.НовыйПараметрыПроверкиВидаЦенДоговора();
СтруктураПараметров.ПолеВидаЦен = "ВидЦенУчетный";
Если ЗначениеЗаполнено(Объект.Договор) Тогда
ВидЦены = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор, СтруктураПараметров.ПолеВидаЦен);
Если ЗначениеЗаполнено(ВидЦены) Тогда
СтруктураПараметров.ВидЦены = ВидЦены;
СтруктураПараметров.ЦенаВключаетНДС = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ВидЦены, "ЦенаВключаетНДС");
КонецЕсли;
КонецЕсли;
Возврат СтруктураПараметров;
КонецФункции
#КонецОбласти
#Область Серии
&НаСервере
Функция ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор, ЭтоРеализация)
ПараметрыУказанияСерийВФорму = ?(ЭтоРеализация, ПараметрыУказанияСерий.Реализация, ПараметрыУказанияСерий.Заказ);
Возврат НоменклатураСервер.ПараметрыФормыУказанияСерий(Объект,
ПараметрыУказанияСерийВФорму,
ТекущиеДанныеИдентификатор,
ЭтотОбъект,
РеквизитФормыВЗначение("Объект").Метаданные());
КонецФункции
&НаСервере
Процедура ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий, ЭтоРеализация)
ПараметрыУказанияСерийПараметр = ?(ЭтоРеализация, ПараметрыУказанияСерий.Реализация, ПараметрыУказанияСерий.Заказ);
НоменклатураСервер.ОбработатьУказаниеСерий(Объект, ПараметрыУказанияСерийПараметр, ПараметрыФормыУказанияСерий);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения)
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Объект,
ОпределитьПараметрыСерийНаСервере(ТекущаяСтрокаИдентификатор), ТекущаяСтрокаИдентификатор, КэшированныеЗначения);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовСерий()
Элементы.ТоварыСтатусУказанияСерий.Видимость = ПараметрыУказанияСерий.Реализация.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыУказатьСерии.Видимость = ПараметрыУказанияСерий.Реализация.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыКонтекстноеМенюУказатьСерии.Видимость = ПараметрыУказанияСерий.Реализация.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыСерия.Видимость = ПараметрыУказанияСерий.Реализация.ИспользоватьСерииНоменклатуры
Или ПараметрыУказанияСерий.Заказ.ИспользоватьСерииНоменклатуры;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерий()
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект,
Обработки.ПомощникПродаж));
Если ЭтоРеализация(Объект.ВариантОформленияДокументов)
Или ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.Реализация);
Если ЭтоЗаказПлюсРеализацияПередача(Объект.ВариантОформленияДокументов) Тогда
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.Заказ);
КонецЕсли;
Иначе
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.Заказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Функция ОпределитьПараметрыСерийНаКлиенте(ТекущиеДанныеИдентификатор)
Возврат ОпределитьПараметрыСерий(Объект, ПараметрыУказанияСерий, ТекущиеДанныеИдентификатор);
КонецФункции
&НаСервере
Функция ОпределитьПараметрыСерийНаСервере(ТекущиеДанныеИдентификатор)
Возврат ОпределитьПараметрыСерий(Объект, ПараметрыУказанияСерий, ТекущиеДанныеИдентификатор);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ОпределитьПараметрыСерий(Объект, ПараметрыУказанияСерий, ТекущиеДанныеИдентификатор)
Если ТекущиеДанныеИдентификатор <> Неопределено Тогда
ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(ТекущиеДанныеИдентификатор);
Если ЭтоРеализация(ТекущиеДанные.ВариантОформления)
Или ЭтоПередачаТоваров(ТекущиеДанные.ВариантОформления) Тогда
Возврат ПараметрыУказанияСерий.Реализация;
Иначе
Возврат ПараметрыУказанияСерий.Заказ;
КонецЕсли;
Иначе
Возврат ПараметрыУказанияСерий.Реализация
КонецЕсли;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоРеализация(ВариантОформления)
Если ВариантОформления = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг")
Или ВариантОформления = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг") Тогда
Возврат Истина;
Иначе
Возврат Ложь
КонецЕсли;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоПередачаТоваров(ВариантОформления)
Если ВариантОформления = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю")
Или ВариантОформления = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю") Тогда
Возврат Истина;
Иначе
Возврат Ложь
КонецЕсли;
КонецФункции
&НаСервереБезКонтекста
Функция ЭтоЗаказПлюсРеализацияПередача(ВариантОформления)
Возврат ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
Или ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю;
КонецФункции
&НаКлиенте
Процедура ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры()
Если ТекущиеДанныеИдентификатор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(ТекущиеДанныеИдентификатор);
ОткрытьПодборСерий(, ТекущиеДанные);
КонецПроцедуры
#КонецОбласти
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(ДанныеШтрихкодов) Тогда
Возврат;
КонецЕсли;
ИзменятьКоличество = Истина;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
ПараметрыЗаполнитьСтавкуНДС = ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействийСДобавленнымиСтроками = Новый Структура;
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьСклад",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСодержание",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь));
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьУсловияПродаж",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
Иначе
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
Если ЭтоРеализация(Объект.ВариантОформленияДокументов) Или ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьСериюРассчитатьСтатус",
Новый Структура("Склад, ПараметрыУказанияСерий", Объект.Склад, ПараметрыУказанияСерий.Реализация));
ИначеЕсли Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента") Тогда
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьСериюРассчитатьСтатус",
Новый Структура("Склад, ПараметрыУказанияСерий", Объект.Склад, ПараметрыУказанияСерий.Заказ));
КонецЕсли;
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСДобавленнымиСтроками, Объект);
СтруктураДействийСИзмененнымиСтроками = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСИзмененнымиСтроками, Объект);
СтруктураДействий = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов();
СтруктураДействий.Штрихкоды = ДанныеШтрихкодов;
СтруктураДействий.СтруктураДействийСДобавленнымиСтроками = СтруктураДействийСДобавленнымиСтроками;
СтруктураДействий.СтруктураДействийСИзмененнымиСтроками = СтруктураДействийСИзмененнымиСтроками;
СтруктураДействий.ИзменятьКоличество = ИзменятьКоличество;
СтруктураДействий.РассчитыватьНаборы = Истина;
СтруктураДействий.ПараметрыУказанияСерий = ?(Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента"),
ПараметрыУказанияСерий.Заказ,
ПараметрыУказанияСерий.Реализация);
ОбработатьШтрихкодыСервер(СтруктураДействий, КэшированныеЗначения);
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураДействий, КэшированныеЗначения, ЭтотОбъект);
Если ИзменятьКоличество Тогда
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецЕсли;
ПриИзмененииКорзиныНаСервере();
Если ШтрихкодированиеНоменклатурыКлиент.НужноОткрытьФормуУказанияСерийПослеОбработкиШтрихкодов(СтруктураДействий) Тогда
ТекущиеДанныеИдентификатор = СтруктураДействий.МассивСтрокССериями[0];
ПодключитьОбработчикОжидания("ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры", 0.1, Истина);
КонецЕсли;
Если СтруктураДействий.ТекущаяСтрока <> Неопределено Тогда
Элементы.Товары.ТекущаяСтрока = СтруктураДействий.ТекущаяСтрока;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьШтрихкодыСервер(СтруктураПараметровДействия,КэшированныеЗначения)
ДобавитьДействияОбеспеченияНаСервере(
СтруктураПараметровДействия.СтруктураДействийСДобавленнымиСтроками,
"ВариантОбеспечения,СкладОбязателен,ДатаОтгрузкиОбязательна");
ШтрихкодированиеНоменклатурыСервер.ОбработатьШтрихкоды(ЭтотОбъект,Объект,СтруктураПараметровДействия,КэшированныеЗначения);
ЗаполнитьВариантОформленияВТабличнойЧастиСервер(Ложь);
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
ОбеспечениеВДокументахКлиентСервер.УдалитьДействияОбеспечения(СтруктураПараметровДействия.СтруктураДействийСДобавленнымиСтроками);
ОбновитьКолонкуДоступноСервер();
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
ОчиститьСообщения();
Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект);
ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
ОбработатьШтрихкоды(ДанныхШтрихкода);
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект);
Если ТекущаяСтрока <> Неопределено Тогда
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус",
Новый Структура("Склад, ПараметрыУказанияСерий",
ТекущаяСтрока.Склад,
ОпределитьПараметрыСерийНаКлиенте(ТекущаяСтрока.ПолучитьИдентификатор())));
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
ПриИзмененииКорзиныНаСервере();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
#КонецОбласти
#Область СозданиеДокументов
&НаСервере
Функция ЗаписатьЗаказ(МассивНайденныхДокументов, Отказ, БезПроведения)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ЗаказКлиента,
Тип("ДокументСсылка.ЗаказКлиента"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
Если ЭтоОперацияОтгрузкаТоваров(ДокументОбъект.ХозяйственнаяОперация) Тогда
ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиенту;
КонецЕсли;
ОтветственныеЛицаСервер.ОчиститьОтветственногоВДокументе(ДокументОбъект);
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента Тогда
ДокументОбъект.Статус = Объект.СтатусЗаказаКлиента;
Иначе
ПараметрыОтбораПродажа = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
ПараметрыОтбораПередача = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
ПараметрыОтбораЗаказ = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента);
СтрокиПродажи = Объект.Товары.НайтиСтроки(ПараметрыОтбораПродажа);
СтрокиПередачи = Объект.Товары.НайтиСтроки(ПараметрыОтбораПередача);
СтрокиЗаказ = Объект.Товары.НайтиСтроки(ПараметрыОтбораЗаказ);
РеализацияБезПроведения = Объект.СоздаватьПриходныйКассовыйОрдер
И СуммаПредоплатыДоОтгрузки + СуммаАвансаДоОбеспечения > 0
И Не ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация);
КонтролироватьОплату = ПолучитьФункциональнуюОпцию("НеЗакрыватьЗаказыКлиентовБезПолнойОплаты");
КонтролироватьОтгрузку = ПолучитьФункциональнуюОпцию("НеЗакрыватьЗаказыКлиентовБезПолнойОтгрузки");
Если СтрокиЗаказ.Количество() = 0
И НЕ КонтролироватьОплату
И НЕ РеализацияБезПроведения Тогда
Если ИспользоватьРасширенныеВозможностиЗаказаКлиента
И НЕ ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента Тогда
ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.КОтгрузке;
ИначеЕсли ИспользоватьРасширенныеВозможностиЗаказаКлиента Тогда
ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.КОбеспечению;
Иначе
ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован;
КонецЕсли;
ИначеЕсли СтрокиПродажи.Количество() > 0
Или СтрокиПередачи.Количество() > 0 Тогда
Если ИспользоватьРасширенныеВозможностиЗаказаКлиента
И НЕ ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента Тогда
ДокументОбъект.Статус = ?(КонтролироватьОплату
И БезПроведения
И НЕ КонтролироватьОтгрузку,
Перечисления.СтатусыЗаказовКлиентов.Закрыт,
Перечисления.СтатусыЗаказовКлиентов.КОтгрузке);
ИначеЕсли ИспользоватьРасширенныеВозможностиЗаказаКлиента Тогда
ДокументОбъект.Статус = ?(КонтролироватьОплату
И БезПроведения
И НЕ КонтролироватьОтгрузку,
Перечисления.СтатусыЗаказовКлиентов.Закрыт,
Перечисления.СтатусыЗаказовКлиентов.КОбеспечению);
Иначе
ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.НеСогласован;
КонецЕсли;
Иначе
ДокументОбъект.Статус = Объект.СтатусЗаказаКлиента;
КонецЕсли;
СменитьСтатусЗаказа = КонтролироватьОтгрузку
И Объект.СтатусЗаказаКлиента = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
КонецЕсли;
ДокументОбъект.Приоритет = ЗначениеНастроекПовтИсп.ПолучитьПриоритетПоУмолчанию(ДокументОбъект.Приоритет);
ДокументОбъект.Товары.Очистить();
ЗаполнитьВариантОбеспеченияСтроки = Ложь;
Если ИспользоватьРасширенныеВозможностиЗаказаКлиента И НЕ ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента Тогда
Если ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.КОтгрузке Тогда
ВариантОбеспеченияСтроки = Перечисления.ВариантыОбеспечения.Отгрузить;
ЗаполнитьВариантОбеспеченияСтроки = Истина;
ИначеЕсли ДокументОбъект.Статус = Перечисления.СтатусыЗаказовКлиентов.КОбеспечению Тогда
ВариантОбеспеченияСтроки = Перечисления.ВариантыОбеспечения.СоСклада;
ЗаполнитьВариантОбеспеченияСтроки = Истина;
КонецЕсли;
КонецЕсли;
КодСтроки = 0;
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если ТекСтрока.КоличествоУпаковок > 0 Тогда
КодСтроки = КодСтроки + 1;
ТекСтрока.КодСтроки = КодСтроки;
Если ЗаполнитьВариантОбеспеченияСтроки Тогда
ТекСтрока.ВариантОбеспечения = ВариантОбеспеченияСтроки;
КонецЕсли;
НоваяСтрокаТовары = ДокументОбъект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТовары, ТекСтрока);
КонецЕсли;
КонецЦикла;
ДокументОбъект.МаксимальныйКодСтроки = КодСтроки;
ДокументОбъект.СкидкиНаценки.Загрузить(Объект.СкидкиНаценки.Выгрузить());
ДокументОбъект.НачислениеБонусныхБаллов.Загрузить(Объект.НачислениеБонусныхБаллов.Выгрузить());
ДокументОбъект.ЭтапыГрафикаОплаты.Загрузить(Объект.ЭтапыГрафикаОплаты.Выгрузить());
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыЗаказа.Выгрузить());
ПараметрыУказанияСерийЗаказ = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект, Документы.ЗаказКлиента);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерийЗаказ);
Попытка
Если БезПроведения Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(ЭтотОбъект,
ДокументОбъект.Ссылка,
2,
?(ДокументОбъект.Проведен,0,2),
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(СтрокаТаблицы,
ДокументОбъект.Ссылка,
2,
?(ДокументОбъект.Проведен,0,2));
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьЗаявкуНаВозврат(МассивНайденныхДокументов, Склад, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ЭтоОперацияПередачиТоваров = Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ЗаявкаНаВозвратТоваровОтКлиента,
Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
ОтветственныеЛицаСервер.ОчиститьОтветственногоВДокументе(ДокументОбъект);
ДокументОбъект.Склад = Склад;
ДокументОбъект.Статус = Объект.СтатусЗаявкиНаВозвратТоваровОтКлиентов;
ДокументОбъект.Приоритет = ЗначениеНастроекПовтИсп.ПолучитьПриоритетПоУмолчанию(ДокументОбъект.Приоритет);
ДокументОбъект.ХозяйственнаяОперация = ПродажиСервер.ПолучитьХозяйственнуюОперациюВозвратаПоРеализации(
Объект.ХозяйственнаяОперация);
ДокументОбъект.ДатаПоступления = Объект.ДатаОтгрузки;
ДокументОбъект.ПоступлениеОднойДатой = Объект.НеОтгружатьЧастями;
Если ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтКомиссионера Тогда
ДокументОбъект.СпособКомпенсации = Перечисления.СпособыКомпенсацииВозвратовТоваров.ЗаменитьТовары;
ДокументОбъект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПустаяСсылка();
ИначеЕсли ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтХранителя Тогда
ДокументОбъект.СпособКомпенсации = Перечисления.СпособыКомпенсацииВозвратовТоваров.ПустаяСсылка();
ДокументОбъект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПустаяСсылка();
ИначеЕсли ЭтоОперацияПередачиТоваров Тогда
ДокументОбъект.СпособКомпенсации = Перечисления.СпособыКомпенсацииВозвратовТоваров.ЗаменитьТовары;
Иначе
ДокументОбъект.СпособКомпенсации = Перечисления.СпособыКомпенсацииВозвратовТоваров.ВернутьДенежныеСредства;
КонецЕсли;
Если (ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратОтХранителя
ИЛИ Объект.КомиссионныеПродажи25)
И ЗначениеЗаполнено(Склад)
И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Склад, "ЭтоГруппа") Тогда
ДокументОбъект.Склад = Справочники.Склады.ПустаяСсылка();
КонецЕсли;
ДокументОбъект.ВозвращаемыеТовары.Очистить();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
КодСтроки = 0;
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если ТекСтрока.КоличествоУпаковокКВозврату > 0 Тогда
КодСтроки = КодСтроки + 1;
ТекСтрока.КодСтроки = КодСтроки;
НоваяСтрокаТовары = ДокументОбъект.ВозвращаемыеТовары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрокаТовары, ТекСтрока);
НоваяСтрокаТовары.ДатаПоступления = ?(ДокументОбъект.ПоступлениеОднойДатой,
Объект.ДатаОтгрузки,
ТекСтрока.ДатаОтгрузки);
НоваяСтрокаТовары.Количество = ТекСтрока.КоличествоКВозврату;
НоваяСтрокаТовары.КоличествоУпаковок = ТекСтрока.КоличествоУпаковокКВозврату;
КонецЕсли;
КонецЦикла;
ПродажиСервер.ЗаполнитьРеализацииИЦены(ДокументОбъект, "ВозвращаемыеТовары");
СтруктураПоиска = Новый Структура("Номенклатура, Характеристика, Упаковка");
Для Каждого ТекСтрока Из ДокументОбъект.ВозвращаемыеТовары Цикл
Если ТекСтрока.Цена = 0 Тогда
ЗаполнитьЗначенияСвойств(СтруктураПоиска, ТекСтрока);
НайденныеСтроки = Объект.Товары.НайтиСтроки(СтруктураПоиска);
Если НайденныеСтроки.Количество() > 0 Тогда
ТекСтрока.Цена = НайденныеСтроки[0].Цена;
ТекстОшибки = НСтр("ru = 'Не удалось найти документ реализации для ""%1"" (строка %2). Цена товара будет получена из Помощника продаж.'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ТекстОшибки, ДокументОбъект, ТекСтрока.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(ДокументОбъект.ВозвращаемыеТовары, СтруктураДействий, Неопределено);
ДокументОбъект.ВозвращаемыеТоварыМаксимальныйКодСтроки = КодСтроки;
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыЗаявки.Выгрузить());
ПараметрыУказанияСерийЗаявка = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект, Документы.ЗаявкаНаВозвратТоваровОтКлиента);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерийЗаявка.Возвращаемые);
Попытка
Если ЗначениеЗаполнено(ДокументОбъект.Склад) Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(ЭтотОбъект,
ДокументОбъект.Ссылка,
2,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(СтрокаТаблицы,
ДокументОбъект.Ссылка,
2);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьРеализацию(МассивНайденныхДокументов, Товары, Отказ, БезПроведения = Ложь)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.РеализацияТоваровУслуг,
Тип("ДокументСсылка.РеализацияТоваровУслуг"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ДокументОбъект.РеализацияПоЗаказам = Ложь;
ДокументОбъект.ЗаказКлиента = Неопределено;
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
ОтветственныеЛицаСервер.ОчиститьОтветственногоВДокументе(ДокументОбъект);
ДокументОбъект.ВалютаВзаиморасчетов = ДокументОбъект.Валюта;
ДокументОбъект.БанковскийСчетОрганизации = Объект.БанковскийСчет;
Если ДокументОбъект.ВернутьМногооборотнуюТару Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Соглашение, "РассчитыватьДатуВозвратаТарыПоКалендарю, КалендарьВозвратаТары");
Если Не ИспользоватьСоглашенияСКлиентами Тогда
РеквизитыСоглашения.Вставить("РассчитыватьДатуВозвратаТарыПоКалендарю", Ложь);
КонецЕсли;
ДокументОбъект.ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ДокументОбъект,
Объект.СрокВозвратаМногооборотнойТары,
РеквизитыСоглашения.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыСоглашения.КалендарьВозвратаТары);
КонецЕсли;
Если ИспользоватьСтатусыРеализацийТоваровУслуг Тогда
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности
И Объект.СтатусРеализацииТоваровУслуг = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено Тогда
ДокументОбъект.Статус = Перечисления.СтатусыРеализацийТоваровУслуг.ВПути;
Иначе
ДокументОбъект.Статус = Объект.СтатусРеализацииТоваровУслуг;
КонецЕсли;
Иначе
ДокументОбъект.Статус = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено;
КонецЕсли;
ПараметрыОтбораАктНаПередачу = Новый Структура(
"ВариантОформленияПродажи,ВариантОформления",
Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав,
Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг);
ТоварыСАктом = Объект.Товары.Выгрузить(ПараметрыОтбораАктНаПередачу);
ДокументОбъект.ВариантОформленияПродажи = ?(ТоварыСАктом.Количество() = Объект.Товары.Количество(),
Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав,
Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг);
ДокументОбъект.Товары.Загрузить(Товары);
ДокументОбъект.НачислениеБонусныхБаллов.Загрузить(Объект.НачислениеБонусныхБаллов.Выгрузить());
ДокументОбъект.ЭтапыГрафикаОплаты.Загрузить(Объект.ЭтапыГрафикаОплаты.Выгрузить());
ДокументОбъект.Серии.Очистить();
ДокументОбъект.СкидкиНаценки.Очистить();
Для Каждого СтрокаСкидкиОбъекта Из Объект.СкидкиНаценки Цикл
Если ДокументОбъект.Товары.Найти(СтрокаСкидкиОбъекта.КлючСвязи, "КлючСвязи") <> Неопределено Тогда
СтрокаСкидки = ДокументОбъект.СкидкиНаценки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСкидки, СтрокаСкидкиОбъекта);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаСерииОбъекта Из Объект.Серии Цикл
Если ДокументОбъект.Товары.Найти(СтрокаСерииОбъекта.Номенклатура, "Номенклатура") <> Неопределено Тогда
СтрокаСерии = ДокументОбъект.Серии.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСерии, СтрокаСерииОбъекта);
КонецЕсли;
КонецЦикла;
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыРеализации.Выгрузить());
ПараметрыУказанияСерийРеализация = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект, Документы.РеализацияТоваровУслуг);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерийРеализация);
Попытка
Если БезПроведения Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
3,
?(ДокументОбъект.Проведен,0,2),
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
3,
?(ДокументОбъект.Проведен,0,2));
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьПередачуТоваровХранителю(МассивНайденныхДокументов, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ПередачаТоваровХранителю,
Тип("ДокументСсылка.ПередачаТоваровХранителю"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ДокументОбъект.ПередачаПоЗаказам = Ложь;
ДокументОбъект.ЗаказКлиента = Неопределено;
ДокументОбъект.БанковскийСчетОрганизации = Объект.БанковскийСчет;
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
Если ДокументОбъект.ВернутьМногооборотнуюТару Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Соглашение,
"РассчитыватьДатуВозвратаТарыПоКалендарю, КалендарьВозвратаТары");
Если Не ИспользоватьСоглашенияСКлиентами Тогда
РеквизитыСоглашения.Вставить("РассчитыватьДатуВозвратаТарыПоКалендарю", Ложь);
КонецЕсли;
ДокументОбъект.ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(ДокументОбъект,
Объект.СрокВозвратаМногооборотнойТары,
РеквизитыСоглашения.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыСоглашения.КалендарьВозвратаТары);
КонецЕсли;
ДокументОбъект.Товары.Загрузить(Объект.Товары.Выгрузить());
ДокументОбъект.Серии.Загрузить(Объект.Серии.Выгрузить());
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыРеализации.Выгрузить());
ПараметрыУказанияСерийПередачи = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.ПередачаТоваровХранителю);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерийПередачи);
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(ЭтотОбъект,
ДокументОбъект.Ссылка,
3,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(СтрокаТаблицы,
ДокументОбъект.Ссылка,
3);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьРеализациюПоЗаказу(МассивНайденныхДокументов, ОснованиеОбъект, Товары, Склад, Отказ, БезПроведения = Ложь, БезСменыСтатусаЗаказа = Ложь)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.РеализацияТоваровУслуг,
Тип("ДокументСсылка.РеализацияТоваровУслуг"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, ,
"Дата,СпособДоставки,ЗонаДоставки,ПеревозчикПартнер,АдресДоставкиПеревозчика,,АдресДоставкиПеревозчикаЗначенияПолей,ВремяДоставкиС,ВремяДоставкиПо,ДополнительнаяИнформацияПоДоставке");
ДокументОбъект.Склад = Склад;
ДокументОбъект.ВалютаВзаиморасчетов = ДокументОбъект.Валюта;
ДокументОбъект.ЗаказКлиента = ОснованиеОбъект.Ссылка;
ДокументОбъект.БанковскийСчетОрганизации = Объект.БанковскийСчет;
ДокументОбъект.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз;
ЗаполнитьРеквизитыДоставкиПоОснованию(ДокументОбъект, ОснованиеОбъект.Ссылка);
ОтветственныеЛицаСервер.ОчиститьОтветственногоВДокументе(ДокументОбъект);
ПараметрыОтбораАктНаПередачу = Новый Структура(
"ВариантОформленияПродажи",
Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав);
ТоварыСАктом = Товары.НайтиСтроки(ПараметрыОтбораАктНаПередачу);
ДокументОбъект.ВариантОформленияПродажи = ?(ТоварыСАктом.Количество() = Товары.Количество(),
Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав,
Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг);
Если ДокументОбъект.ВернутьМногооборотнуюТару Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Соглашение, "РассчитыватьДатуВозвратаТарыПоКалендарю, КалендарьВозвратаТары");
Если Не ИспользоватьСоглашенияСКлиентами Тогда
РеквизитыСоглашения.Вставить("РассчитыватьДатуВозвратаТарыПоКалендарю", Ложь);
КонецЕсли;
ДокументОбъект.ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(
ДокументОбъект,
Объект.СрокВозвратаМногооборотнойТары,
РеквизитыСоглашения.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыСоглашения.КалендарьВозвратаТары);
КонецЕсли;
Если ИспользоватьСтатусыРеализацийТоваровУслуг Тогда
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности
И Объект.СтатусРеализацииТоваровУслуг = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено Тогда
ДокументОбъект.Статус = Перечисления.СтатусыРеализацийТоваровУслуг.ВПути;
ИначеЕсли ПолучитьФункциональнуюОпцию("НеЗакрыватьЗаказыКлиентовБезПолнойОтгрузки") Тогда
ДокументОбъект.Статус = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено;
Иначе
ДокументОбъект.Статус = Объект.СтатусРеализацииТоваровУслуг;
КонецЕсли;
Иначе
ДокументОбъект.Статус = Перечисления.СтатусыРеализацийТоваровУслуг.Отгружено;
КонецЕсли;
ДокументОбъект.РеализацияПоЗаказам = Истина;
ДокументОбъект.Товары.Загрузить(Товары);
Для Каждого ТекСтрока Из ДокументОбъект.Товары Цикл
ТекСтрока.ЗаказКлиента = ДокументОбъект.ЗаказКлиента;
ТекСтрока.СуммаВзаиморасчетов = ТекСтрока.СуммаСНДС;
КонецЦикла;
ДокументОбъект.СкидкиНаценки.Загрузить(Объект.СкидкиНаценки.Выгрузить());
Для Каждого СтрокаСкидкиЗаказа Из ОснованиеОбъект.СкидкиНаценки Цикл
Если ДокументОбъект.Товары.Найти(СтрокаСкидкиЗаказа.КлючСвязи, "КлючСвязи") <> Неопределено Тогда
СтрокаСкидки = ДокументОбъект.СкидкиНаценки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСкидки, СтрокаСкидкиЗаказа);
КонецЕсли;
КонецЦикла;
ДокументОбъект.НачислениеБонусныхБаллов.Загрузить(Объект.НачислениеБонусныхБаллов.Выгрузить());
ДокументОбъект.ЭтапыГрафикаОплаты.Загрузить(Объект.ЭтапыГрафикаОплаты.Выгрузить());
ОбщаяСуммаПредоплаты = СуммаПредоплатыДоОтгрузки + СуммаАвансаДоОбеспечения;
Если НЕ БезПроведения И Объект.СоздаватьПриходныйКассовыйОрдер И ОбщаяСуммаПредоплаты
И (Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным
ИЛИ Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоЗаказамНакладным) Тогда
НовСтр = ДокументОбъект.РасшифровкаПлатежа.Добавить();
НовСтр.Сумма = ОбщаяСуммаПредоплаты;
НовСтр.СуммаВзаиморасчетов = ОбщаяСуммаПредоплаты;
НовСтр.ВалютаВзаиморасчетов = Объект.ВалютаВзаиморасчетов;
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным Тогда
НовСтр.ОбъектРасчетов = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(Объект.Договор,Объект.Организация,Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом);
Иначе
НовСтр.ОбъектРасчетов = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(ОснованиеОбъект.Ссылка,Объект.Организация,Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом);
КонецЕсли;
КонецЕсли;
ПараметрыОтбораПродажа = Новый Структура("ВариантОформления", Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
ДокументОбъект.Серии.Загрузить(Объект.Серии.Выгрузить(Объект.Серии.НайтиСтроки(ПараметрыОтбораПродажа)));
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыРеализации.Выгрузить());
ПараметрыУказанияСерийРеализация = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект, Документы.РеализацияТоваровУслуг);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерийРеализация);
ДополненныеПараметры = ВзаиморасчетыСервер.ДополненныеПараметрыМеханизма(ДокументОбъект);
ВзаиморасчетыСервер.ЗаполнитьВозможныеАвансыВНакладной(ДокументОбъект, ДополненныеПараметры.МассивПараметров[0]);
Попытка
Если БезПроведения Тогда
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);
Иначе
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
3,
?(ДокументОбъект.Проведен,0,2),
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
3,
?(ДокументОбъект.Проведен,0,2));
КонецЕсли;
Если СменитьСтатусЗаказа И НЕ БезСменыСтатусаЗаказа Тогда
Заказ = ДокументОбъект.ЗаказКлиента.ПолучитьОбъект();
Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
Заказ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьПередачуТоваровПоЗаказу(МассивНайденныхДокументов, ОснованиеОбъект, Товары, Склад, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ПередачаТоваровХранителю,
Тип("ДокументСсылка.ПередачаТоваровХранителю"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ИсключаемыеСвойства = "Дата, СпособДоставки, ЗонаДоставки, ПеревозчикПартнер, АдресДоставкиПеревозчика,
|АдресДоставкиПеревозчикаЗначенияПолей, ВремяДоставкиС, ВремяДоставкиПо, ДополнительнаяИнформацияПоДоставке";
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , ИсключаемыеСвойства);
ДокументОбъект.ПередачаПоЗаказам = Истина;
ДокументОбъект.ЗаказКлиента = ОснованиеОбъект.Ссылка;
ДокументОбъект.Склад = Склад;
ДокументОбъект.БанковскийСчетОрганизации = Объект.БанковскийСчет;
ДокументОбъект.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз;
ЗаполнитьРеквизитыДоставкиПоОснованию(ДокументОбъект, ОснованиеОбъект.Ссылка);
Если ДокументОбъект.ВернутьМногооборотнуюТару Тогда
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Соглашение,
"РассчитыватьДатуВозвратаТарыПоКалендарю, КалендарьВозвратаТары");
Если Не ИспользоватьСоглашенияСКлиентами Тогда
РеквизитыСоглашения.Вставить("РассчитыватьДатуВозвратаТарыПоКалендарю", Ложь);
КонецЕсли;
ДокументОбъект.ДатаВозвратаМногооборотнойТары = МногооборотнаяТараСервер.РассчитатьДатуВозвратаМногооборотнойТары(ДокументОбъект,
Объект.СрокВозвратаМногооборотнойТары,
РеквизитыСоглашения.РассчитыватьДатуВозвратаТарыПоКалендарю,
РеквизитыСоглашения.КалендарьВозвратаТары);
КонецЕсли;
ДокументОбъект.Товары.Загрузить(Товары);
Для Каждого ТекСтрока Из ДокументОбъект.Товары Цикл
ТекСтрока.ЗаказКлиента = ДокументОбъект.ЗаказКлиента;
КонецЦикла;
ПараметрыОтбораПередачи = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
ДокументОбъект.Серии.Загрузить(Объект.Серии.Выгрузить(Объект.Серии.НайтиСтроки(ПараметрыОтбораПередачи)));
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыРеализации.Выгрузить());
ПараметрыУказанияСерийПередачи = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.ПередачаТоваровХранителю);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(ДокументОбъект, ПараметрыУказанияСерийПередачи);
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов( ЭтотОбъект,
ДокументОбъект.Ссылка,
3,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(СтрокаТаблицы,
ДокументОбъект.Ссылка,
3);
КонецЕсли;
Если СменитьСтатусЗаказа Тогда
Заказ = ДокументОбъект.ЗаказКлиента.ПолучитьОбъект();
Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
Заказ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьАкт(МассивНайденныхДокументов, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.АктВыполненныхРабот,
Тип("ДокументСсылка.АктВыполненныхРабот"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ДокументОбъект.АктПоЗаказам = Ложь;
ДокументОбъект.ЗаказКлиента = Неопределено;
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
ДокументОбъект.ВалютаВзаиморасчетов = ДокументОбъект.Валюта;
ДокументОбъект.БанковскийСчетОрганизации = Объект.БанковскийСчет;
ДокументОбъект.Услуги.Загрузить(Объект.Товары.Выгрузить());
ДокументОбъект.СкидкиНаценки.Загрузить(Объект.СкидкиНаценки.Выгрузить());
ДокументОбъект.НачислениеБонусныхБаллов.Загрузить(Объект.НачислениеБонусныхБаллов.Выгрузить());
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыАкта.Выгрузить());
ДокументОбъект.ЭтапыГрафикаОплаты.Загрузить(Объект.ЭтапыГрафикаОплаты.Выгрузить());
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
4,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
4);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьАктПоЗаказу(МассивНайденныхДокументов, ОснованиеОбъект, Работы, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.АктВыполненныхРабот,
Тип("ДокументСсылка.АктВыполненныхРабот"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
ДокументОбъект.ВалютаВзаиморасчетов = ДокументОбъект.Валюта;
ДокументОбъект.ЗаказКлиента = ОснованиеОбъект.Ссылка;
ДокументОбъект.АктПоЗаказам = Истина;
ДокументОбъект.БанковскийСчетОрганизации = Объект.БанковскийСчет;
ДокументОбъект.Услуги.Загрузить(Работы);
Для Каждого ТекСтрока Из ДокументОбъект.Услуги Цикл
ТекСтрока.ЗаказКлиента = ДокументОбъект.ЗаказКлиента;
ТекСтрока.СуммаВзаиморасчетов = ТекСтрока.СуммаСНДС;
КонецЦикла;
ДокументОбъект.СкидкиНаценки.Загрузить(Объект.СкидкиНаценки.Выгрузить());
ДокументОбъект.НачислениеБонусныхБаллов.Загрузить(Объект.НачислениеБонусныхБаллов.Выгрузить());
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыАкта.Выгрузить());
ДокументОбъект.ЭтапыГрафикаОплаты.Загрузить(Объект.ЭтапыГрафикаОплаты.Выгрузить());
Для Каждого СтрокаСкидкиЗаказа Из Объект.СкидкиНаценки Цикл
Если ДокументОбъект.Услуги.Найти(ТекСтрока.КлючСвязи, "КлючСвязи") <> Неопределено Тогда
СтрокаСкидки = ДокументОбъект.СкидкиНаценки.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаСкидки, СтрокаСкидкиЗаказа);
КонецЕсли;
КонецЦикла;
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
4,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
4);
КонецЕсли;
Если СменитьСтатусЗаказа Тогда
Заказ = ДокументОбъект.ЗаказКлиента.ПолучитьОбъект();
Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
Заказ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьСчетНаОплату(МассивНайденныхДокументов, ОснованиеОбъект, ЭтапыГрафикаОплаты, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.СчетНаОплатуКлиенту,
Тип("ДокументСсылка.СчетНаОплатуКлиенту"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
ДокументОбъект.ДокументОснование = ОснованиеОбъект.Ссылка;
ДокументОбъект.ЭтапыГрафикаОплаты.Очистить();
Для Каждого ЭтапГрафика Из ЭтапыГрафикаОплаты Цикл
Если ЭтапГрафика.СуммаПлатежа > 0 Тогда
НовыйЭтап = ДокументОбъект.ЭтапыГрафикаОплаты.Добавить();
НовыйЭтап.ДатаПлатежа = ЭтапГрафика.ДатаПлатежа;
НовыйЭтап.ПроцентПлатежа = ЭтапГрафика.ПроцентПлатежа;
НовыйЭтап.СуммаПлатежа = ЭтапГрафика.СуммаПлатежа;
НовыйЭтап.ЭтоЗалогЗаТару = Ложь;
КонецЕсли;
Если ТипЗнч(ОснованиеОбъект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") И ЭтапГрафика.СуммаЗалогаЗаТару > 0 Тогда
НовыйЭтап = ДокументОбъект.ЭтапыГрафикаОплаты.Добавить();
НовыйЭтап.ДатаПлатежа = ЭтапГрафика.ДатаПлатежа;
НовыйЭтап.ПроцентПлатежа = 0;
НовыйЭтап.СуммаПлатежа = ЭтапГрафика.СуммаЗалогаЗаТару;
НовыйЭтап.ЭтоЗалогЗаТару = Истина;
КонецЕсли;
КонецЦикла;
ДокументОбъект.СуммаДокумента = Документы.СчетНаОплатуКлиенту.ПолучитьСуммуДокументаОснования(ОснованиеОбъект.Ссылка);
ДокументОбъект.НазначениеПлатежа = Документы.СчетНаОплатуКлиенту.СформироватьНазначениеПлатежа(
ОснованиеОбъект.Номер,
ОснованиеОбъект.Ссылка);
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
6,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
6);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьДоверенностьНаПолучениеДС(МассивНайденныхДокументов, ОснованиеОбъект, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ДоверенностьВыданная,
Тип("ДокументСсылка.ДоверенностьВыданная"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ДокументОбъект.Заполнить(ОснованиеОбъект.Ссылка);
Если Не ЗначениеЗаполнено(ДокументОбъект.БанковскийСчет) И ЗначениеЗаполнено(Объект.БанковскийСчет) Тогда
ДокументОбъект.БанковскийСчет = Объект.БанковскийСчет;
КонецЕсли;
Если ДокументОбъект.ФизЛицо.Пустая() Тогда
ТекстОшибки = НСтр("ru = 'Не удалось создать доверенность: нет данных физического лица.'");
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение,"Объект",ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
Возврат ДокументОбъект;
КонецЕсли;
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
9,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
9);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьПриходныйКассовыйОрдер(МассивНайденныхДокументов, ОснованиеОбъект, Отказ)
СуммаПКО = 0;
НайденныеСтроки = Объект.ЭтапыГрафикаОплаты.НайтиСтроки(Новый Структура("ДатаПлатежа", НачалоДня(Объект.Дата)));
Если НайденныеСтроки.Количество() = 0 Тогда
Возврат Неопределено;
Иначе
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
СуммаПКО = СуммаПКО + ТекСтрока.СуммаПлатежа + ТекСтрока.СуммаЗалогаЗаТару;
КонецЦикла;
КонецЕсли;
Если СуммаПКО = 0 Тогда
Возврат Неопределено;
КонецЕсли;
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ПриходныйКассовыйОрдер,
Тип("ДокументСсылка.ПриходныйКассовыйОрдер"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
Если ТипЗнч(ОснованиеОбъект) <> Тип("Массив") Тогда
ДокументОбъект.ДокументОснование = ОснованиеОбъект.Ссылка;
КонецЕсли;
РеквизитыКонтрагента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(
Объект.Контрагент,
"Наименование,НаименованиеПолное");
Если Не ПустаяСтрока(РеквизитыКонтрагента.НаименованиеПолное) Тогда
ДокументОбъект.ПринятоОт = РеквизитыКонтрагента.НаименованиеПолное;
Иначе
ДокументОбъект.ПринятоОт = РеквизитыКонтрагента.Наименование;
КонецЕсли;
ДокументОбъект.Валюта = Справочники.Кассы.ПолучитьРеквизитыКассы(ДокументОбъект.Касса).Валюта;
ДокументОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПоступлениеОплатыОтКлиента;
ДокументОбъект.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ПоступлениеОплатыОтКлиента;
ДокументОбъект.РасшифровкаПлатежа.Очистить();
ДопКритерий = ОбъектыРасчетовСервер.ДополнительныеКритерииПоиска();
ДопКритерий.ВернутьПервый = Ложь;
Если ТипЗнч(ОснованиеОбъект) <> Тип("Массив") Тогда
НоваяСтрока = ДокументОбъект.РасшифровкаПлатежа.Добавить();
НоваяСтрока.Партнер = ОснованиеОбъект.Партнер;
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов
ИЛИ Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамНакладным Тогда
НоваяСтрока.ОснованиеПлатежа = ОснованиеОбъект.Договор;
НоваяСтрока.ОбъектРасчетов = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(ОснованиеОбъект.Договор,,Перечисления.ТипыРасчетовСПартнерами.РасчетыСКлиентом, ДопКритерий);
Иначе
НоваяСтрока.ОснованиеПлатежа = ОснованиеОбъект.Ссылка;
НоваяСтрока.ОбъектРасчетов = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(ОснованиеОбъект.Ссылка,,, ДопКритерий);
КонецЕсли;
НоваяСтрока.ВалютаВзаиморасчетов = ОснованиеОбъект.Валюта;
НоваяСтрока.СуммаВзаиморасчетов = СуммаПКО;
НоваяСтрока.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ПоступлениеОплатыОтКлиента;
Иначе
Для Каждого ПродажаОбъект Из ОснованиеОбъект Цикл
НоваяСтрока = ДокументОбъект.РасшифровкаПлатежа.Добавить();
НоваяСтрока.Партнер = ПродажаОбъект.Партнер;
НоваяСтрока.ОснованиеПлатежа = ПродажаОбъект.Ссылка;
НоваяСтрока.ОбъектРасчетов = ОбъектыРасчетовСервер.ПолучитьОбъектРасчетовПоСсылке(ПродажаОбъект.Ссылка,,, ДопКритерий);
НоваяСтрока.ВалютаВзаиморасчетов = ПродажаОбъект.Валюта;
ЭтапыПредоплаты = ПродажаОбъект.ЭтапыГрафикаОплаты.Выгрузить(Новый Структура("ВариантОплаты",Перечисления.ВариантыКонтроляОплатыКлиентом.ПредоплатаДоОтгрузки));
НоваяСтрока.СуммаВзаиморасчетов = ЭтапыПредоплаты.Итог("СуммаПлатежа");
НоваяСтрока.СтатьяДвиженияДенежныхСредств = Справочники.СтатьиДвиженияДенежныхСредств.ПоступлениеОплатыОтКлиента;
КонецЦикла;
КонецЕсли;
Коэффициенты = РаботаСКурсамивалютУТ.ПолучитьКоэффициентыПересчетаВалюты(ДокументОбъект.Валюта, Объект.Валюта, ТекущаяДатаСеанса(), Объект.Организация);
НоваяСтрока.Сумма = ?(Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов <> 0, НоваяСтрока.СуммаВзаиморасчетов / Коэффициенты.КоэффициентПересчетаВВалютуВзаиморасчетов, 0);
ДокументОбъект.СуммаДокумента = ДокументОбъект.РасшифровкаПлатежа.Итог("Сумма");
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
7,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
7);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Процедура СоздатьСчетФактуру(МассивНайденныхДокументов, ОснованиеОбъект, Отказ)
Если Объект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС Тогда
Возврат;
КонецЕсли;
ЮрФизЛицо = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ОснованиеОбъект.Контрагент, "ЮрФизЛицо");
Если ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо Тогда
Возврат;
КонецЕсли;
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ИмяДокумента = УчетНДСУП.ПолноеИмяСчетФактурыВыданный();
Если ЗначениеЗаполнено(ИмяДокумента) Тогда
МенеджерДокумента = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени(ИмяДокумента);
ТипДокумента = Тип(СтрЗаменить(ИмяДокумента, "Документ", "ДокументСсылка"));
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
МенеджерДокумента,
ТипДокумента,
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ПараметрыРегистрации = УчетНДСУПКлиентСервер.ПараметрыРегистрацииСчетовФактурВыданных();
ПараметрыРегистрации.Ссылка = ОснованиеОбъект.Ссылка;
ПараметрыРегистрации.Дата = ОснованиеОбъект.Дата;
ПараметрыРегистрации.Организация = ОснованиеОбъект.Организация;
ПараметрыРегистрации.Контрагент = ОснованиеОбъект.Контрагент;
ПараметрыРегистрации.НалогообложениеНДС = ОснованиеОбъект.НалогообложениеНДС;
ПараметрыРегистрации.РеализацияТоваров = Истина;
ПараметрыРегистрации.РеализацияРаботУслуг = Истина;
ПараметрыРегистрации.ПереходПраваСобственности = Ложь;
ПараметрыРегистрации.НачислениеНДСПриОтгрузке = Ложь;
Если ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ОснованиеОбъект, "ХозяйственнаяОперация") = Истина Тогда
ПараметрыРегистрации.ПереходПраваСобственности = (ОснованиеОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПереходПраваСобственности);
ПараметрыРегистрации.НачислениеНДСПриОтгрузке = (ОснованиеОбъект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОтгрузкаТоваровКлиенту);
КонецЕсли;
СчетаФактурыВыданныеНаОсновании = УчетНДСУП.СчетаФактурыВыданныеНаОсновании(ПараметрыРегистрации);
Если Не СчетаФактурыВыданныеНаОсновании.ЕстьПравоИнтерактивногоДобавленияДокументаПоОснованию
Или Не СчетаФактурыВыданныеНаОсновании.ДокументПоОснованиюТребуется Тогда
Возврат;
КонецЕсли;
Результат = УчетНДСУП.ЗаполнитьСчетФактураВыданный(ДокументОбъект, ПараметрыРегистрации);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ДокументОбъект.Ссылка,
5,
?(ДокументОбъект.Проведен,0,2),
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокаТаблицы,
ДокументОбъект.Ссылка,
5,
?(ДокументОбъект.Проведен,0,2));
КонецЕсли;
Если НЕ Результат.Проведен Тогда
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение,"Объект", Результат.СообщениеОбОшибке, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаписатьТранспортнуюНакладную(МассивНайденныхДокументов, Основания, Отказ)
СпособыДоставкиДоКлиентаСНашимУчастием = ДоставкаТоваровКлиентСервер.СпособыДоставкиДоКлиентаСНашимУчастием(
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками"));
МассивРаспоряжений = Новый Массив;
Если ТипЗнч(Основания) = Тип("Массив") Тогда
Для каждого Элемент Из Основания Цикл
Если СпособыДоставкиДоКлиентаСНашимУчастием.Найти(Элемент.СпособДоставки) = Неопределено Тогда
МассивРаспоряжений.Добавить(Элемент.Ссылка);
КонецЕсли;
КонецЦикла;
Иначе
Если СпособыДоставкиДоКлиентаСНашимУчастием.Найти(Основания.СпособДоставки) = Неопределено Тогда
МассивРаспоряжений.Добавить(Основания.Ссылка);
КонецЕсли;
КонецЕсли;
Если МассивРаспоряжений.Количество() = 0 Тогда
Возврат;
КонецЕсли;
РезультатПроверки = Документы.ТранспортнаяНакладная.ПроверитьДокументыОснования(МассивРаспоряжений);
МассивОснованийТранспортнойНакладной = РезультатПроверки.ОбъектыПоКоторымМожноИНужноСоздатьТранспортныеНакладные;
Если МассивОснованийТранспортнойНакладной.Количество() Тогда
Попытка
СозданныеТранспортныеНакладные = Документы.ТранспортнаяНакладная.СоздатьТранспортныеНакладные(
МассивОснованийТранспортнойНакладной);
Для каждого Элемент Из СозданныеТранспортныеНакладные Цикл
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
Элемент.Ссылка,
8,
,
ДоступнаПечатьКомплекта(Элемент.Ссылка));
МассивНайденныхДокументов.Добавить(Элемент.Ссылка);
КонецЦикла;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
ИначеЕсли РезультатПроверки.ОбъектыПоКоторымНакладныеУжеСозданы.Количество() = 0 Тогда
Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка = Ложь;
СоздаватьТранспортнуюНакладную = Ложь;
КонецЕсли;
Возврат;
КонецПроцедуры
&НаСервере
Функция ЗаписатьОтгрузкуТоваровКлиенту(МассивНайденныхДокументов, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ОтгрузкаТоваровКлиенту,
Тип("ДокументСсылка.ОтгрузкаТоваровКлиенту"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , "Дата");
ДокументОбъект.Товары.Загрузить(Объект.Товары.Выгрузить());
ДокументОбъект.Серии.Загрузить(Объект.Серии.Выгрузить());
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыОтгрузкиТоваров.Выгрузить());
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.ОтгрузкаТоваровКлиенту);
НоменклатураСервер.ЗаполнитьСерииПоFEFO(ДокументОбъект, ПараметрыУказанияСерий, Ложь);
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(ЭтотОбъект,
ДокументОбъект.Ссылка,
3,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(СтрокаТаблицы,
ДокументОбъект.Ссылка,
3);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
&НаСервере
Функция ЗаписатьОтгрузкуТоваровКлиентуПоЗаказу(МассивНайденныхДокументов, ОснованиеОбъект, Товары, Склад, Отказ)
СозданНовыйДокумент = Ложь;
СтрокаТаблицы = Неопределено;
ДокументОбъект = Продажи.НайтиСоздатьДокумент(ЭтотОбъект,
Документы.ОтгрузкаТоваровКлиенту,
Тип("ДокументСсылка.ОтгрузкаТоваровКлиенту"),
МассивНайденныхДокументов,
СозданНовыйДокумент,
СтрокаТаблицы);
ИсключаемыеСвойства = "Дата, СпособДоставки, ЗонаДоставки, ПеревозчикПартнер, АдресДоставкиПеревозчика,
|АдресДоставкиПеревозчикаЗначенияПолей, ВремяДоставкиС, ВремяДоставкиПо, ДополнительнаяИнформацияПоДоставке";
ЗаполнитьЗначенияСвойств(ДокументОбъект, Объект, , ИсключаемыеСвойства);
ДокументОбъект.ОтгрузкаПоЗаказам = Истина;
ДокументОбъект.ЗаказКлиента = ОснованиеОбъект.Ссылка;
ДокументОбъект.Склад = Склад;
ДокументОбъект.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз;
ДокументОбъект.БанковскийСчетОрганизации = Объект.БанковскийСчет;
ДокументОбъект.Товары.Загрузить(Товары);
Для Каждого ТекСтрока Из ДокументОбъект.Товары Цикл
ТекСтрока.ЗаказКлиента = ДокументОбъект.ЗаказКлиента;
КонецЦикла;
ДокументОбъект.ДополнительныеРеквизиты.Загрузить(Объект.ДополнительныеРеквизитыОтгрузкиТоваров.Выгрузить());
ПараметрыОтбораПередачи = Новый Структура("ВариантОформления",
Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
ДокументОбъект.Серии.Загрузить(Объект.Серии.Выгрузить(Объект.Серии.НайтиСтроки(ПараметрыОтбораПередачи)));
ПараметрыУказанияСерий = НоменклатураСервер.ПараметрыУказанияСерий(ДокументОбъект,
Документы.ОтгрузкаТоваровКлиенту);
НоменклатураСервер.ЗаполнитьСерииПоFEFO(ДокументОбъект, ПараметрыУказанияСерий, Ложь);
Попытка
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СозданНовыйДокумент Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов( ЭтотОбъект,
ДокументОбъект.Ссылка,
3,
,
ДоступнаПечатьКомплекта(ДокументОбъект.Ссылка));
МассивНайденныхДокументов.Добавить(ДокументОбъект.Ссылка);
ИначеЕсли СтрокаТаблицы <> Неопределено Тогда
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(СтрокаТаблицы,
ДокументОбъект.Ссылка,
3);
КонецЕсли;
Если СменитьСтатусЗаказа Тогда
Заказ = ДокументОбъект.ЗаказКлиента.ПолучитьОбъект();
Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.Закрыт;
Заказ.Записать(РежимЗаписиДокумента.Проведение);
КонецЕсли;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
ТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Сообщение = Неопределено;
ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Сообщение, "Объект", ТекстОшибки, "");
ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Сообщение, Отказ);
КонецПопытки;
Возврат ДокументОбъект;
КонецФункции
#КонецОбласти
&НаСервере
Функция РазбитьТоварыПоТипамНалогообложения()
Результат = Новый Соответствие;
НесколькоТиповНалогообложения = Ложь;
Если Объект.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаПоПатенту Тогда
ТоварыЗапрещенныеКПродажеПоПатенту = ПродажиСерверЛокализация.НоменклатураЗапрещеннаяКПродажеПоПатенту(
РеквизитФормыВЗначение("Объект"),,,
Истина);
Если ТоварыЗапрещенныеКПродажеПоПатенту.Количество()
И ТоварыЗапрещенныеКПродажеПоПатенту.Количество() < Объект.Товары.Количество() Тогда
НесколькоТиповНалогообложения = Истина;
КонецЕсли;
КонецЕсли;
Если НесколькоТиповНалогообложения Тогда
ПараметрыУчетаПоОрганизации = УчетНДСУП.ПараметрыУчетаПоОрганизации(
Объект.Организация,
ТекущаяДатаСеанса(),
Объект.Склад,
Объект.Подразделение);
ОсновнойТипНалогообложения = ПараметрыУчетаПоОрганизации.ОсновноеНалогообложениеНДСПродажи;
ТоварыПатент = Новый Массив;
ТоварыОсновнойТип = Новый Массив;
Для Каждого СтрокаТоваров Из Объект.Товары Цикл
ПоискСтроки = ТоварыЗапрещенныеКПродажеПоПатенту.Найти(СтрокаТоваров.НомерСтроки, "НомерСтроки");
Если ПоискСтроки = Неопределено Тогда
ТоварыПатент.Добавить(СтрокаТоваров);
Иначе
ТоварыОсновнойТип.Добавить(СтрокаТоваров);
КонецЕсли;
КонецЦикла;
Результат.Вставить(Перечисления.ТипыНалогообложенияНДС.ПродажаПоПатенту,
Объект.Товары.Выгрузить(ТоварыПатент));
Результат.Вставить(ОсновнойТипНалогообложения,
Объект.Товары.Выгрузить(ТоварыОсновнойТип));
КонецЕсли;
Если Результат.Количество() = 0 Тогда
Результат.Вставить(Объект.НалогообложениеНДС, "");
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция СоздатьДокументыСервер()
Если ДокументыСформированы Тогда
МассивДокументов = Новый Массив;
Для Каждого ТекСтрока Из Объект.Документы Цикл
МассивДокументов.Добавить(ТекСтрока.ПолучитьИдентификатор());
КонецЦикла;
ПровестиОтменитьПроведениеДокументовСервер(МассивДокументов, Ложь);
КонецЕсли;
ТоварыПоТипамНалогообложения = РазбитьТоварыПоТипамНалогообложения();
НесколькоТиповНалогообложения = ТоварыПоТипамНалогообложения.Количество() > 1;
Если НесколькоТиповНалогообложения Тогда
ИсходныеДанныеТовары = Объект.Товары.Выгрузить();
ИсходныеДанныеНалогообложениеНДС = Объект.НалогообложениеНДС;
КонецЕсли;
ОснованияТранспортнойНакладной.Очистить();
НачатьТранзакцию();
Попытка
Отказ = Ложь;
МассивНайденныхДокументов = Новый Массив;
ЭтоОперацияПередачи = ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация);
ОбщаяСуммаПредоплаты = СуммаАвансаДоОбеспечения + СуммаПредоплатыДоОтгрузки;
БезПроведения = Объект.СоздаватьПриходныйКассовыйОрдер
И Объект.ФормаОплаты = Перечисления.ФормыОплаты.Наличная
И ОбщаяСуммаПредоплаты > 0
И Не ЭтоОперацияПередачи;
Для Каждого ТоварыПоТипуНалогообложения Из ТоварыПоТипамНалогообложения Цикл
Если НесколькоТиповНалогообложения Тогда
Объект.НалогообложениеНДС = ТоварыПоТипуНалогообложения.Ключ;
Объект.Товары.Загрузить(ТоварыПоТипуНалогообложения.Значение);
КонецЕсли;
Если Не Отказ
И Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов
И Объект.Товары.Итог("КоличествоУпаковокКВозврату") > 0
И НЕ ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ЗаписатьЗаявкуНаВозврат(МассивНайденныхДокументов, Объект.Склад, Отказ);
КонецЕсли;
Если Объект.Товары.Итог("КоличествоУпаковок") > 0 Тогда
Если НЕ Отказ
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг)
Тогда
БезПроведения = Объект.СоздаватьПриходныйКассовыйОрдер
И Объект.ФормаОплаты = Перечисления.ФормыОплаты.Наличная
И Объект.ЭтапыГрафикаОплаты.Количество() > 0
И Не ЭтоОперацияПередачи
И Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным;
ОснованиеОбъект = ЗаписатьЗаказ(МассивНайденныхДокументов, Отказ, БезПроведения);
Если Объект.СоздаватьСчетНаОплату
И НЕ Отказ
И Не ЭтоОперацияПередачи
И Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным
И Объект.ЭтапыГрафикаОплаты.Итог("СуммаПлатежа") + Объект.ЭтапыГрафикаОплаты.Итог("СуммаЗалогаЗаТару") > 0 Тогда
ЗаписатьСчетНаОплату(МассивНайденныхДокументов, ОснованиеОбъект, Объект.ЭтапыГрафикаОплаты.Выгрузить(), Отказ);
КонецЕсли;
Если Объект.СоздаватьПриходныйКассовыйОрдер
И НЕ Отказ
И Не ЭтоОперацияПередачи
И Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным
И Объект.ФормаОплаты = Перечисления.ФормыОплаты.Наличная Тогда
ПКО = ЗаписатьПриходныйКассовыйОрдер(МассивНайденныхДокументов, ОснованиеОбъект, Отказ);
Если БезПроведения И ПКО <> Неопределено Тогда
ОснованиеОбъект.Записать(РежимЗаписиДокумента.Проведение);
БезПроведения = Ложь;
КонецЕсли;
КонецЕсли;
ИначеЕсли НЕ Отказ
И Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| *
|ПОМЕСТИТЬ ВтТовары
|ИЗ
| &Товары КАК Товары;
|
|
|ВЫБРАТЬ
| *,
| """" КАК ВидГОСИС
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| Товары.ВариантОформления = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг)
| И Товары.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.АктВыполненныхРабот)
|;
|
|
|ВЫБРАТЬ
| *,
| &ВидГОСИСНоменклатура КАК ВидГОСИС
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| Товары.ВариантОформления = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг)
| И Товары.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.РеализацияТоваровУслуг)";
Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить());
ПродажиСервер.ДополнитьЗапросВидамиГОСИС(Запрос, "&ВидГОСИСНоменклатура", "Товары.Номенклатура",
Объект.ОтдельныеНакладныеПоТоварамСОсобенностьюУчета, "");
ПакетРезультатов = Запрос.ВыполнитьПакет();
Работы = ПакетРезультатов[1].Выгрузить();
Товары = ПакетРезультатов[2].Выгрузить();
СоздаватьСчетПКО = Ложь;
МассивДокументовПродажи = Новый Массив;
Если Работы.Количество() > 0
И Товары.Количество() = 0 Тогда
ОснованиеОбъект = ЗаписатьАкт(МассивНайденныхДокументов, Отказ);
СоздаватьСчетПКО = Истина;
Иначе
ОбщегоНазначенияКлиентСервер.ДополнитьТаблицу(Работы, Товары);
Товары.Сортировать("НомерСтроки");
СоздатьРеализацию(Товары,
МассивДокументовПродажи,
МассивНайденныхДокументов,
БезПроведения,
Отказ);
КонецЕсли;
Если НЕ Отказ
И Работы.Количество() > 0
И Товары.Количество() = 0
И СоздаватьСчетПКО
И Объект.СоздаватьСчетНаОплату
И Объект.Товары.Итог("СуммаБезВозвратнойТары") > 0 Тогда
ЗаписатьСчетНаОплату(МассивНайденныхДокументов, ОснованиеОбъект, ОснованиеОбъект.ЭтапыГрафикаОплаты.Выгрузить(),
Отказ);
КонецЕсли;
Если НЕ Отказ
И Работы.Количество() > 0
И Товары.Количество() = 0
И СоздаватьСчетПКО
И Объект.СоздаватьПриходныйКассовыйОрдер
И Объект.ФормаОплаты = Перечисления.ФормыОплаты.Наличная Тогда
ПКО = ЗаписатьПриходныйКассовыйОрдер(МассивНайденныхДокументов, ОснованиеОбъект, Отказ);
Если БезПроведения
И ПКО <> Неопределено Тогда
ОснованиеОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СоздаватьТранспортнуюНакладную И Не Отказ Тогда
ОснованияТранспортнойНакладной.Добавить(ОснованиеОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если НЕ Отказ
И Работы.Количество() > 0
И Товары.Количество() = 0
И Объект.Товары.Итог("СуммаБезВозвратнойТары") > 0
И Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") Тогда
СоздатьСчетФактуру(МассивНайденныхДокументов, ОснованиеОбъект, Отказ);
КонецЕсли;
ИначеЕсли Не Отказ
И Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю Тогда
Если ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ОснованиеОбъект = ЗаписатьОтгрузкуТоваровКлиенту(МассивНайденныхДокументов, Отказ);
Если Не Отказ И Объект.ПечататьСчетФактуру Тогда
СоздатьСчетФактуру(МассивНайденныхДокументов, ОснованиеОбъект, Отказ);
КонецЕсли;
Иначе
ОснованиеОбъект = ЗаписатьПередачуТоваровХранителю(МассивНайденныхДокументов, Отказ);
КонецЕсли;
Если Не Отказ
И СоздаватьТранспортнуюНакладную Тогда
ОснованияТранспортнойНакладной.Добавить(ОснованиеОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
Если НЕ Отказ
И Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| *,
| Товары.ВариантОбеспечения КАК ВариантОбеспечения,
| Товары.ВариантОформленияПродажи КАК ВариантОформленияПродажи,
| Товары.Склад КАК Склад,
| Товары.ВариантОформления КАК ВариантОформления
|ПОМЕСТИТЬ ВтТовары
|ИЗ
| &Товары КАК Товары;
|
|
|ВЫБРАТЬ
| *
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| (Товары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| ИЛИ НЕ &ИспользоватьРасширенныеВозможностиЗаказаКлиента)
| И Товары.ВариантОформления = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг)
| И Товары.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.АктВыполненныхРабот)
|;
|
|
|ВЫБРАТЬ
| *,
| &ВидГОСИСНоменклатура КАК ВидГОСИС
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| (Товары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| ИЛИ НЕ &ИспользоватьРасширенныеВозможностиЗаказаКлиента)
| И Товары.ВариантОформления = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг)
| И Товары.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.АктНаПередачуПрав)
|;
|
|
|ВЫБРАТЬ
| *,
| &ВидГОСИСНоменклатура КАК ВидГОСИС
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| (Товары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| ИЛИ НЕ &ИспользоватьРасширенныеВозможностиЗаказаКлиента)
| И Товары.ВариантОформления = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг)
| И Товары.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.РеализацияТоваровУслуг)";
Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить());
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказаКлиента", ИспользоватьРасширенныеВозможностиЗаказаКлиента);
ПродажиСервер.ДополнитьЗапросВидамиГОСИС(Запрос, "&ВидГОСИСНоменклатура", "Товары.Номенклатура",
Объект.ОтдельныеНакладныеПоТоварамСОсобенностьюУчета, "");
ПакетРезультатов = Запрос.ВыполнитьПакет();
Работы = ПакетРезультатов[1].Выгрузить();
ТоварыАкт = ПакетРезультатов[2].Выгрузить();
Товары = ПакетРезультатов[3].Выгрузить();
МассивДокументовПродажи = Новый Массив;
Если Товары.Количество() > 0 Тогда
СоздатьРеализациюПоЗаказу(Товары,
МассивДокументовПродажи,
МассивНайденныхДокументов,
ОснованиеОбъект,
Работы.Количество() > 0
ИЛИ ТоварыАкт.Количество() > 0,
БезПроведения,
Отказ);
КонецЕсли;
Если НЕ Отказ
И ТоварыАкт.Количество() > 0 Тогда
СоздатьРеализациюПоЗаказу(ТоварыАкт,
МассивДокументовПродажи,
МассивНайденныхДокументов,
ОснованиеОбъект,
Работы.Количество() >0 ИЛИ Товары.Количество() > 0,
БезПроведения,
Отказ);
КонецЕсли;
Если НЕ Отказ
И Работы.Количество() > 0 Тогда
ПродажаОбъект = ЗаписатьАктПоЗаказу(МассивНайденныхДокументов, ОснованиеОбъект, Работы, Отказ);
Если НЕ Отказ
И Не ЭтоОперацияПередачи Тогда
СоздатьСчетФактуру(МассивНайденныхДокументов, ПродажаОбъект, Отказ);
КонецЕсли;
Если НЕ Отказ
И Объект.СоздаватьСчетНаОплату
И Не ЭтоОперацияПередачи
И Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным
И Объект.Товары.Итог("СуммаБезВозвратнойТары") > 0 Тогда
ЗаписатьСчетНаОплату(МассивНайденныхДокументов, ПродажаОбъект, ПродажаОбъект.ЭтапыГрафикаОплаты.Выгрузить(), Отказ);
КонецЕсли;
КонецЕсли;
ИначеЕсли НЕ Отказ
И Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| *,
| Товары.ВариантОбеспечения КАК ВариантОбеспечения,
| Товары.ВариантОформленияПродажи КАК ВариантОформленияПродажи,
| Товары.Склад КАК Склад,
| Товары.ВариантОформления КАК ВариантОформления
|ПОМЕСТИТЬ ВтТовары
|ИЗ
| &Товары КАК Товары
|;
|
|
|ВЫБРАТЬ
| *
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| (Товары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| ИЛИ НЕ &ИспользоватьРасширенныеВозможностиЗаказаКлиента)
| И Товары.ВариантОформления = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю)";
Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить());
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказаКлиента", ИспользоватьРасширенныеВозможностиЗаказаКлиента);
ПакетРезультатов = Запрос.ВыполнитьПакет();
МассивДокументовПродажи = Новый Массив;
Товары = ПакетРезультатов[1].Выгрузить();
Если Товары.Количество() > 0 Тогда
Если ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
СоздатьОтгрузкуТоваровКлиентуПоЗаказу(Товары,
МассивДокументовПродажи,
МассивНайденныхДокументов,
ОснованиеОбъект,
Отказ);
Иначе
СоздатьПередачуТоваровПоЗаказу(Товары,
МассивДокументовПродажи,
МассивНайденныхДокументов,
ОснованиеОбъект,
Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если Не Отказ
И ТребуетсяОформлениеРасходногоОрдера Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| *,
| Товары.ВариантОбеспечения КАК ВариантОбеспечения,
| Товары.ВариантОформленияПродажи КАК ВариантОформленияПродажи,
| Товары.Склад КАК Склад,
| Товары.ВариантОформления КАК ВариантОформления
|ПОМЕСТИТЬ ВтТовары
|ИЗ
| &Товары КАК Товары;
|
|
|ВЫБРАТЬ *
|ИЗ
| ВтТовары КАК Товары
|ГДЕ
| (Товары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
| ИЛИ НЕ &ИспользоватьРасширенныеВозможностиЗаказаКлиента)
| И Товары.ВариантОформления В(ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг),
| ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю),
| ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю),
| ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента),
| ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг))
| И (Товары.ВариантОформленияПродажи = ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияПродажи.РеализацияТоваровУслуг)
| ИЛИ &ВариантОформленияДокументов В(ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю),
| ЗНАЧЕНИЕ(Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю))
| )";
Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить());
Запрос.УстановитьПараметр("ВариантОформленияДокументов", Объект.ВариантОформленияДокументов);
Запрос.УстановитьПараметр("ИспользоватьРасширенныеВозможностиЗаказаКлиента", ИспользоватьРасширенныеВозможностиЗаказаКлиента);
РезультатЗапроса = Запрос.Выполнить();
Товары = РезультатЗапроса.Выгрузить();
Если Товары.Количество() > 0 Тогда
СоздатьРасходныеОрдера(Товары, МассивНайденныхДокументов, МассивДокументовПродажи, ОснованиеОбъект, БезПроведения, Отказ);
КонецЕсли;
Иначе
Продажи.ПриСозданииДокументовПомощникПродаж(ЭтотОбъект, МассивНайденныхДокументов, Отказ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ОснованияТранспортнойНакладной.Количество() Тогда
ЗаписатьТранспортнуюНакладную(
МассивНайденныхДокументов,
ОснованияТранспортнойНакладной.ВыгрузитьЗначения(),
Отказ);
КонецЕсли;
Если Не Отказ Тогда
Для Каждого ТекСтрока Из Объект.Документы Цикл
Если МассивНайденныхДокументов.Найти(ТекСтрока.Документ) = Неопределено Тогда
ПометитьНаУдалениеДокумент(ТекСтрока, Отказ);
Если Отказ Тогда
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если Отказ Тогда
ВызватьИсключение НСтр("ru = 'Ошибка завершения создания документов'", ОбщегоНазначения.КодОсновногоЯзыка());
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
ОснованияТранспортнойНакладной.Очистить();
Если НесколькоТиповНалогообложения Тогда
Объект.Товары.Загрузить(ИсходныеДанныеТовары);
Объект.НалогообложениеНДС = ИсходныеДанныеНалогообложениеНДС;
КонецЕсли;
Если Отказ Тогда
Для Каждого ТекСтрока Из Объект.Документы Цикл
ПометитьНаУдалениеДокумент(ТекСтрока, Отказ);
КонецЦикла;
Объект.Документы.Очистить();
МассивНайденныхДокументов.Очистить();
КонецЕсли;
Если МассивНайденныхДокументов.Количество() > 0 Тогда
ДокументыСформированы = Истина;
Модифицированность = Ложь;
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
УправлениеСозданиемТранспортныхНакладных(Ложь);
УправлениеСозданиемДоверенностей();
УстановитьТолькоПросмотрЭлементовФормы(Истина);
ОбновитьОтображениеСостоянияДокументов();
Объект.Документы.Сортировать("Состояние, Порядок");
Если Объект.Партнер = Справочники.Партнеры.РозничныйПокупатель Тогда
ОформляласьПродажаРозничномуКлиенту = Истина;
КонецЕсли;
ОбновитьИнформациюДосьеПартнераКонтакты();
ОбновитьИнформациюДосьеПартнераРасчеты();
КонецЕсли;
Возврат МассивНайденныхДокументов.Количество();
КонецФункции
&НаСервере
Процедура ОбновитьОтображениеСостоянияДокументов()
Для каждого ТекущийДокумент Из Объект.Документы Цикл
ЗначенияАтрибутовДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ТекущийДокумент.Документ,"Проведен,ПометкаУдаления");
Если ЗначенияАтрибутовДокумента.Проведен = Истина Тогда
ТекущееСостояние = 0;
ИначеЕсли ЗначенияАтрибутовДокумента.ПометкаУдаления = Истина Тогда
ТекущееСостояние = 1;
Иначе
ТекущееСостояние = 2;
КонецЕсли;
Если ТекущийДокумент.Состояние <> ТекущееСостояние Тогда
ТекущийДокумент.Состояние = ТекущееСостояние;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументыКлиент(Знач Оповещение)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Оповещение", Оповещение);
ИменаПолей = ИменяПолейПодбораМногооборотнойТары(Объект.ВариантОформленияДокументов);
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьДокументыКлиентПредложитьПодобратьМногооборотнуюТаруЗавершение",
ЭтотОбъект,
ДополнительныеПараметры);
МногооборотнаяТараКлиент.ПредложитьПодобратьМногооборотнуюТару(ЭтотОбъект, "Товары", ИменаПолей,
ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументыКлиентПредложитьПодобратьМногооборотнуюТаруЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если ИспользоватьАвтоматическиеСкидкиВПродажах
И Не ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
Если СкидкиИзменились()
И Не Объект.СкидкиРассчитаны Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПредложитьПользователюРассчитатьСкидкиЗавершение",
ЭтотОбъект,
ДополнительныеПараметры);
СкидкиНаценкиЗаполнениеКлиент.ПредложитьПользователюРассчитатьСкидки(ОписаниеОповещения);
Возврат;
Иначе
Объект.СкидкиРассчитаны = Истина;
КонецЕсли;
КонецЕсли;
СоздатьДокументыКлиентФрагмент(ДополнительныеПараметры.Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПредложитьПользователюРассчитатьСкидкиЗавершение(ОтветНаВопрос, ДополнительныеПараметры) Экспорт
Если ОтветНаВопрос = КодВозвратаДиалога.Отмена Тогда
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.Оповещение);
Возврат;
ИначеЕсли ОтветНаВопрос = КодВозвратаДиалога.ОК Тогда
ДополнительныеПараметры = Новый Структура("Оповещение", ДополнительныеПараметры.Оповещение);
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьДокументыКлиентЗавершение",
ЭтотОбъект,
ДополнительныеПараметры);
ПрименитьИзмененияСкидокНаценокНаКлиенте(ОписаниеОповещения);
Возврат;
КонецЕсли;
СоздатьДокументыКлиентФрагмент(ДополнительныеПараметры.Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументыКлиентЗавершение(Результат, ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
СоздатьДокументыКлиентФрагмент(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьДокументыКлиентФрагмент(Знач Оповещение)
Перем КоличествоСозданныхДокументов, МаксДатаАванса;
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
Если ЗначениеЗаполнено(Объект.ДатаОтгрузки) Тогда
МаксДатаАванса = ПродажиКлиент.МаксимальнаяДатаАванса(Объект.ЭтапыГрафикаОплаты);
Если ЗначениеЗаполнено(МаксДатаАванса)
И МаксДатаАванса > Объект.ДатаОтгрузки Тогда
Объект.ДатаОтгрузки = МаксДатаАванса;
КонецЕсли;
КонецЕсли;
ОчиститьСообщения();
ПередЗаписьюНаКлиентеСервер();
Если ПроверитьЗаполнение() Тогда
КоличествоСозданныхДокументов = СоздатьДокументыСервер();
Если ФискализацияДоступна И КоличествоСозданныхДокументов > 0 Тогда
КоличествоФискализированныхДокументов = ФискализироватьДокументы();
КонецЕсли;
Если КоличествоСозданныхДокументов > 0 Тогда
ТекстСообщения = НСтр("ru = 'Созданы документы (%КоличествоСозданныхДокументов%)'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%КоличествоСозданныхДокументов%", КоличествоСозданныхДокументов);
Иначе
ТекстСообщения = НСтр("ru = 'Документы не созданы'");
КонецЕсли;
ПоказатьОповещениеПользователя(ТекстСообщения, , , БиблиотекаКартинок.Информация32);
КонецЕсли;
ВыполнитьОбработкуОповещения(Оповещение);
КонецПроцедуры
&НаСервере
Процедура ПометитьНаУдалениеДокумент(СтрокаТаблицы, Отказ)
Если Продажи.ЗаблокироватьДокумент(СтрокаТаблицы.Документ) Тогда
ДокументОбъект = СтрокаТаблицы.Документ.ПолучитьОбъект();
Если НЕ ДокументОбъект = Неопределено
И Не ДокументОбъект.ПометкаУдаления Тогда
Попытка
ДокументОбъект.УстановитьПометкуУдаления(Истина);
СтрокаТаблицы.Состояние = 1;
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
КраткийТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
ТекстОшибки = НСтр("ru='Не удалось установить пометку удаления для документа %Документ%. %ОписаниеОшибки%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ДокументОбъект);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ОписаниеОшибки%", КраткийТекстОшибки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ДокументОбъект);
КонецПопытки;
Иначе
СтрокаТаблицы.Состояние = 1;
КонецЕсли;
Иначе
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьВыделенныеДокументы(Знач Оповещение)
Если Объект.Документы.Количество() = 0 Тогда
ПоказатьПредупреждение(Новый ОписаниеОповещения("ПолучитьВыделенныеДокументыЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), НСтр("ru='Отсутствуют оформленные документы'"));
Возврат;
ИначеЕсли Элементы.ОформленныеДокументы.ВыделенныеСтроки.Количество() = 0 Тогда
ПоказатьПредупреждение(Новый ОписаниеОповещения("ПолучитьВыделенныеДокументыЗавершение", ЭтотОбъект, Новый Структура("Оповещение", Оповещение)), НСтр("ru='Отсутствуют выделенные документы'"));
Возврат;
Иначе
МассивДокументов = Новый Массив();
Для Каждого ТекЭлемент Из Элементы.ОформленныеДокументы.ВыделенныеСтроки Цикл
МассивДокументов.Добавить(ТекЭлемент);
КонецЦикла;
ВыполнитьОбработкуОповещения(Оповещение, МассивДокументов);
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьВыделенныеДокументыЗавершение(ДополнительныеПараметры) Экспорт
Оповещение = ДополнительныеПараметры.Оповещение;
ВыполнитьОбработкуОповещения(Оповещение, Неопределено);
КонецПроцедуры
&НаСервере
Функция УстановитьПометкуУдаленияСервер(ВыделенныеДокументы)
Сч = ВыделенныеДокументы.Количество();
КоличествоИзмененныхДокументов = 0;
Отказ = Ложь;
ДокументыКОбработке = Новый Массив;
НачатьТранзакцию();
Попытка
Пока Сч > 0 Цикл
Сч = Сч - 1;
ДокументНеПомеченНаУдаление = Ложь;
СтрокаТаблицы = Объект.Документы.НайтиПоИдентификатору(ВыделенныеДокументы[Сч]);
Если СтрокаТаблицы = Неопределено Тогда
Продолжить;
КонецЕсли;
ПометитьНаУдалениеДокумент(СтрокаТаблицы, ДокументНеПомеченНаУдаление);
Если ДокументНеПомеченНаУдаление Тогда
Отказ = Истина;
Иначе
КоличествоИзмененныхДокументов = КоличествоИзмененныхДокументов + 1;
КонецЕсли;
ДокументыКОбработке.Добавить(СтрокаТаблицы);
КонецЦикла;
Если Отказ Тогда
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат 0;
КонецЕсли;
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Возврат 0;
КонецПопытки;
УправлениеТранспортнымиНакладными(ДокументыКОбработке);
УправлениеПометкойКомандыТранспортнойНакладной();
УправлениеДоверенностями();
УправлениеПометкойКомандыДоверенность();
Возврат КоличествоИзмененныхДокументов;
КонецФункции
&НаСервере
Функция ПровестиОтменитьПроведениеДокументовСервер(ВыделенныеДокументы, Проведение = Истина)
Отказ = Ложь;
Сч = ВыделенныеДокументы.Количество();
КоличествоИзмененныхДокументов = 0;
МассивСтрокКУдалению = Новый Массив;
ДокументыКОбработке = Новый Массив;
НачатьТранзакцию();
Попытка
Пока Сч > 0 Цикл
Сч = Сч - 1;
СтрокаТаблицы = Объект.Документы.НайтиПоИдентификатору(ВыделенныеДокументы[Сч]);
Если СтрокаТаблицы = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Продажи.ЗаблокироватьДокумент(СтрокаТаблицы.Документ) Тогда
ДокументОбъект = СтрокаТаблицы.Документ.ПолучитьОбъект();
Если ДокументОбъект = Неопределено Тогда
МассивСтрокКУдалению.Добавить(СтрокаТаблицы);
Продолжить;
КонецЕсли;
Если ДокументОбъект.ПометкаУдаления И Проведение Тогда
Попытка
ДокументОбъект.УстановитьПометкуУдаления(Ложь);
СтрокаТаблицы.Состояние = 1;
Исключение
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
КраткийТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
ТекстОшибки = НСтр("ru='Не удалось снять пометку удаления для документа %Документ%. %ОписаниеОшибки%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ДокументОбъект);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ОписаниеОшибки%", КраткийТекстОшибки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ДокументОбъект);
КонецПопытки;
КонецЕсли;
Если ДокументОбъект.Проведен <> Проведение Тогда
Если Проведение И Не ДокументОбъект.ПроверитьЗаполнение() Тогда
Продолжить;
КонецЕсли;
Попытка
ДокументОбъект.Записать(?(Проведение, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.ОтменаПроведения));
Исключение
Отказ = Истина;
ИнформацияОбОшибке = ИнформацияОбОшибке();
ПодробноеПредставлениеОшибки = ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке);
КраткийТекстОшибки = ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке);
ЗаписьЖурналаРегистрации(
НСтр("ru = 'Помощник продаж'", ОбщегоНазначения.КодОсновногоЯзыка()),
УровеньЖурналаРегистрации.Ошибка,,,
ПодробноеПредставлениеОшибки);
Если Проведение Тогда
ТекстОшибки = НСтр("ru='Не удалось провести документ %Документ%. %ОписаниеОшибки%'");
Иначе
ТекстОшибки = НСтр("ru='Не удалось отменить проведение документа %Документ%. %ОписаниеОшибки%'");
КонецЕсли;
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%Документ%", ДокументОбъект);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%ОписаниеОшибки%", КраткийТекстОшибки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ДокументОбъект);
Продолжить;
КонецПопытки;
СтрокаТаблицы.Состояние = ?(Проведение, 0, 2);
КоличествоИзмененныхДокументов = КоличествоИзмененныхДокументов + 1;
КонецЕсли;
ДокументыКОбработке.Добавить(СтрокаТаблицы);
КонецЕсли;
КонецЦикла;
Для Каждого СтрокаКУдалению Из МассивСтрокКУдалению Цикл
Объект.Документы.Удалить(СтрокаКУдалению);
КонецЦикла;
Если Отказ Тогда
ОтменитьТранзакцию();
ИмяСобытия = НСтр("ru = 'Проведение документов'", ОбщегоНазначения.КодОсновногоЯзыка());
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
Иначе
УправлениеТранспортнымиНакладными(ДокументыКОбработке);
УправлениеДоверенностями();
ЗафиксироватьТранзакцию();
КонецЕсли;
Исключение
ОтменитьТранзакцию();
ИмяСобытия = НСтр("ru = 'Проведение документов'", ОбщегоНазначения.КодОсновногоЯзыка());
ЗаписьЖурналаРегистрации(ИмяСобытия, УровеньЖурналаРегистрации.Ошибка, , ,
ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()));
КонецПопытки;
Возврат КоличествоИзмененныхДокументов;
КонецФункции
&НаСервереБезКонтекста
Функция ПолноеИмяДокумента(ДокументСсылка)
Возврат ДокументСсылка.Метаданные().ПолноеИмя();
КонецФункции
&НаСервере
Процедура ОбновитьТекстИнформационнойНадписиФормируемыеДокументы()
МассивНадписей = Новый Массив;
СуммыДокументов = Новый Структура;
СуммыДокументов.Вставить("СуммаЗаказа", 0);
СуммыДокументов.Вставить("СуммаЗаявки", 0);
СуммыДокументов.Вставить("СуммаАкта", 0);
СуммыДокументов.Вставить("СуммаПередачи", 0);
СуммыДокументов.Вставить("СуммаРеализации", 0);
СуммыДокументов.Вставить("СуммаПКО", 0);
СуммыДокументов.Вставить("СуммаАктаНаПередачуПрав", 0);
СуммыДокументов.Вставить("СуммаИтог", 0);
СуммыДокументов.СуммаИтог = ?(Объект.ТребуетсяЗалогЗаТару,
Объект.Товары.Итог("СуммаСНДС"),
Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"));
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
СуммыДокументов.СуммаЗаказа = ?(Объект.ТребуетсяЗалогЗаТару,
Объект.Товары.Итог("СуммаСНДС"),
Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"));
ТекстНадписи = НСтр("ru='Коммерческое предложение (%СуммаИтог% %Валюта%)'");
МассивНадписей.Добавить(ТекстНадписи);
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента Тогда
СуммыДокументов.СуммаЗаказа = ?(Объект.ТребуетсяЗалогЗаТару,
Объект.Товары.Итог("СуммаСНДС"),
Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"));
СоздаватьСчетНаоплату = Объект.СоздаватьСчетНаОплату
И Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным;
Если СуммыДокументов.СуммаЗаказа > 0 Тогда
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Заказ'"), "%СуммаИтог%", СуммыДокументов.СуммаЗаказа, СоздаватьСчетНаоплату);
КонецЕсли;
ИначеЕсли ЭтоРеализация(Объект.ВариантОформленияДокументов) Тогда
ТребуетсяОформлениеЗаказа = Ложь;
ТребуетсяОформлениеАкта = Ложь;
ТребуетсяОформлениеРеализации = Ложь;
ТребуетсяОформлениеАктаНаПередачуПрав = Ложь;
ПараметрыОтбора = Новый Структура("ВариантОформленияПродажи",
Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг);
ЕстьТовары = Объект.Товары.НайтиСтроки(ПараметрыОтбора).Количество() > 0;
ПараметрыОтбора = Новый Структура("ВариантОформленияПродажи",
Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав);
ЕстьТоварыСАктомНаПередачу = Объект.Товары.НайтиСтроки(ПараметрыОтбора).Количество() > 0;
ПараметрыОтбора = Новый Структура("ВариантОформленияПродажи",
Перечисления.ВариантыОформленияПродажи.АктВыполненныхРабот);
ЕстьУслугиАкт = Объект.Товары.НайтиСтроки(ПараметрыОтбора).Количество() > 0;
Если Объект.Товары.Количество() = 0 Тогда
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг Тогда
СоздаватьСчетНаоплату = Объект.СоздаватьСчетНаОплату
И Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным;
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Заказ'"), "%СуммаЗаказа%", СуммыДокументов.СуммаЗаказа,
СоздаватьСчетНаоплату);
Иначе
СоздаватьСчетНаоплату = Объект.СоздаватьСчетНаОплату
И Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным;
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Реализация'"), "%СуммаЗаказа%", СуммыДокументов.СуммаЗаказа,
СоздаватьСчетНаоплату);
КонецЕсли;
КонецЕсли;
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если ТекСтрока.ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента Тогда
СуммыДокументов.СуммаЗаказа = СуммыДокументов.СуммаЗаказа +
?(Объект.ТребуетсяЗалогЗаТару,
ТекСтрока.СуммаСНДС,
ТекСтрока.СуммаСНДСБезВозвратнойТары);
ТребуетсяОформлениеЗаказа = Истина;
Иначе
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг Тогда
СуммыДокументов.СуммаЗаказа = СуммыДокументов.СуммаЗаказа +
?(Объект.ТребуетсяЗалогЗаТару,
ТекСтрока.СуммаСНДС,
ТекСтрока.СуммаСНДСБезВозвратнойТары);
ТребуетсяОформлениеЗаказа = Истина;
КонецЕсли;
Если ТекСтрока.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.РеализацияТоваровУслуг
ИЛИ ((ЕстьТовары
ИЛИ ЕстьТоварыСАктомНаПередачу)
И ТекСтрока.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.АктВыполненныхРабот
И Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг)
ИЛИ ((ЕстьТовары
ИЛИ ЕстьУслугиАкт)
И ТекСтрока.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав
И Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг) Тогда
СуммыДокументов.СуммаРеализации = СуммыДокументов.СуммаРеализации
+ ?(Объект.ТребуетсяЗалогЗаТару,
ТекСтрока.СуммаСНДС,
ТекСтрока.СуммаСНДСБезВозвратнойТары);
ТребуетсяОформлениеРеализации = Истина;
ИначеЕсли ТекСтрока.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.АктНаПередачуПрав Тогда
СуммыДокументов.СуммаАктаНаПередачуПрав = СуммыДокументов.СуммаАктаНаПередачуПрав
+ ?(Объект.ТребуетсяЗалогЗаТару,
ТекСтрока.СуммаСНДС,
ТекСтрока.СуммаСНДСБезВозвратнойТары);
ТребуетсяОформлениеАктаНаПередачуПрав = Истина;
ИначеЕсли ТекСтрока.ВариантОформленияПродажи = Перечисления.ВариантыОформленияПродажи.АктВыполненныхРабот Тогда
СуммыДокументов.СуммаАкта = СуммыДокументов.СуммаАкта
+ ?(Объект.ТребуетсяЗалогЗаТару,
ТекСтрока.СуммаСНДС,
ТекСтрока.СуммаСНДСБезВозвратнойТары);
ТребуетсяОформлениеАкта = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТребуетсяОформлениеЗаказа Тогда
СоздаватьСчетНаоплату = Объект.СоздаватьСчетНаОплату
И Объект.ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоНакладным;
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Заказ'"), "%СуммаЗаказа%", СуммыДокументов.СуммаЗаказа, СоздаватьСчетНаоплату);
КонецЕсли;
Если ТребуетсяОформлениеРеализации Тогда
СоздаватьСчетНаоплату = Объект.СоздаватьСчетНаОплату
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
ИЛИ (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
И Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным));
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Реализация'"), "%СуммаРеализации%", СуммыДокументов.СуммаРеализации,
СоздаватьСчетНаоплату);
КонецЕсли;
Если ТребуетсяОформлениеАктаНаПередачуПрав Тогда
СоздаватьСчетНаоплату = Объект.СоздаватьСчетНаОплату
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
ИЛИ (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
И Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным));
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Акт на передачу прав'"), "%СуммаАктаНаПередачуПрав%",
СуммыДокументов.СуммаАктаНаПередачуПрав, СоздаватьСчетНаоплату);
КонецЕсли;
Если ТребуетсяОформлениеАкта Тогда
СоздаватьСчетНаоплату = Объект.СоздаватьСчетНаОплату
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
ИЛИ (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
И Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным));
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Акт'"), "%СуммаАкта%", СуммыДокументов.СуммаАкта, СоздаватьСчетНаоплату);
КонецЕсли;
ИначеЕсли ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
ТребуетсяОформлениеЗаказа = Ложь;
ТребуетсяОформлениеПередачи = Ложь;
Если Объект.Товары.Количество() = 0 Тогда
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Заказ'"), "%СуммаЗаказа%", СуммыДокументов.СуммаЗаказа, Ложь);
Иначе
ИмяПараметраДокумент = НСтр("ru='Передача'");
Если ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ИмяПараметраДокумент = НСтр("ru='Отгрузка'");
КонецЕсли;
ДобавитьТекстНадписиВМассив(МассивНадписей, ИмяПараметраДокумент, "%СуммаПередачи%", СуммыДокументов.СуммаЗаказа, Ложь);
КонецЕсли;
КонецЕсли;
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если ТекСтрока.ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента Тогда
СуммыДокументов.СуммаЗаказа = СуммыДокументов.СуммаЗаказа + ТекСтрока.СуммаСНДСБезВозвратнойТары;
ТребуетсяОформлениеЗаказа = Истина;
Иначе
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
СуммыДокументов.СуммаЗаказа = СуммыДокументов.СуммаЗаказа + ТекСтрока.СуммаСНДСБезВозвратнойТары;
ТребуетсяОформлениеЗаказа = Истина;
КонецЕсли;
Если Объект.ЦенаВключаетНДС = Ложь И ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
СуммыДокументов.СуммаПередачи = СуммыДокументов.СуммаПередачи + ТекСтрока.СуммаБезВозвратнойТары;
Иначе
СуммыДокументов.СуммаПередачи = СуммыДокументов.СуммаПередачи + ТекСтрока.СуммаСНДСБезВозвратнойТары;
КонецЕсли;
ТребуетсяОформлениеПередачи = Истина;
КонецЕсли;
КонецЦикла;
Если ТребуетсяОформлениеЗаказа Тогда
ДобавитьТекстНадписиВМассив(МассивНадписей, НСтр("ru='Заказ'"), "%СуммаЗаказа%", СуммыДокументов.СуммаЗаказа, Ложь);
КонецЕсли;
Если ТребуетсяОформлениеПередачи Тогда
ИмяПараметраДокумент = НСтр("ru='Передача'");
Если ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ИмяПараметраДокумент = НСтр("ru='Отгрузка'");
КонецЕсли;
ДобавитьТекстНадписиВМассив(МассивНадписей, ИмяПараметраДокумент, "%СуммаПередачи%", СуммыДокументов.СуммаПередачи, Ложь);
КонецЕсли;
КонецЕсли;
ТребуетсяОформлениеРасходногоОрдера = Ложь;
Если ИспользоватьОрдерныеСклады
И ДоступноСозданиеРасходныхОрдеров
И Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
Для Каждого ТекСтрока Из Объект.Товары Цикл
СкладИспользуетОрдернуюСхему = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(ТекСтрока.Склад);
Если СкладИспользуетОрдернуюСхему
И ТекСтрока.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить Тогда
ТребуетсяОформлениеРасходногоОрдера = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Если ТребуетсяОформлениеРасходногоОрдера Тогда
ТекстНадписи = НСтр("ru='Расходный ордер на товары'");
МассивНадписей.Добавить(ТекстНадписи);
КонецЕсли;
ВзаиморасчетыСервер.ПроверитьЗаполнитьЭтапыГрафикаОплаты(ЭтотОбъект);
Если Объект.СоздаватьПриходныйКассовыйОрдер
И Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение
И Объект.ФормаОплаты = Перечисления.ФормыОплаты.Наличная Тогда
ПараметрыОтбора = Новый Структура("ДатаПлатежа", Объект.Дата);
СтрокиОплаты = Объект.ЭтапыГрафикаОплаты.НайтиСтроки(ПараметрыОтбора);
Если СтрокиОплаты.Количество() > 0 Тогда
ТаблицаЭтаповОплаты = Объект.ЭтапыГрафикаОплаты.Выгрузить(СтрокиОплаты, "СуммаПлатежа, СуммаЗалогаЗаТару");
ТаблицаЭтаповОплаты.Свернуть(,"СуммаПлатежа, СуммаЗалогаЗаТару");
СуммыДокументов.СуммаПКО = ТаблицаЭтаповОплаты[0].СуммаПлатежа + ТаблицаЭтаповОплаты[0].СуммаЗалогаЗаТару;
ТекстНадписи = НСтр("ru='ПКО (%СуммаПКО% %Валюта%)'");
МассивНадписей.Добавить(ТекстНадписи);
КонецЕсли;
КонецЕсли;
Если Объект.Товары.Итог("СуммаСНДСВозврат") > 0
И Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов Тогда
Для Каждого СтрокаДокумент Из Объект.Документы Цикл
Если ТипЗнч(СтрокаДокумент.Документ) = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
СуммыДокументов.СуммаЗаявки = СуммыДокументов.СуммаЗаявки + СтрокаДокумент.СуммаДокумента;
КонецЕсли;
КонецЦикла;
СуммыДокументов.СуммаЗаявки = ?(СуммыДокументов.СуммаЗаявки = 0, Объект.Товары.Итог("СуммаСНДСВозврат"), СуммыДокументов.СуммаЗаявки);
ТекстНадписи = НСтр("ru='Заявка на возврат (%СуммаЗаявки% %Валюта%)'");
МассивНадписей.Добавить(ТекстНадписи);
КонецЕсли;
НадписьСформированныеДокументы = "";
МассивНадписейКВыводу = Новый Массив;
Для Каждого ТекЭлемент Из МассивНадписей Цикл
СуммаПозиция = СтрНайти(ТекЭлемент, "%Сумма");
СуммаНаименование = Сред(ТекЭлемент, СуммаПозиция+1, СтрНайти(ТекЭлемент, "%", , СуммаПозиция+1) - СуммаПозиция - 1);
Если СуммаПозиция = 0 И ЗначениеЗаполнено(ТекЭлемент)
Или СуммыДокументов.Свойство(СуммаНаименование) И СуммыДокументов[СуммаНаименование] <> 0 Тогда
МассивНадписейКВыводу.Добавить(ТекЭлемент);
КонецЕсли;
КонецЦикла;
НадписьСформированныеДокументы = СтрСоединить(МассивНадписейКВыводу, ", ");
Для Каждого ЭлементСуммы из СуммыДокументов Цикл
НадписьСформированныеДокументы = СтрЗаменить(НадписьСформированныеДокументы,
"%"+ЭлементСуммы.Ключ+"%",
Формат(ЭлементСуммы.Значение, "ЧДЦ=2"))
КонецЦикла;
НадписьСформированныеДокументы = СтрЗаменить(НадписьСформированныеДокументы,
"%Валюта%",
Объект.Валюта);
ОбновитьГиперссылкуИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаСервере
Процедура ОбновитьГиперссылкуИнформационнойНадписиФормируемыеДокументы()
Если ДокументыСформированы Тогда
Элементы.НадписьСформированныеДокументы.Гиперссылка = Истина;
Иначе
Элементы.НадписьСформированныеДокументы.Гиперссылка = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьТекстНадписиВМассив(МассивНадписей, ИмяПараметраДокумент, ИмяПараметраСумма, СуммаДокумента, СоздаватьСчетНаОплату)
Если СоздаватьСчетНаОплату
И Не ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
ТекстНадписи = НСтр("ru='%ИмяПараметраДокумент% + Счет (%ИмяПараметраСумма% %Валюта%)'");
Иначе
ТекстНадписи = НСтр("ru='%ИмяПараметраДокумент% (%ИмяПараметраСумма% %Валюта%)'");
КонецЕсли;
ТекстНадписи = СтрЗаменить(ТекстНадписи, "%ИмяПараметраДокумент%", ИмяПараметраДокумент);
ТекстНадписи = СтрЗаменить(ТекстНадписи, "%ИмяПараметраСумма%", ИмяПараметраСумма);
МассивНадписей.Добавить(ТекстНадписи);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаКлиентеСервер()
ВзаиморасчетыВызовСервера.ФормаПередЗаписьюНаКлиентеСервер(ЭтаФорма);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОперацияПередачи(ХозяйственнаяОперация)
ОперацииПередачи = Новый Массив;
ОперацииПередачи.Добавить(ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию"));
ОперацииПередачи.Добавить(ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи"));
ЭтоОперацияПередачи = ОперацииПередачи.Найти(ХозяйственнаяОперация) <> Неопределено;
Возврат ЭтоОперацияПередачи;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОперацияЗаказаКлиента(ВариантОформленияДокументовПродажи)
ОперацииЗаказаКлиента = Новый Массив;
ОперацииЗаказаКлиента.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента"));
ОперацииЗаказаКлиента.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю"));
ОперацииЗаказаКлиента.Добавить(ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг"));
ЭтоОперацияЗаказаКлиента = ОперацииЗаказаКлиента.Найти(ВариантОформленияДокументовПродажи) <> Неопределено;
Возврат ЭтоОперацияЗаказаКлиента;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЭтоОперацияОтгрузкаТоваров(ХозяйственнаяОперация)
Возврат ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ОтгрузкаТоваровКлиенту");
КонецФункции
#Область Фискализация
&НаКлиенте
Функция ФискализироватьДокументы()
МассивФискализированныхДокументов = Новый Массив;
Если ДокументыСформированы Тогда
Если НЕ РазрешенаФискализацияПоСкладу(Объект.Склад, Объект.ПробиватьФискальныйЧек) Тогда
Возврат МассивФискализированныхДокументов.Количество();
КонецЕсли;
ЗаполнитьПодключенноеОборудованиеСервер();
ПодключаемоеОборудованиеУТКлиент.УстановитьСтатусПодключенияОборудования(
Истина,
ЭтотОбъект,
ИспользуемоеОборудование(),
ТаблицаОборудования);
Оборудование = Неопределено;
Для каждого Строка Из ТаблицаОборудования Цикл
Если Строка.Подключено Тогда
Оборудование = Строка.Оборудование;
Прервать;
КонецЕсли;
КонецЦикла;
Если НЕ ЗначениеЗаполнено(Оборудование) Тогда
Возврат МассивФискализированныхДокументов.Количество();
КонецЕсли;
ТребуетсяФискализация = Ложь;
Для Каждого Документ Из Объект.Документы Цикл
ТипДокументСсылка = ТипЗнч(Документ.Документ);
Если ТипДокументСсылка = Тип("ДокументСсылка.РеализацияТоваровУслуг")
ИЛИ ТипДокументСсылка = Тип("ДокументСсылка.АктВыполненныхРабот")
ИЛИ ТипДокументСсылка = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
ТребуетсяФискализация = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если Не ТребуетсяФискализация Тогда
Возврат МассивФискализированныхДокументов.Количество();
КонецЕсли;
РозничныеПродажиКлиент.ОбработатьСостояниеСменыАвтоматически(Оборудование);
Для Каждого Документ Из Объект.Документы Цикл
ДокументСсылка = Документ.Документ;
ТипДокументСсылка = ТипЗнч(ДокументСсылка);
Если ТипДокументСсылка = Тип("ДокументСсылка.РеализацияТоваровУслуг")
ИЛИ ТипДокументСсылка = Тип("ДокументСсылка.АктВыполненныхРабот")
ИЛИ ТипДокументСсылка = Тип("ДокументСсылка.ПриходныйКассовыйОрдер") Тогда
Если НЕ Документ.Проведен Тогда
Продолжить;
КонецЕсли;
ПараметрыОперацииФискализацииЧека = ФормированиеФискальныхЧековВызовСервера.ПараметрыОперацииФискализацииЧекаПакетныйРежим(
ДокументСсылка, Оборудование);
Если ПараметрыОперацииФискализацииЧека = Неопределено Тогда
Продолжить;
КонецЕсли;
ОповещениеПриЗавершении = Новый ОписаниеОповещения("ПечатьЧека_Завершение", ЭтотОбъект, Документ);
ОборудованиеЧекопечатающиеУстройстваКлиент.НачатьФискализациюЧекаНаФискальномУстройстве(
ОповещениеПриЗавершении,
УникальныйИдентификатор,
Оборудование,
ПараметрыОперацииФискализацииЧека);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецФункции
&НаСервере
Функция РазрешенаФискализацияПоСкладу(Склад, ПробиватьФискальныйЧек)
Возврат СкладыСервер.РазрешенаФискализацияПоСкладу(Склад, ПробиватьФискальныйЧек);
КонецФункции
&НаСервере
Процедура ЗаполнитьПодключенноеОборудованиеСервер()
ТаблицаОборудования.Очистить();
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("Организация", Объект.Организация);
СтруктураПоиска.Вставить("ТорговыйОбъект", Объект.Касса);
МассивОборудования = ФормированиеФискальныхЧековСервер.ПодключенноеОборудованиеПечатиЧеков(СтруктураПоиска);
Для каждого Элемент Из МассивОборудования Цикл
Строка = ТаблицаОборудования.Добавить();
ЗаполнитьЗначенияСвойств(Строка, Элемент);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ИспользуемоеОборудование()
ИспользуемоеОборудование = Новый Массив;
Для Каждого СтрокаТаблицыОборудования Из ТаблицаОборудования Цикл
ИспользуемоеОборудование.Добавить(СтрокаТаблицыОборудования.Оборудование);
КонецЦикла;
Возврат ИспользуемоеОборудование;
КонецФункции
&НаКлиенте
Процедура ПечатьЧека_Завершение(РезультатВыполнения, ДополнительныеПараметры) Экспорт
Если РезультатВыполнения.Результат Тогда
ПараметрыФискализации = Неопределено;
Если РезультатВыполнения.Свойство("ВыходныеПараметры") И РезультатВыполнения.ВыходныеПараметры.Количество() > 8 Тогда
ПараметрыФискализации = РезультатВыполнения.ВыходныеПараметры[8];
КонецЕсли;
ПараметрыЗавершения = Новый Структура;
ПараметрыЗавершения.Вставить("ЗакрытьФорму", Ложь);
ПараметрыЗавершения.Вставить("Форма", ЭтотОбъект);
ПараметрыЗавершения.Вставить("ФискальнаяОперацияРеквизиты", ПараметрыФискализации);
ПараметрыЗавершения.Вставить("ОповещениеПриЗавершении", Новый ОписаниеОповещения("ПробитьЧекЗавершение", ЭтотОбъект, ДополнительныеПараметры));
ПодключаемоеОборудованиеУТКлиент.ВыполнитьДействиеПослеЗаписиФискальнойОперацииВЖурнал(
ЭтотОбъект,
Новый ОписаниеОповещения("ФискальнаяОперацияЗаписанаВЖурнал", ПодключаемоеОборудованиеУТКлиент, ПараметрыЗавершения),
НСтр("ru = 'Не удалось записать данные в журнал фискальных операций.'"));
Иначе
ТекстСообщения = НСтр("ru = 'При печати чека произошла ошибка.
|Чек не напечатан на фискальном устройстве.
|Дополнительное описание:
|%ДополнительноеОписание%'");
ТекстСообщения = СтрЗаменить(
ТекстСообщения,
"%ДополнительноеОписание%",
РезультатВыполнения.ОписаниеОшибки);
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения);
ДополнительныеПараметры.Фискализирован = Ложь;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПробитьЧекЗавершение(Результат, ДополнительныеПараметры) Экспорт
ДополнительныеПараметры.Фискализирован = Истина;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область ЗаполнениеУсловийПродаж
Функция ДоговорПоУмолчанию()
ОбъектОперация = Объект.ХозяйственнаяОперация;
Если ЭтоОперацияОтгрузкаТоваров(ОбъектОперация) Тогда
ОбъектОперация = ОперацияРеализацияКлиенту;
КонецЕсли;
НаправлениеДеятельности = Неопределено;
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда
НаправлениеДеятельности = Объект.НаправлениеДеятельности;
КонецЕсли;
Договор = ПродажиСервер.ПолучитьДоговорПоУмолчанию(Объект,
ОбъектОперация,
Объект.Валюта,
НаправлениеДеятельности,
Объект.КомиссионныеПродажи25);
Возврат Договор;
КонецФункции
&НаСервере
Процедура ЗаполнитьДоговорПоУмолчанию()
Договор = ДоговорПоУмолчанию();
Если Договор <> Объект.Договор Тогда
Объект.Договор = Договор;
ДоговорПриИзмененииСервер();
КонецЕсли;
ОбновитьОграничениеЗадолженности();
ОбновитьИнформациюДосьеПартнераРасчеты();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьУсловияПродажПоУмолчанию()
ГрафикОплаты = Объект.ГрафикОплаты;
ЗаполнитьДанныеПоПартнеру = Истина;
ПараметрОтбораХозяйственныеОперации = Неопределено;
ПустаяСсылкаДокумента = Документы.РеализацияТоваровУслуг.ПустаяСсылка();
ПараметрыОтбора = Новый Структура;
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента Тогда
ПустаяСсылкаДокумента = Документы.ЗаказКлиента.ПустаяСсылка();
ИначеЕсли ЭтоРеализация(Объект.ВариантОформленияДокументов) Тогда
ПараметрОтбораХозяйственныеОперации = Новый Массив();
ПараметрОтбораХозяйственныеОперации.Добавить(
Перечисления.ХозяйственныеОперации.РеализацияКлиенту);
ПараметрОтбораХозяйственныеОперации.Добавить(
Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности);
ПараметрОтбораХозяйственныеОперации.Добавить(
Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет);
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
ПустаяСсылкаДокумента = Документы.ПередачаТоваровХранителю.ПустаяСсылка();
ПараметрОтбораХозяйственныеОперации = Новый Массив();
ПараметрОтбораХозяйственныеОперации.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи);
ПараметрОтбораХозяйственныеОперации.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
Если ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5 Тогда
ПараметрОтбораХозяйственныеОперации.Добавить(ОперацияРеализацияКлиенту);
ПараметрыОтбора.Вставить("ОтгрузкаБезПереходаПраваСобственности25", Истина);
КонецЕсли;
ПараметрыОтбора.Вставить("КомиссионныеПродажи25", ИспользоватьКомиссиюПриПродажах И НЕ ВыбиратьВерсиюКомиссионныхПродаж);
Иначе
Продажи.ПриОпределенииТипаДокументаСоздаваемогоДокументаПомощникПродаж(ЭтотОбъект, ПустаяСсылкаДокумента);
КонецЕсли;
ПараметрыОтбора.Вставить("УчитыватьГруппыСкладов", Истина);
ПараметрыОтбора.Вставить("ВыбранноеСоглашение", Объект.Соглашение);
ПараметрыОтбора.Вставить("ПустаяСсылкаДокумента", ПустаяСсылкаДокумента);
ПараметрыОтбора.Вставить("ХозяйственныеОперации", ПараметрОтбораХозяйственныеОперации);
УсловияПродажПоУмолчанию = ПродажиСервер.ПолучитьУсловияПродажПоУмолчанию(Объект.Партнер, ПараметрыОтбора);
Если УсловияПродажПоУмолчанию <> Неопределено Тогда
Если НЕ ИспользоватьСоглашенияСКлиентами
Или (Объект.Соглашение <> УсловияПродажПоУмолчанию.Соглашение
И ЗначениеЗаполнено(УсловияПродажПоУмолчанию.Соглашение)) Тогда
ЗаполнитьДанныеПоПартнеру = Ложь;
Объект.Соглашение = УсловияПродажПоУмолчанию.Соглашение;
ЗаполнитьУсловияПродаж(УсловияПродажПоУмолчанию);
ЗаполнитьНалогообложениеНДСПродажи();
Если ИспользоватьСоглашенияСКлиентами Тогда
СоглашениеПриИзмененииСервер();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", " Цена, СтавкаНДС, ВидЦены, СрокПоставки");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки", "КоличествоУпаковок");
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку", Неопределено);
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(Объект.Товары,
,
ПараметрыЗаполнения,
СтруктураДействий);
КонецЕсли;
Иначе
Объект.Соглашение = УсловияПродажПоУмолчанию.Соглашение;
КонецЕсли;
Если ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5
И ЗначениеЗаполнено(УсловияПродажПоУмолчанию.Соглашение)
И УсловияПродажПоУмолчанию.ВозможнаРеализацияБезПереходаПраваСобственности
И Не ЭтоРеализация(Объект.ВариантОформленияДокументов) Тогда
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОтгрузкаТоваровКлиенту;
КонецЕсли;
ХозяйственнаяОперацияПриИзмененииСервер(Ложь);
КонецЕсли;
Если ЗаполнитьДанныеПоПартнеру
И ЗначениеЗаполнено(Объект.Партнер) Тогда
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Объект.Партнер, Объект.Контрагент);
БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Объект.Контрагент);
ПартнерыИКонтрагенты.ЗаполнитьКонтактноеЛицоПартнераПоУмолчанию(Объект.Партнер, Объект.КонтактноеЛицо);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьУсловияПродажПоСоглашению()
УсловияПродаж = ПродажиСервер.ПолучитьУсловияПродаж(Объект.Соглашение, Истина);
ЗаполнитьУсловияПродаж(УсловияПродаж);
Если ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5
И УсловияПродаж.ВозможнаРеализацияБезПереходаПраваСобственности
И Не ЭтоРеализация(Объект.ВариантОформленияДокументов) Тогда
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ОтгрузкаТоваровКлиенту;
КонецЕсли;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", Объект.Дата);
ПараметрыЗаполнения.Вставить("Валюта", Объект.Валюта);
ПараметрыЗаполнения.Вставить("Организация", Объект.Организация);
ПараметрыЗаполнения.Вставить("Соглашение", Объект.Соглашение);
ПараметрыЗаполнения.Вставить("НалогообложениеНДС", Объект.НалогообложениеНДС);
ПараметрыЗаполнения.Вставить("ВозвращатьМногооборотнуюТару", Объект.ВернутьМногооборотнуюТару);
ПараметрыЗаполнения.Вставить("РассчитыватьНаборы", Истина);
ПараметрыЗаполнения.Вставить("ПоляЗаполнения", "Цена, СтавкаНДС, ВидЦены, СрокПоставки");
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСумму", "КоличествоУпаковок");
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуРучнойСкидки", "КоличествоУпаковок");
СтруктураДействий.Вставить("ОчиститьАвтоматическуюСкидку", Неопределено);
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
ЦеныПредприятияЗаполнениеСервер.ЗаполнитьЦены(Объект.Товары, , ПараметрыЗаполнения, СтруктураДействий);
Для каждого ТекущаяСтрока Из Объект.Товары Цикл
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
КонецЦикла;
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Объект.Организация;
СтруктураПараметров.БанковскийСчет = Объект.БанковскийСчет;
СтруктураПараметров.НаправлениеДеятельности = Объект.НаправлениеДеятельности;
Объект.БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
Объект.БанковскийСчетКонтрагента = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Объект.Контрагент);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьУсловияПродаж(Знач УсловияПродаж)
Если УсловияПродаж = Неопределено Тогда
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(УсловияПродаж.ГрафикОплаты) Тогда
Объект.ГрафикОплаты = УсловияПродаж.ГрафикОплаты;
КонецЕсли;
Объект.ВернутьМногооборотнуюТару = УсловияПродаж.ВозвращатьМногооборотнуюТару;
ЗаполняемыеСвойства = "Валюта, ХозяйственнаяОперация, ЦенаВключаетНДС, СрокВозвратаМногооборотнойТары,
|ТребуетсяЗалогЗаТару, ГруппаФинансовогоУчета,ВалютаВзаиморасчетов";
ЗаполнитьЗначенияСвойств(Объект, УсловияПродаж, ЗаполняемыеСвойства);
Если ЗначениеЗаполнено(УсловияПродаж.ЧастотаЗаказа) Тогда
Объект.ДатаСледующегоЗаказа = ТекущаяДатаСеанса() + УсловияПродаж.ЧастотаЗаказа*86400;
КонецЕсли;
ИзмененаОрганизация = ЗначениеЗаполнено(УсловияПродаж.Организация)
И УсловияПродаж.Организация <> Объект.Организация;
ИзмененаФормаОплаты = ЗначениеЗаполнено(УсловияПродаж.ФормаОплаты)
И УсловияПродаж.ФормаОплаты <> Объект.ФормаОплаты;
Объект.ФормаОплаты = УсловияПродаж.ФормаОплаты;
Если ИзмененаОрганизация Тогда
Объект.Организация = УсловияПродаж.Организация;
КонецЕсли;
Если ИзмененаОрганизация
Или ИзмененаФормаОплаты Тогда
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Объект.Организация;
Объект.БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Объект.Организация;
СтруктураПараметров.ФормаОплаты = Объект.ФормаОплаты;
Объект.Касса = ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров);
КонецЕсли;
Если Не УсловияПродаж.Типовое Тогда
Если ЗначениеЗаполнено(УсловияПродаж.Контрагент) Тогда
Объект.Контрагент = УсловияПродаж.Контрагент;
КонецЕсли;
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Объект.Партнер, Объект.Контрагент);
Если Не УсловияПродаж.Типовое Тогда
Если ЗначениеЗаполнено(УсловияПродаж.КонтактноеЛицо)
И НЕ ЗначениеЗаполнено(Объект.КонтактноеЛицо) Тогда
Объект.КонтактноеЛицо = УсловияПродаж.КонтактноеЛицо;
КонецЕсли;
КонецЕсли;
ПартнерыИКонтрагенты.ЗаполнитьКонтактноеЛицоПартнераПоУмолчанию(Объект.Партнер, Объект.КонтактноеЛицо);
Объект.Договор = ДоговорПоУмолчанию();
ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Объект.Договор, Объект.БанковскийСчет, Объект.БанковскийСчетКонтрагента);
Если ЗначениеЗаполнено(УсловияПродаж.Склад) Тогда
Объект.Склад = УсловияПродаж.Склад;
СтруктураОтветственного = ПродажиСервер.ПолучитьОтветственногоПоСкладу(Объект.Склад);
Если СтруктураОтветственного <> Неопределено Тогда
Объект.Отпустил = СтруктураОтветственного.Ответственный;
Объект.ОтпустилДолжность = СтруктураОтветственного.ОтветственныйДолжность;
КонецЕсли;
КонецЕсли;
Объект.СрокПоставки = УсловияПродаж.СрокПоставки;
Если ЗначениеЗаполнено(УсловияПродаж.СрокПоставки)
И ИспользоватьРасширенныеВозможностиЗаказаКлиента
И ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента Тогда
ДатаОтгрузкиВСтроке = Дата(1,1,1);
ДатаНачала = ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, ТекущаяДатаСеанса());
ДатаОкончания = ОбщегоНазначенияУТКлиентСервер.РассчитатьДатуОкончанияПериода(ДатаНачала,
Перечисления.Периодичность.День,
УсловияПродаж.СрокПоставки);
ДатаОтгрузкиВСтроке = ДатаОкончания + 1;
Если Объект.НеОтгружатьЧастями Тогда
Объект.ДатаОтгрузки = ДатаОтгрузкиВСтроке;
КонецЕсли;
Для Каждого Строка Из Объект.Товары Цикл
Строка.ДатаОтгрузки = ДатаОтгрузкиВСтроке;
КонецЦикла;
КонецЕсли;
Если Не ЗначениеЗаполнено(УсловияПродаж.ИспользуютсяДоговорыКонтрагентов)
Или Не УсловияПродаж.ИспользуютсяДоговорыКонтрагентов Тогда
Объект.ОплатаВВалюте = УсловияПродаж.ОплатаВВалюте;
Иначе
Объект.ОплатаВВалюте = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Договор, "ОплатаВВалюте");
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область УсловияОплаты
&НаСервере
Процедура УстановитьВидимостьРеквизитовОплаты()
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение
Или ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация)
Или ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация) Тогда
ВидимостьЭлемента = Ложь;
Иначе
ВидимостьЭлемента = Истина;
КонецЕсли;
Элементы.ГруппаОплата.Видимость = ВидимостьЭлемента;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьНаправленияДеятельности()
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
ВидимостьЭлемента = Ложь;
Иначе
ВидимостьЭлемента = Истина;
КонецЕсли;
Элементы.НаправлениеДеятельности.Видимость = ВидимостьЭлемента;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьБанковскийСчет()
ВариантОформленияНеКоммерческоеПредложение
= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.БанковскийСчет.Видимость = ВариантОформленияНеКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьГруппаФинУчета()
ВариантОформленияНеКоммерческоеПредложение
= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.ГруппаФинансовогоУчета.Видимость = ВариантОформленияНеКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьМногооборотнойТары()
ВариантОформленияНеКоммерческоеПредложение
= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.ДополнитьМногооборотнойТарой.Видимость = ВариантОформленияНеКоммерческоеПредложение;
Элементы.ГруппаТара.Видимость = ВариантОформленияНеКоммерческоеПредложение;
Элементы.ГруппаТребуетсяЗалогЗаТару.Видимость = ВариантОформленияНеКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьПодразделения()
ВариантОформленияНеКоммерческоеПредложение
= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.Подразделение.Видимость = ВариантОформленияНеКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСклада()
ВариантОформленияНеКоммерческоеПредложение
= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.Склад.Видимость = ВариантОформленияНеКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСоглашенияСКлиентом()
ВариантОформленияНеКоммерческоеПредложение
= Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.Соглашение.Видимость = ВариантОформленияНеКоммерческоеПредложение;
Элементы.ТоварыЗаполнитьЦеныПоСоглашению.Видимость = ВариантОформленияНеКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьСрокДействия()
ВариантОформленияКоммерческоеПредложение
= Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.СрокДействия.Видимость = ВариантОформленияКоммерческоеПредложение;
Элементы.НеМожетВыкупатьсяЧастично.Видимость = ВариантОформленияКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьКомандыЗаполненияВидаЦенПоДоговору()
Элементы.ТоварыЗаполнитьЦеныПоДоговору.Видимость = Объект.КомиссионныеПродажи25;
Элементы.ТоварыЗаполнитьЦеныПоСоглашению.Видимость = Не Объект.КомиссионныеПродажи25;
КонецПроцедуры
#КонецОбласти
#Область ВариантыОформленияДокументов
&НаСервере
Процедура ВариантОформленияДокументовПриИзмененииСервер()
УстановитьДоступностьКомандОбеспечения();
ЗаполнитьСписокВыбораОпераций(Истина);
УстановитьПараметрыВыбораСоглашения();
Если Объект.Товары.Количество() > 0 Тогда
ЗаполнитьВариантОформленияВТабличнойЧастиСервер();
КонецЕсли;
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("КартинкаНесколькоСкладов");
МассивЭлементов.Добавить("НадписьНесколькоСкладов");
МассивЭлементов.Добавить("ДекорацияРеквизитыПечатиРеализации");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Видимость",
Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение);
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
Элементы.ГруппаДополнительныеРеквизиты.ТекущаяСтраница = Элементы.ГруппаДополнительныеРеквизитыКоммерческоеПредложение;
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента Тогда
Элементы.ГруппаДополнительныеРеквизиты.ТекущаяСтраница = Элементы.ГруппаДополнительныеРеквизитыЗаказКлиента;
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг Тогда
Элементы.ГруппаДополнительныеРеквизиты.ТекущаяСтраница = Элементы.ГруппаДополнительныеРеквизитыРеализацияТоваровУслуг;
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг Тогда
Элементы.ГруппаДополнительныеРеквизиты.ТекущаяСтраница = Элементы.ГруппаДополнительныеРеквизитыЗаказКлиентаРеализацияТоваровУслуг;
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю Тогда
Элементы.ГруппаДополнительныеРеквизиты.ТекущаяСтраница = Элементы.ГруппаДополнительныеРеквизитыПередачаТоваровХранителю;
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
Элементы.ГруппаДополнительныеРеквизиты.ТекущаяСтраница = Элементы.ГруппаДополнительныеРеквизитыЗаказКлиентаПередачаТоваровХранителю;
КонецЕсли;
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
Элементы.АдресДоставкиСамовывоз.Видимость = Ложь;
Элементы.ГруппаСпособДоставкиПеревозчик.Видимость = Ложь;
Элементы.СтраницыДоставки.ТекущаяСтраница = Элементы.СтраницаДоставкаКоммерческоеПредложение;
Иначе
Элементы.АдресДоставкиСамовывоз.Видимость = Истина;
ДоставкаТоваров.ЗаполнитьРеквизитыДоставки(Элементы, "Партнер", Объект);
КонецЕсли;
Объект.КомиссионныеПродажи25 =
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
И (Не ИспользоватьСоглашенияСКлиентами Или ПродажиСервер.ЭтоСоглашениеПоНовойКомиссии(Объект.Соглашение));
ИспользоватьДоговоры =
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи
Или (Объект.КомиссионныеПродажи25 И Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
ПродажиСервер.УстановитьОтметкуНезаполненногоДоговора(Элементы, "Договор", ИспользоватьДоговоры);
УстановитьВидимостьСоглашенияСКлиентом();
УстановитьВидимостьМногооборотнойТары();
УстановитьВидимостьСрокДействия();
УстановитьВидимостьСклада();
УстановитьВидимостьПодразделения();
УстановитьВидимостьБанковскийСчет();
УстановитьВидимостьГруппаФинУчета();
УстановитьВидимостьГруппаОплатаОтгрузкаПараметрыПечати();
УстановитьВидимостьРеквизитовОплаты();
УстановитьВидимостьНаправленияДеятельности();
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект,
Обработки.ПомощникПродаж));
УстановитьВидимостьЭлементовСерий();
ЗаполнитьСтатусыУказанияСерий();
УстановитьВидимостьЭлементовФормыДатОтгрузки();
ЗаполнитьСписокВыбораВариантаОформленияДокументовПродажи();
ВзаиморасчетыСервер.ПриИзмененииПараметровМеханизма(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВариантОформленияВТабличнойЧастиСервер(ЗаполнитьСЗаменой = Истина)
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если ЗаполнитьСЗаменой
Или Не ЗначениеЗаполнено(ТекСтрока.ВариантОформления) Тогда
ЗаполнитьВариантОформленияВСтрокеТабличнойЧасти(ТекСтрока, Объект.ВариантОформленияДокументов, Объект.Дата, Объект.НеОтгружатьЧастями);
Если ТекСтрока.ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
Или ТекСтрока.ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
ТекСтрока.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.Отгрузить;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого ТекСтрока Из Объект.Серии Цикл
Если ЗаполнитьСЗаменой
Или Не ЗначениеЗаполнено(ТекСтрока.ВариантОформления) Тогда
ТекСтрока.ВариантОформления = Объект.ВариантОформленияДокументов;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ЗаполнитьВариантОформленияВСтрокеТабличнойЧасти(ТекСтрока, ВариантОформленияДокументов, Дата, НеОтгружатьЧастями)
Если ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг")
Или ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю")
Тогда
Если ТекСтрока.ДатаОтгрузки = НачалоДня(Дата) Или НеОтгружатьЧастями
Или ТекСтрока.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Услуга")
Или ТекСтрока.ТипНоменклатуры = ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа") Тогда
ТекСтрока.ВариантОформления = ВариантОформленияДокументов;
Иначе
ТекСтрока.ВариантОформления = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента");
КонецЕсли;
Иначе
ТекСтрока.ВариантОформления = ВариантОформленияДокументов;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьВариантОформленияДокументовПродажиПоУмолчанию()
Если Объект.СоздаватьЗаказКлиента
И ИспользоватьЗаказыКлиентов
И Объект.СоздаватьДокументПродажи Тогда
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг;
ИначеЕсли Объект.СоздаватьДокументПродажи Тогда
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг;
ИначеЕсли Объект.СоздаватьЗаказКлиента
И ИспользоватьЗаказыКлиентов
И Объект.СоздаватьПередачуТоваровХранителю Тогда
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю;
ИначеЕсли Объект.СоздаватьПередачуТоваровХранителю Тогда
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю;
ИначеЕсли ИспользоватьЗаказыКлиентов
И Объект.СоздаватьЗаказКлиента Тогда
Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента;
Иначе
Продажи.ПриУстановкеВариантаОформленияДокументовПродажиПоУмолчанию(ЭтотОбъект)
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ДатыОтгрузки
&НаКлиенте
Процедура ЗаполнитьДатуОтгрузки(Команда)
МассивВыделенныхСтрок = Элементы.Товары.ВыделенныеСтроки;
Если МассивВыделенныхСтрок.Количество() > 0 Тогда
ДатаОтгрузки = Объект.ДатаОтгрузки;
Оповещение = Новый ОписаниеОповещения("ЗаполнитьДатуОтгрузкиЗавершение", ЭтотОбъект, Новый Структура("МассивВыделенныхСтрок", МассивВыделенныхСтрок));
ОбщегоНазначенияУТКлиент.ВвестиДатуСКонтролемПустогоЗначения(ДатаОтгрузки, НСтр("ru='Введите дату отгрузки'"), ЧастиДаты.Дата, Оповещение);
Иначе
ТекстПредупреждения = НСтр("ru='В документе не выбраны строки для заполнения. Дата отгрузки не будет заполнена.'");
ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьДатуОтгрузкиЗавершение(ВыбраннаяДата, ДополнительныеПараметры) Экспорт
Если ВыбраннаяДата <> Неопределено И ЗначениеЗаполнено(ВыбраннаяДата) Тогда
ДатаОтгрузки = ВыбраннаяДата;
МассивВыделенныхСтрок = ДополнительныеПараметры.МассивВыделенныхСтрок;
ЗаполнитьДатуОтгрузкиСервер(ДатаОтгрузки, МассивВыделенныхСтрок);
ПродажиКлиент.ОповеститьОбОкончанииЗаполненияДатОтгрузки(ДатаОтгрузки, Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДатуОтгрузкиСервер(ДатаОтгрузки, МассивВыделенныхСтрок)
ОбеспечениеВДокументахСервер.ЗаполнитьРеквизитВКоллекции(Объект.Товары, "ДатаОтгрузки", ДатаОтгрузки, МассивВыделенныхСтрок);
КонецПроцедуры
#КонецОбласти
#Область Доставка
&НаСервере
Процедура ЗаполнитьРеквизитыДоставки(ИмяЭлементаФормы)
ПараметрыЗаполнения = ДоставкаТоваров.ПараметрыЗаполненияРеквизитов();
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг Тогда
ПараметрыЗаполнения.ИсточникСтатистики = Документы.РеализацияТоваровУслуг;
ИначеЕсли Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
ПараметрыЗаполнения.ИсточникСтатистики = Документы.ПередачаТоваровХранителю;
Иначе
ПараметрыЗаполнения.ИсточникСтатистики = Документы.ЗаказКлиента;
КонецЕсли;
Если ИмяЭлементаФормы = "Грузополучатель" Тогда
ПараметрыЗаполнения.ОчиститьРеквизитыДоставки = Ложь;
ПараметрыЗаполнения.УстановитьСпособДоставки = Ложь;
ПараметрыЗаполнения.УстановитьАдресДоставки = Ложь;
КонецЕсли;
ДоставкаТоваров.ЗаполнитьРеквизитыДоставки(Элементы, ИмяЭлементаФормы, Объект, ПараметрыЗаполнения);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьРеквизитыДоставкиПоОснованию(ДокументОбъект, ДокументОснование)
РеквизитыДоставки = ДоставкаТоваровКлиентСервер.ПолучитьПустуюСтруктуруРеквизитовДоставки();
Если ПолучитьФункциональнуюОпцию("ИспользоватьРеализациюПоНесколькимЗаказам") Тогда
МассивСсылок = Новый Массив;
МассивСсылок.Добавить(ДокументОснование);
РеквизитыШапки = Новый Структура;
ПродажиВызовСервера.СформироватьДанныеЗаполненияРеализации(МассивСсылок, ДокументОбъект.Метаданные().Имя, РеквизитыШапки);
ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(РеквизитыШапки, РеквизитыДоставки, Ложь);
Иначе
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками",
ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками"));
Запрос.УстановитьПараметр("ИспользоватьСоглашенияСКлиентами",
ПолучитьФункциональнуюОпцию("ИспользоватьСоглашенияСКлиентами"));
Если ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.ПередачаТоваровХранителю") Тогда
Обработчик = Документы.ПередачаТоваровХранителю.ОбработчикДействийПоТипуЗаказа(ТипЗнч(ДокументОснование));
Запрос.УстановитьПараметр("ДокументОснование", ДокументОснование);
ИначеЕсли ТипЗнч(ДокументОбъект) = Тип("ДокументОбъект.РеализацияТоваровУслуг") Тогда
Обработчик = Документы.РеализацияТоваровУслуг;
Запрос.УстановитьПараметр("ЗаказКлиента", ДокументОснование);
Запрос.УстановитьПараметр("ВводитьНаОснованииНепроведенного", Ложь);
Иначе
Возврат;
КонецЕсли;
Запрос.Текст = Обработчик.ТекстЗапросаЗаполненияНаОснованииЗаказа();
РезультатЗапроса = Запрос.ВыполнитьПакет();
РеквизитыШапки = РезультатЗапроса[0].Выбрать();
РеквизитыШапки.Следующий();
КонецЕсли;
ДоставкаТоваров.ДополнитьРеквизитамиДоставкиДанныеЗаполнения(РеквизитыДоставки, РеквизитыШапки);
ЗаполнитьЗначенияСвойств(ДокументОбъект, РеквизитыДоставки);
КонецПроцедуры
&НаСервере
Процедура ОсобыеУсловияПеревозкиПриИзмененииСервер()
ДоставкаТоваров.ОсобыеУсловияПеревозкиПриИзменении(Элементы, Объект);
КонецПроцедуры
&НаСервере
Процедура ДополнитьИнформациюПоДоставкеКонтактамиСервер()
ДоставкаТоваров.ДополнитьИнформациюПоДоставкеКонтактами(Объект);
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаСервере
Процедура ИнициализироватьПомощникПродаж()
Модифицированность = Ложь;
ДокументыСформированы = Ложь;
ТолькоПросмотрУстановлен = Ложь;
Объект.НеЗадаватьВопросОбеспечение = Ложь;
Объект.Дата = ТекущаяДатаСеанса();
Объект.Товары.Очистить();
Объект.ЭтапыГрафикаОплаты.Очистить();
Объект.СкидкиНаценки.Очистить();
Объект.Серии.Очистить();
Объект.Документы.Очистить();
Объект.ДополнительныеРеквизитыКоммерческогоПредложения.Очистить();
Объект.ДополнительныеРеквизитыЗаказа.Очистить();
Объект.ДополнительныеРеквизитыРеализации.Очистить();
Объект.ДополнительныеРеквизитыАкта.Очистить();
Объект.ДополнительныеРеквизитыПередачиТоваров.Очистить();
Объект.ДополнительныеРеквизитыОтгрузкиТоваров.Очистить();
ВидыЦен.Очистить();
Если ОформляласьПродажаРозничномуКлиенту Тогда
Объект.Партнер = Справочники.Партнеры.РозничныйПокупатель;
Иначе
Объект.Партнер = Неопределено;
КонецЕсли;
Объект.Соглашение = Неопределено;
Объект.Организация = Неопределено;
Объект.БанковскийСчет = Неопределено;
Объект.Склад = Неопределено;
Объект.ЦенаВключаетНДС = Неопределено;
Объект.Контрагент = Неопределено;
Объект.Договор = Неопределено;
Объект.Сделка = Неопределено;
Объект.ГрафикОплаты = Неопределено;
Объект.ДополнительнаяИнформация = Неопределено;
Объект.ФормаОплаты = Неопределено;
Объект.БанковскийСчет = Неопределено;
Объект.БанковскийСчетКонтрагента = Неопределено;
Объект.Касса = Неопределено;
Объект.АдресДоставки = Неопределено;
Объект.НалогообложениеНДС = Неопределено;
Объект.Комментарий = Неопределено;
Объект.НомерПоДаннымКлиента = Неопределено;
Объект.ДатаПоДаннымКлиента = Неопределено;
Объект.Грузоотправитель = Неопределено;
Объект.Грузополучатель = Неопределено;
Объект.БанковскийСчетГрузоотправителя = Неопределено;
Объект.БанковскийСчетГрузополучателя = Неопределено;
Объект.ГруппаФинансовогоУчета = Неопределено;
Объект.КартаЛояльности = Неопределено;
Объект.Автомобиль = Неопределено;
Объект.ДоверенностьВыдана = Неопределено;
Объект.ДоверенностьДата = Неопределено;
Объект.ДоверенностьЛицо = Неопределено;
Объект.ДоверенностьНомер = Неопределено;
Объект.Отпустил = Неопределено;
Объект.ОтпустилДолжность = Неопределено;
Объект.Подразделение = Неопределено;
Объект.Основание = Неопределено;
Объект.СрокДоставки = Неопределено;
Объект.Водитель = Неопределено;
Объект.ВариантОформленияДокументов = Неопределено;
Объект.СуммаДокумента = Неопределено;
Объект.СкидкиРассчитаны = Неопределено;
Объект.ВернутьМногооборотнуюТару = Неопределено;
Объект.СрокВозвратаМногооборотнойТары = Неопределено;
Объект.ТребуетсяЗалогЗаТару = Неопределено;
Объект.ПорядокРасчетов = Неопределено;
Объект.НеОтгружатьЧастями = Истина;
Объект.ДатаОтгрузки = ТекущаяДатаСеанса();
Объект.НаправлениеДеятельности = Неопределено;
Объект.Менеджер = Пользователи.ТекущийПользователь();
Объект.Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Объект.Организация);
Объект.Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Объект.Организация;
СтруктураПараметров.БанковскийСчет = Объект.БанковскийСчет;
Объект.БанковскийСчет = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
ИспользоватьНесколькоКасс = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоКасс");
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияКассыОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Объект.Организация;
СтруктураПараметров.ФормаОплаты = Объект.ФормаОплаты;
СтруктураПараметров.Касса = Объект.Касса;
Объект.Касса = ?(ИспользоватьНесколькоКасс,
ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию(СтруктураПараметров),
ЗначениеНастроекПовтИсп.ПолучитьКассуОрганизацииПоУмолчанию());
Объект.Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Объект.Склад, ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовПродажи"));
Объект.Подразделение = ЗначениеНастроекПовтИсп.ПодразделениеПользователя(Объект.Менеджер, Объект.Подразделение);
Партнер = Объект.Партнер;
ОбщегоНазначенияУТ.ОбработкаЗаполнения(Объект, Новый Структура, Истина);
НаправленияДеятельностиСервер.ПриЧтенииСозданииНаСервере(ЭтотОбъект);
УстановитьВариантОформленияДокументовПродажиПоУмолчанию();
ВзаиморасчетыСервер.ФормаПриСозданииНаСервере(ЭтотОбъект);
ЗаполнитьУсловияПродажПоУмолчанию();
Если Не ЗначениеЗаполнено(Объект.ХозяйственнаяОперация) Тогда
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.РеализацияКлиенту;
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Склад) Тогда
СкладПриИзмененииСервер(Истина);
КонецЕсли;
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить("Валюта");
МассивРеквизитов.Добавить("ВалютаВзаиморасчетов");
МассивРеквизитов.Добавить("Партнер");
МассивРеквизитов.Добавить("Договор");
МассивРеквизитов.Добавить("НаправлениеДеятельности");
МассивРеквизитов.Добавить("Контрагент");
МассивРеквизитов.Добавить("Организация");
МассивРеквизитов.Добавить("Соглашение");
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, МассивРеквизитов);
ОбновитьОграничениеЗадолженности();
СтруктураОснования = СтруктураОснованияДляПечати();
ЗаполнитьЗначенияСвойств(Объект, СтруктураОснования);
ПараметрыПечати = Новый Структура("ХозяйственнаяОперация, Договор", Объект.ХозяйственнаяОперация, Объект.Договор);
ТаблицаОснованийДляПечати.Загрузить(Обработки.ПомощникПродаж.ТаблицаОснованийДляПечати(ПараметрыПечати));
СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Объект.Склад);
Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Доступность = СкладГруппа;
Если Не ИспользоватьСоглашенияСКлиентами
И ВидыЦен.Количество() > 0 Тогда
ВидЦеныПоУмолчанию = ВидыЦен[0].Значение;
КонецЕсли;
ЗаголовокКорзины = НСтр("ru = 'Корзина'");
ВариантОформленияДокументовПриИзмененииСервер();
ОбновитьГиперссылкуИнформационнойНадписиФормируемыеДокументы();
УстановитьТолькоПросмотрЭлементовФормы(Ложь);
СкидкиНаценкиЗаполнениеСервер.НастроитьКомандуПоказатьСообщения(Объект, Элементы.ПоказатьСообщения);
УстановитьВидимостьЭлементовФормыДатОтгрузки();
ОбновитьДоступностьЭлементовВозвратнойТары(ЭтотОбъект);
ЗаполнитьСлужебныеРеквизитыФормыДокумента();
Если НЕ ЗначениеЗаполнено(Объект.ОплатаВВалюте) Тогда
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "Договор");
КонецЕсли;
ОбновитьИнформациюДосьеПартнераРасчеты();
ОбновитьИнформациюДосьеПартнераКонтакты();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура СброситьПометкиКомандШапки(Элементы)
Элементы.ПерейтиПартнер.Пометка = Ложь;
Элементы.ПерейтиКорзина.Пометка = Ложь;
Элементы.ПерейтиОтгрузкаОплата.Пометка = Ложь;
Элементы.ПерейтиДокументы.Пометка = Ложь;
Элементы.ПерейтиДоставка.Пометка = Ложь;
КонецПроцедуры
&НаСервере
Процедура СкладПриИзмененииСервер(Инициализация = Ложь)
СкладГруппа = Справочники.Склады.ЭтоГруппаИСкладыИспользуютсяВТЧДокументовПродажи(Объект.Склад);
СкладыСервер.ЗаполнитьСкладыВТабличнойЧасти(Объект.Склад, СкладГруппа, Объект.Товары, Ложь);
Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Доступность = СкладГруппа;
УстановитьПараметрыВыбораТоварыСклад();
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект,
Обработки.ПомощникПродаж));
УстановитьВидимостьЭлементовСерий();
ЗаполнитьСтатусыУказанияСерий();
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов,
ВсегоСкладов);
Если Не Инициализация Тогда
ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьПараметрыВыбораТоварыСклад()
Элементы.ТоварыСклад.ПараметрыВыбора = Новый ФиксированныйМассив(Новый Массив);
ОбщегоНазначенияУТКлиентСервер.ДобавитьПараметрВыбора(Элементы.ТоварыСклад, "Ссылка",
ДанныеВыбораСкладов(Объект.Склад));
КонецПроцедуры
&НаСервереБезКонтекста
Функция ДанныеВыбораСкладов(Склад)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Склады.Ссылка КАК Ссылка
|ИЗ
| Справочник.Склады КАК Склады
|ГДЕ
| Склады.Ссылка В ИЕРАРХИИ(&ГруппаСкладов)
| И Склады.ЭтоГруппа = ЛОЖЬ
| И Склады.ВыборГруппы <> ЗНАЧЕНИЕ(Перечисление.ВыборГруппыСкладов.Запретить)";
Запрос.УстановитьПараметр("ГруппаСкладов", Склад);
МассивСкладов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
Возврат МассивСкладов;
КонецФункции
&НаСервере
Процедура ПартнерПриИзмененииСервер()
МассивРеквизитов = Новый Массив;
Если ИспользоватьСоглашенияСКлиентами Тогда
МассивРеквизитов.Добавить("Валюта");
МассивРеквизитов.Добавить("ВалютаВзаиморасчетов");
МассивРеквизитов.Добавить("Договор");
МассивРеквизитов.Добавить("НаправлениеДеятельности");
МассивРеквизитов.Добавить("Контрагент");
МассивРеквизитов.Добавить("Организация");
МассивРеквизитов.Добавить("Соглашение");
ГрафикОплаты = Объект.ГрафикОплаты;
ЗаполнитьСписокВыбораОпераций();
ЗаполнитьУсловияПродажПоУмолчанию();
ОбновитьОграничениеЗадолженности();
Если ЗначениеЗаполнено(Объект.Соглашение) Тогда
ВалютаДокумента = Объект.Валюта;
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
ОбновитьДоступностьЭлементовВозвратнойТары(ЭтотОбъект);
КонецЕсли;
УстановитьПараметрыВыбораСоглашения();
Иначе
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
ПартнерыИКонтрагенты.ЗаполнитьКонтрагентаПартнераПоУмолчанию(Объект.Партнер, Объект.Контрагент);
ПартнерыИКонтрагенты.ЗаполнитьКонтактноеЛицоПартнераПоУмолчанию(Объект.Партнер, Объект.КонтактноеЛицо);
КонецЕсли;
КонецЕсли;
Объект.БанковскийСчетКонтрагента = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Объект.Контрагент);
МассивРеквизитов.Добавить("Партнер");
ИзмененныеРеквизиты = ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, МассивРеквизитов);
Если ИзмененныеРеквизиты.Свойство("ПорядокРасчетов") Тогда
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
КонецЕсли;
СкладПриИзмененииСервер();
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары, СтруктураДействий);
НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект);
МногооборотнаяТараСервер.ОбновитьПризнакБезВозвратнойТары(Объект.Товары, Объект.ВернутьМногооборотнуюТару);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
ЗаполнитьСлужебныеРеквизитыФормыДокумента();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
УстановитьДоступностьДоговора();
ЗаполнитьОснованиеДляПечати();
Партнер = Объект.Партнер;
Если Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
ЗаполнитьРеквизитыДоставки("Партнер");
КонецЕсли;
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение,
Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
КонецЕсли;
Если ИспользоватьСоглашенияСКлиентами Тогда
ВариантИФлаг = Неопределено;
Если Объект.УпрощенноеОбеспечение Тогда
ВариантИФлаг = Новый Структура("ВариантОбеспечения,Обособленно", Объект.ВариантОбеспечения, Неопределено);
КонецЕсли;
ВариантОбеспеченияИФлагОбособленно = ПродажиСервер.ВариантОбеспеченияИФлагОбособленноПоУмолчанию(
Объект.Соглашение,
Объект.СтатусЗаказаКлиента,
ВариантИФлаг);
КонецЕсли;
ОбновитьИнформациюДосьеПартнераКонтакты();
ОбновитьИнформациюДосьеПартнераРасчеты();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьИтоговыеПоказатели(Форма)
Форма.СуммаВсего = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
Форма.Объект.Товары.Итог("СуммаСНДС"),
Форма.Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"));
Форма.СуммаНДС = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
Форма.Объект.Товары.Итог("СуммаНДС"),
Форма.Объект.Товары.Итог("СуммаНДСБезВозвратнойТары"));
Форма.СуммаАвтоСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
Форма.Объект.Товары.Итог("СуммаАвтоматическойСкидки"),
Форма.Объект.Товары.Итог("СуммаАвтоматическойСкидкиБезВозвратнойТары"));
Форма.СуммаРучнойСкидки = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
Форма.Объект.Товары.Итог("СуммаРучнойСкидки"),
Форма.Объект.Товары.Итог("СуммаРучнойСкидкиБезВозвратнойТары"));
СуммаБонусныхБалловКСписаниюВВалюте = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
Форма.Объект.Товары.Итог("СуммаБонусныхБалловКСписаниюВВалюте"),
Форма.Объект.Товары.Итог("СуммаБонусныхБалловКСписаниюВВалютеБезВозвратнойТары"));
Форма.СуммаСкидки = Форма.СуммаАвтоСкидки
+ Форма.СуммаРучнойСкидки
+ СуммаБонусныхБалловКСписаниюВВалюте;
СуммаВсего = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
Форма.Объект.Товары.Итог("Сумма"),
Форма.Объект.Товары.Итог("СуммаБезВозвратнойТары"));
Если СуммаВсего > 0 Тогда
Форма.ПроцентАвтоСкидки = Форма.СуммаАвтоСкидки * 100 / (СуммаВсего + Форма.СуммаСкидки);
Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / (СуммаВсего + Форма.СуммаСкидки);
Форма.ПроцентСкидки = Форма.ПроцентАвтоСкидки + Форма.ПроцентРучнойСкидки;
ИначеЕсли Форма.СуммаСкидки > 0 Тогда
Форма.ПроцентАвтоСкидки = Форма.СуммаАвтоСкидки * 100 / Форма.СуммаСкидки;
Форма.ПроцентРучнойСкидки = Форма.СуммаРучнойСкидки * 100 / Форма.СуммаСкидки;
Форма.ПроцентСкидки = 100;
Иначе
Форма.ПроцентАвтоСкидки = 0;
Форма.ПроцентРучнойСкидки = 0;
Форма.ПроцентСкидки = 0;
КонецЕсли;
ОтображатьИтогСуммыНДС = УчетНДСУПКлиентСервер.ОтображатьНДСВИтогахДокументаПродажи(Форма.Объект.НалогообложениеНДС);
Если ОтображатьИтогСуммыНДС Тогда
Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоСНДС;
Иначе
Форма.Элементы.ГруппаСтраницыВсего.ТекущаяСтраница = Форма.Элементы.СтраницаВсегоБезНДС;
КонецЕсли;
Форма.СуммаАвансаДоОбеспечения = 0;
Форма.СуммаПредоплатыДоОтгрузки = 0;
Форма.СуммаКредитаПослеОтгрузки = 0;
Форма.ПроцентАвансаДоОбеспечения = 0;
Форма.ПроцентПредоплатыДоОтгрузки = 0;
Форма.ПроцентКредитаПослеОтгрузки = 0;
СоответствиеВариантовОплаты = Новый Соответствие;
СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыКлиентом.АвансДоОбеспечения"),
Новый Структура("Сумма, Проценты", "СуммаАвансаДоОбеспечения", "ПроцентАвансаДоОбеспечения"));
СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыКлиентом.ПредоплатаДоОтгрузки"),
Новый Структура("Сумма, Проценты", "СуммаПредоплатыДоОтгрузки", "ПроцентПредоплатыДоОтгрузки"));
СоответствиеВариантовОплаты.Вставить(ПредопределенноеЗначение("Перечисление.ВариантыКонтроляОплатыКлиентом.КредитСдвиг"),
Новый Структура("Сумма, Проценты", "СуммаКредитаПослеОтгрузки", "ПроцентКредитаПослеОтгрузки"));
Для Каждого ТекСтрока Из Форма.Объект.ЭтапыГрафикаОплаты Цикл
ИменаЭлементов = СоответствиеВариантовОплаты[ТекСтрока.ВариантОплаты];
Если ИменаЭлементов <> Неопределено Тогда
Форма[ИменаЭлементов.Сумма] = Форма[ИменаЭлементов.Сумма] + ТекСтрока.СуммаПлатежа
+ ?(Форма.Объект.ТребуетсяЗалогЗаТару, ТекСтрока.СуммаЗалогаЗаТару, 0);
КонецЕсли;
КонецЦикла;
СуммаВсегоПоЭтапам = Форма.СуммаАвансаДоОбеспечения + Форма.СуммаПредоплатыДоОтгрузки
+ Форма.СуммаКредитаПослеОтгрузки;
Форма.СуммаЗалогаЗаТару = ?(Форма.Объект.ТребуетсяЗалогЗаТару,
Форма.Объект.Товары.Итог("СуммаСНДС")- Форма.Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"),
0);
Если СуммаВсегоПоЭтапам <> 0 Тогда
Форма.ПроцентАвансаДоОбеспечения = (Форма.СуммаАвансаДоОбеспечения/СуммаВсегоПоЭтапам) * 100;
Форма.ПроцентПредоплатыДоОтгрузки = (Форма.СуммаПредоплатыДоОтгрузки/СуммаВсегоПоЭтапам) * 100;
Форма.ПроцентКредитаПослеОтгрузки = (Форма.СуммаКредитаПослеОтгрузки/СуммаВсегоПоЭтапам) * 100;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ХозяйственнаяОперацияПриИзмененииСервер(ВызовПоКоманде = Истина)
УстановитьПараметрыВыбораСоглашения();
УстановитьСвязиПараметровВыбораДоговора();
Если ВызовПоКоманде Тогда
ЗаполнитьДоговорПоУмолчанию();
КонецЕсли;
Если ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
Если ИспользоватьРучныеСкидкиВПродажах
Или ИспользоватьАвтоматическиеСкидкиВПродажах Тогда
СкидкиНаценкиЗаполнениеСервер.ОтменитьСкидки(Объект, "Товары", Истина);
КонецЕсли;
Если Объект.ТребуетсяЗалогЗаТару Тогда
Объект.ТребуетсяЗалогЗаТару = Ложь;
КонецЕсли;
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
Объект.КомиссионныеПродажи25 =
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
И (Не ИспользоватьСоглашенияСКлиентами Или ПродажиСервер.ЭтоСоглашениеПоНовойКомиссии(Объект.Соглашение));
ИспользоватьДоговоры =
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи
Или (Объект.КомиссионныеПродажи25 И Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
ПродажиСервер.УстановитьОтметкуНезаполненногоДоговора(Элементы, "Договор", ИспользоватьДоговоры);
УстановитьЗаголовокРеквизитовПечати();
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
ЗаполнитьСлужебныеРеквизитыФормыДокумента();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
УстановитьВидимостьЭлементовПоОперацииСервер();
ВзаиморасчетыСервер.ПриИзмененииПараметровМеханизма(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовПоОперацииСервер()
Перем МассивВсехРеквизитов;
Перем МассивРеквизитовОперации;
Документы.ЗаказКлиента.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(Объект.ХозяйственнаяОперация,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
ДенежныеСредстваСервер.УстановитьВидимостьЭлементовПоМассиву(Элементы,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
ЭтоОперацияПередачи = ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация);;
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ТоварыРассчитатьСкидкиНаценки");
МассивЭлементов.Добавить("ТоварыОтменитьРучныеСкидки");
МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидку");
МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидкуВыделенныхСтрок");
МассивЭлементов.Добавить("ТоварыНазначитьАвтоматическиеСкидки");
МассивЭлементов.Добавить("ГруппаТоварыБонусныеБаллы");
МассивЭлементов.Добавить("ТоварыОткрытьИнформациюОСкидках");
МассивЭлементов.Добавить("КонтекстноеМенюТоварыОткрытьИнформациюОСкидках");
МассивЭлементов.Добавить("СчитатьКартуЛояльностиКлиент");
МассивЭлементов.Добавить("КартаЛояльности");
МассивЭлементов.Добавить("ПроцентРучнойСкидки");
МассивЭлементов.Добавить("СуммаРучнойСкидки");
МассивЭлементов.Добавить("ПроцентАвтоСкидки");
МассивЭлементов.Добавить("СуммаАвтоСкидки");
МассивЭлементов.Добавить("ПроцентСкидки");
МассивЭлементов.Добавить("СуммаСкидки");
МассивЭлементов.Добавить("СуммаПредоплатыДоОтгрузки");
МассивЭлементов.Добавить("ПроцентПредоплатыДоОтгрузки");
МассивЭлементов.Добавить("СуммаКредитаПослеОтгрузки");
МассивЭлементов.Добавить("ПроцентКредитаПослеОтгрузки");
МассивЭлементов.Добавить("НашДолгСуммаДолга");
МассивЭлементов.Добавить("ДолгКлиентаСуммаДолга");
МассивЭлементов.Добавить("СуммаДолга");
МассивЭлементов.Добавить("ПроцентДолга");
МассивЭлементов.Добавить("СуммаОплаты");
МассивЭлементов.Добавить("ПроцентОплаты");
МассивЭлементов.Добавить("СуммаОтгрузки");
МассивЭлементов.Добавить("ПроцентОтгрузки");
МассивЭлементов.Добавить("ТребуетсяЗалогЗаТару");
МассивЭлементов.Добавить("ДекорацияОтступТребуетсяЗалогЗаТару");
МассивЭлементов.Добавить("РеквизитыПечатьАкта");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Видимость", Не ЭтоОперацияПередачи);
Если ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
МассивЭлементов = Новый Массив;
ЭтоОперацияОтгрузкаТоваров = ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация);
МассивЭлементов.Добавить("ДополнительныеРеквизитыОтгрузкаТоваровКлиенту");
МассивЭлементов.Добавить("ДополнительныеРеквизитыОтгрузкаТоваровКлиенту1");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Видимость", ЭтоОперацияОтгрузкаТоваров);
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ДополнительныеРеквизитыПередачаТоваровХранителю");
МассивЭлементов.Добавить("ДополнительныеРеквизитыПередачаТоваровХранителю1");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Видимость", НЕ ЭтоОперацияОтгрузкаТоваров);
КонецЕсли;
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("СуммаАвансаДоОбеспечения");
МассивЭлементов.Добавить("ПроцентАвансаДоОбеспечения");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы,
МассивЭлементов,
"Видимость",
Не (ЭтоОперацияПередачи
Или ИспользоватьУпрощеннуюСхемуОплаты));
УстановитьВидимостьРеквизитовОплаты();
УстановитьВидимостьНаправленияДеятельности();
НоменклатураСервер.УстановитьПараметрыВыбораНоменклатуры(Объект.ХозяйственнаяОперация, Элементы.ТоварыНоменклатура);
УстановитьВидимостьПоляПартнер();
УстановитьДоступностьДоговора();
УстановитьВидимостьКомандыЗаполненияВидаЦенПоДоговору();
УстановитьВидимостьТоварыКоличествоУпаковокКВозврату();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьТоварыКоличествоУпаковокКВозврату()
Если Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов Тогда
ЭтоОперацияОтгрузкаТоваров = ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация);
Элементы.ТоварыКоличествоУпаковокКВозврату.Видимость = НЕ ЭтоОперацияОтгрузкаТоваров;
Если ЭтоОперацияОтгрузкаТоваров И Объект.Товары.Итог("КоличествоУпаковокКВозврату") > 0 Тогда
Для Каждого ТекСтрока Из Объект.Товары Цикл
ТекСтрока.КоличествоУпаковокКВозврату = 0;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий, Объект)
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСумму");
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Ложь));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПересчитатьКоличествоУпаковокОбъемПредыдущегоЗаказа(ТекущаяСтрока, КэшированныеЗначения)
Если ТекущаяСтрока["КоличествоОбъемПредыдущегоЗаказа"] = 0 Тогда
ТекущаяСтрока["КоличествоУпаковокОбъемПредыдущегоЗаказа"] = 0;
Иначе
Коэффициент = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьКоэффициентУпаковки(ТекущаяСтрока.Упаковка,
КэшированныеЗначения,
ТекущаяСтрока.Номенклатура).Коэффициент;
Если Коэффициент <> 0 Тогда
ТекущаяСтрока["КоличествоУпаковокОбъемПредыдущегоЗаказа"] = ТекущаяСтрока["КоличествоОбъемПредыдущегоЗаказа"]
/ Коэффициент;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПересчитатьКоличествоУпаковокКВозврату(ИдентификаторТекущейСтроки, КэшированныеЗначения)
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ИдентификаторТекущейСтроки);
Если ТекущаяСтрока["КоличествоКВозврату"] = 0 Тогда
ТекущаяСтрока["КоличествоУпаковокКВозврату"] = 0;
Иначе
Коэффициент = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьКоэффициентУпаковки(ТекущаяСтрока.Упаковка, КэшированныеЗначения, ТекущаяСтрока.Номенклатура).Коэффициент;
Если Коэффициент <> 0 Тогда
ТекущаяСтрока["КоличествоУпаковокКВозврату"] = ТекущаяСтрока["КоличествоКВозврату"] / Коэффициент;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура РассчитатьСуммуНДСВозврат(ТекущаяСтрока, ЦенаВключаетНДС)
СуммаНДС = 0;
СуммаВозврат = 0;
СуммаВозврат = ТекущаяСтрока.Цена * ТекущаяСтрока.КоличествоУпаковокКВозврату;
Если НЕ ЦенаВключаетНДС Тогда
СуммаНДС = ЦенообразованиеКлиентСервер.РассчитатьСуммуНДС(СуммаВозврат, ТекущаяСтрока.СтавкаНДС, ЦенаВключаетНДС);
КонецЕсли;
ТекущаяСтрока.СуммаСНДСВозврат = СуммаВозврат + СуммаНДС;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьРеквизитыПрогнозирования(ТекущаяСтрока)
СтруктураОчистки = Новый Структура;
СтруктураОчистки.Вставить("КоличествоПрогноз", 0);
СтруктураОчистки.Вставить("КоличествоУпаковокПрогноз", 0);
СтруктураОчистки.Вставить("ДатаПредыдущегоЗаказа", Неопределено);
СтруктураОчистки.Вставить("КоличествоПрогнозныйОстаток", 0);
СтруктураОчистки.Вставить("КоличествоДнейДоОкончанияЗапаса", 0);
СтруктураОчистки.Вставить("КоличествоОбъемПредыдущегоЗаказа", 0);
СтруктураОчистки.Вставить("КоличествоУпаковокОбъемПредыдущегоЗаказа", 0);
СтруктураОчистки.Вставить("СреднесуточнаяПродажа", 0);
СтруктураОчистки.Вставить("ЕдиницаИзмеренияПрогноз", Неопределено);
СтруктураОчистки.Вставить("ИндексИконкиВыбора", 0);
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтруктураОчистки);
КонецПроцедуры
&НаСервере
Функция ЗаполнитьСкладВВыделенныхСтрокахНаСервере(Знач МассивВыделенныхСтрок, Склад)
ЗаполненоСтрок = СкладыСервер.ЗаполнитьСкладыВВыделенныхСтроках(Объект.Товары, МассивВыделенныхСтрок, Склад);
Если ЗаполненоСтрок > 0 Тогда
ЗаполнитьСтатусыУказанияСерий();
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
ОбновитьКолонкуДоступноСервер();
КонецЕсли;
Возврат ЗаполненоСтрок;
КонецФункции
&НаСервере
Процедура СоглашениеПриИзмененииСервер()
ГрафикОплаты = Объект.ГрафикОплаты;
Объект.КомиссионныеПродажи25 = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Соглашение, "КомиссионныеПродажи25");
ЗаполнитьУсловияПродажПоСоглашению();
ОбновитьОграничениеЗадолженности();
ЗаполнитьСписокВыбораОпераций();
ВалютаДокумента = Объект.Валюта;
ХозяйственнаяОперацияПриИзмененииСервер(Ложь);
СкладПриИзмененииСервер();
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности,
Объект.Соглашение,
Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить("Валюта");
МассивРеквизитов.Добавить("ВалютаВзаиморасчетов");
МассивРеквизитов.Добавить("Партнер");
МассивРеквизитов.Добавить("Договор");
МассивРеквизитов.Добавить("НаправлениеДеятельности");
МассивРеквизитов.Добавить("Контрагент");
МассивРеквизитов.Добавить("Организация");
МассивРеквизитов.Добавить("Соглашение");
ИзмененныеРеквизиты = ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, МассивРеквизитов);
Если ИзмененныеРеквизиты.Свойство("ПорядокРасчетов") Тогда
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
КонецЕсли;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары, СтруктураДействий);
НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект);
МногооборотнаяТараСервер.ОбновитьПризнакБезВозвратнойТары(Объект.Товары, Объект.ВернутьМногооборотнуюТару);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
ЗаполнитьСлужебныеРеквизитыФормыДокумента();
УстановитьДоступностьДоговора();
ЗаполнитьОснованиеДляПечати();
ОбновитьДоступностьЭлементовВозвратнойТары(ЭтотОбъект);
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
ВариантИФлаг = Неопределено;
Если Объект.УпрощенноеОбеспечение Тогда
ВариантИФлаг = Новый Структура("ВариантОбеспечения,Обособленно", Объект.ВариантОбеспечения, Неопределено);
КонецЕсли;
ВариантОбеспеченияИФлагОбособленно = ПродажиСервер.ВариантОбеспеченияИФлагОбособленноПоУмолчанию(
Объект.Соглашение,
Объект.СтатусЗаказаКлиента,
ВариантИФлаг);
ЗаполнитьОбособленно = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Соглашение, "ОбеспечиватьЗаказыОбособленно");
ЗаполнитьТоварыПоСоглашениюСерверСЗамером();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
ОбновитьОграничениеЗадолженности();
ОбновитьИнформациюДосьеПартнераРасчеты();
КонецПроцедуры
&НаСервере
Процедура КонтрагентПриИзмененииСервер()
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "Контрагент");
Если Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
ЗаполнитьРеквизитыДоставки("Партнер");
КонецЕсли;
УстановитьДоступностьДоговора();
Если ЗначениеЗаполнено(Объект.Контрагент) Тогда
ЗаполнитьДоговорПоУмолчанию();
Объект.БанковскийСчетКонтрагента = ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Объект.Контрагент);
КонецЕсли;
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение,
Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДоговорПриИзмененииСервер()
ПродажиСервер.ЗаполнитьБанковскиеСчетаПоДоговору(Объект.Договор, Объект.БанковскийСчет,
Объект.БанковскийСчетКонтрагента);
ИзмененныеРеквизиты = ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "Договор");
Если ИзмененныеРеквизиты.Свойство("ПорядокРасчетов") Тогда
УстановитьСвойстваЭлементовПоПорядкуРасчетов();
КонецЕсли;
УстановитьВидимостьРеквизитовОплаты();
УстановитьВидимостьНаправленияДеятельности();
УстановитьВидимостьКомандыЗаполненияВидаЦенПоДоговору();
ЗаполнитьОснованиеДляПечати();
ОбновитьОграничениеЗадолженности();
ОбновитьИнформациюДосьеПартнераРасчеты();
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение,
Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииСервер()
УстановитьДоступностьДоговора();
ДенежныеСредстваСервер.ПроверитьЗаполнитьКассуОрганизацииПоВладельцу(Объект.Организация, Объект.Касса,
Объект.ФормаОплаты);
Если ЗначениеЗаполнено(Объект.Организация) Тогда
ЗаполнитьДоговорПоУмолчанию();
Если ИспользоватьНаправленияДеятельности Тогда
НаправленияДеятельностиСервер.ЗаполнитьНаправлениеПоУмолчанию(Объект.НаправлениеДеятельности, Объект.Соглашение,
Объект.Договор);
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
КонецЕсли;
ДенежныеСредстваСервер.ПроверитьЗаполнитьБанковскийСчетОрганизацииПоВладельцу(Объект.Организация,
Объект.БанковскийСчет,
Объект.ФормаОплаты,
Объект.НаправлениеДеятельности);
ДенежныеСредстваСервер.ПроверитьЗаполнитьКассуОрганизацииПоВладельцу(Объект.Организация,
Объект.Касса,
Объект.ФормаОплаты,
Объект.НаправлениеДеятельности);
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "Организация");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьБанковскийСчетКонтрагентаПоУмолчаниюСервер(Контрагент)
Возврат ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетКонтрагентаПоУмолчанию(Контрагент);
КонецФункции
&НаСервере
Процедура ПриИзмененииВалютыСервер(НоваяВалюта, ПересчитатьСуммы = Истина)
ЗаполнитьДоговорПоУмолчанию();
Если ПересчитатьСуммы Тогда
СтараяВалюта = ВалютаДокумента;
ДатаДокумента = ?(ЗначениеЗаполнено(Объект.Дата), Объект.Дата, ТекущаяДатаСеанса());
ВалютаРегламентированногоУчета = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Объект.Организация);
СтруктурыКурсов = ВзаиморасчетыСервер.КурсыВалютДляПересчета(ЭтотОбъект, СтараяВалюта, НоваяВалюта, ВалютаРегламентированногоУчета, ДатаДокумента);
СтруктураКурсовСтаройВалюты = СтруктурыКурсов.СтруктураКурсовСтаройВалюты;
СтруктураКурсовНовойВалюты = СтруктурыКурсов.СтруктураКурсовНовойВалюты;
Ценообразование.ПересчитатьСуммыТабличнойЧастиВВалюту(
Объект.Товары,
Объект.ЦенаВключаетНДС,
СтараяВалюта,
НоваяВалюта,
СтруктураКурсовСтаройВалюты,
СтруктураКурсовНовойВалюты,
Истина,
Истина);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
Ценообразование.РаспределитьСуммуПоЭтапамОплаты(
Объект,
Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"),
?(Объект.ТребуетсяЗалогЗаТару,
Объект.Товары.Итог("СуммаСНДС") - Объект.Товары.Итог("СуммаСНДСБезВозвратнойТары"), 0));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЦенаВключаетНДСПриИзмененииСервер(КэшированныеЗначения)
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения);
Если Не ИспользоватьСоглашенияСКлиентами Тогда
Если ВидыЦен.Количество() > 0 Тогда
ВидЦеныПоУмолчанию = ВидыЦен[0].Значение;
КонецЕсли;
КонецЕсли;
Для Каждого ТекущаяСтрока Из Объект.Товары Цикл
РассчитатьСуммуНДСВозврат(ТекущаяСтрока, Объект.ЦенаВключаетНДС);
КонецЦикла;
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаСервере
Процедура НалогообложениеНДСПриИзмененииСервер(КэшированныеЗначения = Неопределено)
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(Объект);
ПараметрыЗаполнитьСтавкуНДС = ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Функция СтруктураОснованияДляПечати()
СтруктураОснования = Обработки.ПомощникПродаж.СтруктураОснования(Объект, Объект.ПорядокРасчетов);
Если ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
Если ЗначениеЗаполнено(СтруктураОснования.Основание) Тогда
ТекстПередачи = СтруктураОснования.Основание + ", " + ?(Объект.ХозяйственнаяОперация
= Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию, НСтр("ru='передача на комиссию'"), НСтр(
"ru='передача на хранение'"));
Иначе
ТекстПередачи = ?(Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию,
НСтр("ru='Передача на комиссию'"), НСтр("ru='Передача на хранение'"));
КонецЕсли;
СтруктураОснования.Основание = ТекстПередачи;
КонецЕсли;
Возврат СтруктураОснования;
КонецФункции
&НаСервере
Процедура ОбработатьИзменениеПараметровСервер(ЗначенияПараметров)
ЗаполнитьЗначенияСвойств(Объект, ЗначенияПараметров);
ВариантИФлаг = Неопределено;
Если Объект.УпрощенноеОбеспечение Тогда
ВариантИФлаг = Новый Структура("ВариантОбеспечения,Обособленно", Объект.ВариантОбеспечения, Неопределено);
КонецЕсли;
ВариантОбеспеченияИФлагОбособленно = ПродажиСервер.ВариантОбеспеченияИФлагОбособленноПоУмолчанию(
Объект.Соглашение,
Объект.СтатусЗаказаКлиента,
ВариантИФлаг);
УстановитьДоступностьДоговора();
УправлениеСозданиемТранспортныхНакладных();
УправлениеСозданиемДоверенностей();
Если Не ЗначениеЗаполнено(Объект.ВариантОформленияДокументов) Тогда
УстановитьВариантОформленияДокументовПродажиПоУмолчанию();
КонецЕсли;
ВариантОформленияДокументовПриИзмененииСервер();
СтруктураДействий = Новый Структура;
ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий,
"ВариантОбеспечения,СкладОбязателен,ДатаОтгрузкиОбязательна");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, Неопределено);
ЗаполнитьСлужебныеРеквизитыФормыДокумента();
ОбновитьКолонкуДоступноСервер();
Если ЭтоРеализация(Объект.ВариантОформленияДокументов) Тогда
Если ИспользоватьСтатусыРеализацийТоваровУслуг
И Объект.СтатусРеализацииТоваровУслуг = Перечисления.СтатусыРеализацийТоваровУслуг.КПредоплате Тогда
Объект.Серии.Очистить();
УстановитьВидимостьЭлементовСерий();
ЗаполнитьСтатусыУказанияСерий();
КонецЕсли;
КонецЕсли;
Если Объект.УпрощенноеОбеспечение
Или Объект.НеОтгружатьЧастями Тогда
Объект.НеОтгружатьЧастями = Истина;
УстановитьВидимостьЭлементовФормыДатОтгрузки();
КонецЕсли;
УстановитьВидимостьЭлементовПоНастройкам();
Модифицированность = Истина;
ОбновитьКолонкуДоступноСервер();
КонецПроцедуры
&НаСервере
Процедура УстановитьТолькоПросмотрЭлементовФормы(Установить = Истина)
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("Склад");
МассивЭлементов.Добавить("Соглашение");
МассивЭлементов.Добавить("Партнер");
МассивЭлементов.Добавить("НастройкаВШапке");
МассивЭлементов.Добавить("ОткрытьПодбор");
МассивЭлементов.Добавить("Организация");
МассивЭлементов.Добавить("Контрагент");
МассивЭлементов.Добавить("Договор");
МассивЭлементов.Добавить("Сделка");
МассивЭлементов.Добавить("ВалютаДокументов");
МассивЭлементов.Добавить("ЦенаВключаетНДС");
МассивЭлементов.Добавить("ХозяйственнаяОперация");
МассивЭлементов.Добавить("НалогообложениеНДС");
МассивЭлементов.Добавить("КартаЛояльности");
МассивЭлементов.Добавить("Менеджер");
МассивЭлементов.Добавить("КонтактноеЛицо");
МассивЭлементов.Добавить("Подразделение");
МассивЭлементов.Добавить("БанковскийСчет");
МассивЭлементов.Добавить("ГруппаФинансовогоУчета");
МассивЭлементов.Добавить("НеОтгружатьЧастями");
МассивЭлементов.Добавить("ДополнительнаяИнформация");
МассивЭлементов.Добавить("Комментарий");
МассивЭлементов.Добавить("ЦенаВключаетНДС");
МассивЭлементов.Добавить("Товары");
МассивЭлементов.Добавить("ВернутьМногооборотнуюТару");
МассивЭлементов.Добавить("СрокВозвратаМногооборотнойТары");
МассивЭлементов.Добавить("ТребуетсяЗалогЗаТару");
МассивЭлементов.Добавить("ЗаполнитьПоПрогнозу");
МассивЭлементов.Добавить("СтраницаДоставка");
МассивЭлементов.Добавить("ГруппаДатаОтгрузкиНеОтгружатьЧастями");
МассивЭлементов.Добавить("НаправлениеДеятельности");
МассивЭлементов.Добавить("НомерПоДаннымКлиента");
МассивЭлементов.Добавить("ДатаПоДаннымКлиента");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "ТолькоПросмотр",
Установить);
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("СоздатьПартнера");
МассивЭлементов.Добавить("СчитатьКартуЛояльностиКлиент");
МассивЭлементов.Добавить("ТоварыРазбитьСтроку");
МассивЭлементов.Добавить("ТоварыПоискПоШтрихкоду");
МассивЭлементов.Добавить("ТоварыЗагрузитьДанныеИзТСД");
МассивЭлементов.Добавить("ТоварыЗаполнитьЦеныПоСоглашению");
МассивЭлементов.Добавить("ТоварыЗаполнитьЦеныВыделенныхСтрокПоВидуЦен");
МассивЭлементов.Добавить("ТоварыНазначитьАвтоматическиеСкидки");
МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидку");
МассивЭлементов.Добавить("ТоварыНазначитьРучнуюСкидкуВыделенныхСтрок");
МассивЭлементов.Добавить("ТоварыОтменитьРучныеСкидки");
МассивЭлементов.Добавить("ГруппаТоварыБонусныеБаллы");
МассивЭлементов.Добавить("ТоварыУказатьСерии");
МассивЭлементов.Добавить("ТоварыОтменитьУказаниеСерий");
МассивЭлементов.Добавить("ЗаполнитьДатуОтгрузки");
МассивЭлементов.Добавить("ТоварыЗаполнитьСкладВВыделенныхСтроках");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюРазбитьСтроку");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюУказатьСерии");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюОтменитьУказаниеСерий");
МассивЭлементов.Добавить("Настройка");
МассивЭлементов.Добавить("ДополнитьМногооборотнойТарой");
МассивЭлементов.Добавить("ТоварыСоставНабора");
МассивЭлементов.Добавить("ТоварыОтгрузить");
МассивЭлементов.Добавить("ТоварыРезервировать");
МассивЭлементов.Добавить("ТоварыКОбеспечению");
МассивЭлементов.Добавить("ТоварыРезервироватьПоМереПоступления");
МассивЭлементов.Добавить("ТоварыНеОбеспечивать");
МассивЭлементов.Добавить("ТоварыВключитьОбособленноеОбеспечение");
МассивЭлементов.Добавить("ТоварыВыключитьОбособленноеОбеспечение");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюОтгрузить");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюРезервировать");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюКОбеспечению");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюРезервироватьПоМереПоступления");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюНеОбеспечивать");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
Не Установить);
Если Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Доступность = Истина Тогда
Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Доступность = СкладГруппа;
КонецЕсли;
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Изменить", "Доступность", Установить);
ТолькоПросмотрУстановлен = Установить;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьРеквизитыПечатиРеализации()
ИспользуетсяДоставка = ИспользоватьУправлениеДоставкой
И (Объект.СпособДоставки = ПредопределенноеЗначение("Перечисление.СпособыДоставки.ДоКлиента")
ИЛИ Объект.СпособДоставки = ПредопределенноеЗначение("Перечисление.СпособыДоставки.СиламиПеревозчикаПоАдресу"));
ДанныеРаспоряженияНаДоставку = ДоставкаТоваровКлиентСервер.ПараметрыРаспоряжения();
ЗаполнитьЗначенияСвойств(ДанныеРаспоряженияНаДоставку, Объект);
СтруктураПараметров = Новый Структура();
СтруктураПараметров.Вставить("АдресДоставки", Объект.АдресДоставки);
СтруктураПараметров.Вставить("АдресДоставкиЗначенияПолей", Объект.АдресДоставкиЗначенияПолей);
СтруктураПараметров.Вставить("ЗонаДоставки", Объект.ЗонаДоставки);
СтруктураПараметров.Вставить("ВремяДоставкиС", Объект.ВремяДоставкиС);
СтруктураПараметров.Вставить("ВремяДоставкиПо", Объект.ВремяДоставкиПо);
СтруктураПараметров.Вставить("ДополнительнаяИнформацияПоДоставке", Объект.ДополнительнаяИнформацияПоДоставке);
СтруктураПараметров.Вставить("ДанныеРаспоряженияНаДоставку", ДанныеРаспоряженияНаДоставку);
СтруктураПараметров.Вставить("Ссылка", СсылкаПоВариантуОформления(Объект.ВариантОформленияДокументов));
СтруктураПараметров.Вставить("БанковскийСчетГрузоотправителя", Объект.БанковскийСчетГрузоотправителя);
СтруктураПараметров.Вставить("БанковскийСчетГрузополучателя", Объект.БанковскийСчетГрузополучателя);
СтруктураПараметров.Вставить("БанковскийСчетКонтрагента", Объект.БанковскийСчетКонтрагента);
СтруктураПараметров.Вставить("Грузоотправитель", Объект.Грузоотправитель);
СтруктураПараметров.Вставить("Грузополучатель", Объект.Грузополучатель);
СтруктураПараметров.Вставить("ДоверенностьВыдана", Объект.ДоверенностьВыдана);
СтруктураПараметров.Вставить("ДоверенностьДата", Объект.ДоверенностьДата);
СтруктураПараметров.Вставить("ДоверенностьЛицо", Объект.ДоверенностьЛицо);
СтруктураПараметров.Вставить("ДоверенностьНомер", Объект.ДоверенностьНомер);
СтруктураПараметров.Вставить("Договор", Объект.Договор);
СтруктураПараметров.Вставить("Основание", Объект.Основание);
СтруктураПараметров.Вставить("ОснованиеНомер", Объект.ОснованиеНомер);
СтруктураПараметров.Вставить("ОснованиеДата", Объект.ОснованиеДата);
СтруктураПараметров.Вставить("Отпустил", Объект.Отпустил);
СтруктураПараметров.Вставить("ОтпустилДолжность", Объект.ОтпустилДолжность);
СтруктураПараметров.Вставить("Партнер", Объект.Партнер);
СтруктураПараметров.Вставить("ХозяйственнаяОперация", Объект.ХозяйственнаяОперация);
СтруктураПараметров.Вставить("Контрагент", Объект.Контрагент);
СтруктураПараметров.Вставить("ТолькоПросмотр", ДокументыСформированы И Не Модифицированность);
СтруктураПараметров.Вставить("ТипОбъекта", "ПомощникПродаж");
СтруктураПараметров.Вставить("ИспользуетсяДоставка", ИспользуетсяДоставка);
СтруктураПараметров.Вставить("БанковскийСчетОрганизации", Объект.БанковскийСчет);
СтруктураПараметров.Вставить("Организация", Объект.Организация);
СтруктураПараметров.Вставить("Дата", Объект.Дата);
СтруктураПараметров.Вставить("Руководитель", Объект.Руководитель);
СтруктураПараметров.Вставить("ГлавныйБухгалтер", Объект.ГлавныйБухгалтер);
СтруктураПараметров.Вставить("ТаблицаОснованийДляПечати", ТаблицаОснованийДляПечати);
Если Объект.СпособДоставки = ПредопределенноеЗначение("Перечисление.СпособыДоставки.СиламиПеревозчика")
Или Объект.СпособДоставки = ПредопределенноеЗначение("Перечисление.СпособыДоставки.СиламиПеревозчикаПоАдресу") Тогда
СтруктураПараметров.Вставить("ПеревозчикПартнер", Объект.ПеревозчикПартнер);
КонецЕсли;
ОткрытьФорму("ОбщаяФорма.РеквизитыПечатиРеализации", СтруктураПараметров, ЭтотОбъект, , , , Неопределено,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаСервере
Функция ПоместитьДополнительныеРеквизитыВоВременноеХранилище(ДополнительныеРеквизиты)
ТаблицаДопРеквизитов = Объект[ДополнительныеРеквизиты].Выгрузить();
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ТаблицаДопРеквизитов, УникальныйИдентификатор);
Возврат АдресВоВременномХранилище;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, КоличествоПодобранныхПозиций)
Надпись = НСтр("ru = 'Подобрано позиций (%КоличествоПодобранныхПозиций%)'");
НадписьВсегоПодобраноПозиций = СтрЗаменить(Надпись, "%КоличествоПодобранныхПозиций%", КоличествоПодобранныхПозиций);
КонецПроцедуры
&НаСервере
Процедура НеОтгружатьЧастямиПриИзмененииСервер()
Если Объект.НеОтгружатьЧастями Тогда
Объект.ДатаОтгрузки = ОбеспечениеВДокументахСервер.МаксимальноеЗначениеВКоллекции(Объект.Товары, "ДатаОтгрузки", '00010101');
ОбеспечениеВДокументахСервер.ЗаполнитьРеквизитВКоллекции(Объект.Товары, "ДатаОтгрузки", Объект.ДатаОтгрузки);
КонецЕсли;
УстановитьВидимостьЭлементовФормыДатОтгрузки();
КонецПроцедуры
&НаСервере
Процедура УправлениеПометкойКомандыТранспортнойНакладной()
ЭтоПередачаТоваров = ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ТаблицаДокумента.Ссылка КАК Документ
|ИЗ
| #Документ КАК ТаблицаДокумента
|ГДЕ
| ТаблицаДокумента.Ссылка В(&МассивДокументов)
| И ТаблицаДокумента.Проведен
|";
ИмяДокумента = "Документ.РеализацияТоваровУслуг";
Если ЭтоПередачаТоваров Тогда
ИмяДокумента = "Документ.ПередачаТоваровХранителю";
ЭтоОперацияОтгрузкаТоваров = ЭтоОперацияОтгрузкаТоваров(Объект.ХозяйственнаяОперация);
Если ЭтоОперацияОтгрузкаТоваров Тогда
ИмяДокумента = "Документ.ОтгрузкаТоваровКлиенту";
КонецЕсли;
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст, "#Документ", ИмяДокумента);
Запрос.УстановитьПараметр("МассивДокументов", Объект.Документы.Выгрузить().ВыгрузитьКолонку("Документ"));
РезультатЗапроса = Запрос.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
СоздаватьТранспортнуюНакладную = Ложь;
Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка = Ложь;
Элементы.ОформленныеДокументыТранспортнаяНакладная.Доступность = Ложь;
Иначе
Элементы.ОформленныеДокументыТранспортнаяНакладная.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УправлениеСозданиемТранспортныхНакладных(ЭтоИнициализация = Истина)
ИспользоватьТТН = ПолучитьФункциональнуюОпцию("ИспользоватьТТН");
Если НЕ ИспользоватьТТН Тогда
СоздаватьТранспортнуюНакладную =Ложь;
ИначеЕсли ЭтоИнициализация Тогда
СоздаватьТранспортнуюНакладную = Объект.СоздаватьТранспортнуюНакладнуюПоУмолчанию;
КонецЕсли;
ДокументыСозданы = Ложь;
ТранспортныеНакладныеСозданы = Ложь;
Для Каждого Документ Из Объект.Документы Цикл
Если ТипЗнч(Документ.Документ) = Тип("ДокументСсылка.ТранспортнаяНакладная") Тогда
ТранспортныеНакладныеСозданы = Истина;
КонецЕсли;
Если ТипЗнч(Документ.Документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг")
Или ТипЗнч(Документ.Документ) = Тип("ДокументСсылка.ПередачаТоваровХранителю")
Или ТипЗнч(Документ.Документ) = Тип("ДокументСсылка.ОтгрузкаТоваровКлиенту") Тогда
ДокументыСозданы = Истина;
КонецЕсли;
КонецЦикла;
Если (Объект.СпособДоставки = Перечисления.СпособыДоставки.Самовывоз
Или Объект.СпособДоставки = Перечисления.СпособыДоставки.СиламиПеревозчика)
И ДокументыСозданы Тогда
Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка = СоздаватьТранспортнуюНакладную
И ТранспортныеНакладныеСозданы;
Элементы.ОформленныеДокументыТранспортнаяНакладная.Доступность = Истина;
Если СоздаватьТранспортнуюНакладную
И НЕ ТранспортныеНакладныеСозданы Тогда
УправлениеТранспортнымиНакладными();
Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка = Ложь;
КонецЕсли;
Иначе
Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка = Ложь;
Элементы.ОформленныеДокументыТранспортнаяНакладная.Доступность = Ложь;
КонецЕсли;
Элементы.ОформленныеДокументыТранспортнаяНакладная.Видимость = ИспользоватьТТН;
КонецПроцедуры
&НаСервере
Процедура УправлениеТранспортнымиНакладными(ДокументыКОбработке = Неопределено)
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьТТН") Тогда
Возврат;
КонецЕсли;
Если ДокументыКОбработке = Неопределено Тогда
ДокументыКОбработке = Объект.Документы;
КонецЕсли;
ДокументПомеченНаУдаление = Ложь;
ДокументПроведен = Ложь;
ДокументОснование = Неопределено;
ДокументыНаУдаление = Новый Массив();
ДокументыНаДобавление = Новый Массив();
ДокументыОснования = Новый Массив();
Если СоздаватьТранспортнуюНакладную = Неопределено Тогда
СоздаватьТранспортнуюНакладную = Элементы.ОформленныеДокументыТранспортнаяНакладная.Пометка;
КонецЕсли;
Для Каждого СтрокаДокумент Из ДокументыКОбработке Цикл
ДокументОснование = СтрокаДокумент.Документ;
Если НЕ ОбщегоНазначения.СсылкаСуществует(ДокументОснование) Тогда
Продолжить;
КонецЕсли;
ДанныеДокумента = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ДокументОснование, "ПометкаУдаления, Проведен");
ДокументПомеченНаУдаление = ДанныеДокумента.ПометкаУдаления;
ДокументПроведен = ДанныеДокумента.Проведен;
ТипДокумента = ТипЗнч(ДокументОснование);
Если ТипДокумента = Тип("ДокументСсылка.РеализацияТоваровУслуг")
Или ТипДокумента = Тип("ДокументСсылка.ПередачаТоваровХранителю")
Или ТипДокумента = Тип("ДокументСсылка.ОтгрузкаТоваровКлиенту") Тогда
Если СоздаватьТранспортнуюНакладную И ДокументПроведен И Не ДокументПомеченНаУдаление Тогда
ДокументыОснования.Добавить(ДокументОснование);
КонецЕсли;
ИначеЕсли ТипДокумента = Тип("ДокументСсылка.ТранспортнаяНакладная") Тогда
Если Не СоздаватьТранспортнуюНакладную Тогда
ДокументОбъект = СтрокаДокумент.Документ.ПолучитьОбъект();
ДокументОбъект.УстановитьПометкуУдаления(Истина);
СтрокаДокумент.Состояние = 1;
ДокументыНаУдаление.Добавить(СтрокаДокумент);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ЗаписатьТранспортнуюНакладную(ДокументыНаДобавление, ДокументыОснования, Ложь);
Для Каждого Элемент Из ДокументыНаУдаление Цикл
Объект.Документы.Удалить(Элемент);
КонецЦикла;
ОбновитьОтображениеСостоянияДокументов();
КонецПроцедуры
&НаСервере
Процедура УправлениеСозданиемДоверенностей()
ИспользоватьДоверенности = ПолучитьФункциональнуюОпцию("ИспользоватьДоверенностиНаПолучениеТМЦ")
И Не ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация);
Элементы.ОформленныеДокументыВыданнаяДоверенность.Видимость = ИспользоватьДоверенности;
ДоверенностиСозданы = Ложь;
ЗаказыСозданы = Ложь;
РеализацииСозданы = Ложь;
Для Каждого Документ Из Объект.Документы Цикл
Если ТипЗнч(Документ.Документ) = Тип("ДокументСсылка.ДоверенностьВыданная") Тогда
ДоверенностиСозданы = Истина;
КонецЕсли;
Если ТипЗнч(Документ.Документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
РеализацииСозданы = Истина;
КонецЕсли;
Если ТипЗнч(Документ.Документ) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
ЗаказыСозданы = Истина;
КонецЕсли;
КонецЦикла;
СоздаватьДоверенностьНаПолучениеДС = ИспользоватьДоверенности И Объект.СоздаватьДоверенностьНаПолучениеДСПоУмолчанию;
Если Не (Объект.ФормаОплаты = Перечисления.ФормыОплаты.Безналичная
Или Объект.ФормаОплаты = Перечисления.ФормыОплаты.ПлатежнаяКарта
Или Объект.ФормаОплаты = Перечисления.ФормыОплаты.Взаимозачет)
И (РеализацииСозданы Или ЗаказыСозданы) Тогда
Элементы.ОформленныеДокументыВыданнаяДоверенность.Пометка = СоздаватьДоверенностьНаПолучениеДС И ДоверенностиСозданы;
Элементы.ОформленныеДокументыВыданнаяДоверенность.Доступность = Истина;
Если СоздаватьДоверенностьНаПолучениеДС И Не ДоверенностиСозданы Тогда
УправлениеДоверенностями();
Элементы.ОформленныеДокументыВыданнаяДоверенность.Пометка = Истина;
КонецЕсли;
Иначе
Элементы.ОформленныеДокументыВыданнаяДоверенность.Пометка = Ложь;
Элементы.ОформленныеДокументыВыданнаяДоверенность.Доступность = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УправлениеДоверенностями()
Если Не ПолучитьФункциональнуюОпцию("ИспользоватьДоверенностиНаПолучениеТМЦ") Тогда
Возврат;
КонецЕсли;
Если ЭтоОперацияПередачи(Объект.ХозяйственнаяОперация) Тогда
Возврат;
КонецЕсли;
ЗаказПомеченНаУдаление = Ложь;
ЗаказПроведен = Ложь;
СтрокаДоверенность = Неопределено;
ЗаказОснование = Неопределено;
ДопустимыеСтатусы = Документы.ЗаказКлиента.ДопустимыеСтатусыВводаНаОсновании(Истина);
УдалитьДоверенность = Ложь;
Для Каждого СтрокаДокумент Из Объект.Документы Цикл
Если ТипЗнч(СтрокаДокумент.Документ) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
РеквизитыЗаказа = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаДокумент.Документ, "ПометкаУдаления, Проведен, Статус");
ЗаказОснование = СтрокаДокумент.Документ;
ЗаказПомеченНаУдаление = РеквизитыЗаказа.ПометкаУдаления;
ЗаказПроведен = РеквизитыЗаказа.Проведен;
Если ДопустимыеСтатусы.Найти(РеквизитыЗаказа.Статус) = Неопределено Тогда
ЗаказОснование = Неопределено;
КонецЕсли;
ИначеЕсли ТипЗнч(СтрокаДокумент.Документ) = Тип("ДокументСсылка.ДоверенностьВыданная") Тогда
СтрокаДоверенность = СтрокаДокумент;
КонецЕсли;
КонецЦикла;
Если СтрокаДоверенность <> Неопределено Тогда
УдалитьДоверенность = Не СоздаватьДоверенностьНаПолучениеДС ИЛИ НЕ ЗаказПроведен ИЛИ ЗаказПомеченНаУдаление;
Если Не УдалитьДоверенность Тогда
Возврат;
КонецЕсли;
КонецЕсли;
Если СоздаватьДоверенностьНаПолучениеДС И СтрокаДоверенность = Неопределено
И ЗаказОснование <> Неопределено И ЗаказПроведен И НЕ ЗаказПомеченНаУдаление
И Не УдалитьДоверенность Тогда
ЗаписатьДоверенностьНаПолучениеДС(Новый Массив, ЗаказОснование, Ложь);
Иначе
МассиНайденныхДоверенностей = Новый Массив;
Для Каждого СтрокаДокумент Из Объект.Документы Цикл
Если Не ОбщегоНазначения.СсылкаСуществует(СтрокаДокумент.Документ) Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(СтрокаДокумент.Документ) = Тип("ДокументСсылка.ДоверенностьВыданная") Тогда
ОписаниеРеквизитов = Новый Структура("ДокументОснованиеПометкаУдаления, ДокументОснованиеПроведен",
"ДокументОснование.ПометкаУдаления",
"ДокументОснование.Проведен");
СтруктураРезультат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаДокумент.Документ, ОписаниеРеквизитов, Истина);
РеализацияПомеченаНаУдаление = СтруктураРезультат.ДокументОснованиеПометкаУдаления;
РеализацияПроведена = СтруктураРезультат.ДокументОснованиеПроведен;
Если Не СоздаватьДоверенностьНаПолучениеДС Или Не РеализацияПроведена Или РеализацияПомеченаНаУдаление Тогда
МассиНайденныхДоверенностей.Добавить(СтрокаДокумент);
КонецЕсли;
КонецЕсли;
КонецЦикла;
ОбщегоНазначенияУТ.УдалитьСтрокиТаблицы(Объект.Документы, МассиНайденныхДоверенностей);
МассиНайденныхДоверенностей = Новый Массив;
Для Каждого СтрокаДокумент Из Объект.Документы Цикл
Если Не ОбщегоНазначения.СсылкаСуществует(СтрокаДокумент.Документ) Тогда
Продолжить;
КонецЕсли;
РеализацияПомеченаНаУдаление = Ложь;
РеализацияПроведена = Ложь;
РеализацияОснование = Неопределено;
Если ТипЗнч(СтрокаДокумент.Документ) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
СтруктураРезультат = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(СтрокаДокумент.Документ, "ПометкаУдаления, Проведен");
РеализацияОснование = СтрокаДокумент.Документ;
РеализацияПомеченаНаУдаление = СтруктураРезультат.ПометкаУдаления;
РеализацияПроведена = СтруктураРезультат.Проведен;
КонецЕсли;
Если РеализацияОснование <> Неопределено
И СоздаватьДоверенностьНаПолучениеДС
И РеализацияПроведена
И Не РеализацияПомеченаНаУдаление Тогда
ЗаписатьДоверенностьНаПолучениеДС(МассиНайденныхДоверенностей, РеализацияОснование, Ложь);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УправлениеПометкойКомандыДоверенность()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СУММА(ВалидныеДокументы.КоличествоВалидныхДокументовРТУ) КАК КоличествоВалидныхДокументовРТУ,
| СУММА(ВалидныеДокументы.КоличествоВалидныхДокументовЗаказ) КАК КоличествоВалидныхДокументовЗаказ
|ИЗ
| (ВЫБРАТЬ
| ЕСТЬNULL(СУММА(ВЫБОР
| КОГДА НЕ РеализацияТоваровУслуг.ПометкаУдаления
| И РеализацияТоваровУслуг.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ), 0) КАК КоличествоВалидныхДокументовРТУ,
| 0 КАК КоличествоВалидныхДокументовЗаказ
| ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
| ГДЕ
| РеализацияТоваровУслуг.Ссылка В(&МассивДокументов)
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| 0,
| ЕСТЬNULL(СУММА(ВЫБОР
| КОГДА НЕ ЗаказКлиента.ПометкаУдаления
| И ЗаказКлиента.Проведен
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ), 0)
| ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
| ГДЕ
| ЗаказКлиента.Ссылка В(&МассивДокументов)) КАК ВалидныеДокументы";
Запрос.УстановитьПараметр("МассивДокументов", Объект.Документы.Выгрузить().ВыгрузитьКолонку("Документ"));
Результат = Запрос.Выполнить().Выбрать();
Пока Результат.Следующий() Цикл
Если Результат.КоличествоВалидныхДокументовРТУ = 0 И Результат.КоличествоВалидныхДокументовЗаказ = 0 Тогда
Элементы.ОформленныеДокументыВыданнаяДоверенность.Пометка = Ложь;
СоздаватьДоверенностьНаПолучениеДС = Ложь;
Элементы.ОформленныеДокументыВыданнаяДоверенность.Доступность = Ложь;
Иначе
Элементы.ОформленныеДокументыВыданнаяДоверенность.Доступность = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьЗаголовокРеквизитовПечати()
Если ПолучитьФункциональнуюОпцию("ИспользоватьАктыНаПередачуПрав") Тогда
ЗаголовокЭлемента = ?(Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи,
НСтр("ru = 'Реквизиты печати'"),
НСтр("ru = 'Реквизиты печати / Акта на передачу прав'"));
Элементы.РеквизитыПечати.Заголовок = ЗаголовокЭлемента;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьРеализациюПоЗаказу(Товары,
МассивРеализаций,
МассивНайденныхДокументов,
ОснованиеОбъект,
БезСменыСтатусаЗаказа,
БезПроведения,
Отказ)
МассивСкладов = Новый Массив();
МассивРеализаций = Новый Массив();
РеализацияСГруппыСкладов = Ложь;
Если СкладГруппа Тогда
ВыборГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Склад, "ВыборГруппы");
Если ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных Тогда
МассивСкладов.Добавить(Объект.Склад);
РеализацияСГруппыСкладов = Истина;
Иначе
ВремТаблицаСкладов = Товары.Скопировать(, "Склад");
ВремТаблицаСкладов.Свернуть("Склад");
МассивСкладов = ВремТаблицаСкладов.ВыгрузитьКолонку("Склад");
КонецЕсли;
Иначе
МассивСкладов.Добавить(Объект.Склад);
КонецЕсли;
ВремТаблица = Товары.Скопировать(, "ВидГОСИС");
ВремТаблица.Свернуть("ВидГОСИС");
МассивГосИС = ВремТаблица.ВыгрузитьКолонку("ВидГОСИС");
ВключатьУслуги = Истина;
Для Каждого ТекСклад Из МассивСкладов Цикл
Если ЗначениеЗаполнено(ТекСклад) Или МассивСкладов.Количество() = 1 Тогда
Если РеализацияСГруппыСкладов Тогда
ТоварыПоСкладу = Товары;
Иначе
ТоварыПоСкладу = Товары.Скопировать(Новый Структура("Склад", ТекСклад));
Если ВключатьУслуги И ЗначениеЗаполнено(ТекСклад) Тогда
Услуги = Товары.Скопировать(Новый Структура("Склад", Справочники.Склады.ПустаяСсылка()));
Для Каждого ТекСтрока Из Услуги Цикл
НоваяСтрока = ТоварыПоСкладу.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
КонецЦикла;
ВключатьУслуги = Ложь;
КонецЕсли;
КонецЕсли;
Для Каждого ВидГОСИС Из МассивГосИС Цикл
ТоварыПоСкладуВидуГОСИС = ТоварыПоСкладу.Скопировать(Новый Структура("ВидГОСИС", ВидГОСИС));
ПродажаОбъект = ЗаписатьРеализациюПоЗаказу(МассивНайденныхДокументов,
ОснованиеОбъект,
ТоварыПоСкладуВидуГОСИС,
ТекСклад,
Отказ,
БезПроведения,
БезСменыСтатусаЗаказа);
Если Отказ Тогда
Прервать;
КонецЕсли;
МассивРеализаций.Добавить(ПродажаОбъект);
Если Не БезПроведения И СоздаватьТранспортнуюНакладную И Не Отказ Тогда
ОснованияТранспортнойНакладной.Добавить(ПродажаОбъект.Ссылка);
КонецЕсли;
Если Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию")
И Объект.Товары.Итог("СуммаБезВозвратнойТары") > 0 И НЕ Отказ Тогда
СоздатьСчетФактуру(МассивНайденныхДокументов, ПродажаОбъект, Отказ);
КонецЕсли;
Если Объект.СоздаватьСчетНаОплату И НЕ Отказ
И Объект.ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
И Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоНакладным
И Объект.Товары.Итог("СуммаБезВозвратнойТары") > 0 Тогда
ЗаписатьСчетНаОплату(МассивНайденныхДокументов, ПродажаОбъект, ПродажаОбъект.ЭтапыГрафикаОплаты.Выгрузить(), Отказ);
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если Не БезПроведения И СоздаватьТранспортнуюНакладную И Не Отказ Тогда
Для Каждого ЭлементМассива Из МассивРеализаций Цикл
ОснованияТранспортнойНакладной.Добавить(ЭлементМассива.Ссылка);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьРеализацию(Товары, МассивРеализаций, МассивНайденныхДокументов, БезПроведения, Отказ)
ВремТаблица = Товары.Скопировать(, "ВидГОСИС");
ВремТаблица.Свернуть("ВидГОСИС");
МассивГосИС = ВремТаблица.ВыгрузитьКолонку("ВидГОСИС");
Для Каждого ВидГОСИС Из МассивГосИС Цикл
ТоварыПоВидуГОСИС = Товары.Скопировать(Новый Структура("ВидГОСИС", ВидГОСИС));
ПродажаОбъект = ЗаписатьРеализацию(МассивНайденныхДокументов, ТоварыПоВидуГОСИС, Отказ, БезПроведения);
Если Отказ Тогда
Прервать;
КонецЕсли;
МассивРеализаций.Добавить(ПродажаОбъект);
СоздаватьСчетПКО = Объект.ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию;
Если Не Отказ
И Не БезПроведения
И СоздаватьТранспортнуюНакладную Тогда
ОснованияТранспортнойНакладной.Добавить(ПродажаОбъект.Ссылка);
КонецЕсли;
Если НЕ Отказ
И СоздаватьСчетПКО
И Объект.СоздаватьСчетНаОплату
И ТоварыПоВидуГОСИС.Итог("СуммаБезВозвратнойТары") > 0 Тогда
ЗаписатьСчетНаОплату(МассивНайденныхДокументов, ПродажаОбъект, ПродажаОбъект.ЭтапыГрафикаОплаты.Выгрузить(),
Отказ);
КонецЕсли;
Если НЕ Отказ
И СоздаватьСчетПКО
И Объект.СоздаватьПриходныйКассовыйОрдер
И Объект.ФормаОплаты = Перечисления.ФормыОплаты.Наличная Тогда
ПКО = ЗаписатьПриходныйКассовыйОрдер(МассивНайденныхДокументов, ПродажаОбъект, Отказ);
Если БезПроведения
И ПКО <> Неопределено Тогда
ПродажаОбъект.Записать(РежимЗаписиДокумента.Проведение);
Если СоздаватьТранспортнуюНакладную И Не Отказ Тогда
ОснованияТранспортнойНакладной.Добавить(ПродажаОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если НЕ Отказ
И ТоварыПоВидуГОСИС.Итог("СуммаБезВозвратнойТары") > 0
И Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаНаКомиссию") Тогда
СоздатьСчетФактуру(МассивНайденныхДокументов, ПродажаОбъект, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьПередачуТоваровПоЗаказу(Товары, МассивПередач, МассивНайденныхДокументов, ОснованиеОбъект, Отказ)
МассивСкладов = Новый Массив;
МассивПередач = Новый Массив;
ПередачаСГруппыСкладов = Ложь;
Если СкладГруппа Тогда
ВыборГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Склад, "ВыборГруппы");
Если ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных Тогда
ПередачаСГруппыСкладов = Истина;
МассивСкладов.Добавить(Объект.Склад);
Иначе
Склады = Товары.Скопировать(, "Склад");
Склады.Свернуть("Склад");
МассивСкладов = Склады.ВыгрузитьКолонку("Склад");
КонецЕсли;
Иначе
МассивСкладов.Добавить(Объект.Склад);
КонецЕсли;
Для Каждого ТекСклад Из МассивСкладов Цикл
Если ЗначениеЗаполнено(ТекСклад)
Или МассивСкладов.Количество() = 1 Тогда
Если ПередачаСГруппыСкладов Тогда
ТоварыПоСкладу = Товары;
Иначе
ОтборПоСкладу = Новый Структура("Склад", ТекСклад);
ТоварыПоСкладу = Товары.Скопировать(ОтборПоСкладу);
КонецЕсли;
ПередачаОбъект = ЗаписатьПередачуТоваровПоЗаказу(МассивНайденныхДокументов,
ОснованиеОбъект,
ТоварыПоСкладу,
ТекСклад,
Отказ);
Если Отказ Тогда
Прервать;
КонецЕсли;
МассивПередач.Добавить(ПередачаОбъект);
Если Не Отказ
И СоздаватьТранспортнуюНакладную Тогда
Для Каждого ЭлементМассива Из МассивПередач Цикл
ОснованияТранспортнойНакладной.Добавить(ЭлементМассива.Ссылка);
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьОтгрузкуТоваровКлиентуПоЗаказу(Товары, МассивОтгрузок, МассивНайденныхДокументов, ОснованиеОбъект, Отказ)
МассивСкладов = Новый Массив;
МассивОтгрузок = Новый Массив;
ОтгрузкаСГруппыСкладов = Ложь;
Если СкладГруппа Тогда
ВыборГруппы = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Склад, "ВыборГруппы");
Если ВыборГруппы = Перечисления.ВыборГруппыСкладов.РазрешитьВЗаказахИНакладных Тогда
ОтгрузкаСГруппыСкладов = Истина;
МассивСкладов.Добавить(Объект.Склад);
Иначе
Склады = Товары.Скопировать(, "Склад");
Склады.Свернуть("Склад");
МассивСкладов = Склады.ВыгрузитьКолонку("Склад");
КонецЕсли;
Иначе
МассивСкладов.Добавить(Объект.Склад);
КонецЕсли;
Для Каждого ТекСклад Из МассивСкладов Цикл
Если ЗначениеЗаполнено(ТекСклад)
Или МассивСкладов.Количество() = 1 Тогда
Если ОтгрузкаСГруппыСкладов Тогда
ТоварыПоСкладу = Товары;
Иначе
ОтборПоСкладу = Новый Структура("Склад", ТекСклад);
ТоварыПоСкладу = Товары.Скопировать(ОтборПоСкладу);
КонецЕсли;
ОтгрузкаТоваровОбъект = ЗаписатьОтгрузкуТоваровКлиентуПоЗаказу(МассивНайденныхДокументов,
ОснованиеОбъект,
ТоварыПоСкладу,
ТекСклад,
Отказ);
Если Отказ Тогда
Прервать;
КонецЕсли;
МассивОтгрузок.Добавить(ОтгрузкаТоваровОбъект);
Если Не Отказ И Объект.ПечататьСчетФактуру Тогда
СоздатьСчетФактуру(МассивНайденныхДокументов, ОтгрузкаТоваровОбъект, Отказ);
КонецЕсли;
Если СоздаватьТранспортнуюНакладную И Не Отказ Тогда
ОснованияТранспортнойНакладной.Добавить(ОтгрузкаТоваровОбъект.Ссылка);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура СоздатьРасходныеОрдера(Товары, МассивНайденныхДокументов, МассивРеализаций, ОснованиеОбъект, БезПроведения, Отказ)
ТабСкладов = Товары.Скопировать(,"Склад");
ТабСкладов.Свернуть("Склад");
МассивСкладов = ТабСкладов.ВыгрузитьКолонку("Склад");
РаспоряженияНаОтгрузку=Новый массив;
Если ТипЗнч(ОснованиеОбъект)=Тип("Массив") Тогда
Для каждого Основание Из ОснованиеОбъект Цикл
РаспоряженияНаОтгрузку=Основание.ссылка;
КонецЦикла;
Иначе
РаспоряженияНаОтгрузку.Добавить(ОснованиеОбъект.ссылка);
КонецЕсли;
СозданныеРасходныеОрдера = Новый ТаблицаЗначений;
СозданныеРасходныеОрдера.Колонки.Добавить("ДокументОбъект",Новый ОписаниеТипов("ДокументОбъект.РасходныйОрдерНаТовары"));
СозданныеРасходныеОрдера.Колонки.Добавить("Использован",Новый ОписаниеТипов("Булево"));
СтрокаТаблицы = Продажи.НайтиСозданныйДокументПоТипу(ЭтотОбъект, Тип("ДокументСсылка.РасходныйОрдерНаТовары"), МассивНайденныхДокументов);
Пока СтрокаТаблицы <> Неопределено И Продажи.ЗаблокироватьДокумент(СтрокаТаблицы.Документ) Цикл
ДокументОбъект = СтрокаТаблицы.Документ.ПолучитьОбъект();
Если НЕ ДокументОбъект = Неопределено И ДокументОбъект.ПометкаУдаления Тогда
ДокументОбъект.УстановитьПометкуУдаления(Ложь);
КонецЕсли;
МассивНайденныхДокументов.Добавить(СтрокаТаблицы.Документ);
НовСтр = СозданныеРасходныеОрдера.Добавить();
НовСтр.ДокументОбъект = ДокументОбъект;
НовСтр.Использован = Ложь;
СтрокаТаблицы = Продажи.НайтиСозданныйДокументПоТипу(ЭтотОбъект, Тип("ДокументСсылка.РасходныйОрдерНаТовары"), МассивНайденныхДокументов);
КонецЦикла;
Для Каждого ТекСклад Из МассивСкладов Цикл
Если ТекСклад = Справочники.Склады.ПустаяСсылка() Тогда
Продолжить;
КонецЕсли;
ДокументОбъект = Неопределено;
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Получатель", Объект.Партнер);
СтруктураПараметров.Вставить("Склад", ТекСклад);
СтруктураПараметров.Вставить("РаспоряженияНаОтгрузку", РаспоряженияНаОтгрузку);
СтруктураПараметров.Вставить("Помещение", Справочники.СкладскиеПомещения.ПустаяСсылка());
СтруктураПараметров.Вставить("ЗонаОтгрузки", Справочники.СкладскиеЯчейки.ПустаяСсылка());
СтруктураПараметров.Вставить("ЗаданиеНаПеревозку", Документы.ЗаданиеНаПеревозку.ПустаяСсылка());
СтруктураПараметров.Вставить("ФоновоеЗадание", Ложь);
СтруктураПараметров.Вставить("СозданныеРасходныеОрдера", СозданныеРасходныеОрдера);
Результат = СкладыСервер.ПереоформитьРасходныеОрдера(СтруктураПараметров);
Если Результат.ЕстьОшибка Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ТаблицаСозданныхДокументов = Результат.ОформленныеОрдера;
Для Каждого ТекСтрока Из ТаблицаСозданныхДокументов Цикл
ДокументПроведен = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекСтрока.РасходныйОрдер, "Проведен");
СтрокиДокументов= Объект.Документы.НайтиСтроки(Новый структура("Документ",ТекСтрока.РасходныйОрдер));
Если ДокументПроведен Тогда
Состояние = 0;
Иначе
Состояние = 2;
КонецЕсли;
Если СтрокиДокументов.Количество() = 0 Тогда
Продажи.ДобавитьСтрокуВТаблицуСформированныхДокументов(
ЭтотОбъект,
ТекСтрока.РасходныйОрдер,
7,
Состояние,
ДоступнаПечатьКомплекта(ТекСтрока.РасходныйОрдер));
МассивНайденныхДокументов.Добавить(ТекСтрока.РасходныйОрдер);
Иначе
Продажи.ОбновитьСтрокуВТаблицуСформированныхДокументов(
СтрокиДокументов[0],
ДокументОбъект.Ссылка,
7,
Состояние);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Для Каждого Стр Из СозданныеРасходныеОрдера Цикл
Если НЕ Стр.Использован И НЕ МассивНайденныхДокументов.найти(стр.ДокументОбъект.Ссылка)=неопределено Тогда
МассивНайденныхДокументов.Удалить(МассивНайденныхДокументов.найти(стр.ДокументОбъект.Ссылка));
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьГруппаОплатаОтгрузкаПараметрыПечати()
ЭтоКоммерческоеПредложение = Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
Элементы.ГруппаОплатаОтгрузкаПараметрыПечати.Видимость = Не ЭтоКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовФормыДатОтгрузки()
ЭтоКоммерческоеПредложение = Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
ЭтоОперацияЗаказаКлиента = ЭтоОперацияЗаказаКлиента(Объект.ВариантОформленияДокументов);
Элементы.ГруппаОтгрузка.Видимость = ЭтоОперацияЗаказаКлиента;
Элементы.ТоварыДатаОтгрузки.Видимость = Не Объект.НеОтгружатьЧастями
И ЭтоОперацияЗаказаКлиента;
Элементы.ДатаОтгрузки.Видимость = Объект.НеОтгружатьЧастями
И Не ЭтоКоммерческоеПредложение;
Элементы.ЗаполнитьДатуОтгрузки.Доступность = Не Объект.НеОтгружатьЧастями
И ЭтоОперацияЗаказаКлиента;
Элементы.ЗаполнитьДатуОтгрузки.Видимость = Не Объект.НеОтгружатьЧастями
И ЭтоОперацияЗаказаКлиента;
Элементы.НеОтгружатьЧастями.Видимость = Не ЭтоКоммерческоеПредложение
И Не Объект.УпрощенноеОбеспечение
И Не Объект.ОтображатьРекомендацииКПокупке;
Элементы.ДекорацияДатаОтгрузки.Видимость = ((Не ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента
И Объект.НеОтгружатьЧастями)
Или Объект.УпрощенноеОбеспечение
Или Объект.ОтображатьРекомендацииКПокупке)
И Не ЭтоКоммерческоеПредложение;
КонецПроцедуры
&НаСервере
Процедура ПроверитьДоступностьДополнительныхРеквизитов()
НаборСвойств = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(Документы.АктВыполненныхРабот.ПустаяСсылка());
Если НаборСвойств.Количество() > 0 Тогда
ДополнительныеРеквизиты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств[0].Набор, "ДополнительныеРеквизиты");
Если ДополнительныеРеквизиты <> Неопределено
И Не ДополнительныеРеквизиты.Пустой() > 0 Тогда
ЕстьДопРеквизитыАкта = Истина;
КонецЕсли;
КонецЕсли;
НаборСвойств = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(Документы.ЗаказКлиента.ПустаяСсылка());
Если НаборСвойств.Количество() > 0 Тогда
ДополнительныеРеквизиты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств[0].Набор, "ДополнительныеРеквизиты");
Если ДополнительныеРеквизиты <> Неопределено
И Не ДополнительныеРеквизиты.Пустой() > 0 Тогда
ЕстьДопРеквизитыЗаказа = Истина;
КонецЕсли;
КонецЕсли;
НаборСвойств = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(Документы.РеализацияТоваровУслуг.ПустаяСсылка());
Если НаборСвойств.Количество() > 0 Тогда
ДополнительныеРеквизиты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств[0].Набор, "ДополнительныеРеквизиты");
Если ДополнительныеРеквизиты <> Неопределено
И Не ДополнительныеРеквизиты.Пустой() > 0 Тогда
ЕстьДопРеквизитыРеализации = Истина;
КонецЕсли;
КонецЕсли;
НаборСвойств = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(Документы.ПередачаТоваровХранителю.ПустаяСсылка());
Если НаборСвойств.Количество() > 0 Тогда
ДополнительныеРеквизиты = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(НаборСвойств[0].Набор, "ДополнительныеРеквизиты");
Если ДополнительныеРеквизиты <> Неопределено
И Не ДополнительныеРеквизиты.Пустой() > 0 Тогда
ЕстьДопРеквизитыПередачиТоваров = Истина;
КонецЕсли;
КонецЕсли;
Продажи.ПроверитьДоступностьДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура СкрытьНедоступныеДополнительныеРеквизиты()
ПроверитьДоступностьДополнительныхРеквизитов();
КонецПроцедуры
&НаСервере
Процедура ПроверитьДоступностьПечатиПКО()
ЕстьПравоПечатиПКО = ПравоДоступа("Добавление",Метаданные.Документы.ПриходныйКассовыйОрдер);
Если Не ЕстьПравоПечатиПКО Тогда
Если Объект.СоздаватьПриходныйКассовыйОрдер Тогда
Объект.СоздаватьПриходныйКассовыйОрдер = Ложь;
КонецЕсли;
Если Объект.ПечататьПриходныйКассовыйОрдер Тогда
Объект.ПечататьПриходныйКассовыйОрдер = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьДоступностьПечатиДоверенности()
ЕстьПравоПечатиДоверенности = ПравоДоступа("Добавление",Метаданные.Документы.ДоверенностьВыданная);
Если Не ЕстьПравоПечатиДоверенности Тогда
Если СоздаватьДоверенностьНаПолучениеДС Тогда
СоздаватьДоверенностьНаПолучениеДС = Ложь;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьОграничениеЗадолженности()
ПродажиСервер.ОбновитьОграничениеЗадолженности(Объект.Договор, Объект.Дата, ТекстОстатокДопустимогоКредита, Ложь,
Неопределено, Ложь);
КонецПроцедуры
&НаСервере
Процедура УстановитьСвойстваЭлементовПоПорядкуРасчетов()
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьСостояниеДокумента(ДокументИсточник)
НайденныеДокументы = Объект.Документы.НайтиСтроки(Новый Структура("Документ", ДокументИсточник));
Если НайденныеДокументы.Количество() = 1 Тогда
ДокументПроведен = ОбщегоНазначенияУТВызовСервера.ЗначениеРеквизитаОбъекта(ДокументИсточник, "Проведен");
Если ДокументПроведен Тогда
НайденныеДокументы[0].Состояние = 0;
Иначе
НайденныеДокументы[0].Состояние = 2;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ВернутьМногооборотнуюТаруПриИзмененииСервер()
Если Не Объект.ВернутьМногооборотнуюТару Тогда
Объект.ТребуетсяЗалогЗаТару = Ложь;
КонецЕсли;
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВТЧ(Объект);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействий.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, Неопределено);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
ОбновитьДоступностьЭлементовВозвратнойТары(ЭтотОбъект);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизиты()
Возврат Новый Структура(
"БезВозвратнойТары",
"Сумма,СуммаНДС,СуммаСНДС,СуммаАвтоматическойСкидки,СуммаРучнойСкидки,СуммаБонусныхБалловКСписаниюВВалюте");
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЗависимыеРеквизитыСтрокой()
Возврат "СуммаБезВозвратнойТары,СуммаНДСБезВозвратнойТары,СуммаСНДСБезВозвратнойТары,
|СуммаАвтоматическойСкидкиБезВозвратнойТары,СуммаРучнойСкидкиБезВозвратнойТары,
|СуммаБонусныхБалловКСписаниюВВалютеБезВозвратнойТары";
КонецФункции
&НаСервере
Процедура УстановитьВидимостьЗапретаОтгрузкиПартнеру()
ОбновитьИнформациюДосьеПартнераРасчеты();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьОснованиеДляПечати()
Если Не ОснованиеИзменено Тогда
СтруктураОснования = СтруктураОснованияДляПечати();
ЗаполнитьЗначенияСвойств(Объект, СтруктураОснования);
КонецЕсли;
ПараметрыПечати = Новый Структура("ХозяйственнаяОперация, Договор", Объект.ХозяйственнаяОперация, Объект.Договор);
ТаблицаОснованийДляПечати.Загрузить(Обработки.ПомощникПродаж.ТаблицаОснованийДляПечати(ПараметрыПечати));
КонецПроцедуры
&НаСервере
Процедура НаправлениеДеятельностиПриИзмененииСервер()
Если Объект.ПорядокРасчетов = Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда
ЗаполнитьДоговорПоУмолчанию();
КонецЕсли;
ЗаполнитьНалогообложениеНДСПродажи();
НалогообложениеНДСПриИзмененииСервер();
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
ВзаиморасчетыСервер.ФормаПриИзмененииРеквизитов(ЭтотОбъект, "НаправлениеДеятельности");
ОбеспечениеВДокументахСервер.ПриИзмененииРеквизитаДокумента(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура НоваяПродажаСервер()
ИнициализироватьПомощникПродаж();
ПриИзмененииКорзиныНаСервере();
СкладПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ПометитьНаУдалениеПослеПолучитьВыделение(Результат, ДополнительныеПараметры) Экспорт
ВыделенныеДокументы = Результат;
Если ВыделенныеДокументы = Неопределено Тогда
Возврат;
КонецЕсли;
ОтветНаВопрос = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ПометитьНаУдалениеЗавершение", ЭтотОбъект, Новый Структура("ВыделенныеДокументы", ВыделенныеДокументы)), НСтр("ru='Пометить на удаление выделенные документы?'"), РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьПоляПартнер()
ВидимостьКЛ = Элементы.СчитатьКартуЛояльностиКлиент.Видимость;
Если ВидимостьКЛ Тогда
ВидимостьКЛ = ПолучитьФункциональнуюОпцию("ИспользоватьКартыЛояльности");
КонецЕсли;
Элементы.ПартнерБезКЛ.Видимость = Не ВидимостьКЛ;
Элементы.Партнер.Видимость = ВидимостьКЛ;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьТоварыПоСоглашениюСервер()
Объект.Товары.Очистить();
ДопустимоеКолвоТоваровВСегменте = 300;
ТаблицаНоменклатуры = Неопределено;
СписокСвойств = "";
КоличествоОбработанных = 0;
Если ЗначениеЗаполнено(Объект.Соглашение) Тогда
ДатаТекущейОтгрузки = ?(ЗначениеЗаполнено(Объект.ДатаОтгрузки),
Объект.ДатаОтгрузки,
ТекущаяДатаСеанса());
ДатаТекущейОтгрузки = НачалоДня(ДатаТекущейОтгрузки);
Если Объект.ОтображатьРекомендацииКПокупке
И Объект.СпособПрогнозированияПродаж = Перечисления.СпособыПрогнозированияПродаж.ПоПланамПродаж Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ПланыПродажОбороты.Номенклатура,
| ПланыПродажОбороты.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПрогноз,
| ПланыПродажОбороты.Характеристика,
| ПланыПродажОбороты.КоличествоОборот КАК КоличествоПрогноз,
| 2 КАК ИндексИконкиВыбора
|ИЗ
| РегистрНакопления.ПланыПродаж.Обороты(&НачПериода, &КонПериода, Авто,
| Сценарий = &Сценарий
| И Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыПланов.Утвержден)
| И НЕ Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
| И &ДопОтборы
| ) КАК ПланыПродажОбороты";
Запрос.УстановитьПараметр("НачПериода", ДатаТекущейОтгрузки - Объект.ПериодСбораСтатистики * 86400);
Запрос.УстановитьПараметр("КонПериода", КонецДня(Объект.ДатаСледующегоЗаказа));
Запрос.УстановитьПараметр("Партнер", Объект.Партнер);
РеквизитыСоглашения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.Соглашение,"СценарийПланирования,ВидПлана");
Запрос.УстановитьПараметр("Сценарий",РеквизитыСоглашения.СценарийПланирования);
ДопОтборы = Новый Массив;
Если ЗначениеЗаполнено(Объект.Подразделение) Тогда
ДопОтборы.Добавить("Подразделение В (&Подразделения)");
ПараметрКоллекция = Новый Массив;
ПараметрКоллекция.Добавить(Объект.Подразделение);
ПараметрКоллекция.Добавить(Справочники.СтруктураПредприятия.ПустаяСсылка());
Запрос.УстановитьПараметр("Подразделения",ПараметрКоллекция);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Склад) Тогда
Если ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Склад, "ЭтоГруппа") Тогда
ДопОтборы.Добавить("(Склад В ИЕРАРХИИ(&Склад) ИЛИ Склад = ЗНАЧЕНИЕ(ССправочник.Склады.ПустаяСсылка))");
Иначе
ДопОтборы.Добавить("(Склад = &Склад ИЛИ Склад = ЗНАЧЕНИЕ(Справочник.Склады.ПустаяСсылка))");
КонецЕсли;
Запрос.УстановитьПараметр("Склад",Объект.Склад);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Соглашение) Тогда
ДопОтборы.Добавить("Соглашение В (&Соглашения)");
ПараметрКоллекция = Новый Массив;
ПараметрКоллекция.Добавить(Объект.Соглашение);
ПараметрКоллекция.Добавить(Справочники.СоглашенияСКлиентами.ПустаяСсылка());
Запрос.УстановитьПараметр("Соглашения",ПараметрКоллекция);
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Менеджер) Тогда
ДопОтборы.Добавить("Менеджер В (&Менеджеры)");
ПараметрКоллекция = Новый Массив;
ПараметрКоллекция.Добавить(Объект.Менеджер);
ПараметрКоллекция.Добавить(Справочники.Пользователи.ПустаяСсылка());
Запрос.УстановитьПараметр("Менеджеры",ПараметрКоллекция);
КонецЕсли;
Запрос.Текст = СтрЗаменить(Запрос.Текст,"&ДопОтборы",СтрСоединить(ДопОтборы," И "));
ТаблицаНоменклатуры = Запрос.Выполнить().Выгрузить();
Если ТаблицаНоменклатуры.Количество() > ДопустимоеКолвоТоваровВСегменте Тогда
Возврат КоличествоОбработанных
КонецЕсли;
СписокСвойств = "Номенклатура, Характеристика, КоличествоПрогноз, ИндексИконкиВыбора, ЕдиницаИзмеренияПрогноз";
Иначе
СегментНоменклатуры = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Соглашение, "СегментНоменклатуры");
Если НЕ ЗначениеЗаполнено(СегментНоменклатуры) Тогда
Возврат КоличествоОбработанных
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ЕСТЬNULL(КОЛИЧЕСТВО(НоменклатураСегмента.Номенклатура),0) КАК Номенклатура
|ИЗ
| РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
|ГДЕ
| НоменклатураСегмента.Сегмент = &Сегмент";
Запрос.УстановитьПараметр("Сегмент", СегментНоменклатуры);
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Если Выборка.Количество()>ДопустимоеКолвоТоваровВСегменте Тогда
Возврат КоличествоОбработанных;
КонецЕсли;
Если Объект.ОтображатьРекомендацииКПокупке
И Объект.СпособПрогнозированияПродаж = Перечисления.СпособыПрогнозированияПродаж.ПоСтатистикеПродаж Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| НоменклатураСегмента.Номенклатура КАК Номенклатура,
| НоменклатураСегмента.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ВтНоменклатура
|ИЗ
| РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
|ГДЕ
| НоменклатураСегмента.Сегмент = &Сегмент
| И НЕ НоменклатураСегмента.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
|
|ИНДЕКСИРОВАТЬ ПО
| НоменклатураСегмента.Номенклатура,
| НоменклатураСегмента.Характеристика
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РаспоряженияНаОтгрузку.Номенклатура КАК Номенклатура,
| РаспоряженияНаОтгрузку.Характеристика КАК Характеристика,
| МАКСИМУМ(РаспоряженияНаОтгрузку.Период) КАК ПоследняяДатаЗаказа,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РаспоряженияНаОтгрузку.Регистратор) КАК КоличествоЗаказов,
| СУММА(РаспоряженияНаОтгрузку.Количество) КАК ОбъемПродаж,
| ВЫБОР КОГДА РАЗНОСТЬДАТ(МИНИМУМ(РаспоряженияНаОтгрузку.Период), &ТекущаяДата, ДЕНЬ) = 0 ТОГДА
| СУММА(РаспоряженияНаОтгрузку.Количество)
| ИНАЧЕ
| СУММА(РаспоряженияНаОтгрузку.Количество) / РАЗНОСТЬДАТ(МИНИМУМ(РаспоряженияНаОтгрузку.Период), &ТекущаяДата, ДЕНЬ)
| КОНЕЦ КАК СреднесуточнаяПродажа
|ПОМЕСТИТЬ ВТОбъемЗаказов
|ИЗ
| РегистрНакопления.РаспоряженияНаОтгрузкуИВозврат КАК РаспоряженияНаОтгрузку
|ГДЕ
| РаспоряженияНаОтгрузку.Период >= &Период
| И РаспоряженияНаОтгрузку.Распоряжение.Партнер = &Партнер
| И РаспоряженияНаОтгрузку.Показатель = ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.КОформлению)
| И РаспоряженияНаОтгрузку.Активность
| И РаспоряженияНаОтгрузку.Количество > 0
| И (РаспоряженияНаОтгрузку.Номенклатура, РаспоряженияНаОтгрузку.Характеристика) В
| (ВЫБРАТЬ
| ВтНоменклатура.Номенклатура,
| ВтНоменклатура.Характеристика
| ИЗ
| ВтНоменклатура)
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияНаОтгрузку.Номенклатура,
| РаспоряженияНаОтгрузку.Характеристика
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика,
| ПоследняяДатаЗаказа
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| РаспоряженияНаОтгрузку.Номенклатура КАК Номенклатура,
| РаспоряженияНаОтгрузку.Характеристика КАК Характеристика,
| РАЗНОСТЬДАТ(МАКСИМУМ(РаспоряженияНаОтгрузку.Период), &ТекущаяДата, ДЕНЬ) КАК КоличествоДнейСЗаказа,
| СУММА(РаспоряженияНаОтгрузку.Количество) КАК ОбъемПредыдущегоЗаказа
|ПОМЕСТИТЬ ВтПредОбъемЗаказов
|ИЗ
| РегистрНакопления.РаспоряженияНаОтгрузкуИВозврат КАК РаспоряженияНаОтгрузку
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТОбъемЗаказов КАК ВТОбъемЗаказов
| ПО РаспоряженияНаОтгрузку.Номенклатура = ВТОбъемЗаказов.Номенклатура
| И РаспоряженияНаОтгрузку.Характеристика = ВТОбъемЗаказов.Характеристика
| И ВТОбъемЗаказов.ПоследняяДатаЗаказа = РаспоряженияНаОтгрузку.Период
| И ВТОбъемЗаказов.КоличествоЗаказов > 1
|ГДЕ
| РаспоряженияНаОтгрузку.Распоряжение.Партнер = &Партнер
| И РаспоряженияНаОтгрузку.Показатель = ЗНАЧЕНИЕ(Перечисление.ПоказателиРаспоряженийНаОтгрузкуИВозврат.КОформлению)
| И РаспоряженияНаОтгрузку.Активность
| И РаспоряженияНаОтгрузку.Количество > 0
|
|СГРУППИРОВАТЬ ПО
| РаспоряженияНаОтгрузку.Номенклатура,
| РаспоряженияНаОтгрузку.Характеристика
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Характеристика
|;
|
|
|ВЫБРАТЬ
| ВтНоменклатура.Номенклатура КАК Номенклатура,
| ВтНоменклатура.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмеренияПрогноз,
| ВтНоменклатура.Характеристика КАК Характеристика,
| ВТОбъемЗаказов.ПоследняяДатаЗаказа КАК ДатаПредыдущегоЗаказа,
| ВТОбъемЗаказов.КоличествоЗаказов КАК КоличествоЗаказов,
| ВТОбъемЗаказов.ОбъемПродаж КАК ОбъемПродаж,
| ВТОбъемЗаказов.СреднесуточнаяПродажа КАК СреднесуточнаяПродажа,
| ВтПредОбъемЗаказов.КоличествоДнейСЗаказа КАК КоличествоДнейСЗаказа,
| ВтПредОбъемЗаказов.ОбъемПредыдущегоЗаказа КАК КоличествоОбъемПредыдущегоЗаказа,
| ВЫБОР
| КОГДА ВтПредОбъемЗаказов.ОбъемПредыдущегоЗаказа - ВТОбъемЗаказов.СреднесуточнаяПродажа * ВтПредОбъемЗаказов.КоличествоДнейСЗаказа > 0
| ТОГДА ВтПредОбъемЗаказов.ОбъемПредыдущегоЗаказа - ВТОбъемЗаказов.СреднесуточнаяПродажа * ВтПредОбъемЗаказов.КоличествоДнейСЗаказа
| ИНАЧЕ 0
| КОНЕЦ КАК КоличествоПрогнозныйОстаток,
| ВЫБОР
| КОГДА ВтПредОбъемЗаказов.ОбъемПредыдущегоЗаказа - ВТОбъемЗаказов.СреднесуточнаяПродажа * ВтПредОбъемЗаказов.КоличествоДнейСЗаказа > 0
| ТОГДА ВТОбъемЗаказов.СреднесуточнаяПродажа * &КоличествоДнейДоСледующейОтгрузки - (ВтПредОбъемЗаказов.ОбъемПредыдущегоЗаказа - ВТОбъемЗаказов.СреднесуточнаяПродажа * ВтПредОбъемЗаказов.КоличествоДнейСЗаказа)
| ИНАЧЕ ВТОбъемЗаказов.СреднесуточнаяПродажа * &КоличествоДнейДоСледующейОтгрузки
| КОНЕЦ КАК КоличествоПрогноз,
| ВЫБОР
| КОГДА ВтПредОбъемЗаказов.ОбъемПредыдущегоЗаказа - ВТОбъемЗаказов.СреднесуточнаяПродажа * ВтПредОбъемЗаказов.КоличествоДнейСЗаказа > 0
| ТОГДА (ВтПредОбъемЗаказов.ОбъемПредыдущегоЗаказа - ВТОбъемЗаказов.СреднесуточнаяПродажа * ВтПредОбъемЗаказов.КоличествоДнейСЗаказа) / ВТОбъемЗаказов.СреднесуточнаяПродажа
| ИНАЧЕ 0
| КОНЕЦ КАК КоличествоДнейДоОкончанияЗапаса
|ИЗ
| ВтНоменклатура КАК ВтНоменклатура
| ЛЕВОЕ СОЕДИНЕНИЕ ВТОбъемЗаказов КАК ВТОбъемЗаказов
| ПО ВтНоменклатура.Номенклатура = ВТОбъемЗаказов.Номенклатура
| И ВтНоменклатура.Характеристика = ВТОбъемЗаказов.Характеристика
| И (ВТОбъемЗаказов.КоличествоЗаказов > 1)
| ЛЕВОЕ СОЕДИНЕНИЕ ВтПредОбъемЗаказов КАК ВтПредОбъемЗаказов
| ПО ВтНоменклатура.Номенклатура = ВтПредОбъемЗаказов.Номенклатура
| И ВтНоменклатура.Характеристика = ВтПредОбъемЗаказов.Характеристика";
Если ЗначениеЗаполнено(Объект.ДатаСледующегоЗаказа) Тогда
КоличествоДнейДоСледующейОтгрузки = (НачалоДня(Объект.ДатаСледующегоЗаказа) - ДатаТекущейОтгрузки) / 86400;
Иначе
КоличествоДнейДоСледующейОтгрузки = 0;
КонецЕсли;
Запрос.УстановитьПараметр("Сегмент", СегментНоменклатуры);
Запрос.УстановитьПараметр("Партнер", Объект.Партнер);
Запрос.УстановитьПараметр("КоличествоДней", Объект.ПериодСбораСтатистики);
Запрос.УстановитьПараметр("КоличествоДнейДоСледующейОтгрузки", КоличествоДнейДоСледующейОтгрузки);
Запрос.УстановитьПараметр("ТекущаяДата", ДатаТекущейОтгрузки);
Запрос.УстановитьПараметр("Период", ДатаТекущейОтгрузки - Объект.ПериодСбораСтатистики * 86400);
ТаблицаНоменклатуры = Запрос.Выполнить().Выгрузить();
СписокСвойств = "Номенклатура, Характеристика, КоличествоПрогноз, ДатаПредыдущегоЗаказа,
|КоличествоПрогнозныйОстаток, КоличествоДнейДоОкончанияЗапаса, КоличествоОбъемПредыдущегоЗаказа,
|СреднесуточнаяПродажа, ЕдиницаИзмеренияПрогноз";
ИначеЕсли Объект.ЗаполнятьТоварыПоСоглашению Тогда
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| НоменклатураСегмента.Номенклатура КАК Номенклатура,
| НоменклатураСегмента.Характеристика КАК Характеристика
|ИЗ
| РегистрСведений.НоменклатураСегмента КАК НоменклатураСегмента
|ГДЕ
| НоменклатураСегмента.Сегмент = &Сегмент
| И НЕ НоменклатураСегмента.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)";
Запрос.УстановитьПараметр("Сегмент", СегментНоменклатуры);
ТаблицаНоменклатуры = Запрос.Выполнить().Выгрузить();
СписокСвойств = "Номенклатура, Характеристика";
КонецЕсли;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(ТаблицаНоменклатуры) Тогда
Возврат КоличествоОбработанных
КонецЕсли;
АдресТаблицы = ПоместитьВоВременноеХранилище(ТаблицаНоменклатуры);
СтруктураПараметров = Новый Структура("АдресТоваровВХранилище, МаксимальнаяДатаОтгрузки",
АдресТаблицы, Объект.ДатаОтгрузки);
ОбработкаВыбораПодборНаСервере(СтруктураПараметров, СписокСвойств);
КоличествоОбработанных = ТаблицаНоменклатуры.Количество();
КонецЕсли;
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
Возврат КоличествоОбработанных;
КонецФункции
&НаСервере
Процедура ЗаполнитьТоварыПоСоглашениюСерверСЗамером()
Если Объект.ЗаполнятьТоварыПоСоглашению Тогда
Замер = ОценкаПроизводительности.НачатьЗамерДлительнойОперации(
"Обработка.ПомощникПродаж.Форма.Форма.ЗаполнитьТоварыПоСоглашениюСервер");
КоличествоОбработанных = ЗаполнитьТоварыПоСоглашениюСервер();
ОценкаПроизводительности.ЗакончитьЗамерДлительнойОперации(Замер, КоличествоОбработанных / 10);
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьИнформациюДосьеПартнераРасчеты()
Если НЕ ЗначениеЗаполнено(Объект.Партнер) Тогда
Элементы.ДекорацияДосьеПартнераРасчеты.Заголовок = "";
Возврат;
КонецЕсли;
МассивСообщений = Новый Массив;
ТекстЗапросаРасчеты =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| АналитикаУчетаПоПартнерам.КлючАналитики
|ПОМЕСТИТЬ ОтборАналитикиПартнеров
|ИЗ
| РегистрСведений.АналитикаУчетаПоПартнерам КАК АналитикаУчетаПоПартнерам
|ГДЕ
| &УсловиеОтбора
|ИНДЕКСИРОВАТЬ ПО
| АналитикаУчетаПоПартнерам.КлючАналитики
|;
|
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА РасчетыСКлиентамиОстатки.СуммаОстаток > 0
| ТОГДА РасчетыСКлиентамиОстатки.СуммаОстаток
| ИНАЧЕ 0
| КОНЕЦ КАК Задолженность,
| 0 КАК ПросроченнаяЗадолженность,
| РасчетыСКлиентамиОстатки.Валюта.Представление КАК Валюта
|ПОМЕСТИТЬ
| ВтРасчеты
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(
| ,
| АналитикаУчетаПоПартнерам В
| (ВЫБРАТЬ
| ОтборАналитикиПартнеров.КлючАналитики
| ИЗ
| ОтборАналитикиПартнеров КАК ОтборАналитикиПартнеров)) КАК РасчетыСКлиентамиОстатки
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0 КАК Задолженность,
| ВЫБОР
| КОГДА РасчетыСКлиентамиОстатки.КОплатеОстаток > 0
| ТОГДА РасчетыСКлиентамиОстатки.КОплатеОстаток
| ИНАЧЕ 0
| КОНЕЦ КАК ПросроченнаяЗадолженность,
| РасчетыСКлиентамиОстатки.Валюта.Представление КАК Валюта
|ИЗ
| РегистрНакопления.РасчетыСКлиентами.Остатки(
| &ТекущаяДата,
| АналитикаУчетаПоПартнерам В
| (ВЫБРАТЬ
| ОтборАналитикиПартнеров.КлючАналитики
| ИЗ
| ОтборАналитикиПартнеров КАК ОтборАналитикиПартнеров)) КАК РасчетыСКлиентамиОстатки
|;
|
|
|ВЫБРАТЬ
| СУММА(Расчеты.Задолженность) КАК Задолженность,
| СУММА(Расчеты.ПросроченнаяЗадолженность) КАК ПросроченнаяЗадолженность,
| Расчеты.Валюта КАК Валюта
|ИЗ
| ВтРасчеты КАК Расчеты
|
|СГРУППИРОВАТЬ ПО
| Расчеты.Валюта
|;";
ШаблонУсловие = " И АналитикаУчетаПоПартнерам.%Параметр = &%Параметр";
УсловиеОтбора = "ИСТИНА";
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
УсловиеОтбора = УсловиеОтбора + СтрЗаменить(ШаблонУсловие, "%Параметр", "Партнер");
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Организация) Тогда
УсловиеОтбора = УсловиеОтбора + СтрЗаменить(ШаблонУсловие, "%Параметр", "Организация");
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Контрагент) Тогда
УсловиеОтбора = УсловиеОтбора + СтрЗаменить(ШаблонУсловие, "%Параметр", "Контрагент");
КонецЕсли;
Если ЗначениеЗаполнено(Объект.Договор) Тогда
УсловиеОтбора = УсловиеОтбора + СтрЗаменить(ШаблонУсловие, "%Параметр", "Договор");
КонецЕсли;
Если ЗначениеЗаполнено(Объект.НаправлениеДеятельности) Тогда
УсловиеОтбора = УсловиеОтбора + СтрЗаменить(ШаблонУсловие, "%Параметр", "НаправлениеДеятельности");
КонецЕсли;
ТекстЗапросаРасчеты = СтрЗаменить(ТекстЗапросаРасчеты, "&УсловиеОтбора", УсловиеОтбора);
ТекстЗапросаСоглашение =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| СоглашенияСКлиентами.МинимальнаяСуммаЗаказа,
| СоглашенияСКлиентами.Валюта
|ИЗ
| Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
|ГДЕ
| СоглашенияСКлиентами.Ссылка = &СоглашениеСсылка
| И СоглашенияСКлиентами.МинимальнаяСуммаЗаказа>0;
|";
Запрос = Новый Запрос;
Запрос.Текст = ТекстЗапросаРасчеты + ТекстЗапросаСоглашение;
Запрос.УстановитьПараметр("СоглашениеСсылка", Объект.Соглашение);
Запрос.УстановитьПараметр("Партнер", Объект.Партнер);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
Запрос.УстановитьПараметр("Договор", Объект.Договор);
Запрос.УстановитьПараметр("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
Запрос.УстановитьПараметр("ТекущаяДата", КонецДня(ТекущаяДатаСеанса()));
ПакетРезультатов = Запрос.ВыполнитьПакет();
ТаблицаЗадолженностей = ПакетРезультатов[2].Выгрузить();
Для Каждого СтрЗадолженность Из ТаблицаЗадолженностей Цикл
Задолженность = Формат(СтрЗадолженность.Задолженность,"ЧДЦ=2");
Инфо = "";
Если СтрЗадолженность.Задолженность > 0 Тогда
Шаблон = НСтр("ru='Долг клиента: %1 %2'")+ Символы.ПС;
Инфо = СтрШаблон(Шаблон, Задолженность, СтрЗадолженность.Валюта);
ИначеЕсли СтрЗадолженность.Задолженность < 0 Тогда
Шаблон = НСтр("ru='Наш долг: %1 %2'")+ Символы.ПС;
Инфо = СтрШаблон(Шаблон, -Задолженность, СтрЗадолженность.Валюта);
КонецЕсли;
Если ЗначениеЗаполнено(Инфо) Тогда
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо));
КонецЕсли;
ПросроченнаяЗадолженность = Формат(СтрЗадолженность.ПросроченнаяЗадолженность, "ЧДЦ=2");
Если СтрЗадолженность.ПросроченнаяЗадолженность > 0 Тогда
Шаблон = НСтр("ru='Просроченная задолженность:'") + " ";
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Шаблон));
Шаблон = НСтр("ru='%1 %2'")+ Символы.ПС;
Инфо = СтрШаблон(Шаблон, ПросроченнаяЗадолженность, СтрЗадолженность.Валюта);
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо,,WebЦвета.Кирпичный));
КонецЕсли;
КонецЦикла;
ВыборкаСоглашение = ПакетРезультатов[3].Выбрать();
Если ВыборкаСоглашение.Следующий() Тогда
Шаблон = НСтр("ru='Мин. сумма заказа: %1 %2'")+ Символы.ПС;
Инфо = СтрШаблон(Шаблон, ВыборкаСоглашение.МинимальнаяСуммаЗаказа, ВыборкаСоглашение.Валюта);
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо));
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОстатокДопустимогоКредита) Тогда
Инфо = ТекстОстатокДопустимогоКредита + Символы.ПС;
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо, ,WebЦвета.Кирпичный, ,"ПричиныЗапретаОтгрузки"));
КонецЕсли;
Если СегментыСервер.ПартнерВходитВСегментыЗапретаОтгрузки(Объект.Партнер) Тогда
Инфо = НСтр("ru='Отгрузка запрещена'")+ Символы.ПС;
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо, , WebЦвета.Кирпичный, ,"ФормаСегментовЗапретаОтгрузки"));
КонецЕсли;
Элементы.ДекорацияДосьеПартнераРасчеты.Заголовок = Новый ФорматированнаяСтрока(МассивСообщений, Новый Шрифт(,12));
КонецПроцедуры
&НаСервере
Процедура ОбновитьИнформациюДосьеПартнераКонтакты()
Если Не ЗначениеЗаполнено(Объект.Партнер) Тогда
Элементы.ДекорацияДосьеПартнераКонтакты.Заголовок = "";
Возврат;
КонецЕсли;
ТекстЗапросаСписокЗаказов =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ СостоянияЗаказов.Заказ) КАК КоличествоЗаказов
|ИЗ
| РегистрСведений.СостоянияЗаказовКлиентов КАК СостоянияЗаказов
|ГДЕ
| СостоянияЗаказов.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияЗаказовКлиентов.Закрыт)
| И СостоянияЗаказов.Заказ ССЫЛКА Документ.ЗаказКлиента
| И ВЫРАЗИТЬ(СостоянияЗаказов.Заказ КАК Документ.ЗаказКлиента).Партнер = &Партнер;";
МассивСообщений = Новый Массив;
Если ЗначениеЗаполнено(Объект.Партнер) Тогда
Инфо = НСтр("ru='Досье клиента'") + Символы.ПС;
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо, ,ЦветаСтиля.ГиперссылкаЦвет, ,"ДосьеПартнера"));
Запрос = Новый Запрос(ТекстЗапросаСписокЗаказов);
Запрос.УстановитьПараметр("Партнер", Объект.Партнер);
ВыборкаСписокЗаказов = Запрос.Выполнить().Выбрать();
Если ИспользоватьЗаказыКлиентов И ВыборкаСписокЗаказов.Следующий() Тогда
Шаблон = НСтр("ru='Список заказов (%1)'") + Символы.ПС;
Инфо = СтрШаблон(Шаблон, ВыборкаСписокЗаказов.КоличествоЗаказов);
Если ВыборкаСписокЗаказов.КоличествоЗаказов > 0 Тогда
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо, ,ЦветаСтиля.ГиперссылкаЦвет, , "СписокЗаказов"));
Иначе
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо, ,ЦветаСтиля.СерыйЦветТекста1, ,"СписокЗаказов"));
КонецЕсли;
КонецЕсли;
МассивВладельцевКИ = Новый Массив;
МассивВладельцевКИ.Добавить(Объект.Партнер);
МассивТипыКИ = Новый Массив;
МассивТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.Телефон);
МассивТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.Факс);
МассивТипыКИ.Добавить(Перечисления.ТипыКонтактнойИнформации.АдресЭлектроннойПочты);
ТаблицаКИ = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъектов(МассивВладельцевКИ,
МассивТипыКИ,
,
ТекущаяДатаСеанса());
Для Каждого СтрокаКИ Из ТаблицаКИ Цикл
Шаблон = НСтр("ru='%1: %2'")+ Символы.ПС;
Инфо = СтрШаблон(Шаблон, СтрокаКИ.Тип, СтрокаКИ.Представление);
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо));
КонецЦикла;
Иначе
Инфо = НСтр("ru='Партнер не выбран.'")+ Символы.ПС;
МассивСообщений.Добавить(Новый ФорматированнаяСтрока(Инфо, ,ЦветаСтиля.ПоясняющийТекст));
КонецЕсли;
Элементы.ДекорацияДосьеПартнераКонтакты.Заголовок = Новый ФорматированнаяСтрока(МассивСообщений, Новый Шрифт(,12));
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоПрогнозуНаСервер()
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий,Объект);
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;
ОбрабатываемыеСтроки = Новый Массив;
Для Каждого ВыбраннаяСтрока Из ВыделенныеСтроки Цикл
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ТекущаяСтрока.ИндексИконкиВыбора = 1 Тогда
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковокПрогноз;
ТекущаяСтрока.Количество = ТекущаяСтрока.КоличествоПрогноз;
ТекущаяСтрока.КоличествоУпаковокПрогноз = ТекущаяСтрока.КоличествоУпаковокОбъемПредыдущегоЗаказа;
ТекущаяСтрока.КоличествоПрогноз = ТекущаяСтрока.КоличествоОбъемПредыдущегоЗаказа;
ТекущаяСтрока.ИндексИконкиВыбора = ТекущаяСтрока.ИндексИконкиВыбора + 1;
ИначеЕсли ТекущаяСтрока.ИндексИконкиВыбора = 2 Тогда
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковокПрогноз;
ТекущаяСтрока.Количество = ТекущаяСтрока.КоличествоПрогноз;
ТекущаяСтрока.ИндексИконкиВыбора = ТекущаяСтрока.ИндексИконкиВыбора + 1;
ИначеЕсли ТекущаяСтрока.ИндексИконкиВыбора = 3 Тогда
ТекущаяСтрока.КоличествоУпаковок = ТекущаяСтрока.КоличествоУпаковок + ТекущаяСтрока.КоличествоУпаковокПрогноз;
ТекущаяСтрока.Количество = ТекущаяСтрока.КоличествоУпаковок + ТекущаяСтрока.КоличествоПрогноз;
КонецЕсли;
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьДоговора()
ПродажиСервер.УстановитьДоступностьДоговора(Объект, Элементы.Договор.Доступность, Элементы.Договор.Видимость, Объект.Договор);
Если Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
Элементы.Договор.Видимость = Ложь;
КонецЕсли;
Элементы.ДекорацияОтступ.Видимость = НЕ Элементы.Договор.Видимость;
КонецПроцедуры
&НаСервере
Процедура УстановитьОформлениеПодразделения()
ИспользуютсяПодразделенияВТабличнойЧасти = Объект.СоздаватьЗаказКлиента Или
Объект.СоздаватьДокументПродажи Или
Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов;
ИспользоватьСкладыВТабличнойЧастиДокументовПродажи = ПолучитьФункциональнуюОпцию("ИспользоватьСкладыВТабличнойЧастиДокументовПродажи");
ИспользоватьПодразделения = ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения");
Элементы.ТоварыГруппаОтправитель.Видимость =
ИспользоватьПодразделения И ИспользуютсяПодразделенияВТабличнойЧасти
Или ИспользоватьСкладыВТабличнойЧастиДокументовПродажи И СкладГруппа;
Если СкладГруппа И ИспользуютсяПодразделенияВТабличнойЧасти Тогда
Элементы.ТоварыГруппаОтправитель.Заголовок = НСтр("ru = 'Отправитель'");
ИначеЕсли СкладГруппа И Не ИспользуютсяПодразделенияВТабличнойЧасти Тогда
Элементы.ТоварыГруппаОтправитель.Заголовок = НСтр("ru = 'Склад'");
Иначе
Элементы.ТоварыГруппаОтправитель.Заголовок = НСтр("ru = 'Подразделение-отправитель'");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьНалогообложениеНДСПродажи()
ПараметрыЗаполнения = Обработки.ПомощникПродаж.ПараметрыЗаполненияНалогообложенияНДСПродажи(Объект);
УчетНДСУП.ЗаполнитьНалогообложениеНДСПродажи(Объект.НалогообложениеНДС, ПараметрыЗаполнения, УчетНДСКэшированныеЗначенияПараметров);
УчетНДСУП.ЗаполнитьСписокВыбораНалогообложенияНДСПродажи(Элементы.НалогообложениеНДС, Объект.НалогообложениеНДС, ПараметрыЗаполнения, УчетНДСКэшированныеЗначенияПараметров);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовБонуснойПрограммыЛояльности()
Элементы.ГруппаТоварыБонусныеБаллы.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
Элементы.ТоварыСуммаБонусныхБалловКСписаниюВВалюте.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
Элементы.ТоварыСуммаНачисленныхБонусныхБалловВВалюте.Видимость = ИспользоватьБонусныеПрограммыЛояльности;
КонецПроцедуры
&НаСервере
Функция АдресТабличнойЧастиТовары()
Возврат ПоместитьВоВременноеХранилище(Объект.Товары.Выгрузить(), УникальныйИдентификатор);
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыЗаполненияСтавкиНДС(Объект)
ПараметрыЗаполнитьСтавкуНДС = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияСтавкиНДС(Объект);
ВариантКомерческоеПредложение = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение");
Если Объект.ВариантОформленияДокументов = ВариантКомерческоеПредложение Тогда
Налогообложение =
КоммерческиеПредложенияДокументыКлиентСерверУТ.НалогообложениеКоммерческихПредложенийПоНалогообложениюНДС(Объект.НалогообложениеНДС);
ПараметрыЗаполнитьСтавкуНДС.НалогообложениеНДС =
КоммерческиеПредложенияДокументыКлиентСерверУТ.НалогообложениеНДСПоНалогообложениюКоммерческихПредложений(Налогообложение);
КонецЕсли;
Возврат ПараметрыЗаполнитьСтавкуНДС;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция СсылкаПоВариантуОформления(ВариантОформленияДокументов)
Результат = ПредопределенноеЗначение("Документ.ЗаказКлиента.ПустаяСсылка");
Если ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг")
Или ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг") Тогда
Результат = ПредопределенноеЗначение("Документ.РеализацияТоваровУслуг.ПустаяСсылка");
ИначеЕсли ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю")
Или ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю") Тогда
Результат = ПредопределенноеЗначение("Документ.ПередачаТоваровХранителю.ПустаяСсылка");
КонецЕсли;
Возврат Результат;
КонецФункции
#КонецОбласти
#Область Наборы
&НаКлиентеНаСервереБезКонтекста
Функция КолонкиНабора(Форма)
Колонки = Новый Массив;
Колонки.Добавить("Номенклатура");
Колонки.Добавить("Характеристика");
Колонки.Добавить("Цена");
Колонки.Добавить("ВидЦены");
Колонки.Добавить("Упаковка");
Колонки.Добавить("Количество");
Колонки.Добавить("КоличествоУпаковок");
Если Не ЭтоОперацияПередачи(Форма.Объект.ХозяйственнаяОперация) Тогда
Колонки.Добавить("ПроцентРучнойСкидки");
Колонки.Добавить("СуммаРучнойСкидки");
Колонки.Добавить("ПроцентАвтоматическойСкидки");
Колонки.Добавить("СуммаАвтоматическойСкидки");
КонецЕсли;
Колонки.Добавить("СтавкаНДС");
Колонки.Добавить("СуммаНДС");
Колонки.Добавить("СуммаСНДС");
Колонки.Добавить("Сумма");
Возврат Колонки;
КонецФункции
&НаКлиенте
Процедура ПриУдаленииКомплектующих(Действие, ДополнительныйПараметр) Экспорт
Если НаборыКлиент.ДействиеРедактироватьНабор(Действие) Тогда
НаборыКлиент.ПриУдаленииКомплектующих(ЭтотОбъект, "Товары", ДополнительныйПараметр);
ИначеЕсли НаборыКлиент.ДействиеУдалитьВесьНабор(Действие) Тогда
ПриУдаленииКомплектующихНаСервере("Товары", ДополнительныйПараметр);
КонецЕсли;
ПриИзмененииКорзиныНаСервере();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ПриУдаленииКомплектующихНаСервере(ИмяТЧ, ДополнительныйПараметр)
НаборыСервер.ПриУдаленииКомплектующих(ЭтотОбъект, ИмяТЧ, ДополнительныйПараметр);
КонецПроцедуры
&НаСервере
Функция АдресНабораВоВременномХранилище(Параметры)
Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтотОбъект, Параметры, "Товары");
КонецФункции
&НаСервере
Процедура ПриОкончанииРедактированияНабора(АдресВоВременномХранилище)
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
СтруктураДействийСИзмененнымиСтроками = Новый Структура;
СтруктураДействийСИзмененнымиСтроками.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
СтруктураДействийСИзмененнымиСтроками.Вставить("ПроверитьСериюРассчитатьСтатус", Неопределено);
СтруктураДействийСДобавленнымиСтроками = Новый Структура;
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьСодержание",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(Объект, Ложь));
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьВариантОбеспечения");
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьХарактеристикуПоВладельцу", Неопределено);
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", Неопределено);
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьЗаполнитьСклад",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьСериюРассчитатьСтатус", Неопределено);
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ДобавитьДействияОбеспеченияНаСервере(СтруктураДействийСДобавленнымиСтроками,
"ВариантОбеспечения,СкладОбязателен,ДатаОтгрузкиОбязательна");
ПараметрыДанных = Новый Структура;
ПараметрыДанных.Вставить("Данные", ПолучитьИзВременногоХранилища(АдресВоВременномХранилище));
ПараметрыДанных.Вставить("СтруктураДействийСИзмененнымиСтроками", СтруктураДействийСИзмененнымиСтроками);
ПараметрыДанных.Вставить("СтруктураДействийСДобавленнымиСтроками", СтруктураДействийСДобавленнымиСтроками);
ПараметрыДанных.Вставить("КолонкиНабора", КолонкиНабора(ЭтотОбъект));
НаборыСервер.ПриОкончанииРедактированияНабора(ЭтотОбъект, "Товары", ПараметрыДанных);
ПриИзмененииКорзиныНаСервере();
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
ОбновитьКолонкуДоступноСервер();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытий
&НаКлиенте
Процедура ПерейтиДоставка(Команда)
СброситьПометкиКомандШапки(Элементы);
Элементы.ПерейтиДоставка.Пометка = Истина;
Элементы.Страницы.ТекущаяСтраница = Элементы.СтраницаДоставка;
КонецПроцедуры
&НаКлиенте
Процедура СпособМестоДоставкиПеревозчикПриИзменении(Элемент)
Если Не Объект.ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ЗаполнитьРеквизитыДоставки(Элемент.Имя);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиПриИзменении(Элемент)
ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки(
ПолучитьИмяРеквизитаАдресаДоставки(Элемент));
ДоставкаТоваровКлиент.ПриИзмененииПредставленияАдреса(
Элемент,
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставки],
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначенияПолей]);
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиОчистка(Элемент, СтандартнаяОбработка)
АдресДоставкиПриИзменении(Элемент);
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки(
ПолучитьИмяРеквизитаАдресаДоставки(Элемент));
ДоставкаТоваровКлиент.ОткрытьФормуВыбораАдресаИОбработатьРезультат(
Элемент,
Объект,
ИменаРеквизитовАдресовДоставки,
СтандартнаяОбработка);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПолучитьИмяРеквизитаАдресаДоставки(Элемент)
Если СтрНайти(Элемент.Имя, "АдресДоставкиПеревозчика") > 0 Тогда
ИмяРеквизитаАдреса = "АдресДоставкиПеревозчика";
Иначе
ИмяРеквизитаАдреса = "АдресДоставки";
КонецЕсли;
Возврат ИмяРеквизитаАдреса;
КонецФункции
&НаКлиенте
Процедура АдресДоставкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
АдресДоставкиПриИзменении(Элемент);
ДоставкаТоваровКлиент.АдресДоставкиОбработкаВыбора(Элементы, Объект, Элемент.Имя, ВыбранноеЗначение);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура НаправлениеДеятельностиПриИзменении(Элемент)
НаправлениеДеятельностиПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ОсобыеУсловияПеревозкиПриИзменении(Элемент)
ОсобыеУсловияПеревозкиПриИзмененииСервер();
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийНаСервере
&НаСервере
Процедура ПриИзмененииКорзиныНаСервере()
МногооборотнаяТараСервер.ОбновитьПризнакБезВозвратнойТары(Объект.Товары, Объект.ВернутьМногооборотнуюТару);
ОбщегоНазначенияУТ.ЗаполнитьДубликатыЗависимыхРеквизитовВКоллекции(Объект.Товары, ЗависимыеРеквизиты());
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
ЗаполнитьСлужебныеРеквизитыФормыДокумента();
ОбновитьТекстИнформационнойНадписиФормируемыеДокументы();
МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьДоступностьЭлементовВозвратнойТары(Форма)
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("СрокВозвратаМногооборотнойТары");
МассивЭлементов.Добавить("ТребуетсяЗалогЗаТару");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Форма.Элементы, МассивЭлементов, "Доступность",
Форма.Объект.ВернутьМногооборотнуюТару);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(АдресТарыВХранилище)
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураПересчетаСуммы = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
ПараметрыЗаполнитьСтавкуНДС = ПараметрыЗаполненияСтавкиНДС(Объект);
СтруктураДействийИзмененныеСтроки = Новый Структура;
СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьПризнакБезВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьКоличествоУпаковок");
СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьСтавкуНДС", ПараметрыЗаполнитьСтавкуНДС);
СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьСтавкуНДСВозвратнойТары", Объект.ВернутьМногооборотнуюТару);
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСумму");
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать", Истина));
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки",
Новый Структура("Очищать", Истина));
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьСуммуСУчетомСкидкиБонуснымиБаллами");
СтруктураДействийИзмененныеСтроки.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
СтруктураДействийДобавленныеСтроки = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(
СтруктураДействийИзмененныеСтроки);
СтруктураДействийДобавленныеСтроки.Вставить("ПроверитьЗаполнитьСклад",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСкладаВСтрокеТЧ(Объект, СкладГруппа));
СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьПризнакВариантОформленияПродажи",
Новый Структура("Номенклатура", "ВариантОформленияПродажи"));
СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьПодразделениеВСтрокеТЧ", Новый Структура("Подразделение", Объект.Подразделение));
ДобавитьДействияОбеспеченияНаСервере(СтруктураДействийДобавленныеСтроки,
"ВариантОбеспечения,СкладОбязателен,ДатаОтгрузкиОбязательна");
Если ИспользоватьСоглашенияСКлиентами И ЗначениеЗаполнено(Объект.Соглашение) Тогда
СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьУсловияПродаж",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияУсловийПродажВСтрокеТЧ(Объект));
Иначе
СтруктураДействийДобавленныеСтроки.Вставить("ЗаполнитьЦенуПродажи",
ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПараметрыЗаполненияЦеныВСтрокеТЧ(Объект));
КонецЕсли;
ИменаПолей = ИменяПолейПодбораМногооборотнойТары(Объект.ВариантОформленияДокументов, Истина);
МногооборотнаяТараСервер.ЗаполнитьМногооборотнуюТаруИзХранилища(Объект,
АдресТарыВХранилище,
"Товары",
ИменаПолей,
СтруктураДействийИзмененныеСтроки,
СтруктураДействийДобавленныеСтроки,
КэшированныеЗначения);
СтруктураЗаполнитьХарактеристики = Новый Структура;
СтруктураЗаполнитьХарактеристики.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары, СтруктураЗаполнитьХарактеристики);
НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтотОбъект);
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.ВариантОформления)
И ТекСтрока.ТипНоменклатуры = Перечисления.ТипыНоменклатуры.МногооборотнаяТара Тогда
ЗаполнитьВариантОформленияВСтрокеТабличнойЧасти(ТекСтрока, Объект.ВариантОформленияДокументов, Объект.Дата, Объект.НеОтгружатьЧастями);
КонецЕсли;
КонецЦикла;
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
ОбновитьНадписьВсегоПодобраноПозиций(НадписьВсегоПодобраноПозиций, Объект.Товары.Количество());
ОбновитьКолонкуДоступноСервер();
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ИменяПолейПодбораМногооборотнойТары(ВариантОформленияДокументов, ИсключитьКоличество = Ложь)
Если ИсключитьКоличество Тогда
Если ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ИменаПолей = "Номенклатура,Характеристика";
ИначеЕсли ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг")
Или ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю") Тогда
ИменаПолей = "Номенклатура,Характеристика,Склад";
Иначе
ИменаПолей = "Номенклатура,Характеристика,Склад,ДатаОтгрузки";
КонецЕсли;
Иначе
Если ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ИменаПолей = "Номенклатура,Характеристика,Количество";
ИначеЕсли ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг")
Или ВариантОформленияДокументов = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю") Тогда
ИменаПолей = "Номенклатура,Характеристика,Количество,Склад";
Иначе
ИменаПолей = "Номенклатура,Характеристика,Количество,Склад,ДатаОтгрузки";
КонецЕсли;
КонецЕсли;
Возврат ИменаПолей;
КонецФункции
&НаСервере
Процедура ЗаполнитьСписокВыбораОпераций(ИзмененВариантОформления = Ложь)
Если ИзмененВариантОформления Тогда
ЭтоРеализация = ЭтоРеализация(Объект.ВариантОформленияДокументов);
ОперацииПродажи = Элементы.ХозяйственнаяОперация.СписокВыбора;
ОперацииПродажи.Очистить();
Если ЭтоРеализация
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.РеализацияКлиенту);
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности);
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет);
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
Если Не ЭтоРеализация
И Не Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение Тогда
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи);
КонецЕсли;
Иначе
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи);
Если ИспользоватьОтгрузкуБезПереходаПраваСобственности2_5 Тогда
ОперацииПродажи.Добавить(Перечисления.ХозяйственныеОперации.ОтгрузкаТоваровКлиенту);
КонецЕсли;
КонецЕсли;
Если ОперацииПродажи.НайтиПоЗначению(Объект.ХозяйственнаяОперация) = Неопределено Тогда
Объект.Соглашение = Неопределено;
Объект.ХозяйственнаяОперация = ОперацииПродажи[0].Значение;
ХозяйственнаяОперацияПриИзмененииСервер();
ИначеЕсли Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю)
И Не Объект.КомиссионныеПродажи25 Тогда
Объект.Соглашение = Неопределено;
ХозяйственнаяОперацияПриИзмененииСервер();
ИначеЕсли Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию
И (Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг)
И Объект.КомиссионныеПродажи25 Тогда
Объект.Соглашение = Неопределено;
ХозяйственнаяОперацияПриИзмененииСервер();
КонецЕсли;
КонецЕсли;
Если Не ИспользоватьСоглашенияСКлиентами Тогда
ВозможнаРеализацияБезПереходаПраваСобственности = ИспользоватьОтгрузкуБезПереходаПраваСобственности;
ИначеЕсли НЕ ЗначениеЗаполнено(Объект.Соглашение) Тогда
ВозможнаРеализацияБезПереходаПраваСобственности = Ложь;
Иначе
УстановитьПривилегированныйРежим(Истина);
ВозможнаРеализацияБезПереходаПраваСобственности = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Соглашение,
"ВозможнаРеализацияБезПереходаПраваСобственности");
УстановитьПривилегированныйРежим(Ложь);
КонецЕсли;
Если Элементы.Найти("ХозяйственнаяОперация") <> Неопределено Тогда
Если Не ИспользоватьКомиссиюПриПродажах Тогда
ЭлементСписка = Элементы.ХозяйственнаяОперация.СписокВыбора.НайтиПоЗначению(
Перечисления.ХозяйственныеОперации.ПередачаНаКомиссию);
Если ЭлементСписка <> Неопределено Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
Если Не ИспользоватьПередачуТоваровНаХранение Тогда
ЭлементСписка = Элементы.ХозяйственнаяОперация.СписокВыбора.НайтиПоЗначению(
Перечисления.ХозяйственныеОперации.ПередачаНаХранениеСПравомПродажи);
Если ЭлементСписка <> Неопределено Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
Если Не ПолучитьФункциональнуюОпциюФормы("ИспользоватьУправленческуюОрганизацию") Тогда
ЭлементСписка = Элементы.ХозяйственнаяОперация.СписокВыбора.НайтиПоЗначению(
Перечисления.ХозяйственныеОперации.РеализацияКлиентуРеглУчет);
Если ЭлементСписка <> Неопределено Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
ЭлементСписка = Элементы.ХозяйственнаяОперация.СписокВыбора.НайтиПоЗначению(
Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности);
Если Не ВозможнаРеализацияБезПереходаПраваСобственности Тогда
Если ЭлементСписка <> Неопределено Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
ИначеЕсли Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю
И Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю Тогда
Если ЭлементСписка = Неопределено Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Добавить(
Перечисления.ХозяйственныеОперации.РеализацияБезПереходаПраваСобственности);
КонецЕсли;
КонецЕсли;
ЕдинственнаяОперация = Элементы.ХозяйственнаяОперация.СписокВыбора.Количество() = 1;
Если Не ИзмененВариантОформления И ЕдинственнаяОперация И Не ЗначениеЗаполнено(Объект.ХозяйственнаяОперация) Тогда
Объект.ХозяйственнаяОперация = Элементы.ХозяйственнаяОперация.СписокВыбора[0].Значение;
ХозяйственнаяОперацияПриИзмененииСервер();
КонецЕсли;
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ХозяйственнаяОперация",
"ТолькоПросмотр",
ЕдинственнаяОперация И ЗначениеЗаполнено(Объект.ХозяйственнаяОперация));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораВариантаОформленияДокументовПродажи()
ВариантыОформленияДокументов = Элементы.ТоварыВариантОформления.СписокВыбора;
ВариантыОформленияДокументов.Очистить();
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента);
Если ЭтоРеализация(Объект.ВариантОформленияДокументов) Тогда
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
ИначеЕсли ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
ВариантыОформленияДокументов.Добавить(Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура КонтактноеЛицоПриИзмененииСервер(ПартнерИзменился)
ВладелецКонтактногоЛица = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.КонтактноеЛицо, "Владелец");
Если ВладелецКонтактногоЛица <> Объект.Партнер Тогда
Объект.Партнер = ВладелецКонтактногоЛица;
ПартнерПриИзмененииСервер();
ПартнерИзменился = Истина;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораДатаОтгрузки()
МаксДатаАванса = ПродажиСервер.МаксимальнаяДатаАванса(Объект.ЭтапыГрафикаОплаты);
ДатаОтгрузкиСписокВыбора = Элементы.ДатаОтгрузки.СписокВыбора;
Если ЗначениеЗаполнено(МаксДатаАванса) Тогда
ПредставлениеМаксДатаАванса = "%МаксДатаАванса%";
ПредставлениеМаксДатаАванса = СтрЗаменить(ПредставлениеМаксДатаАванса,
"%МаксДатаАванса%",
Формат(МаксДатаАванса,"ДЛФ=DD"));
ДатаОтгрузкиСписокВыбора.Очистить();
ДатаОтгрузкиСписокВыбора.Добавить(МаксДатаАванса, ПредставлениеМаксДатаАванса);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Обеспечение
&НаСервере
Процедура УстановитьВидимостьЭлементовПоНастройкам()
Элементы.ТоварыКоличествоУпаковокКВозврату.Видимость = Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов;
Элементы.ДополнительныеРеквизитыЗаявки.Видимость = Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов;
Элементы.ДополнительныеРеквизитыЗаявки1.Видимость = Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов;
Элементы.ДополнительныеРеквизитыЗаявки2.Видимость = Объект.СоздаватьЗаявкуНаВозвратТоваровОтКлиентов;
Элементы.ОформленныеДокументыПечать.Видимость = (Объект.ВариантОформленияДокументов <> Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение);
Элементы.ТоварыПолеВыбрать.Видимость = Объект.ОтображатьРекомендацииКПокупке;
Элементы.ТоварыКоличествоУпаковокПрогноз.Видимость = Объект.ОтображатьРекомендацииКПокупке;
Элементы.СтрокаПрогноз.Видимость = Объект.ОтображатьРекомендацииКПокупке
И Объект.СпособПрогнозированияПродаж = Перечисления.СпособыПрогнозированияПродаж.ПоСтатистикеПродаж;
Элементы.ДатаСледующегоЗаказа.Видимость = Объект.ОтображатьРекомендацииКПокупке;
ЭтоЗаказ = Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента;
Элементы.НомерПоДаннымКлиента.Видимость = ЭтоЗаказ;
Элементы.ДатаПоДаннымКлиента.Видимость = ЭтоЗаказ;
Элементы.ЗаполнитьПоПрогнозу.Видимость = Объект.ОтображатьРекомендацииКПокупке;
УстановитьВидимостьЭлементовФормыДатОтгрузки();
УстановитьДоступностьКомандОбеспечения();
УстановитьДоступностьДоговора();
УстановитьОформлениеПодразделения();
УстановитьВидимостьОбеспечения();
КонецПроцедуры
&НаСервере
Функция АдресТаблицыДвиженийВХранилище()
Возврат ОбеспечениеВДокументахСервер.АдресТаблицыДвиженийВХранилище(ЭтотОбъект);
КонецФункции
&НаСервере
Функция ЗаполнитьОбеспечениеИзФормыСостоянияОбеспечения(КодДействия, АдресАналитик, ПараметрыЗаполнения)
Модифицированность = Истина;
Изменения = ОбеспечениеВДокументахСервер.ЗаполнитьОбеспечениеИзФормыСостоянияОбеспечения(
КодДействия,
АдресАналитик,
ЭтотОбъект);
Режим = ОбеспечениеВДокументахКлиентСервер.РежимСостоянияОбеспечения();
ПослеЗаполненияОбеспечения(Изменения, Режим, ПараметрыЗаполнения);
АдресТаблицыДвижений = АдресТаблицыДвиженийВХранилище();
Возврат АдресТаблицыДвижений;
КонецФункции
&НаСервере
Функция ОбеспечениеУстановитьДействие(КодДействия)
Результат = ОбеспечениеВДокументахСервер.ОбеспечениеУстановитьДействиеСтруктураРезультата();
Если КодДействия = "ФЛАГ_ОБОСОБЛЕННО" Или КодДействия = "ФЛАГ_НЕОБОСОБЛЕННО" Тогда
Изменения = ОбеспечениеВДокументахСервер.УстановитьДействиеОбособленно(
КодДействия,
ЭтотОбъект,
Элементы.Товары.ВыделенныеСтроки);
ОбновитьКолонкуДоступноСервер();
Иначе
ВыделенныеСтроки = Новый Массив();
Для Каждого Идентификатор Из Элементы.Товары.ВыделенныеСтроки Цикл
СтрокаТаблицы = Объект.Товары.НайтиПоИдентификатору(Идентификатор);
Если СтрокаТаблицы.ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или СтрокаТаблицы.ВариантОформления = Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг Тогда
Продолжить;
КонецЕсли;
ВыделенныеСтроки.Добавить(Идентификатор);
КонецЦикла;
Изменения = ОбеспечениеВДокументахСервер.УстановитьДействие(
КодДействия,
ЭтотОбъект,
ВыделенныеСтроки);
ЗаполнитьЗначенияСвойств(Результат, Изменения);
Если Изменения.ТаблицаИзменений <> Неопределено Тогда
ПослеЗаполненияОбеспечения(
Изменения.ТаблицаИзменений,
ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия(),
Результат);
КонецЕсли;
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ОбработатьВыборСкладаИСерииНаСервере(ВыбранноеЗначение, ПараметрыФормы, ПараметрыЗаполнения)
Модифицированность = Истина;
Изменения = ОбеспечениеВДокументахСервер.ПриВыбореСклада(
ВыбранноеЗначение,
ЭтотОбъект,
Элементы.Товары.ТекущаяСтрока,
ПараметрыФормы.ЗаполняемыеПоля);
ПослеЗаполненияОбеспечения(Изменения, ПараметрыФормы.Режим, ПараметрыЗаполнения);
ТекстОбработаноСтрок = ОбеспечениеВДокументахСервер.ТекстОбработаноСтрок(Изменения.Количество());
Возврат ТекстОбработаноСтрок;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПараметрыДляДействийОбеспечения(Форма, ВариантОбеспеченияИФлагОбособленно, ДатаОтгрузки)
ПараметрыДокумента = Новый Структура();
ПараметрыДокумента.Вставить("Форма", Форма);
ПараметрыДокумента.Вставить("Коллекция", Форма.Объект.Товары);
ПараметрыДокумента.Вставить("ВариантОбеспеченияИФлагОбособленно", ВариантОбеспеченияИФлагОбособленно);
Возврат ПараметрыДокумента;
КонецФункции
&НаКлиенте
Процедура ГиперссылкаСостояниеОбеспеченияНажатиеОбщий()
ПараметрыФормы = ОбеспечениеВДокументахКлиент.ГиперссылкаСостояниеОбеспеченияНажатие(ЭтотОбъект);
Если Объект.УпрощенноеОбеспечение Или Не КомандыОбеспеченияДоступны(ЭтотОбъект) Тогда
ПараметрыФормы.ДопустимыеВариантыОбеспечения = Новый Соответствие();
КонецЕсли;
ПараметрыФормы.ТолькоПросмотр = ПараметрыФормы.ТолькоПросмотр Или ТолькоПросмотрУстановлен;
ПустаяСсылкаДляЗаголовкаФормы = Неопределено;
Если Объект.ВариантОформленияДокументов
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение") Тогда
ПустаяСсылкаДляЗаголовкаФормы = ПредопределенноеЗначение("Документ.КоммерческоеПредложениеКлиенту.ПустаяСсылка");
ИначеЕсли Объект.ВариантОформленияДокументов
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.РеализацияТоваровУслуг") Тогда
ПустаяСсылкаДляЗаголовкаФормы = ПредопределенноеЗначение("Документ.РеализацияТоваровУслуг.ПустаяСсылка");
ИначеЕсли Объект.ВариантОформленияДокументов
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ПередачаТоваровХранителю") Тогда
ПустаяСсылкаДляЗаголовкаФормы = ПредопределенноеЗначение("Документ.ПередачаТоваровХранителю.ПустаяСсылка");
Иначе
ПустаяСсылкаДляЗаголовкаФормы = ПредопределенноеЗначение("Документ.ЗаказКлиента.ПустаяСсылка");
КонецЕсли;
ПараметрыФормы.Заказ = ПустаяСсылкаДляЗаголовкаФормы;
ПараметрыФормы.ДопустимыеВариантыОбеспечения = ОбеспечениеВДокументахКлиент.ВсеДопустимыеВариантыОбеспечения();
ПараметрыФормы.ДопустимыеВариантыОбеспечения.Удалить(
ПредопределенноеЗначение("Перечисление.ВариантыОбеспечения.СоСклада"));
Если ПараметрыФормы.КонтекстИспользования = "ТАБЛИЦА" Тогда
ПараметрыФормы.АдресТаблицыДвижений = АдресТаблицыДвиженийВХранилище();
КонецЕсли;
ОткрытьФорму("Обработка.СостояниеОбеспеченияЗаказов.Форма", ПараметрыФормы, ЭтотОбъект, УникальныйИдентификатор,,,,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьДействияОбеспеченияНаКлиенте(СтруктураДействий, ПоляСтрокой)
ПараметрыДокумента = ПараметрыДляДействийОбеспечения(ЭтотОбъект, ВариантОбеспеченияИФлагОбособленно, Неопределено);
ОбеспечениеВДокументахКлиентСервер.ДобавитьДействияОбеспечения(СтруктураДействий, ПоляСтрокой, ПараметрыДокумента);
Поля = Новый Структура(ПоляСтрокой);
Если Поля.Свойство("ВариантОбеспечения") Тогда
ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация = Неопределено;
Если ИспользоватьРасширенныеВозможностиЗаказаКлиента И НЕ Объект.УпрощенноеОбеспечение
И Объект.НеОтгружатьЧастями И Объект.ДатаОтгрузки = НачалоДня(ОбщегоНазначенияКлиент.ДатаСеанса()) Тогда
ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация = Истина;
КонецЕсли;
СтруктураДействий.Вставить("ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация", ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, ПоляСтрокой, ДатаОтгрузки = Неопределено)
ПараметрыДокумента = ПараметрыДляДействийОбеспечения(ЭтотОбъект, ВариантОбеспеченияИФлагОбособленно, ДатаОтгрузки);
ОбеспечениеВДокументахКлиентСервер.ДобавитьДействияОбеспечения(СтруктураДействий, ПоляСтрокой, ПараметрыДокумента);
Поля = Новый Структура(ПоляСтрокой);
Если Поля.Свойство("ВариантОбеспечения") Тогда
ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация = Неопределено;
Если ИспользоватьРасширенныеВозможностиЗаказаКлиента И НЕ Объект.УпрощенноеОбеспечение
И Объект.НеОтгружатьЧастями И Объект.ДатаОтгрузки = НачалоДня(ТекущаяДатаСеанса()) Тогда
ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация = Истина;
КонецЕсли;
СтруктураДействий.Вставить("ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация", ЗаполнитьОтгрузитьДляВариантаОформленияЗаказПлюсРеализация);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыФормыДокумента()
ПараметрыДокумента = ПараметрыДляДействийОбеспечения(ЭтотОбъект, ВариантОбеспеченияИФлагОбособленно, Неопределено);
ОбеспечениеВДокументахСервер.ЗаполнитьСлужебныеРеквизитыФормыДокумента(ПараметрыДокумента);
КонецПроцедуры
&НаСервере
Процедура ОбеспечениеУстановитьДействиеПослеВопроса(Ответ, Результат)
СтруктураРезультата = ОбеспечениеВДокументахСервер.УстановитьДействиеПослеВопроса(Ответ, Результат, ЭтотОбъект);
ПослеЗаполненияОбеспечения(
СтруктураРезультата.ТаблицаИзменений,
ОбеспечениеВДокументахКлиентСервер.РежимВыборДействия(),
СтруктураРезультата);
КонецПроцедуры
&НаКлиенте
Процедура ОбеспечениеУстановитьДействиеСВопросом(КодДействия)
Результат = ОбеспечениеУстановитьДействие(КодДействия);
ВопросЗадан = ОбеспечениеВДокументахКлиент.ПоказатьВопросЗаполнятьОбеспечениеЦелымиУпаковками(
ЭтотОбъект,
Объект.Товары,
Результат,
"ПослеВопросаЗаполнятьОбеспечениеЦелымиУпаковками");
Если Не ВопросЗадан Тогда
ОбеспечениеВДокументахКлиент.ПоказатьВопросСнятьФлагОтгружатьОднойДатой(
ЭтотОбъект,
Объект.Товары,
Результат,
"ПослеВопросаСнятьФлагОтгружатьОднойДатой");
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьКолонкуДоступноСервер()
ОбеспечениеВДокументахСервер.ОбновитьКолонкуДоступно(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборСкладаИСерии(ВыбранноеЗначение, ПараметрыФормы) Экспорт
Если Не ОбеспечениеВДокументахКлиент.ЕстьПодобранныеТовары(ВыбранноеЗначение) Тогда
Возврат;
КонецЕсли;
ОбеспечениеВДокументахКлиент.ПоказатьВопросСнятьФлагОтгружатьОднойДатойПослеВыбораОбеспечения(
ЭтотОбъект,
ВыбранноеЗначение,
ПараметрыФормы,
"ОбработатьВыборСкладаИСерииПослеВопроса");
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьВыборСкладаИСерииПослеВопроса(Ответ, Параметры) Экспорт
ПараметрыЗаполнения = ОбеспечениеВДокументахКлиент.ПараметрыОбработкиДатОтгрузкиПослеЗаполненияОбеспечения(Ответ);
Оповещение = ОбработатьВыборСкладаИСерииНаСервере(
Параметры.ВыбранноеЗначение,
Параметры.ПараметрыФормы,
ПараметрыЗаполнения);
ТекстОповещения = ОбеспечениеВДокументахКлиент.ТекстОповещенияОбработкиВыборСкладаИСерии(Параметры.ПараметрыФормы.Режим);
ПоказатьОповещениеПользователя(ТекстОповещения, , Оповещение);
СкидкиНаценкиЗаполнениеКлиент.СброситьФлагСкидкиРассчитаны(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаЗаполнятьОбеспечениеЦелымиУпаковками(Ответ, Результат) Экспорт
ВопросЗадан = ОбеспечениеВДокументахКлиент.ПоказатьВопросСнятьФлагОтгружатьОднойДатойПослеВопроса(
ЭтотОбъект,
Объект.Товары,
Результат,
Ответ,
"ПослеВопросаСнятьФлагОтгружатьОднойДатой");
Если Не ВопросЗадан Тогда
ОбеспечениеУстановитьДействиеПослеВопроса(Ответ, Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВопросаСнятьФлагОтгружатьОднойДатой(Ответ, Результат) Экспорт
ОбеспечениеУстановитьДействиеПослеВопроса(Ответ, Результат);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаполненияОбеспечения(Изменения, Режим = Неопределено, ПараметрыЗаполнения = Неопределено)
ЕстьИзмененияДатыОтгрузки = ОбеспечениеВДокументахСервер.АктуализироватьДатуОтгрузки(
ПараметрыЗаполнения,
Объект.НеОтгружатьЧастями,
Объект.ДатаОтгрузки,
Объект.Товары,
"ДатаОтгрузки");
Если ОбеспечениеВДокументахКлиентСервер.НужноПроверитьЗаполнитьДатуОтгрузкиДляСтрокОтгрузить(Режим) Тогда
ЕстьИзмененияДатыОтгрузки = ЕстьИзмененияДатыОтгрузки Или ОбеспечениеВДокументахСервер.ПроверитьЗаполнитьДатуОтгрузкиДляСтрокОтгрузить(
Изменения.ВыгрузитьКолонку("Строка"),
"ДатаОтгрузки",
Объект.НеОтгружатьЧастями,
Объект.ДатаОтгрузки);
КонецЕсли;
УстановитьВидимостьЭлементовФормыДатОтгрузки();
ОбеспечениеВДокументахСервер.ПересчитатьКоличествоЕдиниц(Изменения, Объект.Товары);
Реквизиты = "Сумма, СуммаНДС, СуммаСНДС, СуммаРучнойСкидки, СуммаАвтоматическойСкидки,"
+ ЗависимыеРеквизитыСтрокой();
ЗаказыСервер.ПересчитатьЗависимыеРеквизитыПослеРазбиенияСтрок(Изменения, Реквизиты);
Если ЭтоРеализация(Объект.ВариантОформленияДокументов)
Или ЭтоПередачаТоваров(Объект.ВариантОформленияДокументов) Тогда
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.Реализация);
Если ЭтоЗаказПлюсРеализацияПередача(Объект.ВариантОформленияДокументов) Тогда
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.Заказ);
КонецЕсли;
Иначе
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий.Заказ);
КонецЕсли;
СтруктураДействий = Новый Структура();
ДобавитьДействияОбеспеченияНаСервере(СтруктураДействий, "СкладОбязателен,ДатаОтгрузкиОбязательна");
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
ОбрабатываемыеСтроки = Изменения.ВыгрузитьКолонку("Строка");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары,
КэшированныеЗначения);
ОбеспечениеВДокументахКлиентСервер.ЗаполнитьСлужебныеРеквизиты(Объект.Товары, ДатаОтгрузкиОбязательна, СкладОбязателен);
ОбновитьКолонкуДоступноСервер();
РассчитатьИтоговыеПоказатели(ЭтотОбъект);
СкладыСервер.ПриИзмененииСкладаВТабличнойЧасти(Объект.Товары, ТаблицаСкладов, СкладГруппа);
ВсегоСкладов = ТаблицаСкладов.Количество();
СкладыКлиентСервер.ОбновитьКартинкуГруппыСкладов(НадписьНесколькоСкладов, Элементы.КартинкаНесколькоСкладов, ВсегоСкладов);
КонецПроцедуры
&НаСервере
Процедура ТоварыВариантОбеспеченияПриИзмененииНаСервере(ПараметрыЗаполнения)
Изменения = ОбеспечениеВДокументахСервер.ВариантОбеспеченияПриИзменении(
ЭтотОбъект,
Элементы.Товары.ТекущаяСтрока);
Режим = ОбеспечениеВДокументахКлиентСервер.РежимВыборДействияНепосредственно();
ПослеЗаполненияОбеспечения(Изменения, Режим, ПараметрыЗаполнения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВариантОбеспеченияПриИзмененииПослеВопроса(Ответ, ДополнительныеПараметры) Экспорт
ПараметрыЗаполнения = ОбеспечениеВДокументахКлиент.ПараметрыОбработкиДатОтгрузкиПослеЗаполненияОбеспечения(Ответ);
ТоварыВариантОбеспеченияПриИзмененииНаСервере(ПараметрыЗаполнения);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьОбеспечения()
ЕстьПраво = ОбеспечениеВДокументахСервер.ЕстьПравоПросмотраГиперссылкиСостоянияОбеспечения();
Элементы.СтраницыГиперссылкаСостояниеОбеспечения.Видимость = ЕстьПраво
И ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента
И (Объект.ВариантОформленияДокументов
= Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиента
Или Объект.ВариантОформленияДокументов
= Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю
Или Объект.ВариантОформленияДокументов
= Перечисления.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг);
ОбеспечениеВДокументахСервер.НастроитьГиперссылкиСостояниеОбеспечения(ЭтотОбъект);
Элементы.ДатаОтгрузки.Подсказка = ОбеспечениеВДокументахСервер.ПодсказкаДатаОтгрузки();
КонецПроцедуры
&НаСервере
Функция ПараметрыВыбораОбеспечения(Режим)
ПараметрыФормы = ОбеспечениеВДокументахСервер.ПараметрыВыбораОбеспечения(
ЭтотОбъект,
Элементы.Товары.ТекущаяСтрока,
Режим);
Возврат ПараметрыФормы;
КонецФункции
&НаКлиенте
Функция ПараметрыФормыЗапросаКоличестваИСерий(Режим)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ПараметрыПроверки = ОбеспечениеКлиентСервер.ИнициализироватьПараметрыПроверкиЗаполнения();
Если Не ОбеспечениеКлиент.ПроверитьЗаполнение(
Объект,
Объект.Товары,
Элементы.Товары.ТекущаяСтрока,
ПараметрыПроверки,
Объект.Склад,
Режим) Тогда
Возврат Неопределено;
КонецЕсли;
ПараметрыФормы = ПараметрыВыбораОбеспечения(Режим);
Если ТекущаяСтрока.ВариантОформления = ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента") Тогда
ПараметрыФормы.ПараметрыУказанияСерий = ПараметрыУказанияСерий.Заказ;
Иначе
ПараметрыФормы.ПараметрыУказанияСерий = ПараметрыУказанияСерий.Реализация;
КонецЕсли;
Возврат ПараметрыФормы;
КонецФункции
&НаСервере
Процедура УстановитьДоступностьКомандОбеспечения()
ВариантОформленияНеКоммерческоеПредложение =
Не Объект.ВариантОформленияДокументов = Перечисления.ВариантыОформленияДокументовПродажи.КоммерческоеПредложение;
КомандыОбеспеченияДоступны = КомандыОбеспеченияДоступны(ЭтотОбъект);
Элементы.ЗаполнитьДатуОтгрузки.Видимость = КомандыОбеспеченияДоступны;
Элементы.ТоварыЗаполнитьСкладВВыделенныхСтроках.Видимость = ВариантОформленияНеКоммерческоеПредложение;
ВидимостьВариантаОбеспечения = Не Объект.УпрощенноеОбеспечение
И КомандыОбеспеченияДоступны;
Элементы.ТоварыВариантОбеспечения.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыОтгрузить.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыРезервировать.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыКОбеспечению.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыРезервироватьПоМереПоступления.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыНеОбеспечивать.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыКонтекстноеМенюОтгрузить.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыКонтекстноеМенюРезервировать.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыКонтекстноеМенюКОбеспечению.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыКонтекстноеМенюРезервироватьПоМереПоступления.Видимость = ВидимостьВариантаОбеспечения;
Элементы.ТоварыКонтекстноеМенюНеОбеспечивать.Видимость = ВидимостьВариантаОбеспечения;
МожноСнятьФлагОбособленно = Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПоставкаПодПринципала");
УправлениеФлагом = МожноСнятьФлагОбособленно И КомандыОбеспеченияДоступны;
ВидимостьФлага = КомандыОбеспеченияДоступны;
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ТоварыВключитьОбособленноеОбеспечение",
"Видимость",
УправлениеФлагом);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ТоварыВыключитьОбособленноеОбеспечение",
"Видимость",
УправлениеФлагом);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ТоварыОбособленно",
"Видимость",
ВидимостьФлага);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(
Элементы,
"ТоварыОбособленно",
"Доступность",
УправлениеФлагом);
Элементы.ТоварыДоступно.Видимость = КомандыОбеспеченияДоступны
И (Не Объект.УпрощенноеОбеспечение
ИЛИ Объект.УпрощенноеОбеспечение
И (Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.РезервироватьПоМереПоступления
ИЛИ Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.НеТребуется
ИЛИ Объект.ВариантОбеспечения = Перечисления.ВариантыОбеспечения.КОбеспечению));
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция КомандыОбеспеченияДоступны(Форма)
Результат = (Форма.Объект.ВариантОформленияДокументов
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиента")
Или Форма.Объект.ВариантОформленияДокументов
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаПередачаТоваровХранителю")
Или Форма.Объект.ВариантОформленияДокументов
= ПредопределенноеЗначение("Перечисление.ВариантыОформленияДокументовПродажи.ЗаказКлиентаРеализацияТоваровУслуг"))
И Форма.ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ПолучитьВариантОбеспеченияИФлагОбособленно(ВариантОбеспечения, Соглашение, СтатусЗаказаКлиента)
ВариантИФлаг = Новый Структура("ВариантОбеспечения, Обособленно", ВариантОбеспечения, Ложь);
Возврат ПродажиСервер.ВариантОбеспеченияИФлагОбособленноПоУмолчанию(
Соглашение,
СтатусЗаказаКлиента,
ВариантИФлаг);
КонецФункции
#КонецОбласти
#Область Инициализация
ВыполняетсяЗакрытие = Ложь;
#КонецОбласти