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