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