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