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