#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем ТекущиеДанныеИдентификатор;
&НаКлиенте
Перем ПредыдущиеРеквизитыСтроки;
&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
УстановитьУсловноеОформление();
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("Объект", Объект);
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры);
Справочники.Назначения.ФормаДокументаПриСозданииНаСервере(ЭтаФорма);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПриЧтенииСозданииНаСервере();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий);
Элементы.КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
Элементы.КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
ИначеЕсли Параметры.ЗначенияЗаполнения.Свойство("ЗаполнятьПоОрдеру") Тогда
ПерезаполнитьПоОрдерам(Параметры.ЗначенияЗаполнения.МассивЗаказов);
Модифицированность = Истина;
КонецЕсли;
ЗаполнитьСписокВыбораОпераций();
Элементы.ЗакрытьЗаказ.Доступность = ПравоДоступа("Изменение",Метаданные.Документы.ЗаказНаПеремещение);
УстановитьДоступностьКомандБуфераОбмена();
ЭлементыДляЗаполнения = Новый Массив;
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиС);
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиПо);
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиС1);
ЭлементыДляЗаполнения.Добавить(Элементы.ВремяДоставкиПо1);
ДоставкаТоваровКлиентСервер.ЗаполнитьСписокВыбораПоляВремени(ЭлементыДляЗаполнения);
ИсправлениеДокументов.ПриСозданииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриСозданииНаСервере_ФормаДокумента();
ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПриСозданииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
Элементы.ДекорацияСостояниеЭДО.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьОбменЭД");
Элементы.ГруппаСостояниеЭПД.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьОбменЭД");
СервисДоставки.ПриСозданииНаСервере(ЭтаФорма);
СобытияФорм.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
УчетОригиналовПервичныхДокументов.ПриСозданииНаСервере_ФормаДокумента(ЭтотОбъект);
Элементы.ГруппаСостояниеЭПД.Видимость = ОбменСГИСЭПДПереопределяемый.РазрешенаРаботаЭПД();
ОбновитьТекстЭПД();
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
ИсправлениеДокументов.ПриЧтенииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
УправлениеЭлементамиФормы();
ИспользоватьПеремещениеПоНесколькимЗаказам = ПолучитьФункциональнуюОпцию("ИспользоватьПеремещениеПоНесколькимЗаказам");
ИспользоватьЗаказыНаПеремещение = ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыНаПеремещение");
ИспользоватьНесколькоОрганизаций = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");
ИспользоватьПодразделения = ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения");
ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками = ПолучитьФункциональнуюОпцию("ИспользоватьЗаданияНаПеревозкуДляУчетаДоставкиПеревозчиками");
УстановитьПривилегированныйРежим(Истина);
ОрдернаяСхемаПриОтгрузке = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Объект.СкладОтправитель, Объект.Дата);
УстановитьПривилегированныйРежим(Ложь);
ЭтоРаспоряжениеНакладная = ЭтоРаспоряжениеНакладная(Объект.Ссылка, ОрдернаяСхемаПриОтгрузке);
Если Параметры.Свойство("РезультатыПроверки") И Параметры.РезультатыПроверки.ЕстьПредупреждения Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Параметры.РезультатыПроверки.ТекстПредупреждения);
КонецЕсли;
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ПеремещениеТоваров));
Элементы.ГруппаИнформацияНеобходимыСтатусы.Видимость = ВыводитьСообщениеПоИспользованиюСтатусов();
УстановитьВидимостьЭлементовСерий();
ОбновитьИнформациюПоЗаказам();
ОбновитьОтклоненияОтЗаказа();
Элементы.КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
Элементы.КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
Если Не ИспользоватьЗаказыНаПеремещение Тогда
Элементы.КартинкаРасхождениеЗаказ.Видимость = Ложь;
Элементы.КартинкаРасхождениеЗаказы.Видимость = Ложь;
КонецЕсли;
Элементы.Сделка.Видимость = Не (ИспользоватьПеремещениеПоНесколькимЗаказам И Объект.ПеремещениеПоЗаказам);
Элементы.ТоварыСделка.Видимость = ИспользоватьПеремещениеПоНесколькимЗаказам И Объект.ПеремещениеПоЗаказам;
НастроитьКомандуПодобратьПоЗаказамОрдерам();
УстановитьВидимостьЭлементовСверхЗаказа(Элементы, Объект.ПеремещениеПоЗаказам);
СкладОтправитель = Объект.СкладОтправитель;
СкладПолучатель = Объект.СкладПолучатель;
ДоставкаТоваров.ПриЧтенииСозданииРаспоряженийНаСервере(Элементы,Объект, Объект.ПеремещениеПоЗаказам);
ТекущийСпособДоставки = Объект.СпособДоставки;
ОбновитьТекстДокументыНаОсновании();
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
УстановитьВидимостьКомандПоЗаказу();
АктуализироватьПеремещениеПодДеятельность(Ложь);
РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.Товары);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ПриЧтенииСозданииНаСервере();
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
СобытияФорм.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриЧтенииНаСервере_ФормаДокумента();
ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПриЧтенииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Перем ВыполняемаяОперация;
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Событие.ОбработкаВыбора");
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("ВыполняемаяОперация", ВыполняемаяОперация) Тогда
Если ВРег(ВыполняемаяОперация) = ВРег("ПодборТоваровИзЗаказа") Тогда
ОбработкаПодбораТоваровИзЗаказа(ВыбранноеЗначение.АдресВХранилище);
КонецЕсли;
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "ОбщаяФорма.РеквизитыПечатиРеализации" Тогда
Если ВыбранноеЗначение <> Неопределено Тогда
ЗаполнитьЗначенияСвойств(Объект, ВыбранноеЗначение);
КонецЕсли;
ИначеЕсли ИсточникВыбора.ИмяФормы = "Справочник.ВидыЗапасов.Форма.ФормаВводаВидовЗапасов" Тогда
ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборМногооборотнойТары.Форма.Форма" Тогда
ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(ВыбранноеЗначение.АдресМногооборотнойТарыВХранилище);
МногооборотнаяТараКлиент.ОповеститьПользователяОЗаполненииМногооборотнойТарой();
ИначеЕсли НоменклатураКлиент.ЭтоУказаниеСерий(ИсточникВыбора) Тогда
НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
СообщитьОРезультатахЗаполнения();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
ПредыдущиеРеквизитыСтроки = Новый Структура(
"Номенклатура,
|Характеристика,
|Упаковка,
|Количество,
|КоличествоУпаковок,
|Склад,
|ТипНоменклатуры,
|ХарактеристикиИспользуются,
|Артикул,
|ЗаказНаПеремещение,
|КодСтроки");
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии()
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ОбновитьОтклоненияОтЗаказа();
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ТекущийСпособДоставки = ТекущийОбъект.СпособДоставки;
ПараметрыПослеЗаписи = ОбменСКонтрагентами.ПараметрыПослеЗаписиНаСервере();
ПараметрыПослеЗаписи.Форма = ЭтотОбъект;
ПараметрыПослеЗаписи.ДокументСсылка = Объект.Ссылка;
ПараметрыПослеЗаписи.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыПослеЗаписи.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи, ПараметрыПослеЗаписи);
СобытияФорм.ПослеЗаписиНаСервере(ЭтаФорма, ТекущийОбъект, ПараметрыЗаписи);
ОбеспечениеВДокументахСервер.ПроверитьЗапуститьФоновоеЗаданиеРаспределенияЗапасов();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтаФорма, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если Источник = "ПодключаемоеОборудование"
И ИмяСобытия = "НеизвестныеШтрихкоды"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
КэшированныеЗначения.Штрихкоды.Очистить();
ДанныеШтрихкодов = Новый Массив;
Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
ОбработатьШтрихкоды(ДанныеШтрихкодов);
КонецЕсли;
Если ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда
УстановитьДоступностьКомандБуфераОбменаНаКлиенте();
КонецЕсли;
Если ИмяСобытия = "Запись_РасходныйОрдерНаТовары" Тогда
ЭтоРаспоряжениеНакладная = ЭтоРаспоряжениеНакладная(Объект.Ссылка, ОрдернаяСхемаПриОтгрузке);
КонецЕсли;
Если ИмяСобытия = "Закрытие_РедактированиеКомплекта"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ПриОкончанииРедактированияНабора(Параметр.АдресВоВременномХранилище);
КонецЕсли;
Если ИмяСобытия = "РедактироватьНабор"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
ПараметрыНабора = Новый Структура;
ПараметрыНабора.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора);
ПараметрыНабора.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
ПараметрыНабора.Вставить("СверхЗаказа", Истина);
ПараметрыНабора.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма));
АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыНабора);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище);
ПараметрыОткрытия.Вставить("НоменклатураНабора", Параметр.НоменклатураНабора);
ПараметрыОткрытия.Вставить("ХарактеристикаНабора", Параметр.ХарактеристикаНабора);
ПараметрыОткрытия.Вставить("Дата", Объект.Дата);
ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка);
ПараметрыОткрытия.Вставить("Склад", Объект.СкладОтправитель);
ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Ложь);
ПараметрыОткрытия.Вставить("Организация", Объект.Организация);
ПараметрыОткрытия.Вставить("ЗапретРедактированияЦены", Истина);
ПараметрыОткрытия.Вставить("СкрыватьЦенуНабора", Истина);
ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор);
КонецЕсли;
ИсправлениеДокументовКлиент.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);
ПараметрыОповещения = ОбменСКонтрагентамиКлиент.ПараметрыОповещенияЭДО_ФормаДокумента();
ПараметрыОповещения.Форма = ЭтотОбъект;
ПараметрыОповещения.ДокументСсылка = Объект.Ссылка;
ПараметрыОповещения.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыОповещения.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентамиКлиент.ОбработкаОповещения_ФормаДокумента(ИмяСобытия, Параметр, Источник, ПараметрыОповещения);
СобытияФормКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
ОбработкаОповещенияЛокализация(ИмяСобытия, Параметр, Источник);
РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
УчетОригиналовПервичныхДокументовКлиент.ОбработчикОповещенияФормаДокумента(ИмяСобытия,ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СобытияФормКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ОповеститьОПроведенииДокумента(ПараметрыЗаписи);
СобытияФормКлиент.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);
ОбменСКонтрагентамиКлиент.ПослеЗаписи_ФормаДокумента(ЭтотОбъект, ПараметрыЗаписи);
ИсправлениеДокументовКлиент.ПослеЗаписи(Объект);
ОбщегоНазначенияУТКлиент.ВыполнитьДействияПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
СобытияФормКлиент.ПередЗаписью(ЭтотОбъект, Отказ, ПараметрыЗаписи);
Если НеВыполнятьПроверкуПередЗаписью Тогда
НеВыполнятьПроверкуПередЗаписью = Ложь;
Возврат;
КонецЕсли;
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение
И Не Объект.ПеремещениеПоЗаказам Тогда
Отказ = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
МногооборотнаяТараКлиент.ПредложитьПодобратьМногооборотнуюТару(
ЭтаФорма,
"Товары",
"Номенклатура,Характеристика,Количество",
Новый ОписаниеОповещения("ПередЗаписьюПредложитьПодобратьМногооборотнуюТаруЗавершение", ЭтотОбъект, ДополнительныеПараметры));
Возврат;
КонецЕсли;
ОбщегоНазначенияУТКлиент.ЗаписатьОбъектПриНеобходимости(ЭтотОбъект, ПараметрыЗаписи, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписьюПредложитьПодобратьМногооборотнуюТаруЗавершение(Результат, ДополнительныеПараметры) Экспорт
ОбщегоНазначенияУТКлиент.ЗаписатьОбъектПриНеобходимости(ЭтотОбъект, ДополнительныеПараметры.ПараметрыЗаписи,,Истина);
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтаФорма, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ТекущаяСтраница.Имя = "ГруппаДополнительно"
И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
СвойстваВыполнитьОтложеннуюИнициализацию();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкладПолучательПриИзменении(Элемент)
ОчищатьСтроки = Ложь;
ОтвязатьВсеСтрокиОтЗаказа = Ложь;
Если СкладПолучатель <> Объект.СкладПолучатель Тогда
Если Объект.ПеремещениеПоЗаказам
И Объект.Товары.Количество() > 0 Тогда
СписокКнопок = Новый СписокЗначений();
СписокКнопок.Добавить("Продолжить", НСтр("ru = 'Очистить товары'"));
СписокКнопок.Добавить("Отвязать", НСтр("ru = 'Отвязать от заказа'"));
ТекстВопроса = НСтр("ru='При изменении склада список ""Товары"" необходимо очистить, либо отвязать строки от заказа. Продолжить?'");
СписокКнопок.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ПоказатьВопрос(Новый ОписаниеОповещения("СкладПолучательПриИзмененииЗавершение", ЭтотОбъект, Новый Структура("ОтвязатьВсеСтрокиОтЗаказа", ОтвязатьВсеСтрокиОтЗаказа)), ТекстВопроса, СписокКнопок);
Иначе
СкладПолучательПриИзмененииСервер(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкладПолучательПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтвязатьВсеСтрокиОтЗаказа = ДополнительныеПараметры.ОтвязатьВсеСтрокиОтЗаказа;
Ответ = РезультатВопроса;
Если Ответ = "Отмена" Тогда
Объект.СкладПолучатель = СкладПолучатель;
Возврат;
ИначеЕсли Ответ = "Отвязать" Тогда
ОтвязатьВсеСтрокиОтЗаказа = Истина;
ОчищатьСтроки = Ложь;
Иначе
ОчищатьСтроки = Истина;
КонецЕсли;
СкладПолучательПриИзмененииСервер(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура СкладОтправительПриИзменении(Элемент)
ОчищатьСтроки = Ложь;
ОтвязатьВсеСтрокиОтЗаказа = Ложь;
Если СкладОтправитель <> Объект.СкладОтправитель Тогда
Если Объект.ПеремещениеПоЗаказам
И Объект.Товары.Количество() > 0 Тогда
СписокКнопок = Новый СписокЗначений();
СписокКнопок.Добавить("Продолжить", НСтр("ru = 'Очистить товары'"));
СписокКнопок.Добавить("Отвязать", НСтр("ru = 'Отвязать от заказа'"));
ТекстВопроса = НСтр("ru='При изменении склада список ""Товары"" необходимо очистить, либо отвязать строки от заказа. Продолжить?'");
СписокКнопок.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ПоказатьВопрос(Новый ОписаниеОповещения("СкладОтправительПриИзмененииЗавершение", ЭтотОбъект, Новый Структура("ОтвязатьВсеСтрокиОтЗаказа", ОтвязатьВсеСтрокиОтЗаказа)), ТекстВопроса, СписокКнопок);
Иначе
СкладОтправительПриИзмененииСервер(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкладОтправительПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтвязатьВсеСтрокиОтЗаказа = ДополнительныеПараметры.ОтвязатьВсеСтрокиОтЗаказа;
Ответ = РезультатВопроса;
Если Ответ = "Отмена" Тогда
Объект.СкладОтправитель = СкладОтправитель;
Возврат;
ИначеЕсли Ответ = "Отвязать" Тогда
ОтвязатьВсеСтрокиОтЗаказа = Истина;
ОчищатьСтроки = Ложь;
Иначе
ОчищатьСтроки = Истина;
КонецЕсли;
СкладОтправительПриИзмененииСервер(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
Если ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры Тогда
ЗаполнитьСерииПоОтгрузке = Ложь;
Если МожноЗаполнитьСерииПоОтгрузке
И Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыПеремещенийТоваров.Принято") Тогда
ТекстВопроса = НСтр("ru = 'Заполнить серии по данным расходных ордеров?'");
Ответ = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("СтатусПриИзмененииЗавершение", ЭтотОбъект), ТекстВопроса,РежимДиалогаВопрос.ДаНет,,КодВозвратаДиалога.Да);
Возврат;
КонецЕсли;
СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СтатусПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ЗаполнитьСерииПоОтгрузке = Ложь;
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Да Тогда
ЗаполнитьСерииПоОтгрузке = Истина;
КонецЕсли;
СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке);
КонецПроцедуры
&НаКлиенте
Процедура НадписьЗаголовокЗаказыНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьФорму(
"ОбщаяФорма.ПросмотрСпискаДокументов",
Новый Структура("СписокДокументов, Заголовок",
СписокЗаказов,
НСтр("ru='Заказы на перемещение (%КоличествоДокументов%)'")
),
ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПеремещениеПоЗаказуПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Элемент.НакладнаяПоЗаказу.ПриИзменении");
УстановитьДоступностьКомандБуфераОбменаНаКлиенте();
Если Объект.ПеремещениеПоЗаказам И ЭтоРаспоряжениеНакладная Тогда
ТекстПредупреждения = НСтр("ru = 'Перемещение со склада-отправителя уже начато. Установка признака невозможна.'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Объект.ПеремещениеПоЗаказам = Ложь;
Возврат;
КонецЕсли;
Если Объект.ПеремещениеПоЗаказам Тогда
Если ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
Если Объект.Товары.Количество() = 0 Тогда
ТекстВопроса = НСтр("ru='Список Товары будет перезаполнен остатками неоформленных товаров по заказам. Продолжить?'");
Иначе
ТекстВопроса = НСтр("ru='Строки в списке Товары будут привязаны к строкам заказов. Продолжить?'");
КонецЕсли;
Иначе
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("Организация", Объект.Организация);
ПараметрыОтбора.Вставить("Подразделение", Объект.Подразделение);
ПараметрыОтбора.Вставить("СкладОтправитель", Объект.СкладОтправитель);
ПараметрыОтбора.Вставить("СкладПолучатель", Объект.СкладПолучатель);
ПараметрыФормы = Новый Структура("Отбор, Регистратор", ПараметрыОтбора, Объект.Ссылка);
ОписаниеОповещения = Новый ОписаниеОповещения("ПеремещениеПоЗаказуУстановленоЗаказВыбран", ЭтотОбъект);
ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.ФормаВыбораРаспоряжения",
ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор,,, ОписаниеОповещения);
Возврат;
КонецЕсли;
Иначе
Если Объект.Товары.Количество() > 0 Тогда
Если ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
ТекстВопроса = НСтр("ru='Строки в списке Товары перестанут быть связанными со строками заказов. Продолжить?'");
Иначе
ТекстВопроса = НСтр("ru='Строки в списке Товары перестанут быть связанными со строками заказа. Продолжить?'");
КонецЕсли;
Иначе
ПриИзмененииПеремещенияПоНесколькимЗаказам(КэшированныеЗначения);
Возврат;
КонецЕсли;
КонецЕсли;
ПоказатьВопрос(Новый ОписаниеОповещения("ПеремещениеПоЗаказуПриИзмененииЗавершение", ЭтотОбъект), ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ХозяйственнаяОперацияПриИзменении(Элемент)
ХозяйственнаяОперацияПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
Если ТекущаяОрганизация <> Объект.Организация Тогда
ОрганизацияПриИзмененииСервер();
ТекущаяОрганизация = Объект.Организация;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПолучательПриИзменении(Элемент)
ОрганизацияПолучательПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ДатаПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСервисДоставкиСоздатьНажатие(Элемент)
СервисДоставкиКлиентПереопределяемый.ОткрытьФормуНовогоЗаказаНаДоставку(ЭтаФорма);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСервисДоставкиСписокЗаказовНажатие(Элемент)
СервисДоставкиКлиент.ОткрытьФормуСервисаДоставкиИзОснования(ЭтотОбъект, Объект.Ссылка);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияСервисДоставкиДобавитьВЗаказНаДоставкуНажатие(Элемент)
СервисДоставкиКлиент.ОткрытьФормуСервисаДоставкиИзОснования(ЭтотОбъект, Объект.Ссылка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДекорацияСервисДоставкиОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("Форма", ЭтотОбъект);
ПараметрыОткрытия.Вставить("ДокументОснование", Объект.Ссылка);
СервисДоставкиКлиент.ОткрытьФормуПодчиненныхЗаказовНаДоставку(ПараметрыОткрытия);
КонецПроцедуры
&НаКлиенте
Процедура СпособМестоДоставкиПеревозчикПриИзменении(Элемент)
СпособМестоДоставкиПеревозчикПриИзмененииСервер(Элемент.Имя);
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиПриИзменении(Элемент)
ОбработатьИзменениеАдреса(Элемент, "АдресДоставки");
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("АдресДоставки");
ДоставкаТоваровКлиент.ОчиститьПредставлениеАдреса(
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставки],
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначенияПолей],
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначение]);
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("АдресДоставки");
ДоставкаТоваровКлиент.ОткрытьФормуВыбораАдресаИОбработатьРезультат(
Элемент,
Объект,
ИменаРеквизитовАдресовДоставки,
СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДоставкаТоваровКлиент.АдресДоставкиОбработкаВыбора(Элементы, Объект, Элемент.Имя, ВыбранноеЗначение);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиПеревозчикаПриИзменении(Элемент)
ОбработатьИзменениеАдреса(Элемент, "АдресДоставкиПеревозчика");
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиПеревозчикаОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("АдресДоставкиПеревозчика");
ДоставкаТоваровКлиент.ОчиститьПредставлениеАдреса(
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставки],
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначенияПолей],
Объект[ИменаРеквизитовАдресовДоставки.ИмяРеквизитаАдресаДоставкиЗначение]);
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиПеревозчикаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ИменаРеквизитовАдресовДоставки = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки("АдресДоставкиПеревозчика");
ДоставкаТоваровКлиент.ОткрытьФормуВыбораАдресаИОбработатьРезультат(
Элемент,
Объект,
ИменаРеквизитовАдресовДоставки,
СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура АдресДоставкиПеревозчикаОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ДоставкаТоваровКлиент.АдресДоставкиОбработкаВыбора(Элементы, Объект, Элемент.Имя, ВыбранноеЗначение);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПеремещениеПодДеятельностьОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ТекстДокументыНаОснованииОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ОчиститьСообщения();
ТекстДокументыНаОснованииОбработкаНавигационнойСсылкиЛокализация(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура СтрокаИсправлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ИсправлениеДокументовКлиент.СтрокаИсправлениеОбработкаНавигационныйСсылки(
ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияЭДОНажатие(Элемент, СтандартнаяОбработка)
ОбменСКонтрагентамиКлиент.СостояниеЭДОНажатие_ФормаДокумента(ЭтотОбъект, СтандартнаяОбработка);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДекорацияСостояниеОригиналаНажатие()
УчетОригиналовПервичныхДокументовКлиент.ОткрытьМенюВыбораСостояния(ЭтотОбъект,Элементы.ДекорацияСостояниеОригинала);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияЭПДНажатие(Элемент)
Если Объект.Ссылка.Пустая() Тогда
ТекстПредупреждения = НСтр("ru = 'Документ еще не записан. Открытие журнала ЭПД возможно только после записи документа.'");
ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
Возврат;
КонецЕсли;
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("ОтборДокументОснование", Объект.Ссылка);
ОткрытьФорму("Обработка.ЭлектронныеПеревозочныеДокументы.Форма.ФормаСпискаЭПД", ПараметрыОтбора);
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияОформитьЭПДНажатие(Элемент, СтандартнаяОбработка)
Если Объект.Ссылка.Пустая() Тогда
ТекстПредупреждения = НСтр("ru = 'Документ еще не записан. Ввод ЭПД возможен только на основании записанных документов.'");
ПоказатьПредупреждение(Неопределено, ТекстПредупреждения);
Возврат;
КонецЕсли;
ПараметрыВызова = Новый Структура();
ПараметрыВызова.Вставить("Ссылка", Объект.Ссылка);
СписокДокументов = ОбменСГИСЭПДВызовСервераПереопределяемый.ТипыДокументовЭПД();
ОповещениеОЗакрытие = Новый ОписаниеОповещения("ОбработатьРезультатВыбораТипаДокумента",
ОбменСГИСЭПДКлиентПереопределяемый,
ПараметрыВызова);
ПоказатьВыборИзМеню(ОповещениеОЗакрытие,СписокДокументов, Элемент);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТовары
&НаКлиенте
Процедура УпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломИзменения(Элемент, Отказ)
ЗаполнитьЗначенияСвойств(ПредыдущиеРеквизитыСтроки, Элементы.Товары.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если Объект.ПеремещениеПоЗаказам
И ТекущаяСтрока <> Неопределено Тогда
ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, Объект.ПеремещениеПоЗаказам);
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНазначениеПриИзменении(Элемент)
ОбновитьНазначениеОтправителя();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНазначениеОчистка(Элемент, СтандартнаяОбработка)
ОбновитьНазначениеОтправителя();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ТекущаяСтрока", ТекущаяСтрока);
ВопросПользователюПриИзмененииРеквизитаСтроки(
Новый ОписаниеОповещения("ТоварыНоменклатураПриИзмененииВопросПользователюЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ТекущаяСтрока", ТекущаяСтрока);
ВопросПользователюПриИзмененииРеквизитаСтроки(
Новый ОписаниеОповещения("ТоварыХарактеристикаПриИзмененииВопросПользователюЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура КоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Товары, ЭтотОбъект);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент, КэшированныеЗначения, ПараметрыУказанияСерий, Копирование);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если НоменклатураКлиент.НеобходимоОбновитьСтатусыСерий(
Элемент,КэшированныеЗначения,ПараметрыУказанияСерий) Тогда
ТекущаяСтрокаИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент,КэшированныеЗначения,ПараметрыУказанияСерий);
КонецЕсли;
МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы);
ДополнительныеПараметры = Новый Структура;
СобытияФормКлиент.ПриИзмененииЭлемента(ЭтотОбъект, Элементы.Товары, ДополнительныеПараметры);
Если ДополнительныеПараметры.Свойство("ТребуетсяСерверныйВызов") Тогда
ПодключитьОбработчикОжидания("ТоварыПриОкончанииРедактированияДляСерверногоВызова", 0.5, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередУдалением(Элемент, Отказ)
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Товары, ЭтотОбъект);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(
Элемент,КэшированныеЗначения,ПараметрыУказанияСерий);
НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтаФорма, "Товары", Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
Если НоменклатураКлиент.НеобходимоОбновитьСтатусыСерий(
Элемент,КэшированныеЗначения,ПараметрыУказанияСерий,Истина) Тогда
ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Неопределено, КэшированныеЗначения);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(
Элемент,КэшированныеЗначения,ПараметрыУказанияСерий);
КонецЕсли;
МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
ТоварыПослеУдаленияСервер();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр)
Если Копирование Тогда
НаборыКлиент.ПередУдалениемСтрокиТабличнойЧасти(ЭтаФорма, "Товары", Отказ, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле = Элементы.ТоварыЗаказНаПеремещение Тогда
Если ЗначениеЗаполнено(Элементы.Товары.ТекущиеДанные.ЗаказНаПеремещение) Тогда
ПоказатьЗначение(Неопределено, Элементы.Товары.ТекущиеДанные.ЗаказНаПеремещение);
КонецЕсли;
ИначеЕсли Поле = Элементы.ТоварыСделка Тогда
Если ЗначениеЗаполнено(Элементы.Товары.ТекущиеДанные.Сделка) Тогда
ПоказатьЗначение(Неопределено, Элементы.Товары.ТекущиеДанные.Сделка);
КонецЕсли;
ИначеЕсли НаборыКлиент.БлокируемыйЭлемент(Поле) Тогда
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда
ПараметрОповещения = Новый Структура;
ПараметрОповещения.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрОповещения.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрОповещения.Вставить("ФормаВладелец", УникальныйИдентификатор);
Оповестить("РедактироватьНабор", ПараметрОповещения, ЭтаФорма);
КонецЕсли;
ИначеЕсли Поле = Элементы.ТоварыНоменклатураНабора Тогда
ПоказатьЗначение(Неопределено, Элементы.Товары.ТекущиеДанные.НоменклатураНабора);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСерияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьПодборСерий(Элемент.ТекстРедактирования);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия();
ВыбранноеЗначение.Значение = ТекущаяСтрока.Серия;
ВыбранноеЗначение.ИдентификаторТекущейСтроки = ТекущаяСтрока.ПолучитьИдентификатор();
НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЗаказНаПеремещениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ТекущиеДанные <> Неопределено Тогда
ПараметрыОтбора = Новый Структура();
ПараметрыОтбора.Вставить("Организация", Объект.Организация);
ПараметрыОтбора.Вставить("Подразделение", Объект.Подразделение);
ПараметрыОтбора.Вставить("СкладОтправитель", Объект.СкладОтправитель);
ПараметрыОтбора.Вставить("СкладПолучатель", Объект.СкладПолучатель);
ПараметрыФормы = Новый Структура("Отбор, Регистратор", ПараметрыОтбора, Объект.Ссылка);
ОписаниеОповещения = Новый ОписаниеОповещения("ТоварыЗаказНаПеремещениеНачалоВыбораЗавершение", ЭтотОбъект);
ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.ФормаВыбораРаспоряжения",
ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор,,, ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецЕсли;
ОбновитьИнформациюПоЗаказам();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЗаказНаПеремещениеНачалоВыбораЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ОбработкаВыбораЗаказаНаСервере(Результат);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура УказатьСерии(Команда)
ОткрытьПодборСерий();
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтроку(Команда)
ТаблицаФормы = Элементы.Товары;
ДанныеТаблицы = Объект.Товары;
Оповещение = Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект);
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если НоваяСтрока <> Неопределено Тогда
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьВидыЗапасов(Команда)
ПараметрыРедактированияВидовЗапасов = ПоместитьТоварыИВидыЗапасовВХранилище();
ФинансыКлиент.ОткрытьВидыЗапасов(ЭтотОбъект,ПараметрыРедактированияВидовЗапасов);
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьТовары(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Команда.ПодобратьТовары");
Если Не ЗначениеЗаполнено(Объект.СкладОтправитель) Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Склад"" не заполнено'"), Объект.Ссылка, "Объект.СкладОтправитель");
Возврат;
КонецЕсли;
ОткрытьПодборТоваров();
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьТоварыПоЗаказамОрдерам(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Команда.ПодобратьТоварыПоЗаказамОрдерам");
ОткрытьПодборТоваровПоЗаказамОрдерам();
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
ОчиститьСообщения();
Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект);
ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
ОбработатьШтрихкоды(ДанныхШтрихкода);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьВес(Команда)
ТекущаяСтрока = МенеджерОборудованияУТКлиент.ТекущаяСтрока(ЭтаФорма);
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
МенеджерОборудованияКлиент.НачатьПолученияВесаСЭлектронныхВесов(
Новый ОписаниеОповещения("ПолучитьВесЗавершение", ЭтотОбъект, ТекущаяСтрока),
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьВесЗавершение(РезультатВыполнения, ТекущаяСтрока) Экспорт
Если РезультатВыполнения.Результат Тогда
ТекущаяСтрока.КоличествоУпаковок = РезультатВыполнения.Вес;
Иначе
МенеджерОборудованияУТКлиент.СообщитьОбОшибке(РезультатВыполнения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДанныеИзТСД(Команда)
ОчиститьСообщения();
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Команда.ЗагрузитьДанныеИзТСД");
МенеджерОборудованияКлиент.НачатьЗагрузкуДанныеИзТСД(
Новый ОписаниеОповещения("ЗагрузитьИзТСДЗавершение", ЭтотОбъект),
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзТСДЗавершение(Результат, Параметры) Экспорт
Если Результат.Результат Тогда
ОбработатьШтрихкоды(Результат.ТаблицаТоваров);
Иначе
МенеджерОборудованияУТКлиент.СообщитьОбОшибке(Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВставитьСтроки(Команда)
КоличествоТоваровДоВставки = Объект.Товары.Количество();
ПолучитьСтрокиИзБуфераОбмена();
КоличествоВставленных = Объект.Товары.Количество()-КоличествоТоваровДоВставки;
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьСтроки(Команда)
Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы.Товары) Тогда
СкопироватьСтрокиНаСервере();
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОКопированииСтрок(Элементы.Товары.ВыделенныеСтроки.Количество());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьМногооборотнойТарой(Команда)
МногооборотнаяТараКлиент.ПодобратьМногооборотнуюТару(
ЭтаФорма,
"Товары",
"Номенклатура,Характеристика,Количество");
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСерииПоFEFO(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Команда.ЗаполнитьСерииПоFEFO");
Если ЕстьЗаполненныеСерииПоFEFO() Тогда
НоменклатураКлиент.ЗадатьВопросОПерезаполненииСерийПоFEFO(
Новый ОписаниеОповещения("ЗаполнитьСерииПоFEFOЗавершение", ЭтотОбъект));
Возврат;
КонецЕсли;
Если Не ЗаполнитьСерииПоFEFOСервер() Тогда
НоменклатураКлиент.ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСерииПоFEFOЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если НЕ Результат Тогда
Возврат;
КонецЕсли;
Если Не ЗаполнитьСерииПоFEFOСервер() Тогда
НоменклатураКлиент.ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СоставНабора(Команда)
ВыбраннаяСтрока = Элементы.Товары.ТекущаяСтрока;
Если ВыбраннаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ВыбраннаяСтрока);
Если Не ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора) Тогда
ПоказатьПредупреждение(,НСтр("ru = 'Открытие состава набора возможно только для набора.'"));
Возврат;
КонецЕсли;
ПараметрыКомплекта = Новый Структура;
ПараметрыКомплекта.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрыКомплекта.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрыКомплекта.Вставить("СверхЗаказа", Истина);
ПараметрыКомплекта.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма));
АдресНабораВоВременномХранилище = АдресНабораВоВременномХранилище(ПараметрыКомплекта);
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", АдресНабораВоВременномХранилище);
ПараметрыОткрытия.Вставить("НоменклатураНабора", ТекущаяСтрока.НоменклатураНабора);
ПараметрыОткрытия.Вставить("ХарактеристикаНабора", ТекущаяСтрока.ХарактеристикаНабора);
ПараметрыОткрытия.Вставить("Партнер", Объект.ПеревозчикПартнер);
ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка);
ПараметрыОткрытия.Вставить("Дата", Объект.Дата);
ПараметрыОткрытия.Вставить("Склад", Объект.СкладОтправитель);
ПараметрыОткрытия.Вставить("СкрыватьКомандуОстаткиНаСкладах", Ложь);
ПараметрыОткрытия.Вставить("Организация", Объект.Организация);
ПараметрыОткрытия.Вставить("СкрыватьЦенуНабора", Истина);
ОткрытьФорму("Обработка.РедактированиеНабора.Форма.Форма", ПараметрыОткрытия, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиДокумент(Команда)
ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПометкуУдаленияДокумента(Команда)
ОбщегоНазначенияУТКлиент.УстановитьПометкуУдаленияДокумента(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОтвязатьОтЗаказа(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Команда.ОтвязатьОтЗаказа");
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество()>0 Тогда
ОтвязатьОтЗаказаСервер(КэшированныеЗначения, Ложь);
ОповеститьОбОкончанииОтвязкиСтрок(ВыделенныеСтроки.Количество());
Иначе
ТекстПредупреждения = НСтр("ru='Выберите строки, которые необходимо отвязать от заказа.'");
ПоказатьПредупреждение(,ТекстПредупреждения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
#Область ЗагрузкаДанныхИзФайла
&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
Если Не Объект.Товары.Количество() = 0 Тогда
ТекстВопроса = НСтр("ru = 'Таблица %1 будет перезаполнена. Продолжить?'");
ТекстВопроса = СтрШаблон(ТекстВопроса, НСтр("ru = 'Товары'"));
Оповещение = Новый ОписаниеОповещения("ЗагрузитьИзФайлаЗавершение", ЭтаФорма);
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Иначе
ПоказатьФормуЗагрузкиИзФайла();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайлаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат = КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
ПоказатьФормуЗагрузкиИзФайла();
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьЗаказ(Команда)
Если Модифицированность Или Не Объект.Проведен Тогда
Ответ = Неопределено;
ПоказатьВопрос(Новый ОписаниеОповещения("ЗакрытьЗаказЗавершение", ЭтотОбъект),
НСтр("ru = 'Необходимо провести документ для выполнения операции. Провести документ?'"), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ЗакрытьЗаказФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьЗаказЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
ИначеЕсли Не Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)) Тогда
Возврат;
КонецЕсли;
ЗакрытьЗаказФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьЗаказФрагмент()
СписокЗаказовКЗакрытию = Новый СписокЗначений;
Если ЗначениеЗаполнено(Объект.ЗаказНаПеремещение) Тогда
СписокЗаказовКЗакрытию.Добавить(Объект.ЗаказНаПеремещение)
Иначе
СписокЗаказовКЗакрытию.ЗагрузитьЗначения(СписокЗаказов.ВыгрузитьЗначения())
КонецЕсли;
СтруктураЗакрытия = Новый Структура;
СтруктураЗакрытия.Вставить("Заказы", СписокЗаказовКЗакрытию);
СтруктураЗакрытия.Вставить("ДокументИнициатор", Объект.Ссылка);
СтруктураЗакрытия.Вставить("ОтменитьНеотработанныеСтроки", Истина);
СтруктураЗакрытия.Вставить("ЗакрыватьЗаказы", Истина);
ОткрытьФорму("Обработка.ПомощникЗакрытияЗаказов.Форма.ФормаЗакрытия", СтруктураЗакрытия
,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПодчиненныеСвойстваПоСтатистике(ИмяРеквизитаРодителя)
ЗаполнениеОбъектовПоСтатистике.ЗаполнитьПодчиненныеРеквизитыОбъекта(Объект, ИмяРеквизитаРодителя);
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКодСтроки.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПеремещениеПоЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаПеремещение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗаказНаПеремещение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСделка.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.Сделка");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыСделка.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ИспользоватьПеремещениеПоНесколькимЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыНазначение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Больше;
ОтборЭлемента.ПравоеЗначение = 0;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаПеремещение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗаказНаПеремещение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаПеремещение.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗаказНаПеремещение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКодСтроки.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказНаПеремещение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаПеремещение.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказНаПеремещение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПеремещениеПоЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаПеремещение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗаказНаПеремещение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказНаПеремещение");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Сверх заказа, заказ не выбран'"));
НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь);
НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииПриПланированииОтгрузкиУказываютсяВТЧТовары");
НоменклатураСервер.УстановитьУсловноеОформлениеНазначенияНоменклатуры(ЭтаФорма);
НаборыСервер.УстановитьУсловноеОформление(ЭтаФорма, "Товары");
КонецПроцедуры
#Область ПриИзмененииРеквизитов
&НаСервере
Процедура СкладОтправительПриИзмененииСервер(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения)
УстановитьПривилегированныйРежим(Истина);
ОрдернаяСхемаПриОтгрузке = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Объект.СкладОтправитель, Объект.Дата);
ЗаполнитьУстановитьВидимостьСерийДоступностьПерезаполнитьПоОтгрузке();
Объект.ВидЦены = Справочники.Склады.УчетныйВидЦены(Объект.СкладОтправитель);
СкладОтправитель = Объект.СкладОтправитель;
ОчиститьТабличнуюЧастьТоварыПриИзмененииСклада(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения);
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура СкладПолучательПриИзмененииСервер(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения)
ЗаполнитьУстановитьВидимостьСерийДоступностьПерезаполнитьПоОтгрузке();
СкладПолучатель = Объект.СкладПолучатель;
ОчиститьТабличнуюЧастьТоварыПриИзмененииСклада(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения);
ДоставкаТоваров.ЗаполнитьРеквизитыДоставки(Элементы, "СкладПолучатель", Объект);
АктуализироватьПеремещениеПодДеятельность();
КонецПроцедуры
&НаСервере
Процедура СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке)
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ПеремещениеТоваров));
Элементы.ГруппаИнформацияНеобходимыСтатусы.Видимость = ВыводитьСообщениеПоИспользованиюСтатусов();
Если ЗаполнитьСерииПоОтгрузке Тогда
Документы.ПеремещениеТоваров.ЗаполнитьСерииПоОтгрузке(Объект);
КонецЕсли;
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииСервер()
СтруктураПараметров = ДенежныеСредстваСервер.ПараметрыЗаполненияБанковскогоСчетаОрганизацииПоУмолчанию();
СтруктураПараметров.Организация = Объект.Организация;
Объект.БанковскийСчетОрганизации = ЗначениеНастроекПовтИсп.ПолучитьБанковскийСчетОрганизацииПоУмолчанию(СтруктураПараметров);
ЗаполнитьПодчиненныеСвойстваПоСтатистике("Организация");
ЗаполнитьПодчиненныеСвойстваПоСтатистике("ХозяйственнаяОперация");
Документы.ЗаказНаПеремещение.ПроверитьИОчиститьОрганизацию(Объект, Объект.ОрганизацияПолучатель);
УправлениеЭлементамиФормы();
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
АктуализироватьПеремещениеПодДеятельность();
ОбновитьТекстДокументыНаОсновании();
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПолучательПриИзмененииНаСервере()
ОбновитьТекстДокументыНаОсновании();
КонецПроцедуры
&НаСервере
Процедура ХозяйственнаяОперацияПриИзмененииСервер()
ЗаполнитьПодчиненныеСвойстваПоСтатистике("ХозяйственнаяОперация");
Документы.ЗаказНаПеремещение.ПроверитьИОчиститьОрганизацию(Объект, Объект.ОрганизацияПолучатель);
Документы.ЗаказНаПеремещение.ПроверитьИОчиститьОрганизацию(Объект, Объект.Организация);
Если Объект.Организация.Пустая() Тогда
БанковскийСчетОрганизации = Неопределено;
КонецЕсли;
УправлениеЭлементамиФормы();
КонецПроцедуры
&НаСервере
Процедура ДатаПриИзмененииСервер()
УстановитьПривилегированныйРежим(Истина);
ОтветственныеЛицаСервер.ПриИзмененииСвязанныхРеквизитовДокумента(Объект);
ОрдернаяСхемаПриОтгрузке = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Объект.СкладОтправитель, Объект.Дата);
ЗаполнитьУстановитьВидимостьСерийДоступностьПерезаполнитьПоОтгрузке();
АктуализироватьПеремещениеПодДеятельность();
УстановитьПривилегированныйРежим(Ложь);
КонецПроцедуры
&НаСервере
Процедура АктуализироватьПеремещениеПодДеятельность(Заполнить = Истина)
ПараметрыЗаполнения = УчетНДСУПКлиентСервер.ПараметрыЗаполненияВидаДеятельностиНДС();
ПараметрыЗаполнения.Организация = Объект.Организация;
ПараметрыЗаполнения.Дата = Объект.Дата;
ПараметрыЗаполнения.Склад = Объект.СкладПолучатель;
ПараметрыЗаполнения.ДвижениеТоваровНаСкладах = Истина;
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПеремещениеТоваровМеждуФилиалами Тогда
ПараметрыЗаполнения.ДвижениеМеждуФилиалами = Истина;
КонецЕсли;
Если Заполнить Тогда
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(
Объект.ПеремещениеПодДеятельность,
ПараметрыЗаполнения,
УчетНДСКэшированныеЗначенияПараметров);
КонецЕсли;
УчетНДСУП.ЗаполнитьСписокВыбораВидаДеятельностиНДС(
Элементы.ПеремещениеПодДеятельность,
Объект.ПеремещениеПодДеятельность,
ПараметрыЗаполнения,
УчетНДСКэшированныеЗначенияПараметров);
КонецПроцедуры
#КонецОбласти
#Область Товары
&НаКлиенте
Процедура ТоварыПриОкончанииРедактированияДляСерверногоВызова()
ТоварыПриОкончанииРедактированияНаСервере();
КонецПроцедуры
&НаСервере
Процедура ТоварыПриОкончанииРедактированияНаСервере()
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаСервере
Процедура ТоварыПослеУдаленияСервер()
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
Если ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
ОбновитьИнформациюПоЗаказам();
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ПодборыИОбработкаПроверкиКоличества
&НаСервере
Процедура ОбработкаПодбораТоваровИзЗаказа(АдресВХранилище)
СтруктураДанных = ПолучитьИзВременногоХранилища(АдресВХранилище);
ПродажиСерверЛокализация.ПеренестиШтрихкодыУпаковок(ЭтотОбъект, СтруктураДанных.ШтрихкодыУпаковок);
ЗаполнитьТоварыПодобраннымиИзЗаказа(СтруктураДанных.Товары);
КонецПроцедуры
&НаСервере
Функция ТаблицыСерииОтправителяИСерииПолучателя(Таблица)
Таблица.Колонки.Добавить("Индекс", Новый ОписаниеТипов("Число"));
Для Индекс = 0 По Таблица.Количество() - 1 Цикл
Таблица[Индекс].Индекс = Индекс;
КонецЦикла;
Результат = Новый Структура("ТаблицаСерииОтправителя, ТаблицаСерииПолучателя",
Таблица.СкопироватьКолонки(), Таблица.СкопироватьКолонки());
Запрос = Новый Запрос();
Запрос.УстановитьПараметр("Таблица", Таблица);
Запрос.УстановитьПараметр("СкладОтправитель", Объект.СкладОтправитель);
Запрос.Текст =
"ВЫБРАТЬ
| Таблица.Индекс КАК Индекс,
| Таблица.Номенклатура КАК Номенклатура
|ПОМЕСТИТЬ ВтТовары
|ИЗ
| &Таблица КАК Таблица
|;
|
|
|ВЫБРАТЬ
| Таблица.Индекс КАК Индекс,
| ВЫБОР КОГДА ПолитикиУчетаСерий.Ссылка ЕСТЬ NULL ТОГДА
| ЛОЖЬ
| ИНАЧЕ
| ИСТИНА
| КОНЕЦ КАК УказываютсяСерииОтправителя
|ИЗ
| ВтТовары КАК Таблица
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СпрНоменклатура
| ПО Таблица.Номенклатура = СпрНоменклатура.Ссылка
|
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВидыНоменклатуры.ПолитикиУчетаСерий КАК ПолитикиУчетаСерий
| ПО ПолитикиУчетаСерий.Ссылка = СпрНоменклатура.ВидНоменклатуры.Ссылка
| И ПолитикиУчетаСерий.Склад = &СкладОтправитель
| И (ПолитикиУчетаСерий.ПолитикаУчетаСерий.УказыватьПриПланированииОтгрузки
| ИЛИ ПолитикиУчетаСерий.ПолитикаУчетаСерий.УчитыватьСебестоимостьПоСериям)";
Индексы = Запрос.Выполнить().Выгрузить();
Для Каждого СтрокаИндекса Из Индексы Цикл
Если СтрокаИндекса.УказываютсяСерииОтправителя Тогда
ЗаполнитьЗначенияСвойств(Результат.ТаблицаСерииОтправителя.Добавить(), Таблица[СтрокаИндекса.Индекс]);
Иначе
ЗаполнитьЗначенияСвойств(Результат.ТаблицаСерииПолучателя.Добавить(), Таблица[СтрокаИндекса.Индекс]);
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаСервере
Процедура ЗаполнитьТоварыПодобраннымиИзЗаказа(Таблица)
СтруктураТаблиц = ТаблицыСерииОтправителяИСерииПолучателя(Таблица);
ЗаполнитьТоварыПодобраннымиИзЗаказаСУчетомСерий(СтруктураТаблиц.ТаблицаСерииОтправителя, Истина);
ЗаполнитьТоварыПодобраннымиИзЗаказаСУчетомСерий(СтруктураТаблиц.ТаблицаСерииПолучателя, Ложь);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТоварыПодобраннымиИзЗаказаСУчетомСерий(Таблица, УчитыватьСерию)
ИменаПолей = "НомерСтроки";
СтруктураПоиска = Новый Структура(ИменаПолей);
Таблица.Сортировать(ИменаПолей + " Убыв");
ДеревоСтрок = Новый Массив();
Для Каждого СтрокаТаблицы Из Таблица Цикл
Если СтруктураПоиска.НомерСтроки <> СтрокаТаблицы.НомерСтроки Тогда
МассивСтрок = Новый Массив();
ДеревоСтрок.Добавить(МассивСтрок);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТаблицы);
КонецЕсли;
МассивСтрок.Добавить(СтрокаТаблицы);
КонецЦикла;
ПоляСвязиСЗаказом = Новый Структура("КодСтроки, ЗаказНаПеремещение", 0, Документы.ЗаказНаПеремещение.ПустаяСсылка());
ДобавленныеСтроки = НакладныеСервер.ЗаполнитьТоварыПодобраннымиИзЗаказа(ДеревоСтрок, ИменаПолей, Объект.Товары, ПоляСвязиСЗаказом,
?(УчитыватьСерию, "", "Серия"));
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(ЭтотОбъект, "Номенклатура", СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, Неопределено);
Для Каждого СтрокаТовары Из ДобавленныеСтроки Цикл
Если ЗначениеЗаполнено(СтрокаТовары.ЗаказНаПеремещение) Тогда
Объект.ПеремещениеПоЗаказам = Истина;
Если Не ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
Объект.ЗаказНаПеремещение = СтрокаТовары.ЗаказНаПеремещение;
КонецЕсли;
КонецЕсли;
СтрокаТовары.ИндексНабора = ?(ЗначениеЗаполнено(СтрокаТовары.НоменклатураНабора), 1, 0);
КонецЦикла;
ОбновитьНазначениеОтправителяВТаблицеТовары();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
ОбновитьИнформациюПоЗаказам();
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(
ЭтотОбъект, "Номенклатура", СтруктураДействий);
ОбрабатываемыеСтроки = Новый Массив;
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
ТекущаяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара, "НоменклатураНабора, ХарактеристикаНабора, Номенклатура,
|Характеристика, ХарактеристикиИспользуются, Упаковка, КоличествоУпаковок, Серия");
ТекущаяСтрока.ИндексНабора = ?(ЗначениеЗаполнено(ТекущаяСтрока.НоменклатураНабора), 1, 0);
ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, Объект.ПеремещениеПоЗаказам);
ТекущаяСтрока.ЗаказНаПеремещение = ЗаказВСтрокеСверхЗаказа(Объект.ПеремещениеПоЗаказам, Объект.ЗаказНаПеремещение);
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий);
МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборТоваровПоЗаказамОрдерам()
РеквизитыШапки = Новый Структура("Организация, ОрганизацияПолучатель, СкладОтправитель, СкладПолучатель, Подразделение, ХозяйственнаяОперация, Ссылка");
ЗаполнитьЗначенияСвойств(РеквизитыШапки, Объект);
ДополнительныеПоля = Новый Структура("ДатаОтгрузки, Сделка");
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("РеквизитыШапки", РеквизитыШапки);
ПараметрыФормы.Вставить("Заказ", Объект.ЗаказНаПеремещение);
ПараметрыФормы.Вставить("ОрдернаяСхемаПриОтгрузке", ОрдернаяСхемаПриОтгрузке);
ПараметрыФормы.Вставить("НакладнаяПоЗаказам", Объект.ПеремещениеПоЗаказам
И ЗначениеЗаполнено(Объект.ЗаказНаПеремещение));
ПараметрыФормы.Вставить("АдресТовары", АдресТоварыНакладной());
ПараметрыФормы.Вставить("Накладная", Объект.Ссылка);
ПараметрыФормы.Вставить("ИспользоватьНакладныеПоНесколькимЗаказам", ИспользоватьПеремещениеПоНесколькимЗаказам);
ПараметрыФормы.Вставить("ИспользуютсяЗаказы", ИспользоватьЗаказыНаПеремещение);
ПараметрыФормы.Вставить("ДополнительныеПоля", ДополнительныеПоля);
ОткрытьФорму("ОбщаяФорма.ПодборТоваровИзЗаказа",
ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборТоваров()
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Склад", Объект.СкладОтправитель);
ПараметрыФормы.Вставить("РежимПодбораБезСуммовыхПараметров", Истина);
ПараметрыФормы.Вставить("СкрыватьКолонкуВидЦены", Истина);
ПараметрыФормы.Вставить("СкрыватьКомандуЦеныНоменклатуры", Истина);
ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый ФиксированныйМассив(НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре()));
ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Подбор товаров'"));
ПараметрыФормы.Вставить("Дата", Объект.Дата);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("ПараметрыУказанияСерий", ПараметрыУказанияСерий);
ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаСервере
Функция АдресТоварыНакладной()
Таблица = Объект.Товары.Выгрузить();
Таблица.Колонки.ЗаказНаПеремещение.Имя = "ЗаказНаПеремещениеИсходный";
Таблица.Колонки.Добавить("ЗаказНаПеремещение", Новый ОписаниеТипов("ДокументСсылка.ЗаказНаПеремещение, ДокументСсылка.ПеремещениеТоваров"));
Таблица.Колонки.Добавить("ДатаОтгрузки", Новый ОписаниеТипов("Дата"));
Для Каждого Строка Из Таблица Цикл
Строка.ЗаказНаПеремещение = ?(ЗначениеЗаполнено(Строка.ЗаказНаПеремещениеИсходный), Строка.ЗаказНаПеремещениеИсходный, Объект.Ссылка);
Если Строка.СтатусУказанияСерийОтправитель <> 10 И Строка.СтатусУказанияСерийОтправитель <> 14 Тогда
Строка.Серия = Справочники.СерииНоменклатуры.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
Таблица.ЗаполнитьЗначения(ТекущаяДатаСеанса(), "ДатаОтгрузки");
Возврат ПоместитьВоВременноеХранилище(Таблица);
КонецФункции
&НаСервере
Функция ПоместитьТабличнуюЧастьТоварыВоВременноеХранилищеДляПроверкиКоличества()
ТабличнаяЧастьТовары = Объект.Товары.Выгрузить(,"НоменклатураНабора, ХарактеристикаНабора,Номенклатура, Характеристика, ХарактеристикиИспользуются, Упаковка, КоличествоУпаковок, Серия, СтатусУказанияСерий, ТипНоменклатуры");
ТабличнаяЧастьТовары.Свернуть("НоменклатураНабора, ХарактеристикаНабора,Номенклатура, Характеристика, ХарактеристикиИспользуются, Упаковка, Серия, СтатусУказанияСерий, ТипНоменклатуры", "КоличествоУпаковок");
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ТабличнаяЧастьТовары, УникальныйИдентификатор);
Возврат АдресВоВременномХранилище;
КонецФункции
&НаСервере
Процедура ИзменитьТабличнуюЧастьПоРезультатамПроверки(ВозвращаемыеПараметры, КэшированныеЗначения)
ТаблицаТовары = ПолучитьИзВременногоХранилища(ВозвращаемыеПараметры.Товары);
ДобавленныеИИзмененныеСтроки = Новый Массив();
УдаляемыеСтроки = Новый Массив;
Для Каждого СтрокаИсточник Из ТаблицаТовары Цикл
Отбор = Новый Структура("НоменклатураНабора, ХарактеристикаНабора, Номенклатура, Характеристика, Серия, СтатусУказанияСерий, Упаковка");
ЗаполнитьЗначенияСвойств(Отбор, СтрокаИсточник);
НайденныеСтроки = Объект.Товары.НайтиСтроки(Отбор);
Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл
Если СтрокаИсточник.КоличествоУпаковок = 0 Тогда
Прервать;
КонецЕсли;
Если СтрокаИсточник.КоличествоУпаковок >= 0 Тогда
СтрокаТЧ.КоличествоУпаковок = СтрокаТЧ.КоличествоУпаковок + СтрокаИсточник.КоличествоУпаковок;
СтрокаИсточник.КоличествоУпаковок = 0;
ДобавленныеИИзмененныеСтроки.Добавить(СтрокаТЧ);
Иначе
КоличествоКСписанию = -СтрокаИсточник.КоличествоУпаковок;
КоличествоВСтроке = СтрокаТЧ.КоличествоУпаковок;
Если КоличествоКСписанию >= КоличествоВСтроке Тогда
СтрокаИсточник.КоличествоУпаковок = КоличествоВСтроке - КоличествоКСписанию;
СтрокаТЧ.КоличествоУпаковок = 0;
Иначе
СтрокаИсточник.КоличествоУпаковок = 0;
СтрокаТЧ.КоличествоУпаковок = КоличествоВСтроке - КоличествоКСписанию;
ДобавленныеИИзмененныеСтроки.Добавить(СтрокаТЧ);
КонецЕсли;
КонецЕсли;
Если СтрокаТЧ.КоличествоУпаковок = 0 Тогда
УдаляемыеСтроки.Добавить(СтрокаТЧ);
Иначе
КонецЕсли;
КонецЦикла;
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаТЧ = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаИсточник);
ДобавленныеИИзмененныеСтроки.Добавить(СтрокаТЧ);
КонецЕсли;
КонецЦикла;
СтруктураДействий = Новый Структура();
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(
ЭтотОбъект, "Номенклатура", СтруктураДействий);
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ДобавленныеИИзмененныеСтроки,
СтруктураДействий,
Объект.Товары,
КэшированныеЗначения);
Для Каждого СтрокаТЧ Из УдаляемыеСтроки Цикл
Объект.Товары.Удалить(СтрокаТЧ);
КонецЦикла;
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКоличествоВДокументе(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ПеремещениеТоваров.ФормаДокумента.Команда.ПроверитьКоличествоВДокументе");
ПараметрыУказанияСерийВрем = Новый Структура(ПараметрыУказанияСерий);
ПараметрыУказанияСерийВрем.ИмяПоляСклад = "Склад";
ПараметрыУказанияСерийПроверкаКоличества = Новый ФиксированнаяСтруктура(ПараметрыУказанияСерийВрем);
Если Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыПеремещенийТоваров.Принято") Тогда
Склад = Объект.СкладПолучатель;
Иначе
Склад = Объект.СкладОтправитель;
КонецЕсли;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", ПоместитьТабличнуюЧастьТоварыВоВременноеХранилищеДляПроверкиКоличества());
ПараметрыОткрытия.Вставить("ИмяТабличнойЧасти", "Товары");
ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка);
ПараметрыОткрытия.Вставить("ПревышениеКоличестваТоваровРазрешено", Не Объект.ПеремещениеПоЗаказам);
ПараметрыОткрытия.Вставить("ПараметрыУказанияСерий", ПараметрыУказанияСерийПроверкаКоличества);
ПараметрыОткрытия.Вставить("Склад", Склад);
ПараметрыОткрытия.Вставить("ПеремещениеПоЗаказам", Объект.ПеремещениеПоЗаказам);
ПараметрыОткрытия.Вставить("Статус", Объект.Статус);
ВозвращаемыеПараметры = Неопределено;
ОткрытьФорму("ОбщаяФорма.ПроверкаЗаполненияДокументов", ПараметрыОткрытия,,,,, Новый ОписаниеОповещения("ПроверитьКоличествоВДокументеЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКоличествоВДокументеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВозвращаемыеПараметры = Результат;
Если ВозвращаемыеПараметры <> Неопределено Тогда
ИзменитьТабличнуюЧастьПоРезультатамПроверки(ВозвращаемыеПараметры, ?(КэшированныеЗначения = Неопределено, ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(), КэшированныеЗначения));
Модифицированность = Истина;
ОбщегоНазначенияУТКлиент.ВывестиСообщениеПревышенияПоКоличеству(ВозвращаемыеПараметры, НСтр("ru = 'введенного на основании распоряжения.'"));
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораЗаказаНаСервере(ЗаказНаПеремещение)
ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(Элементы.Товары.ТекущаяСтрока);
ТекущиеДанные.ЗаказНаПеремещение = ЗаказНаПеремещение;
ТекущиеДанные.Сделка = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЗаказНаПеремещение, "Сделка");
ОбновитьИнформациюПоЗаказам();
КонецПроцедуры
#КонецОбласти
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(ДанныеШтрихкодов) Тогда
Возврат;
КонецЕсли;
ИзменятьКоличество = Не Объект.ПеремещениеПоЗаказам;
СтруктураДействийСДобавленнымиСтроками = Новый Структура;
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСДобавленнымиСтроками);
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(
ЭтотОбъект, "Номенклатура", СтруктураДействийСДобавленнымиСтроками);
СтруктураДействийСИзмененнымиСтроками = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСИзмененнымиСтроками);
СтруктураДействий = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов();
СтруктураДействий.Штрихкоды = ДанныеШтрихкодов;
СтруктураДействий.СтруктураДействийСДобавленнымиСтроками = СтруктураДействийСДобавленнымиСтроками;
СтруктураДействий.СтруктураДействийСИзмененнымиСтроками = СтруктураДействийСИзмененнымиСтроками;
СтруктураДействий.ПараметрыУказанияСерий = ПараметрыУказанияСерий;
СтруктураДействий.ИзменятьКоличество = ИзменятьКоличество;
СтруктураДействий.РассчитыватьНаборы = Истина;
СтруктураДействий.ТолькоТовары = Истина;
ОбработатьШтрихкодыСервер(СтруктураДействий,КэшированныеЗначения);
ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураДействий,КэшированныеЗначения,ЭтаФорма);
Если ШтрихкодированиеНоменклатурыКлиент.НужноОткрытьФормуУказанияСерийПослеОбработкиШтрихкодов(СтруктураДействий) Тогда
ТекущиеДанныеИдентификатор = СтруктураДействий.МассивСтрокССериями[0];
ПодключитьОбработчикОжидания("ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры",0.1,Истина);
КонецЕсли;
Если СтруктураДействий.ТекущаяСтрока <> Неопределено Тогда
Элементы.Товары.ТекущаяСтрока = СтруктураДействий.ТекущаяСтрока;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьШтрихкодыСервер(СтруктураПараметровДействия, КэшированныеЗначения)
ШтрихкодированиеНоменклатурыСервер.ОбработатьШтрихкоды(ЭтаФорма,Объект,СтруктураПараметровДействия,КэшированныеЗначения);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
#КонецОбласти
#Область Серии
&НаСервере
Функция ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор)
Возврат НоменклатураСервер.ПараметрыФормыУказанияСерий(Объект, ПараметрыУказанияСерий, ТекущиеДанныеИдентификатор, ЭтаФорма);
КонецФункции
&НаСервере
Процедура УстановитьВидимостьЭлементовСерий()
Элементы.ТоварыСтатусУказанияСерий.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыУказатьСерии.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыЗаполнитьСерииПоFEFO.Видимость =
ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад", Новый Структура("Склад", Объект.СкладОтправитель))
И Не ОрдернаяСхемаПриОтгрузке;
УстановитьПривилегированныйРежим(Истина);
ОрдернаяСхемаСкладПоступлении = СкладыСервер.ИспользоватьОрдернуюСхемуПриПоступлении(Объект.СкладПолучатель,
Объект.Дата);
МожноЗаполнитьСерииПоОтгрузке = ОрдернаяСхемаПриОтгрузке
И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад",Новый Структура("Склад", Объект.СкладОтправитель))
И Не ОрдернаяСхемаСкладПоступлении
И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад",Новый Структура("Склад", Объект.СкладПолучатель));
УстановитьПривилегированныйРежим(Ложь);
Элементы.ТоварыСерия.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
КонецПроцедуры
&НаСервере
Процедура ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий)
НоменклатураСервер.ОбработатьУказаниеСерий(Объект,ПараметрыУказанияСерий,ПараметрыФормыУказанияСерий);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения)
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Объект,
ПараметрыУказанияСерий, ТекущаяСтрокаИдентификатор, КэшированныеЗначения);
КонецПроцедуры
&НаСервере
Функция ЗаполнитьСерииПоFEFOСервер()
Если НоменклатураСервер.ЕстьСтрокиСЗаполняемымиПоFEFOСериями(Объект.Товары) Тогда
НоменклатураСервер.ЗаполнитьСерииПоFEFO(Объект,ПараметрыУказанияСерий);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция ЕстьЗаполненныеСерииПоFEFO()
Возврат НоменклатураСервер.ЕстьСтрокиСЗаполненнымиПоFEFOСериями(Объект.Товары);
КонецФункции
&НаКлиенте
Процедура ОткрытьПодборСерий(Текст = "", ТекущиеДанные = Неопределено)
Если НоменклатураКлиент.ДляУказанияСерийНуженСерверныйВызов(ЭтаФорма, ПараметрыУказанияСерий, Текст, ТекущиеДанные)Тогда
Если ТекущиеДанные = Неопределено Тогда
ТекущиеДанныеИдентификатор = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор();
Иначе
ТекущиеДанныеИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
КонецЕсли;
ПараметрыФормыУказанияСерий = ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор);
ЗначениеВозврата = Неопределено;
ОткрытьФорму(ПараметрыФормыУказанияСерий.ИмяФормы,ПараметрыФормыУказанияСерий,ЭтаФорма,,,, Новый ОписаниеОповещения("ОткрытьПодборСерийЗавершение", ЭтотОбъект, Новый Структура("ПараметрыФормыУказанияСерий", ПараметрыФормыУказанияСерий)), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборСерийЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыФормыУказанияСерий = ДополнительныеПараметры.ПараметрыФормыУказанияСерий;
ЗначениеВозврата = Результат;
Если ЗначениеВозврата <> Неопределено Тогда
ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры()
Если ТекущиеДанныеИдентификатор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(ТекущиеДанныеИдентификатор);
ОткрытьПодборСерий(,ТекущиеДанные);
КонецПроцедуры
&НаСервере
Функция ВыводитьСообщениеПоИспользованиюСтатусов()
ВыводитьСообщениеПоИспользованиюСтатусов = Ложь;
Если ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры
И НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыПеремещенийТоваров") Тогда
УстановитьПривилегированныйРежим(Истина);
ПолитикиУчетаСерийСкладОтправитель = СкладыСервер.ИспользованиеСерийНаСкладеПоПолитикамУчета(Объект.СкладОтправитель);
ПолитикиУчетаСерийСкладПолучатель = СкладыСервер.ИспользованиеСерийНаСкладеПоПолитикамУчета(Объект.СкладПолучатель);
ИспользоватьОрдернуюСхемуПолучатель = СкладыСервер.ИспользоватьОрдернуюСхемуПриПоступлении(Объект.СкладПолучатель, Объект.Дата, Ложь);
ИспользоватьОрдернуюСхемуОтправитель = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Объект.СкладОтправитель, Объект.Дата);
ПараметрыСерийСкладаОтправитель = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.СкладОтправитель, Ложь);
ПараметрыСерийСкладаПолучатель = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.СкладПолучатель, Ложь);
УстановитьПривилегированныйРежим(Ложь);
Если ИспользоватьОрдернуюСхемуОтправитель Тогда
Если ИспользоватьОрдернуюСхемуПолучатель Тогда
Если НЕ ПолитикиУчетаСерийСкладОтправитель.УказыватьПриПланированииОтгрузки
И ПолитикиУчетаСерийСкладПолучатель.УчитыватьСебестоимостьПоСериям Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ПолитикиУчетаСерийСкладПолучатель.УчитыватьСебестоимостьПоСериям Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Иначе
Если НЕ ПолитикиУчетаСерийСкладОтправитель.УказыватьПриПланированииОтгрузки
И ПолитикиУчетаСерийСкладПолучатель.УчитыватьСебестоимостьПоСериям Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Если НЕ ПолитикиУчетаСерийСкладОтправитель.УказыватьПриПланированииОтгрузки
И ПараметрыСерийСкладаПолучатель.ИспользоватьСерииНоменклатуры Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ПолитикиУчетаСерийСкладПолучатель.УчитыватьСебестоимостьПоСериям Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ПараметрыСерийСкладаПолучатель.ИспользоватьСерииНоменклатуры Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
КонецЕсли;
Иначе
Если ИспользоватьОрдернуюСхемуПолучатель Тогда
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ПолитикиУчетаСерийСкладПолучатель.УчитыватьСебестоимостьПоСериям Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Иначе
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ПолитикиУчетаСерийСкладПолучатель.УчитыватьСебестоимостьПоСериям Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ПараметрыСерийСкладаПолучатель.ИспользоватьСерииНоменклатуры Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ВыводитьСообщениеПоИспользованиюСтатусов;
КонецФункции
#КонецОбласти
#Область УправлениеЭлементамиФормы
&НаСервере
Процедура УправлениеЭлементамиФормы()
Перем МассивВсехРеквизитов;
Перем МассивРеквизитовОперации;
Документы.ПеремещениеТоваров.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(
Объект.ХозяйственнаяОперация,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
ДенежныеСредстваСервер.УстановитьВидимостьЭлементовПоМассиву(
Элементы,
МассивВсехРеквизитов,
МассивРеквизитовОперации);
ЭтоПередачаТоваровМеждуОбособленнымиПодразделениями = (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПеремещениеТоваровМеждуФилиалами);
Элементы.Организация.Заголовок =
?(ЭтоПередачаТоваровМеждуОбособленнымиПодразделениями, НСтр("ru = 'Организация-отправитель'"),
НСтр("ru = 'Организация'"));
КонецПроцедуры
#КонецОбласти
#Область ЗаполнениеПоЗаказуПоОрдеру
&НаКлиенте
Процедура ПеремещениеПоЗаказуУстановленоЗаказВыбран(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Объект.ПеремещениеПоЗаказам = Ложь;
Иначе
Если Объект.Товары.Количество() = 0 Тогда
ТекстВопроса = СтрЗаменить(НСтр("ru='Список Товары будет заполнен остатками неоформленных товаров по документу %ЗаказНаПеремещение%. Продолжить?'"), "%ЗаказНаПеремещение%", Результат);
Иначе
ТекстВопроса = СтрЗаменить(НСтр("ru='Строки в списке Товары будут привязаны к строкам документа %ЗаказНаПеремещение%. Строки, которые невозможно привязать к строкам заказа, будут удалены. Продолжить?'"), "%ЗаказНаПеремещение%", Результат);
КонецЕсли;
ПоказатьВопрос(Новый ОписаниеОповещения("ПеремещениеПоЗаказуУстановленоЗаказВыбранЗавершение", ЭтотОбъект, Новый Структура("ЗаказНаПеремещение", Результат)), ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОбОтвязкеСтрокОтЗаказов()
Если ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
ТекстОповещения = НСтр("ru='Строки в списке ""Товары"" отвязаны от строк заказов.'");
Иначе
ТекстОповещения = НСтр("ru='Строки в списке ""Товары"" отвязаны от строк заказа.'");
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка списка ""Товары""'"),, ТекстОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОПривязкеСтрокКЗаказам(ЗаказСсылка = Неопределено)
Если ЗаказСсылка <> Неопределено Тогда
ШаблонТекста = НСтр("ru='Строки в списке ""Товары"" привязаны к строкам документа %Заказ%.
|Строки, которые неудалось привязать к строкам заказа - удалены.'");
ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
Иначе
ТекстОповещения = НСтр("ru='Строки в списке ""Товары"" привязаны к строкам неоформленных заказов.
|Строки, которые неудалось привязать к строкам заказов - удалены.'");
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка списка ""Товары""'"),, ТекстОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОЗаполненииПоОстаткамЗаказов(ЗаказСсылка = Неопределено)
Если Объект.Товары.Количество() > 0 Тогда
Если ЗаказСсылка <> Неопределено Тогда
ШаблонТекста = НСтр("ru='Список ""Товары"" заполнен остатками неоформленных товаров по документу %Заказ%.'");
ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
Иначе
ТекстОповещения = НСтр("ru='Список ""Товары"" заполнен остатками неоформленных товаров по заказам.'");
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка списка ""Товары""'"),, ТекстОповещения);
Иначе
Если ЗаказСсылка <> Неопределено Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по документу %Заказ%.'");
ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
Иначе
Если Не ЗначениеЗаполнено(Объект.СкладОтправитель) Тогда
ТекстОповещения = НСтр("ru='Не заполнен склад-отправитель.'");
ИначеЕсли Не ЗначениеЗаполнено(Объект.СкладПолучатель) Тогда
ТекстОповещения = НСтр("ru='Не заполнен склад-получатель.'");
ИначеЕсли Не ЗначениеЗаполнено(Объект.Организация) Тогда
ТекстОповещения = НСтр("ru='Не заполнена организация.'");
ИначеЕсли ИспользоватьНесколькоОрганизаций И ИспользоватьПодразделения Тогда
Если ЗначениеЗаполнено(Объект.Подразделение) Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
|со склада ""%1"" на склад ""%2"" в подразделении ""%3"" в организации ""%4""'");
Иначе
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
|со склада ""%1"" на склад ""%2"" без указания подразделения в организации ""%4""'");
КонецЕсли;
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.СкладОтправитель, Объект.СкладПолучатель, Объект.Подразделение, Объект.Организация);
ИначеЕсли ИспользоватьНесколькоОрганизаций Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
|со склада ""%1"" на склад ""%2"" в организации ""%3""'");
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.СкладОтправитель, Объект.СкладПолучатель, Объект.Организация);
ИначеЕсли ИспользоватьПодразделения Тогда
Если ЗначениеЗаполнено(Объект.Подразделение) Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
|со склада ""%1"" на склад ""%2"" в подразделении ""%3""'");
Иначе
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
|со склада ""%1"" на склад ""%2"" без указания подразделения'");
КонецЕсли;
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.СкладОтправитель, Объект.СкладПолучатель, Объект.Подразделение);
Иначе
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на перемещение
|со склада ""%1"" на склад ""%2""'");
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.СкладОтправитель, Объект.СкладПолучатель);
КонецЕсли;
КонецЕсли;
ПоказатьПредупреждение(, ТекстОповещения);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииПеремещенияПоНесколькимЗаказам(КэшированныеЗначения)
Если Объект.ПеремещениеПоЗаказам Тогда
Если Объект.Товары.Количество() = 0 Тогда
ЗаполнитьПоЗаказуСервер();
Иначе
ПривязатьСтрокиКЗаказамНаПеремещение(Не ИспользоватьПеремещениеПоНесколькимЗаказам);
КонецЕсли;
Если ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
Объект.Сделка = Справочники.СделкиСКлиентами.ПустаяСсылка();
КонецЕсли;
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
Иначе
Объект.ЗаказНаПеремещение = Документы.ЗаказНаПеремещение.ПустаяСсылка();
ОтвязатьОтЗаказаСервер(КэшированныеЗначения, Истина);
СписокЗаказов.Очистить();
МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
КонецЕсли;
Документы.ПеремещениеТоваров.ОбновитьЗависимыеРеквизитыТабличнойЧасти(Объект.Товары, Неопределено);
ОбновитьИнформациюПоЗаказам();
ОбновитьОтклоненияОтЗаказа();
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
Элементы.Сделка.Видимость = Не (ИспользоватьПеремещениеПоНесколькимЗаказам И Объект.ПеремещениеПоЗаказам);
Элементы.ТоварыСделка.Видимость = ИспользоватьПеремещениеПоНесколькимЗаказам И Объект.ПеремещениеПоЗаказам;
НастроитьКомандуПодобратьПоЗаказамОрдерам(Ложь);
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Сделка", "Видимость", Не (ИспользоватьПеремещениеПоНесколькимЗаказам И Объект.ПеремещениеПоЗаказам));
УстановитьВидимостьЭлементовСверхЗаказа(Элементы, Объект.ПеремещениеПоЗаказам);
ДоставкаТоваров.ПриИзмененииФлагаПоЗаказам(Элементы, Объект, Объект.ПеремещениеПоЗаказам);
УстановитьВидимостьКомандПоЗаказу();
КонецПроцедуры
&НаСервере
Функция ПривязатьСтрокиКЗаказамНаПеремещение(ОтобратьПоЗаказу = Ложь)
Если Не ИспользоватьЗаказыНаПеремещение
Или Не ИспользоватьПеремещениеПоНесколькимЗаказам И Не ЗначениеЗаполнено(Объект.ЗаказНаПеремещение) Тогда
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос(
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|ГДЕ
| Товары.КодСтроки = 0
| И Товары.ЗаказНаПеремещение = ЗНАЧЕНИЕ(Документ.ЗаказНаПеремещение.ПустаяСсылка)
|;
|
|
|ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаЗаказы.ЗаказНаПеремещение.Сделка КАК Сделка,
| ТаблицаЗаказы.ЗаказНаПеремещение КАК ЗаказНаПеремещение,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.КодСтроки КАК КодСтроки,
| СУММА(ТаблицаЗаказы.КОформлению) КАК КОформлениюОстаток
|ПОМЕСТИТЬ ЗаказыНаПеремещениеБезНазначений
|ИЗ
| (ВЫБРАТЬ
| Заказы.ЗаказНаПеремещение КАК ЗаказНаПеремещение,
| Заказы.Номенклатура КАК Номенклатура,
| Заказы.Характеристика КАК Характеристика,
| Заказы.КодСтроки КАК КодСтроки,
| Заказы.КОформлениюОстаток КАК КОформлению
| ИЗ
| РегистрНакопления.ЗаказыНаПеремещение.Остатки(,
| ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА ЗаказНаПеремещение = &Заказ
| ИНАЧЕ
| ЗаказНаПеремещение.Организация = &Организация
| И ЗаказНаПеремещение.СкладОтправитель = &СкладОтправитель
| И ЗаказНаПеремещение.СкладПолучатель = &СкладПолучатель
| И ЗаказНаПеремещение.ВариантПриемкиТоваров = &ВариантПриемкиТоваров
| КОНЕЦ
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
| ИЗ
| Товары КАК Товары)) КАК Заказы
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| Заказы.ЗаказНаПеремещение,
| Заказы.Номенклатура,
| Заказы.Характеристика,
| Заказы.КодСтроки,
| ВЫБОР
| КОГДА Заказы.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -Заказы.КОформлению
| ИНАЧЕ Заказы.КОформлению
| КОНЕЦ
| ИЗ
| РегистрНакопления.ЗаказыНаПеремещение КАК Заказы
| ГДЕ
| Заказы.Регистратор = &Регистратор
| И ВЫБОР
| КОГДА &ОтобратьПоЗаказу
| ТОГДА ЗаказНаПеремещение = &Заказ
| ИНАЧЕ
| ЗаказНаПеремещение.Организация = &Организация
| И ЗаказНаПеремещение.СкладОтправитель = &СкладОтправитель
| И ЗаказНаПеремещение.СкладПолучатель = &СкладПолучатель
| И ЗаказНаПеремещение.ВариантПриемкиТоваров = &ВариантПриемкиТоваров
| КОНЕЦ
| И Заказы.Активность
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
| ИЗ
| Товары КАК Товары)
| ) КАК ТаблицаЗаказы
|
|СГРУППИРОВАТЬ ПО
| ТаблицаЗаказы.Номенклатура,
| ТаблицаЗаказы.Характеристика,
| ТаблицаЗаказы.КодСтроки,
| ТаблицаЗаказы.ЗаказНаПеремещение
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаЗаказы.КОформлению) > 0
|;
|
|
|ВЫБРАТЬ
| ТаблицаЗаказы.ЗаказНаПеремещение.Сделка КАК Сделка,
| ТаблицаЗаказы.ЗаказНаПеремещение КАК ЗаказНаПеремещение,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.КодСтроки КАК КодСтроки,
| ТаблицаТовары.НачалоОтгрузки КАК НачалоОтгрузки,
| ТаблицаТовары.НомерСтроки КАК НомерСтроки,
| ТаблицаЗаказы.КОформлениюОстаток КАК КОформлениюОстаток,
| ВЫБОР КОГДА ТаблицаТовары.Обособленно ТОГДА
|
| ВЫБОР КОГДА ТаблицаТовары.Назначение = ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| ИЛИ (ТаблицаТовары.Ссылка.ОбосабливатьПоНазначениюЗаказа
| И ТаблицаТовары.Назначение.ТипНазначения = ЗНАЧЕНИЕ(Перечисление.ТипыНазначений.Собственное)) ТОГДА
| ТаблицаТовары.Ссылка.Назначение
| ИНАЧЕ
| ТаблицаТовары.Назначение
| КОНЕЦ
| ИНАЧЕ
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
| КОНЕЦ КАК НазначениеОтправителя,
| ТаблицаТовары.Назначение КАК Назначение
|ПОМЕСТИТЬ ЗаказыНаПеремещение
|ИЗ
| ЗаказыНаПеремещениеБезНазначений КАК ТаблицаЗаказы
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПеремещение.Товары КАК ТаблицаТовары
| ПО ТаблицаТовары.Ссылка = ТаблицаЗаказы.ЗаказНаПеремещение
| И ТаблицаТовары.КодСтроки = ТаблицаЗаказы.КодСтроки
|;
|
|
|ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоДублей,
| ЗаказыНаПеремещение.Номенклатура КАК Номенклатура,
| ЗаказыНаПеремещение.Характеристика КАК Характеристика,
| ЗаказыНаПеремещение.НазначениеОтправителя КАК НазначениеОтправителя,
| ЗаказыНаПеремещение.Назначение КАК Назначение
|ПОМЕСТИТЬ ДублиТоваров
|ИЗ
| ЗаказыНаПеремещение КАК ЗаказыНаПеремещение
|
|СГРУППИРОВАТЬ ПО
| ЗаказыНаПеремещение.Номенклатура,
| ЗаказыНаПеремещение.Характеристика,
| ЗаказыНаПеремещение.НазначениеОтправителя,
| ЗаказыНаПеремещение.Назначение
|;
|
|
|ВЫБРАТЬ
| Заказы.Сделка КАК Сделка,
| Заказы.ЗаказНаПеремещение КАК ЗаказНаПеремещение,
| Заказы.Номенклатура КАК Номенклатура,
| Заказы.Характеристика КАК Характеристика,
| Заказы.КодСтроки КАК КодСтроки,
| Заказы.НазначениеОтправителя КАК НазначениеОтправителя,
| Заказы.Назначение КАК Назначение,
| Заказы.КОформлениюОстаток КАК КОформлениюОстаток,
| 0 КАК Распределено,
| ДублиТоваров.КоличествоДублей КАК КоличествоДублей
|ИЗ
| ЗаказыНаПеремещение КАК Заказы
| ЛЕВОЕ СОЕДИНЕНИЕ ДублиТоваров КАК ДублиТоваров
| ПО Заказы.Номенклатура = ДублиТоваров.Номенклатура
| И Заказы.Характеристика = ДублиТоваров.Характеристика
| И Заказы.НазначениеОтправителя = ДублиТоваров.НазначениеОтправителя
| И Заказы.Назначение = ДублиТоваров.Назначение
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Назначение,
| НазначениеОтправителя,
| НачалоОтгрузки,
| ЗаказНаПеремещение,
| НомерСтроки");
Запрос.УстановитьПараметр("Заказ", Объект.ЗаказНаПеремещение);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Запрос.УстановитьПараметр("СкладОтправитель", Объект.СкладОтправитель);
Запрос.УстановитьПараметр("СкладПолучатель", Объект.СкладПолучатель);
Запрос.УстановитьПараметр("Регистратор", Объект.Ссылка);
Запрос.УстановитьПараметр("ОтобратьПоЗаказу", ОтобратьПоЗаказу);
Запрос.УстановитьПараметр("ВариантПриемкиТоваров", Объект.ВариантПриемкиТоваров);
Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить(,"КодСтроки,Номенклатура,Характеристика,ЗаказНаПеремещение"));
РезультатЗапроса = Запрос.ВыполнитьПакет();
Если РезультатЗапроса[1].Пустой() Тогда
Возврат Ложь;
КонецЕсли;
Выборка = РезультатЗапроса[4].Выбрать();
ТаблицаНераспределенныхТоваров = Новый ТаблицаЗначений();
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Номенклатура");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Характеристика");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("ЗаказНаПеремещение");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Назначение");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("НазначениеОтправителя");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("КодСтроки");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Количество");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Сделка");
Пока Выборка.Следующий() Цикл
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("Номенклатура", Выборка.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", Выборка.Характеристика);
СтруктураПоиска.Вставить("НазначениеОтправителя", Выборка.НазначениеОтправителя);
СтруктураПоиска.Вставить("Назначение", Выборка.Назначение);
СтруктураПоиска.Вставить("КодСтроки", 0);
НайденныеСтроки = Объект.Товары.НайтиСтроки(СтруктураПоиска);
НераспределенноеКоличество = Выборка.КОформлениюОстаток;
Если Выборка.КоличествоДублей < 2 Тогда
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Количество > НераспределенноеКоличество Тогда
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
НоваяСтрока.Количество = ТекСтрока.Количество - НераспределенноеКоличество;
ТекСтрока.Количество = НераспределенноеКоличество;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТекСтрока, Выборка, "КодСтроки,ЗаказНаПеремещение,Назначение,НазначениеОтправителя,Сделка");
НераспределенноеКоличество = НераспределенноеКоличество - ТекСтрока.Количество;
Если НераспределенноеКоличество <= 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
НайденаПодходящаяСтрока = Ложь;
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Количество = Выборка.КОформлениюОстаток Тогда
НайденаПодходящаяСтрока = Истина;
ЗаполнитьЗначенияСвойств(ТекСтрока, Выборка, "КодСтроки,ЗаказНаПеремещение,Назначение,НазначениеОтправителя,Сделка");
Прервать;
КонецЕсли;
КонецЦикла;
Если Не НайденаПодходящаяСтрока Тогда
НоваяСтрока = ТаблицаНераспределенныхТоваров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.Количество = НераспределенноеКоличество;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТаблицаНераспределенныхТоваров.Количество() > 0 Тогда
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("КодСтроки", 0);
СтруктураПоиска.Вставить("ЗаказНаПеремещение", Документы.ЗаказНаПеремещение.ПустаяСсылка());
СтрокиТовары = Объект.Товары.НайтиСтроки(СтруктураПоиска);
ВсегоСтрокДляОбработки = СтрокиТовары.Количество();
Индекс = 0;
Пока Индекс < ВсегоСтрокДляОбработки Цикл
СтрокаТовары = СтрокиТовары[Индекс];
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("Номенклатура", СтрокаТовары.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", СтрокаТовары.Характеристика);
СтруктураПоиска.Вставить("НазначениеОтправителя", СтрокаТовары.НазначениеОтправителя);
СтруктураПоиска.Вставить("Назначение", СтрокаТовары.Назначение);
НайденныеСтроки = ТаблицаНераспределенныхТоваров.НайтиСтроки(СтруктураПоиска);
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Номенклатура = СтрокаТовары.Номенклатура
И ТекСтрока.Характеристика = СтрокаТовары.Характеристика
И ТекСтрока.Количество > 0 Тогда
КоличествоЗаполнить = Мин(ТекСтрока.Количество, СтрокаТовары.Количество);
Если КоличествоЗаполнить < СтрокаТовары.Количество Тогда
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовары);
НоваяСтрока.Количество = СтрокаТовары.Количество - КоличествоЗаполнить;
СтрокиТовары.Добавить(НоваяСтрока);
ВсегоСтрокДляОбработки = ВсегоСтрокДляОбработки + 1;
КонецЕсли;
СтрокаТовары.Количество = КоличествоЗаполнить;
ЗаполнитьЗначенияСвойств(СтрокаТовары, ТекСтрока, "КодСтроки,ЗаказНаПеремещение,Назначение,НазначениеОтправителя,Сделка");
ТекСтрока.Количество = ТекСтрока.Количество - СтрокаТовары.Количество;
Прервать;
КонецЕсли;
КонецЦикла;
Индекс = Индекс + 1;
КонецЦикла;
КонецЕсли;
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.КодСтроки) Или Не ЗначениеЗаполнено(ТекСтрока.ЗаказНаПеремещение) Тогда
ТекСтрока.КодСтроки = 0;
ТекСтрока.ЗаказНаПеремещение = Объект.ЗаказНаПеремещение;
КонецЕсли;
КонецЦикла;
ТаблицаТоваров = Объект.Товары.Выгрузить();
ТаблицаТоваров.Свернуть("НоменклатураНабора,ХарактеристикаНабора,Номенклатура,Характеристика,Упаковка,КодСтроки,СтатусУказанияСерий,
|ЗаказНаПеремещение,Сделка,Назначение,НазначениеОтправителя,Серия,ИдентификаторСтроки",
"Количество");
Объект.Товары.Загрузить(ТаблицаТоваров);
Возврат Истина;
КонецФункции
&НаСервере
Процедура ПерезаполнитьПоОрдерам(МассивЗаказов)
МассивЗаказов.Добавить(Объект.Ссылка);
ПараметрыЗаполнения = Документы.ПеремещениеТоваров.ПараметрыЗаполненияДокумента();
ПараметрыЗаполнения.ФормаОткрыта = Истина;
ПараметрыЗаполнения.ЗаполнятьПоОрдеру = Истина;
РеквизитыШапки = Новый Структура("Организация, СкладОтправитель, СкладПолучатель, Подразделение,
|ХозяйственнаяОперация, ВариантПриемкиТоваров, Ссылка");
ЗаполнитьЗначенияСвойств(РеквизитыШапки, Объект);
Документы.ПеремещениеТоваров.ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения, РеквизитыШапки, МассивЗаказов);
ТаблицаНакладная = Документы.ПеремещениеТоваров.ДанныеТаблицыТоварыДокумента(Объект.Ссылка);
Документы.ПеремещениеТоваров.ЗаполнитьПоЗаказамОрдерам(ТаблицаНакладная, Объект.Ссылка, ПараметрыЗаполнения, Объект.ШтрихкодыУпаковок);
КоличествоИндексов = ТаблицаНакладная.Количество() - 1;
Для Индекс = 0 По КоличествоИндексов Цикл
Строка = ТаблицаНакладная[КоличествоИндексов - Индекс];
Если МассивЗаказов.Найти(Строка.ЗаказНаПеремещение) = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Строка.КоличествоВОрдере = 0 Тогда
ТаблицаНакладная.Удалить(Строка);
Иначе
Строка.Количество = Строка.КоличествоВОрдере;
КонецЕсли;
КонецЦикла;
Объект.Товары.Загрузить(ТаблицаНакладная);
Документы.ПеремещениеТоваров.ОбновитьЗависимыеРеквизитыТабличнойЧасти(Объект.Товары, ПараметрыЗаполнения);
ОбновитьНазначениеОтправителяВТаблицеТовары();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
ОбновитьИнформациюПоЗаказам();
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОРезультатахЗаполнения()
Если РезультатыЗаполнения <> Неопределено Тогда
Если РезультатыЗаполнения.ЕстьНесобранные Тогда
ПоказатьОповещениеПользователя(
НСтр("ru = 'Количество перезаполнено'"),,
НСтр("ru='В строках перезаполнено количество с учетом собирающихся на складе товаров.'"),
БиблиотекаКартинок.Информация32);
Иначе
ПоказатьОповещениеПользователя(
НСтр("ru = 'Количество перезаполнено'"),,
НСтр("ru='В строках перезаполнено количество.'"),
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
Закрыть();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПроверитьВыполнениеЗаданияИС()
СоответствиеТребованиямГИСМТКлиент.ПроверитьВыполнениеЗадания(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПоНоменклатуре()
Для Каждого СтрокаТовар Из Объект.Товары Цикл
ОбновитьОтклоненияОтЗаказаВСтроке(СтрокаТовар, Объект.ПеремещениеПоЗаказам);
КонецЦикла;
ПараметрыЗаполненияРеквизитов = Новый Структура;
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются",
Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакАртикул",
Новый Структура("Номенклатура", "Артикул"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры",
Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(
ЭтотОбъект, "Номенклатура", ПараметрыЗаполненияРеквизитов);
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары,ПараметрыЗаполненияРеквизитов);
НаборыСервер.ЗаполнитьСлужебныеРеквизиты(ЭтаФорма);
КонецПроцедуры
&НаСервере
Функция ПоместитьТоварыИВидыЗапасовВХранилище()
ПараметрыРедактированияВидовЗапасов = ЗапасыСервер.ПараметрыРедактированияВидовЗапасов();
ПараметрыРедактированияВидовЗапасов.Склад = Объект.СкладОтправитель;
Если ПолучитьФункциональнуюОпцию("ИспользоватьПодакцизныеТовары") Тогда
ПараметрыРедактированияВидовЗапасов.ИспользоватьПодакцизныеТовары = Истина;
КонецЕсли;
Возврат ЗапасыСервер.ПоместитьТоварыИВидыЗапасовВХранилище(ЭтотОбъект, ПараметрыРедактированияВидовЗапасов);
КонецФункции
&НаСервере
Процедура ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение)
ЗапасыСервер.ОбработатьВводВидовЗапасовВручную(ВыбранноеЗначение, ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура НастроитьКомандуПодобратьПоЗаказамОрдерам(УстанавливатьДоступность = Истина)
СтруктураПараметров = Новый Структура("ОрдернаяСхемаПриОтгрузке, ИспользоватьЗаказы, ИспользоватьНакладныеПоНесколькимЗаказам",
ОрдернаяСхемаПриОтгрузке, ИспользоватьЗаказыНаПеремещение, ИспользоватьПеремещениеПоНесколькимЗаказам);
НакладныеСервер.НастроитьКомандуПодобратьПоЗаказамОрдерам(
Элементы.ТоварыПодобратьТоварыПоЗаказамОрдерам, СтруктураПараметров, УстанавливатьДоступность);
Если Объект.Исправление Тогда
Элементы.ТоварыПодобратьТоварыПоЗаказамОрдерам.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьИнформациюПоЗаказам()
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы);
ПараметрыОбновления = ЗаказыСервер.ПараметрыОбновленияИнформацииПоЗаказамВФорме();
ПараметрыОбновления.ИмяРеквизитаСписокЗаказов = "СписокЗаказов";
ПараметрыОбновления.ПутьЗаказаВШапке = "Объект.ЗаказНаПеремещение";
ПараметрыОбновления.ИмяНадписиЗаголовка = "НадписьЗаголовокЗаказы";
ПараметрыОбновления.ИмяГруппыКолонокВТабличнойЧасти = "ТоварыГруппаЗаказНаПеремещение";
ПараметрыОбновления.ИмяЗаказаВТабличнойЧасти = "ЗаказНаПеремещение";
ПараметрыОбновления.ИспользоватьЗаказыВТабличнойЧасти = ИспользоватьПеремещениеПоНесколькимЗаказам;
ЗаказыСервер.ОбновитьИнформациюПоЗаказамВФорме(ЭтаФорма, Объект.Товары, ПараметрыОбновления);
КонецПроцедуры
&НаСервере
Процедура УдалитьСтрокиСверхЗаказа(Таблица)
НомерТекущейСтроки = Таблица.Количество() - 1;
Пока НомерТекущейСтроки >= 0 Цикл
Если ЗначениеЗаполнено(Таблица[НомерТекущейСтроки].ЗаказНаПеремещение)
И Не ЗначениеЗаполнено(Таблица[НомерТекущейСтроки].КодСтроки) Тогда
Таблица.Удалить(НомерТекущейСтроки);
КонецЕсли;
НомерТекущейСтроки = НомерТекущейСтроки - 1;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий)
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОПроведенииДокумента(ПараметрыЗаписи)
ПараметрОбработкиОповещения = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ПараметрыЗаписи);
Если ТипЗнч(ВладелецФормы) = Тип("ФормаКлиентскогоПриложения") Тогда
ИдентификаторФормыВладельца = ВладелецФормы.УникальныйИдентификатор;
Иначе
ИдентификаторФормыВладельца = Неопределено;
КонецЕсли;
ПараметрОбработкиОповещения.Вставить("ИдентификаторФормыВладельца", ИдентификаторФормыВладельца);
ПараметрОбработкиОповещения.Вставить("КлючиДокументаОповещение", РаботаСЖурналамиДокументовКлиент.ПолучитьПараметрыКлючаПоДокументу(
Объект.Ссылка, Объект.Дата, Объект.ХозяйственнаяОперация));
Оповестить("Запись_ПеремещениеТоваров", ПараметрОбработкиОповещения, Объект.Ссылка);
КонецПроцедуры
&НаСервере
Процедура ОчиститьТабличнуюЧастьТоварыПриИзмененииСклада(ОтвязатьВсеСтрокиОтЗаказа, ОчищатьСтроки, КэшированныеЗначения)
Если Объект.ПеремещениеПоЗаказам И Объект.Товары.Количество() > 0 И ОчищатьСтроки Тогда
Объект.Товары.Очистить();
КонецЕсли;
Если ОтвязатьВсеСтрокиОтЗаказа Тогда
ОтвязатьОтЗаказаСервер(КэшированныеЗначения);
КонецЕсли;
Если ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
ОбновитьИнформациюПоЗаказам();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокВыбораОпераций()
Если Не ПолучитьФункциональнуюОпциюФормы("ИспользоватьОбособленныеПодразделенияВыделенныеНаБаланс") Тогда
ЭлементСписка = Элементы.ХозяйственнаяОперация.СписокВыбора.НайтиПоЗначению(Перечисления.ХозяйственныеОперации.ПеремещениеТоваровМеждуФилиалами);
Если ЭлементСписка <> Неопределено Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Удалить(ЭлементСписка);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(АдресТарыВХранилище)
СтруктураДействийИзмененныеСтроки = Новый Структура;
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьКоличествоУпаковок");
МногооборотнаяТараСервер.ЗаполнитьМногооборотнуюТаруИзХранилища(
Объект,
АдресТарыВХранилище,
"Товары",
"Номенклатура,Характеристика",
СтруктураДействийИзмененныеСтроки,
СтруктураДействийИзмененныеСтроки);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
КонецПроцедуры
&НаСервере
Процедура ОбновитьНазначениеОтправителяВТаблицеТовары()
Для Каждого СтрокаТовары Из Объект.Товары Цикл
Если Не Объект.ПеремещениеПоЗаказам Или СтрокаТовары.КодСтроки = 0 Тогда
СтрокаТовары.НазначениеОтправителя = СтрокаТовары.Назначение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьНазначениеОтправителя()
СтрокаТовары = Элементы.Товары.ТекущиеДанные;
Если Не Объект.ПеремещениеПоЗаказам Или СтрокаТовары.КодСтроки = 0 Тогда
СтрокаТовары.НазначениеОтправителя = СтрокаТовары.Назначение;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Доставка
&НаСервере
Процедура СпособМестоДоставкиПеревозчикПриИзмененииСервер(ЭлементИмя)
ОбновитьТекстДокументыНаОсновании();
ДоставкаТоваров.ЗаполнитьРеквизитыДоставки(Элементы, ЭлементИмя, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьИзменениеАдреса(Элемент, ИмяРеквизитаАдреса)
ИменаРеквизитов = ДоставкаТоваровКлиентСервер.ИменаРеквизитовАдресовДоставки(ИмяРеквизитаАдреса);
Если ПустаяСтрока(Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставки]) Тогда
ДоставкаТоваровКлиент.ОчиститьПредставлениеАдреса(
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставки],
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставкиЗначенияПолей],
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставкиЗначение]);
Иначе
ДоставкаТоваровКлиент.ПриИзмененииПредставленияАдреса(
Элемент,
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставки],
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставкиЗначение]);
АдресДоставкиПриИзмененииНаСервере(
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставки],
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставкиЗначение],
Объект[ИменаРеквизитов.ИмяРеквизитаАдресаДоставкиЗначенияПолей]);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура АдресДоставкиПриИзмененииНаСервере(Адрес, АдресЗначение, АдресЗначенияПолей)
АдресВСвободнойФорме = УправлениеКонтактнойИнформацией.АдресВведенВСвободнойФорме(АдресЗначение);
Если НЕ АдресВСвободнойФорме Тогда
ДанныеСтраны = УправлениеКонтактнойИнформацией.СтранаАдресаКонтактнойИнформации(АдресЗначение);
НоваяСтруктураАдреса = УправлениеКонтактнойИнформацией.СведенияОбАдресе();
НоваяСтруктураАдреса.Представление = Адрес;
НоваяСтруктураАдреса.Страна = ДанныеСтраны.Наименование;
НоваяСтруктураАдреса.КодСтраны = ДанныеСтраны.Код;
АдресЗначение = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВJSON(
НоваяСтруктураАдреса,
Перечисления.ТипыКонтактнойИнформации.Адрес);
УстановитьТипАдресаВСвободнойФорме(АдресЗначение);
КонецЕсли;
АдресЗначенияПолей = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияВXML(
АдресЗначение,
Адрес,
Перечисления.ТипыКонтактнойИнформации.Адрес);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура УстановитьТипАдресаВСвободнойФорме(АдресДоставкиЗначение)
СтрокаЗаменяемыйТип = """addressType"": ""Административно-территориальный""";
СтрокаСвободныйТип = """addressType"": ""ВСвободнойФорме""";
АдресДоставкиЗначение = СтрЗаменить(АдресДоставкиЗначение, СтрокаЗаменяемыйТип, СтрокаСвободныйТип);
КонецПроцедуры
#КонецОбласти
#Область РаботаСБуферомОбмена
&НаСервере
Процедура СкопироватьСтрокиНаСервере()
РаботаСТабличнымиЧастями.СкопироватьСтрокиВБуферОбмена(Объект.Товары, Элементы.Товары.ВыделенныеСтроки);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбмена()
ПараметрыОтбора = Новый Соответствие;
ПараметрыОтбора.Вставить("Номенклатура.ТипНоменклатуры", НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре(Ложь));
Колонки = "Номенклатура,Характеристика,Упаковка,КоличествоУпаковок,НоменклатураНабора,ХарактеристикаНабора,Назначение";
ТаблицаТоваров = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, Колонки);
Если Не ЗначениеЗаполнено(ТаблицаТоваров) Тогда
Возврат;
КонецЕсли;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
ОбрабатываемыеСтроки = Новый Массив();
Для Каждого СтрокаТовара Из ТаблицаТоваров Цикл
ТекущаяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара);
ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, Объект.ПеремещениеПоЗаказам);
ТекущаяСтрока.ЗаказНаПеремещение = ЗаказВСтрокеСверхЗаказа(Объект.ПеремещениеПоЗаказам, Объект.ЗаказНаПеремещение);
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары,
КэшированныеЗначения);
ОбновитьНазначениеОтправителяВТаблицеТовары();
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий);
МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьКомандБуфераОбмена()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("ТоварыВставитьСтроки");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
РаботаСТабличнымиЧастями.ЕстьСтрокиВБуфереОбмена());
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКомандБуфераОбменаНаКлиенте()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("ТоварыВставитьСтроки");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность", Истина);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьУстановитьВидимостьСерийДоступностьПерезаполнитьПоОтгрузке()
НастроитьКомандуПодобратьПоЗаказамОрдерам();
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ПеремещениеТоваров));
Элементы.ГруппаИнформацияНеобходимыСтатусы.Видимость = ВыводитьСообщениеПоИспользованиюСтатусов();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
УстановитьВидимостьЭлементовСерий();
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЭтоРаспоряжениеНакладная(Ссылка, ОрдернаяСхемаПриОтгрузке)
Возврат ОрдернаяСхемаПриОтгрузке И НакладныеСервер.ЕстьРасходныйОрдерДляЗаказовНаОтгрузку(Ссылка);
КонецФункции
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ОсобыеУсловияПеревозкиПриИзменении(Элемент)
ОсобыеУсловияПеревозкиПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьИнформациюПоДоставкеКонтактами(Команда)
ДополнитьИнформациюПоДоставкеКонтактамиСервер();
КонецПроцедуры
&НаСервере
Процедура ОсобыеУсловияПеревозкиПриИзмененииСервер()
ДоставкаТоваров.ОсобыеУсловияПеревозкиПриИзменении(Элементы, Объект);
КонецПроцедуры
&НаСервере
Процедура ДополнитьИнформациюПоДоставкеКонтактамиСервер()
ДоставкаТоваров.ДополнитьИнформациюПоДоставкеКонтактами(Объект);
КонецПроцедуры
&НаКлиенте
Процедура ПеремещениеПоЗаказуПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ОтветНаВопрос = РезультатВопроса;
Если ОтветНаВопрос = КодВозвратаДиалога.Нет Тогда
Объект.ПеремещениеПоЗаказам = Не Объект.ПеремещениеПоЗаказам;
Возврат;
КонецЕсли;
ПриИзмененииПеремещенияПоНесколькимЗаказам(КэшированныеЗначения);
Если Не Объект.ПеремещениеПоЗаказам
И Объект.Товары.Количество() > 0 Тогда
ОповеститьОбОтвязкеСтрокОтЗаказов();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзмененииВопросПользователюЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = ДополнительныеПараметры.ТекущаяСтрока;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу" , ТекущаяСтрока.Упаковка);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПараметрыПроверкиСерий = Новый Структура("Склад, ПараметрыУказанияСерий");
ПараметрыПроверкиСерий.Склад = Новый Структура("Отправитель, Получатель", Объект.СкладОтправитель, Объект.СкладПолучатель);
ПараметрыПроверкиСерий.ПараметрыУказанияСерий = ПараметрыУказанияСерий;
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", ПараметрыПроверкиСерий);
СтруктураДействий.Вставить("ПроверитьЗаполнитьНазначение");
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Товары"));
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(
ЭтотОбъект, "Номенклатура", СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыХарактеристикаПриИзмененииВопросПользователюЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = ДополнительныеПараметры.ТекущаяСтрока;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ХарактеристикаПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Товары"));
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ПеремещениеПоЗаказуУстановленоЗаказВыбранЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Нет Тогда
Объект.ПеремещениеПоЗаказам = Не Объект.ПеремещениеПоЗаказам;
Возврат;
КонецЕсли;
ЗаказНаПеремещение = ДополнительныеПараметры.ЗаказНаПеремещение;
Объект.ЗаказНаПеремещение = ЗаказНаПеремещение;
ЕстьСтрокиДоЗаполнения = Объект.Товары.Количество() > 0;
ПриИзмененииПеремещенияПоНесколькимЗаказам(КэшированныеЗначения);
Если ЕстьСтрокиДоЗаполнения Тогда
ОповеститьОПривязкеСтрокКЗаказам(ЗаказНаПеремещение);
Иначе
ОповеститьОЗаполненииПоОстаткамЗаказов(ЗаказНаПеремещение);
Объект.ПеремещениеПоЗаказам = Объект.Товары.Количество() > 0;
КонецЕсли;
УстановитьВидимостьЭлементовСверхЗаказа(Элементы, Объект.ПеремещениеПоЗаказам);
КонецПроцедуры
&НаСервере
Процедура ОтвязатьОтЗаказаСервер(КэшированныеЗначения, ВсеСтроки = Истина)
Если ВсеСтроки Тогда
КоллекцияСтрок = Объект.Товары;
Иначе
КоллекцияСтрок = Элементы.Товары.ВыделенныеСтроки;
КонецЕсли;
Для Каждого ИдентификаторСтроки Из КоллекцияСтрок Цикл
Если ВсеСтроки Тогда
СтрокаТаблицы = ИдентификаторСтроки;
ИдентификаторСтроки = СтрокаТаблицы.ПолучитьИдентификатор();
Иначе
СтрокаТаблицы = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
КонецЕсли;
НоменклатураКлиентСервер.ОбновитьКешированныеЗначенияДляУчетаСерий(СтрокаТаблицы, КэшированныеЗначения, ПараметрыУказанияСерий);
СтрокаТаблицы.КодСтроки = 0;
СтрокаТаблицы.РасхождениеЗаказ = 1;
СтрокаТаблицы.Сделка = Справочники.СделкиСКлиентами.ПустаяСсылка();
СтрокаТаблицы.НазначениеОтправителя = СтрокаТаблицы.Назначение;
СтрокаТаблицы.ЗаказНаПеремещение = ЗаказВСтрокеСверхЗаказа(Объект.ПеремещениеПоЗаказам, Объект.ЗаказНаПеремещение);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Объект,ПараметрыУказанияСерий,ИдентификаторСтроки, КэшированныеЗначения);
КонецЦикла;
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЗаказВСтрокеСверхЗаказа(ПеремещениеПоЗаказам, ЗаказНаПеремещение)
Возврат ?(ПеремещениеПоЗаказам И ЗначениеЗаполнено(ЗаказНаПеремещение), ЗаказНаПеремещение, Неопределено);
КонецФункции
&НаСервере
Процедура ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу()
Если Объект.Товары.Количество() = 0
ИЛИ НЕ Объект.ПеремещениеПоЗаказам
ИЛИ НЕ ИспользоватьЗаказыНаПеремещение Тогда
Элементы.КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
Элементы.КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
НадписьРасхождениеЗаказ = "";
Если Объект.Товары.Количество() > 0 Тогда
Для каждого СтрокаТовары Из Объект.Товары Цикл
СтрокаТовары.РасхождениеЗаказ = 0;
КонецЦикла;
КонецЕсли;
КоличествоРасхождений = 0;
Возврат;
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЗависимыеРеквизитыФормыПоЗаказу(Товары, НадписьРасхождениеЗаказ, ЭлементыФормы)
КоличествоРасхождений = Товары.Итог("РасхождениеЗаказ");
Если КоличествоРасхождений > 0 Тогда
ЭлементыФормы.КартинкаРасхождениеЗаказ.Картинка = БиблиотекаКартинок.ПревышениеЗаказа;
ЭлементыФормы.КартинкаРасхождениеЗаказы.Картинка = БиблиотекаКартинок.ПревышениеЗаказа;
НадписьРасхождениеЗаказ = СтрЗаменить(НСтр("ru='Строк сверх заказа'") + НСтр("ru=': %КоличествоРасхождений%'"), "%КоличествоРасхождений%", КоличествоРасхождений);
Иначе
ЭлементыФормы.КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
ЭлементыФормы.КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
НадписьРасхождениеЗаказ = "";
КоличествоРасхождений = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура УстановитьВидимостьЭлементовСверхЗаказа(Элементы, ПеремещениеПоЗаказам)
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ТоварыОтвязатьОтЗаказа");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюОтвязатьОтЗаказа");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Видимость", ПеремещениеПоЗаказам);
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОбОкончанииОтвязкиСтрок(КоличествоОтработанныхСтрок, СтрокиОтвязаны = Истина)
Если СтрокиОтвязаны Тогда
ТекстОповещения = НСтр("ru='В документе от заказов отвязано строк (%%Количество%%).'");
ТекстОповещения = СтрЗаменить(ТекстОповещения, "%%Количество%%", КоличествоОтработанныхСтрок);
ПоказатьОповещениеПользователя(
НСтр("ru = 'Строки отвязаны'"),
,
ТекстОповещения,
БиблиотекаКартинок.Информация32);
Иначе
ПоказатьОповещениеПользователя(
НСтр("ru = 'Строки не отвязаны'"),
,
НСтр("ru='Ни одна строка не была отвязана.'"),
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьОтклоненияОтЗаказа()
Для Каждого ТекСтрока Из Объект.Товары Цикл
ОбновитьОтклоненияОтЗаказаВСтроке(ТекСтрока, Объект.ПеремещениеПоЗаказам);
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, ПеремещениеПоЗаказам)
Если ПеремещениеПоЗаказам Тогда
Если ТекущаяСтрока.КодСтроки = 0 Тогда
ТекущаяСтрока.РасхождениеЗаказ = 1;
Иначе
ТекущаяСтрока.РасхождениеЗаказ = 0;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВопросПользователюПриИзмененииРеквизитаСтроки(ОписаниеОповещения, ТекущаяСтрока)
Если ТекущаяСтрока.КодСтроки = 0 Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина);
Возврат;
КонецЕсли;
Если ТекущаяСтрока.Номенклатура = ПредыдущиеРеквизитыСтроки.Номенклатура
И ТекущаяСтрока.Характеристика = ПредыдущиеРеквизитыСтроки.Характеристика Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина);
Возврат;
КонецЕсли;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ТекущаяСтрока", ТекущаяСтрока);
ДополнительныеПараметры.Вставить("ОписаниеОповещения", ОписаниеОповещения);
ТекстВопроса = НСтр("ru='Редактируемая строка перестанет быть связанной со строкой заказа. Продолжить?'");
ПоказатьВопрос(
Новый ОписаниеОповещения("ВопросПользователюПриИзмененииРеквизитаСтрокиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекстВопроса,
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ВопросПользователюПриИзмененииРеквизитаСтрокиВопросЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
ДополнительныеПараметры.ТекущаяСтрока.КодСтроки = 0;
ОбновитьОтклоненияОтЗаказаВСтроке(ДополнительныеПараметры.ТекущаяСтрока, Объект.ПеремещениеПоЗаказам);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, Истина);
Иначе
ЗаполнитьЗначенияСвойств(ДополнительныеПараметры.ТекущаяСтрока, ПредыдущиеРеквизитыСтроки);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, Ложь);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоЗаказуСервер()
Объект.Товары.Очистить();
МассивЗаказов = Новый Массив();
Если Не ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
МассивЗаказов.Добавить(Объект.ЗаказНаПеремещение);
КонецЕсли;
РеквизитыШапки = Новый Структура("Организация, Подразделение, СкладОтправитель, СкладПолучатель, Ссылка");
ЗаполнитьЗначенияСвойств(РеквизитыШапки, Объект);
ДанныеОтбора = Новый Структура("МассивЗаказов, РеквизитыШапки", МассивЗаказов, РеквизитыШапки);
ПорядокОформления = Константы.ПорядокОформленияНакладныхРасходныхОрдеров.Получить();
ПорядокСначалаОрдера = ПорядокОформления = Перечисления.ПорядокОформленияНакладныхРасходныхОрдеров.СначалаОрдера;
ДанныеОтбора.Вставить("ЗаполнятьПоОрдеру", ОрдернаяСхемаПриОтгрузке И ПорядокСначалаОрдера);
РезультатЗапроса = Документы.ПеремещениеТоваров.РезультатЗапросаПоОстаткамЗаказов(ДанныеОтбора, "ЗаполнениеПоЗаказам");
Если ДанныеОтбора.ЗаполнятьПоОрдеру Тогда
ПоляКлюча = "ЗаказНаПеремещение, Номенклатура, Характеристика, НоменклатураНабора, ХарактеристикаНабора, НазначениеОтправителя, Серия";
НакладныеСервер.ЗаполнитьПоказательКоличествоПоОрдерам(РезультатЗапроса.ТаблицаОформить, РезультатЗапроса.ТаблицаОтгружено, ПоляКлюча);
УдалитьСтрокиСверхЗаказа(РезультатЗапроса.ТаблицаОформить);
НакладныеСервер.ЗаполнитьПоВарианту(Объект.Товары, РезультатЗапроса.ТаблицаОформить, "ЗаполнятьПоОрдеру");
Иначе
НакладныеСервер.ЗаполнитьПоВарианту(Объект.Товары, РезультатЗапроса.ТаблицаОформить, "ЗаполнятьПоЗаказу");
КонецЕсли;
ОбновитьНазначениеОтправителяВТаблицеТовары();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьКомандПоЗаказу()
Элементы.ЗакрытьЗаказ.Видимость = Объект.ПеремещениеПоЗаказам;
Элементы.ЗакрытьЗаказы.Видимость = Объект.ПеремещениеПоЗаказам;
КонецПроцедуры
#КонецОбласти
#Область Наборы
&НаКлиентеНаСервереБезКонтекста
Функция КолонкиНабора(Форма)
Колонки = Новый Массив;
Колонки.Добавить("Номенклатура");
Колонки.Добавить("Характеристика");
Колонки.Добавить("Упаковка");
Колонки.Добавить("Количество");
Колонки.Добавить("КоличествоУпаковок");
Возврат Колонки;
КонецФункции
&НаКлиенте
Процедура ПриУдаленииКомплектующих(Действие, ДополнительныйПараметр) Экспорт
Если НаборыКлиент.ДействиеРедактироватьНабор(Действие) Тогда
НаборыКлиент.ПриУдаленииКомплектующих(ЭтаФорма, "Товары", ДополнительныйПараметр);
ИначеЕсли НаборыКлиент.ДействиеУдалитьВесьНабор(Действие) Тогда
ПриУдаленииКомплектующихНаСервере("Товары", ДополнительныйПараметр);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриУдаленииКомплектующихНаСервере(ИмяТЧ, ДополнительныйПараметр)
НаборыСервер.ПриУдаленииКомплектующих(ЭтаФорма, ИмяТЧ, ДополнительныйПараметр);
КонецПроцедуры
&НаСервере
Функция АдресНабораВоВременномХранилище(Параметры)
Возврат НаборыСервер.АдресНабораВоВременномХранилище(ЭтаФорма, Параметры, "Товары");
КонецФункции
&НаСервере
Процедура ПриОкончанииРедактированияНабора(АдресВоВременномХранилище)
СтруктураДействийСДобавленнымиСтроками = Новый Структура;
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(
ЭтотОбъект, "Номенклатура", СтруктураДействийСДобавленнымиСтроками);
ПараметрыДанных = Новый Структура;
ПараметрыДанных.Вставить("Данные", ПолучитьИзВременногоХранилища(АдресВоВременномХранилище));
ПараметрыДанных.Вставить("СтруктураДействийСИзмененнымиСтроками", Новый Структура);
ПараметрыДанных.Вставить("СтруктураДействийСДобавленнымиСтроками", СтруктураДействийСДобавленнымиСтроками);
ПараметрыДанных.Вставить("КолонкиНабора", КолонкиНабора(ЭтаФорма));
ПараметрыДанных.Вставить("СверхЗаказа", Истина);
НаборыСервер.ПриОкончанииРедактированияНабора(ЭтаФорма, "Товары", ПараметрыДанных);
ОбновитьОтклоненияОтЗаказа();
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
#КонецОбласти
&НаСервере
Процедура ОбновитьТекстДокументыНаОсновании()
ТекстыПоляДокументыНаОсновании.Очистить();
ОбновитьТекстДокументыНаОснованииЛокализация();
ОбщегоНазначенияУТКлиентСервер.ОбновитьТекстДокументыНаОсновании(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработатьЗаписьОбъекта()
ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);
КонецПроцедуры
#Область ЗагрузкаДанныхИзФайла
&НаКлиенте
Процедура ПоказатьФормуЗагрузкиИзФайла()
ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных();
ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = "ПеремещениеТоваров.Товары";
ПараметрыЗагрузки.Заголовок = НСтр("ru = 'Загрузка таблицы ""Товары"" из файла'");
ПараметрыЗагрузки.КолонкиМакета = ОписаниеКолонокМакетаДляЗагрузкиТоваров();
Оповещение = Новый ОписаниеОповещения("ПоказатьФормуЗагрузкиИзФайлаЗавершение", ЭтотОбъект);
ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьФормуЗагрузкиИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт
Если АдресЗагруженныхДанных = Неопределено Тогда
Возврат;
КонецЕсли;
ЗагрузитьИзФайлаНаСервере(АдресЗагруженныхДанных, ДополнительныеПараметры);
КонецПроцедуры
&НаКлиенте
Функция ОписаниеКолонокМакетаДляЗагрузкиТоваров();
КолонкиМакета = Новый Массив;
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Артикул", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)), НСтр("ru = 'Артикул'"), 10);
Колонка.Родитель = "Номенклатура";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КодНоменклатуры", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(11)), НСтр("ru = 'Код номенклатуры'"), 15);
Колонка.Родитель = "Номенклатура";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Номенклатура", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Номенклатура'"), 15);
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Характеристика", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Характеристика'"), 15);
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Назначение", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Назначение'"), 15);
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Серия", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(150)), НСтр("ru = 'Серия'"), 15);
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КодУпаковки", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(4)), НСтр("ru = 'Код упаковки'"), 12);
Колонка.Родитель = "Упаковка";
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Упаковка", Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(50)), НСтр("ru = 'Упаковка'"), 10);
КолонкиМакета.Добавить(Колонка);
Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("КоличествоУпаковок", Новый ОписаниеТипов("Число",, Новый КвалификаторыЧисла(15, 3)), НСтр("ru = 'Количество'"), 10);
КолонкиМакета.Добавить(Колонка);
Для Позиция = 1 По КолонкиМакета.Количество() Цикл
КолонкиМакета[Позиция-1].Позиция = Позиция;
КонецЦикла;
Возврат КолонкиМакета;
КонецФункции
&НаСервере
Процедура ЗагрузитьИзФайлаНаСервере(АдресЗагруженныхДанных, ДополнительныеПараметры)
ЗагруженныеДанные = ПолучитьИзВременногоХранилища(АдресЗагруженныхДанных);
Объект.Товары.Загрузить(ЗагруженныеДанные);
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, Неопределено);
Для Каждого СтрокаТовары Из Объект.Товары Цикл
Если ЗначениеЗаполнено(СтрокаТовары.ЗаказНаПеремещение) Тогда
Объект.ПеремещениеПоЗаказам = Истина;
Если Не ИспользоватьПеремещениеПоНесколькимЗаказам Тогда
Объект.ЗаказНаПеремещение = СтрокаТовары.ЗаказНаПеремещение;
КонецЕсли;
КонецЕсли;
СтрокаТовары.ИндексНабора = ?(ЗначениеЗаполнено(СтрокаТовары.НоменклатураНабора), 1, 0);
КонецЦикла;
ОбновитьНазначениеОтправителяВТаблицеТовары();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
ОбновитьИнформациюПоЗаказам();
ЗаполнитьСлужебныеРеквизитыПоНоменклатуре();
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
#КонецОбласти
#КонецОбласти
#Область Локализация
&НаКлиенте
Процедура ОбработкаОповещенияЛокализация(ИмяСобытия, Параметр, Источник)
Если ТранспортнаяНакладнаяКлиент.ЭтоОповещениеЗаписиТранспортнойНакладной(ЭтотОбъект, ИмяСобытия, Параметр, Источник) Тогда
ОбновитьТекстДокументыНаОсновании();
КонецЕсли;
Если ИмяСобытия = "Запись_ДокументыЭПД" Тогда
ОбновитьТекстЭПД();
КонецЕсли;
Возврат;
КонецПроцедуры
&НаСервере
Процедура ОбновитьТекстЭПД()
Если Элементы.ГруппаСостояниеЭПД.Видимость Тогда
КоличествоЭПД = ОбменСГИСЭПДПереопределяемый.КоличествоЭлектронныхДокументов(Объект.Ссылка);
Элементы.ДекорацияЭПД.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку("ЭПД (%1)", КоличествоЭПД);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьТекстДокументыНаОснованииЛокализация()
ТекстТТН = Документы.ТранспортнаяНакладная.ТекстТТН(ЭтотОбъект);
ТекстыПоляДокументыНаОсновании.Добавить(ТекстТТН);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура ТекстДокументыНаОснованииОбработкаНавигационнойСсылкиЛокализация(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ТранспортнаяНакладнаяКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
Возврат;
КонецПроцедуры
#КонецОбласти