#Область ОписаниеПеременных
&НаКлиенте
Перем КэшированныеЗначения;
&НаКлиенте
Перем ТекущиеДанныеИдентификатор;
&НаКлиенте
Перем ПредыдущиеРеквизитыСтроки;
&НаКлиенте
Перем ПараметрыДляЗаписи Экспорт;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Параметры.Свойство("АвтоТест") Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект);
ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект);
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина);
УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры);
ОбщегоНазначенияУТ.НастроитьПодключаемоеОборудование(ЭтаФорма);
Если ПолучитьФункциональнуюОпцию("ИспользоватьПроизводство")
И Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВПроизводство Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Добавить(Перечисления.ХозяйственныеОперации.ПередачаВПроизводство);
КонецЕсли;
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВПроизводство Тогда
ТолькоПросмотр = Истина;
КонецЕсли;
Если НЕ Объект.Исправление Тогда
Элементы.ХозяйственнаяОперация.СписокВыбора.Добавить(Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию);
КонецЕсли;
Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда
ПриЧтенииСозданииНаСервере();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
Элементы.КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
Элементы.КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
ИначеЕсли Параметры.ЗначенияЗаполнения.Свойство("ЗаполнятьПоОрдеру") Тогда
ПерезаполнитьПоОрдерам(Параметры.ЗначенияЗаполнения.МассивЗаказов);
Модифицированность = Истина;
КонецЕсли;
УстановитьУсловноеОформление();
Если Элементы.ХозяйственнаяОперация.СписокВыбора.Количество() = 1 Тогда
Элементы.ХозяйственнаяОперация.Видимость = Ложь;
КонецЕсли;
Элементы.ЗакрытьЗаказ.Доступность = ПравоДоступа("Изменение",Метаданные.Документы.ЗаказНаВнутреннееПотребление);
УстановитьДоступностьКомандБуфераОбмена();
УстановитьПараметрыВыбора();
ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПриСозданииНаСервере(ЭтотОбъект);
ПараметрыНастройки = Документы.ВнутреннееПотребление.ПараметрыНастройкиСчетовУчета(Объект.ХозяйственнаяОперация);
НастройкаСчетовУчетаСервер.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыНастройки);
ПараметрыВыбораСтатейИАналитик = Документы.ВнутреннееПотребление.ПараметрыВыбораСтатейИАналитик(Объект.ХозяйственнаяОперация);
ДоходыИРасходыСервер.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
ИсправлениеДокументов.ПриСозданииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриСозданииНаСервере_ФормаДокумента();
ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПриСозданииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
Элементы.ДекорацияСостояниеЭДО.Видимость = ПолучитьФункциональнуюОпцию("ИспользоватьОбменЭД");
ВнутреннееПотреблениеЛокализация.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);
СобытияФорм.ПриСозданииНаСервере(ЭтотОбъект, Отказ, СтандартнаяОбработка);
ПараметрыГиперссылки = РаботаСФайлами.ГиперссылкаФайлов();
ПараметрыГиперссылки.Размещение = "КоманднаяПанель";
РаботаСФайлами.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыГиперссылки);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
УправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ДатыЗапретаИзменения.ОбъектПриЧтенииНаСервере(ЭтаФорма, ТекущийОбъект);
ПриЧтенииСозданииНаСервере();
ПараметрыНастройки = Документы.ВнутреннееПотребление.ПараметрыНастройкиСчетовУчета(Объект.ХозяйственнаяОперация);
НастройкаСчетовУчетаСервер.ПриЧтенииНаСервере(ЭтотОбъект, ПараметрыНастройки);
СобытияФорм.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПараметрыВыбораСтатейИАналитик = Документы.ВнутреннееПотребление.ПараметрыВыбораСтатейИАналитик(Объект.ХозяйственнаяОперация);
ДоходыИРасходыСервер.ПриЧтенииНаСервере(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
ИсправлениеДокументов.ПриЧтенииНаСервере(ЭтаФорма, Элементы.СтрокаИсправление);
УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект);
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
ПараметрыЭДОПриСоздании = ОбменСКонтрагентами.ПараметрыПриЧтенииНаСервере_ФормаДокумента();
ПараметрыЭДОПриСоздании.Форма = ЭтотОбъект;
ПараметрыЭДОПриСоздании.ДокументСсылка = Объект.Ссылка;
ПараметрыЭДОПриСоздании.МестоРазмещенияКоманд = Элементы.ПодменюЭДО;
ПараметрыЭДОПриСоздании.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыЭДОПриСоздании.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПриЧтенииНаСервере_ФормаДокумента(ПараметрыЭДОПриСоздании);
КонецПроцедуры
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
УправлениеДоступом.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
ЗаполнитьСлужебныеРеквизитыТабличнойЧасти();
ИзменитьЗаголовкиПоХозОперации();
НастройкаСчетовУчетаСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
Справочники.КатегорииЭксплуатации.ЗаполнитьПризнакиКатегорииЭксплуатации(Объект.Товары);
ДоходыИРасходыСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
ПараметрыПослеЗаписи = ОбменСКонтрагентами.ПараметрыПослеЗаписиНаСервере();
ПараметрыПослеЗаписи.Форма = ЭтотОбъект;
ПараметрыПослеЗаписи.ДокументСсылка = Объект.Ссылка;
ПараметрыПослеЗаписи.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыПослеЗаписи.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентами.ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи, ПараметрыПослеЗаписи);
СобытияФорм.ПослеЗаписиНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
НаправленияДеятельностиСервер.ПослеЗаписиНаСервере(ЭтотОбъект);
ОбеспечениеВДокументахСервер.ПроверитьЗапуститьФоновоеЗаданиеРаспределенияЗапасов();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Перем ВыполняемаяОперация;
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Событие.ОбработкаВыбора");
Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") И ВыбранноеЗначение.Свойство("ВыполняемаяОперация", ВыполняемаяОперация) Тогда
Если ВРег(ВыполняемаяОперация) = ВРег("ПодборТоваровИзЗаказа") Тогда
ОбработкаПодбораТоваровИзЗаказа(ВыбранноеЗначение.АдресВХранилище);
КонецЕсли;
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборТоваровВДокументПродажи.Форма.Форма" Тогда
ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Справочник.ВидыЗапасов.Форма.ФормаВводаВидовЗапасов" Тогда
ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение);
ИначеЕсли ИсточникВыбора.ИмяФормы = "Обработка.ПодборМногооборотнойТары.Форма.Форма" Тогда
ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(ВыбранноеЗначение.АдресМногооборотнойТарыВХранилище);
МногооборотнаяТараКлиент.ОповеститьПользователяОЗаполненииМногооборотнойТарой();
ИначеЕсли НоменклатураКлиент.ЭтоУказаниеСерий(ИсточникВыбора) Тогда
НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);
КонецЕсли;
УстановитьПризнакЗаполненияСкладаНаКлиенте();
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
МенеджерОборудованияКлиент.НачатьПодключениеОборудованиеПриОткрытииФормы(Неопределено, ЭтаФорма, "СканерШтрихкода");
СообщитьОРезультатахЗаполнения();
ПредыдущиеРеквизитыСтроки = Новый Структура(
"Номенклатура,
|Характеристика,
|Упаковка,
|Количество,
|КоличествоУпаковок,
|ТипНоменклатуры,
|ХарактеристикиИспользуются,
|Артикул,
|ЗаказНаВнутреннееПотребление,
|КодСтроки");
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
РаботаСФайламиКлиент.ПриОткрытии(ЭтотОбъект, Отказ);
ОбменСКонтрагентамиКлиент.ПриОткрытии(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
ПринудительноЗакрытьФорму = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗакрытии(ЗавершениеРаботы)
МенеджерОборудованияКлиент.НачатьОтключениеОборудованиеПриЗакрытииФормы(Неопределено, ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если Источник = "ПодключаемоеОборудование" И ВводДоступен() Тогда
Если ИмяСобытия = "ScanData" И МенеджерОборудованияУТКлиент.ЕстьНеобработанноеСобытие() Тогда
ОбработатьШтрихкоды(МенеджерОборудованияУТКлиент.ПреобразоватьДанныеСоСканераВМассив(Параметр));
КонецЕсли;
КонецЕсли;
Если Источник = "ПодключаемоеОборудование"
И ИмяСобытия = "НеизвестныеШтрихкоды"
И Параметр.ФормаВладелец = УникальныйИдентификатор Тогда
КэшированныеЗначения.Штрихкоды.Очистить();
ДанныеШтрихкодов = Новый Массив;
Для Каждого ПолученныйШтрихкод Из Параметр.ПолученыНовыеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
Для Каждого ПолученныйШтрихкод Из Параметр.ЗарегистрированныеШтрихкоды Цикл
ДанныеШтрихкодов.Добавить(ПолученныйШтрихкод);
КонецЦикла;
ОбработатьШтрихкоды(ДанныеШтрихкодов);
КонецЕсли;
Если ИмяСобытия = "КопированиеСтрокВБуферОбмена" Тогда
УстановитьДоступностьКомандБуфераОбменаНаКлиенте();
КонецЕсли;
Если ИмяСобытия = "Запись_РасходныйОрдерНаТовары" Тогда
ЭтоРаспоряжениеНакладная = ЭтоРаспоряжениеНакладная(Объект.Ссылка, ОрдернаяСхемаПриОтгрузке);
КонецЕсли;
Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда
ОбновитьЭлементыДополнительныхРеквизитов();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
ИсправлениеДокументовКлиент.ОбработкаОповещения(ЭтаФорма, ИмяСобытия, Параметр, Источник);
ПараметрыОповещения = ОбменСКонтрагентамиКлиент.ПараметрыОповещенияЭДО_ФормаДокумента();
ПараметрыОповещения.Форма = ЭтотОбъект;
ПараметрыОповещения.ДокументСсылка = Объект.Ссылка;
ПараметрыОповещения.КонтроллерСостояниеЭДО = Элементы.ДекорацияСостояниеЭДО;
ПараметрыОповещения.ГруппаСостояниеЭДО = Элементы.ГруппаСостояниеЭДО;
ОбменСКонтрагентамиКлиент.ОбработкаОповещения_ФормаДокумента(ИмяСобытия, Параметр, Источник, ПараметрыОповещения);
СобытияФормКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);
РаботаСФайламиКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаНавигационнойСсылки(НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
СобытияФормКлиент.ОбработкаНавигационнойСсылки(ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
ОповеститьОПроведенииДокумента(ПараметрыЗаписи);
ОбщегоНазначенияУТКлиент.ОповеститьОЗаписиДокументаВЖурнал();
ВнеоборотныеАктивыКлиент.ОповеститьОЗаписиДокументаВЖурналОС();
ВнеоборотныеАктивыКлиент.ОповеститьОЗаписиДокументаВЖурналНМА();
Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаВЭксплуатацию") Тогда
ОповеститьОбИзменении(Тип("СправочникСсылка.ОбъектыЭксплуатации"));
ОповеститьОбИзменении(Тип("СправочникСсылка.ПартииТМЦВЭксплуатации"));
КонецЕсли;
ИсправлениеДокументовКлиент.ПослеЗаписи(Объект);
ОбменСКонтрагентамиКлиент.ПослеЗаписи_ФормаДокумента(ЭтотОбъект, ПараметрыЗаписи);
МодификацияКонфигурацииКлиентПереопределяемый.ПослеЗаписи(ЭтаФорма, ПараметрыЗаписи);
ОбщегоНазначенияУТКлиент.ВыполнитьДействияПослеЗаписи(ЭтаФорма, Объект, ПараметрыЗаписи);
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда
МодульПодключаемыеКомандыКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПодключаемыеКомандыКлиент");
МодульПодключаемыеКомандыКлиент.ПослеЗаписи(ЭтотОбъект, Объект, ПараметрыЗаписи);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
СобытияФормКлиент.ПередЗаписью(ЭтотОбъект, Отказ, ПараметрыЗаписи);
Если НеВыполнятьПроверкуПередЗаписью Тогда
НеВыполнятьПроверкуПередЗаписью = Ложь;
Возврат;
КонецЕсли;
Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение И Не Объект.ПотреблениеПоЗаказам Тогда
Отказ = Истина;
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ПараметрыЗаписи", ПараметрыЗаписи);
МногооборотнаяТараКлиент.ПредложитьПодобратьМногооборотнуюТару(
ЭтаФорма,
"Товары",
"Номенклатура,Характеристика,Количество",
Новый ОписаниеОповещения("ПередЗаписьюПредложитьПодобратьМногооборотнуюТаруЗавершение", ЭтотОбъект, ДополнительныеПараметры));
Возврат;
КонецЕсли;
ОбщегоНазначенияУТКлиент.ЗаписатьОбъектПриНеобходимости(ЭтотОбъект, ПараметрыЗаписи, Отказ);
КонецПроцедуры
&НаКлиенте
Процедура ПередЗаписьюПредложитьПодобратьМногооборотнуюТаруЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> КодВозвратаДиалога.Нет Тогда
ОбщегоНазначенияУТКлиент.ЗаписатьОбъектПриНеобходимости(ЭтотОбъект, ДополнительныеПараметры.ПараметрыЗаписи,,Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
НастройкаСчетовУчетаСервер.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект);
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект, ПараметрыЗаписи);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СкладПриИзменении(Элемент)
Если Склад <> Объект.Склад Тогда
Если Объект.ПотреблениеПоЗаказам И Объект.Товары.Количество() > 0 Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("СкладПриИзмененииЗавершение", ЭтотОбъект), НСтр("ru='Список ""Товары"" будет очищен. Продолжить?'"), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
СкладПриИзмененииСервер();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СкладПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Нет Тогда
Объект.Склад = Склад;
Возврат;
КонецЕсли;
СкладПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ДатаПриИзменении(Элемент)
ДатаПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ХозяйственнаяОперацияПриИзменении(Элемент)
ВнутреннееПотреблениеКлиентЛокализация.ХозяйственнаяОперацияПриИзменении(ЭтаФорма);
ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура НадписьЗаголовокЗаказыНаВнутреннееПотреблениеНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьФорму(
"ОбщаяФорма.ПросмотрСпискаДокументов",
Новый Структура("СписокДокументов, Заголовок",
СписокЗаказов,
НСтр("ru='Заказы на внутреннее потребление (списание) (%КоличествоДокументов%)'")), ЭтаФорма,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПотреблениеПоЗаказуПриИзменении(Элемент)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Элемент.НакладнаяПоЗаказу.ПриИзменении");
Если Объект.ПотреблениеПоЗаказам И ЭтоРаспоряжениеНакладная Тогда
ТекстПредупреждения = НСтр("ru = 'Потребление со склада уже начато. Установка признака невозможна.'");
ПоказатьПредупреждение(, ТекстПредупреждения);
Объект.ПотреблениеПоЗаказам = Ложь;
Возврат;
КонецЕсли;
Если Объект.ПотреблениеПоЗаказам Тогда
Если ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам Тогда
ЕстьСтрокиДоЗаполнения = Объект.Товары.Количество() > 0;
ПриИзмененииПотреблениеПоНесколькимЗаказам();
Если ЕстьСтрокиДоЗаполнения Тогда
ОповеститьОПривязкеСтрокКЗаказам();
Иначе
ОповеститьОЗаполненииПоОстаткамЗаказов();
Объект.ПотреблениеПоЗаказам = Объект.Товары.Количество() > 0;
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
УстановитьВидимостьКомандПоЗаказу();
Иначе
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("Подразделение", Объект.Подразделение);
ПараметрыФормы.Вставить("Склад", Объект.Склад);
ПараметрыФормы.Вставить("ХозяйственнаяОперация", Объект.ХозяйственнаяОперация);
ПараметрыФормы.Вставить("Сделка", Объект.Сделка);
ПараметрыФормы.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
ПараметрыФормы.Вставить("Регистратор", Объект.Ссылка);
ОписаниеОповещения = Новый ОписаниеОповещения("ПотреблениеПоЗаказуУстановленоЗаказВыбран", ЭтотОбъект);
ОткрытьФорму("Документ.ВнутреннееПотребление.Форма.ФормаВыбораРаспоряжения",
ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор,,, ОписаниеОповещения);
КонецЕсли;
Иначе
ПриИзмененииПотреблениеПоНесколькимЗаказам();
Если Объект.Товары.Количество() > 0 Тогда
Если ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам Тогда
ТекстОповещения = НСтр("ru='Строки в списке ""Товары"" отвязаны от строк заказов.'");
Иначе
ТекстОповещения = НСтр("ru='Строки в списке ""Товары"" отвязаны от строк заказа.'");
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка списка ""Товары""'"),, ТекстОповещения);
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
УстановитьВидимостьКомандПоЗаказу();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОрганизацияПриИзменении(Элемент)
ОрганизацияПриИзмененииНаСервере();
КонецПроцедуры
&НаКлиенте
Процедура НаправлениеДеятельностиПриИзменении(Элемент)
НаправлениеДеятельностиПриИзмененииСервер();
КонецПроцедуры
&НаКлиенте
Процедура ГруппаСтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница)
Если ЭтотОбъект.ПараметрыСвойств.Свойство(ТекущаяСтраница.Имя)
И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда
СвойстваВыполнитьОтложеннуюИнициализацию();
УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПотреблениеДляДеятельностиОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура ДекорацияЭДОНажатие(Элемент, СтандартнаяОбработка)
ОбменСКонтрагентамиКлиент.СостояниеЭДОНажатие_ФормаДокумента(ЭтотОбъект, СтандартнаяОбработка);
Возврат;
КонецПроцедуры
&НаКлиенте
Процедура СтрокаИсправлениеОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка)
ИсправлениеДокументовКлиент.СтрокаИсправлениеОбработкаНавигационныйСсылки(
ЭтотОбъект, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура СтатусПриИзменении(Элемент)
Если ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры Тогда
ЗаполнитьСерииПоОтгрузке = Ложь;
Если МожноЗаполнитьСерииПоОтгрузке
И Объект.Статус = ПредопределенноеЗначение("Перечисление.СтатусыВнутреннихПотреблений.Принято") Тогда
ТекстВопроса = НСтр("ru = 'Заполнить серии по данным расходных ордеров?'");
ОписаниеОповещения = Новый ОписаниеОповещения("СтатусПриИзмененииЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да);
Возврат;
КонецЕсли;
СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормыТовары
&НаКлиенте
Процедура ТоварыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле = Элементы.ТоварыЗаказНаВнутреннееПотребление Тогда
Если ЗначениеЗаполнено(Элементы.Товары.ТекущиеДанные.ЗаказНаВнутреннееПотребление) Тогда
ПоказатьЗначение(Неопределено, Элементы.Товары.ТекущиеДанные.ЗаказНаВнутреннееПотребление);
КонецЕсли;
КонецЕсли;
НастройкаСчетовУчетаКлиент.ПриНажатии(ЭтотОбъект, Поле, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если Объект.ПотреблениеПоЗаказам Тогда
Если ТекущаяСтрока <> Неопределено Тогда
Если ТекущаяСтрока.КодСтроки = 0 Тогда
ТекущаяСтрока.РасхождениеЗаказ = 1;
Иначе
ТекущаяСтрока.РасхождениеЗаказ = 0;
КонецЕсли;
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Товары, ЭтотОбъект);
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
СкладыКлиент.ОбновитьКешированныеЗначения(Элемент, КэшированныеЗначения, ПараметрыУказанияСерий, Копирование);
Если НЕ НоваяСтрока Тогда
ИначеЕсли Копирование Тогда
НастройкаСчетовУчетаКлиент.ПриКопированииСтроки(ЭтотОбъект, Элемент);
Иначе
СтруктураДействий = Новый Структура();
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействий,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущиеДанные, СтруктураДействий, КэшированныеЗначения);
ПриДобавлениСтрокиТоваровНаКлиенте(ТекущиеДанные);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если НоменклатураКлиент.НеобходимоОбновитьСтатусыСерий(Элемент, КэшированныеЗначения, ПараметрыУказанияСерий) Тогда
ТекущаяСтрокаИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент,КэшированныеЗначения,ПараметрыУказанияСерий);
КонецЕсли;
МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказы);
ДополнительныеПараметры = Новый Структура;
СобытияФормКлиент.ПриИзмененииЭлемента(ЭтотОбъект, Элементы.Товары, ДополнительныеПараметры);
Если ДополнительныеПараметры.Свойство("ТребуетсяСерверныйВызов") Тогда
ПодключитьОбработчикОжидания("ТоварыПриОкончанииРедактированияДляСерверногоВызова", 0.5, Истина);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередУдалением(Элемент, Отказ)
РаботаСТабличнымиЧастямиКлиент.КэшироватьТекущуюСтроку(Элементы.Товары, ЭтотОбъект);
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(
Элемент,КэшированныеЗначения,ПараметрыУказанияСерий);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПослеУдаления(Элемент)
НеобходимоОбновитьСтатусыСерий = НоменклатураКлиент.НеобходимоОбновитьСтатусыСерий(Элемент, КэшированныеЗначения, ПараметрыУказанияСерий, Истина);
Если НеобходимоОбновитьСтатусыСерий Тогда
НоменклатураКлиент.ОбновитьКешированныеЗначенияДляУчетаСерий(Элемент, КэшированныеЗначения, ПараметрыУказанияСерий);
КонецЕсли;
МногооборотнаяТараКлиент.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ТоварыПослеУдаленияСервер(НеобходимоОбновитьСтатусыСерий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыКатегорияЭксплуатацииПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ПриИзмененииКатегорииЭксплуатации(ТекущаяСтрока);
ТМЦВЭксплуатацииКлиент.ОбработатьСтрокуПриИзмененииКатегорииЭксплуатации(ТекущаяСтрока, Объект.Товары);
КонецПроцедуры
&НаКлиенте
Процедура УпаковкаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Если Объект.ПотреблениеПоЗаказам И Не ВнутреннееПотреблениеСверхЗаказа Тогда
Отказ = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТоварыПередНачаломИзменения(Элемент, Отказ)
ЗаполнитьЗначенияСвойств(ПредыдущиеРеквизитыСтроки, Элементы.Товары.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ДополнительныеПараметры = ДополнительныеПараметрыОбработкиЗавершения();
ДополнительныеПараметры.ТекущаяСтрока = ТекущаяСтрока;
ОписаниеОповещения = Новый ОписаниеОповещения(
"ТоварыНоменклатураПриИзмененииВопросПользователюЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ВопросПользователюПриИзмененииРеквизитаСтроки(ОписаниеОповещения, ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыХарактеристикаПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ДополнительныеПараметры = ДополнительныеПараметрыОбработкиЗавершения();
ДополнительныеПараметры.ТекущаяСтрока = ТекущаяСтрока;
ОписаниеОповещения = Новый ОписаниеОповещения(
"ТоварыХарактеристикаПриИзмененииЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ВопросПользователюПриИзмененииРеквизитаСтроки(ОписаниеОповещения, ТекущаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыХарактеристикаПриИзмененииЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
Если ДополнительныеПараметры.СтрокаОтвязанаОтЗаказа Тогда
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтотОбъект, СтруктураДействий);
КонецЕсли;
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыОбособленноПриИзменении(Элемент)
НаправленияДеятельностиКлиент.ТоварыОбособленноПриИзменении(ЭтотОбъект, Элементы.Товары.ТекущиеДанные);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСерияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ОткрытьПодборСерий(Элемент.ТекстРедактирования);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСерияПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
ВыбранноеЗначение = НоменклатураКлиентСервер.ВыбраннаяСерия();
ВыбранноеЗначение.Значение = ТекущаяСтрока.Серия;
ВыбранноеЗначение.ИдентификаторТекущейСтроки = ТекущаяСтрока.ПолучитьИдентификатор();
НоменклатураКлиент.ОбработатьУказаниеСерии(ЭтаФорма, ПараметрыУказанияСерий, ВыбранноеЗначение);
КонецПроцедуры
&НаКлиенте
Процедура КоличествоУпаковокПриИзменении(Элемент)
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСтатьяРасходовПриИзменении(Элемент)
ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элемент);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыАналитикаРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДоходыИРасходыКлиент.НачалоВыбораАналитикиРасходов(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыАналитикаРасходовАвтоПодбор(Элемент, Текст, ДанныеВыбора, Параметры, Ожидание, СтандартнаяОбработка)
ДоходыИРасходыКлиент.АвтоПодборАналитикиРасходов(
ЭтотОбъект,
Элемент,
Текст,
ДанныеВыбора,
Параметры,
СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыАналитикаРасходовОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, Параметры, СтандартнаяОбработка)
ДоходыИРасходыКлиент.ОкончаниеВводаТекстаАналитикиРасходов(
ЭтотОбъект,
Элемент,
Текст,
ДанныеВыбора,
Параметры,
СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЗаказНаВнутреннееПотреблениеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
Если ЗначениеЗаполнено(ТекущиеДанные.ЗаказНаВнутреннееПотребление) Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные <> Неопределено Тогда
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("Организация", Объект.Организация);
ПараметрыФормы.Вставить("Подразделение", Объект.Подразделение);
ПараметрыФормы.Вставить("Склад", Объект.Склад);
ПараметрыФормы.Вставить("ХозяйственнаяОперация", Объект.ХозяйственнаяОперация);
ПараметрыФормы.Вставить("Сделка", Объект.Сделка);
ПараметрыФормы.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
ПараметрыФормы.Вставить("Регистратор", Объект.Ссылка);
ОткрытьФорму("Документ.ВнутреннееПотребление.Форма.ФормаВыбораРаспоряжения",
ПараметрыФормы,,,,,
Новый ОписаниеОповещения("ТоварыРаспоряжениеНачалоВыбораЗавершение", ЭтотОбъект),
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
Возврат;
КонецЕсли;
ТоварыРаспоряжениеНачалоВыбораФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСтатьяРасходовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
ДоходыИРасходыКлиент.НачалоВыбораСтатьи(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаСервере
Процедура ВыполнитьКомандуНаСервере(ПараметрыВыполнения)
ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, ПараметрыВыполнения, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПродолжитьВыполнениеКомандыНаСервере(ПараметрыВыполнения, ДополнительныеПараметры) Экспорт
ВыполнитьКомандуНаСервере(ПараметрыВыполнения);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКоманду(Команда)
ПодключаемыеКомандыКлиент.НачатьВыполнениеКоманды(ЭтотОбъект, Команда, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбновитьКоманды()
ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_КомандаПанелиПрисоединенныхФайлов(Команда)
РаботаСФайламиКлиент.КомандаУправленияПрисоединеннымиФайлами(ЭтотОбъект, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПроверкаПеретаскивания(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраПеретаскивание(ЭтотОбъект, Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПолеПредпросмотраНажатие(Элемент, СтандартнаяОбработка)
РаботаСФайламиКлиент.ПолеПредпросмотраНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьВидыЗапасов(Команда)
ПараметрыРедактированияВидовЗапасов = ПоместитьТоварыИВидыЗапасовВХранилище();
ФинансыКлиент.ОткрытьВидыЗапасов(ЭтотОбъект, ПараметрыРедактированияВидовЗапасов);
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьТовары(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Команда.ПодобратьТовары");
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Склад", Объект.Склад);
ПараметрыФормы.Вставить("РежимПодбораБезСуммовыхПараметров", Истина);
ПараметрыФормы.Вставить("СкрыватьКолонкуВидЦены", Истина);
ПараметрыФормы.Вставить("СкрыватьКомандуЦеныНоменклатуры", Истина);
ПараметрыФормы.Вставить("Заголовок", НСтр("ru = 'Подбор товаров'"));
ПараметрыФормы.Вставить("Дата", Объект.Дата);
ПараметрыФормы.Вставить("Документ", Объект.Ссылка);
ПараметрыФормы.Вставить("НаправлениеДеятельности", Объект.НаправлениеДеятельности);
ПараметрыФормы.Вставить("ПараметрыУказанияСерий", ПараметрыУказанияСерий);
Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СписаниеТоваровПоТребованию") Тогда
ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый ФиксированныйМассив(НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТареРаботе(Ложь)));
Иначе
ПараметрыФормы.Вставить("ОтборПоТипуНоменклатуры", Новый ФиксированныйМассив(НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре(Ложь)));
КонецЕсли;
ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПодобратьТоварыПоЗаказамОрдерам(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Команда.ПодобратьТоварыПоЗаказамОрдерам");
ОткрытьПодборТоваровПоЗаказамОрдерам();
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуВыполнить(Команда)
ОчиститьСообщения();
Оповещение = Новый ОписаниеОповещения("ПоискПоШтрихкодуЗавершение", ЭтотОбъект);
ШтрихкодированиеНоменклатурыКлиент.ПоказатьВводШтрихкода(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ПоискПоШтрихкодуЗавершение(ДанныхШтрихкода, ДополнительныеПараметры) Экспорт
ОбработатьШтрихкоды(ДанныхШтрихкода);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьВес(Команда)
ТекущаяСтрока = МенеджерОборудованияУТКлиент.ТекущаяСтрока(ЭтаФорма);
Если ТекущаяСтрока = Неопределено Тогда
Возврат;
КонецЕсли;
МенеджерОборудованияКлиент.НачатьПолученияВесаСЭлектронныхВесов(
Новый ОписаниеОповещения("ПолучитьВесЗавершение", ЭтотОбъект, ТекущаяСтрока),
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПолучитьВесЗавершение(РезультатВыполнения, ТекущаяСтрока) Экспорт
Если РезультатВыполнения.Результат Тогда
ТекущаяСтрока.КоличествоУпаковок = РезультатВыполнения.Вес;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
Иначе
МенеджерОборудованияУТКлиент.СообщитьОбОшибке(РезультатВыполнения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьДанныеИзТСД(Команда)
ОчиститьСообщения();
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Команда.ЗагрузитьДанныеИзТСД");
МенеджерОборудованияКлиент.НачатьЗагрузкуДанныеИзТСД(
Новый ОписаниеОповещения("ЗагрузитьИзТСДЗавершение", ЭтотОбъект),
УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзТСДЗавершение(Результат, Параметры) Экспорт
Если Результат.Результат Тогда
ОбработатьШтрихкоды(Результат.ТаблицаТоваров);
Иначе
МенеджерОборудованияУТКлиент.СообщитьОбОшибке(Результат);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСтатьюРасходов(Команда)
ДоходыИРасходыКлиент.ЗаполнитьСтатьюИАналитикуВВыделенныхСтроках(
ЭтотОбъект,
Элементы.ТоварыСтатьяРасходов,
Элементы.Товары.ВыделенныеСтроки);
КонецПроцедуры
&НаКлиенте
Процедура ВставитьСтроки(Команда)
КоличествоТоваровДоВставки = Объект.Товары.Количество();
ПолучитьСтрокиИзБуфераОбмена();
КоличествоВставленных = Объект.Товары.Количество()-КоличествоТоваровДоВставки;
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОВставкеСтрок(КоличествоВставленных);
КонецПроцедуры
&НаКлиенте
Процедура СкопироватьСтроки(Команда)
Если РаботаСТабличнымиЧастямиКлиент.ВыбранаСтрокаДляВыполненияКоманды(Элементы.Товары) Тогда
СкопироватьСтрокиНаСервере();
РаботаСТабличнымиЧастямиКлиент.ОповеститьПользователяОКопированииСтрок(Элементы.Товары.ВыделенныеСтроки.Количество());
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДополнитьМногооборотнойТарой(Команда)
МногооборотнаяТараКлиент.ПодобратьМногооборотнуюТару(
ЭтаФорма,
"Товары",
"Номенклатура,Характеристика,Количество");
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОтметкуОбособленно(Команда)
УстановитьСнятьОтметкуОбособленно(Истина);
КонецПроцедуры
&НаКлиенте
Процедура СнятьОтметкуОбособленно(Команда)
УстановитьСнятьОтметкуОбособленно(Ложь);
КонецПроцедуры
&НаКлиенте
Процедура СоздатьГрупповоеОС(Команда)
Если Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаВЭксплуатацию") Тогда
Возврат;
КонецЕсли;
СписокСтрок = Новый Массив;
Для Каждого ИдентификаторСтроки Из Элементы.Товары.ВыделенныеСтроки Цикл
ДанныеСтроки = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ДанныеСтроки.УчитыватьВВидеГрупповогоОС Тогда
СписокСтрок.Добавить(ИдентификаторСтроки);
КонецЕсли;
КонецЦикла;
Если СписокСтрок.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать строки с учетом в виде группового ОС'"));
Возврат;
КонецЕсли;
ТекстВопроса = НСтр("ru = 'Создать групповое ОС и заполнить аналитику в выбранных строках?'");
ОписаниеОповещения = Новый ОписаниеОповещения("СоздатьГрупповоеОСЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатации(Команда)
ДополнительныеПараметры = Новый Структура();
ДополнительныеПараметры.Вставить("ВыделенныеСтроки", Элементы.Товары.ВыделенныеСтроки);
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьКатегориюЭксплуатацииЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ТМЦВЭксплуатацииКлиент.ЗаполнитьКатегориюЭксплуатации(
Объект.Товары,
Элементы.Товары.ВыделенныеСтроки,
Неопределено,
ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьФизическоеЛицо(Команда)
ТМЦВЭксплуатацииКлиент.ЗаполнитьФизическоеЛицо(Объект.Товары, Элементы.Товары.ВыделенныеСтроки);
Возврат
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьДокумент(Команда)
ОбщегоНазначенияУТКлиент.Записать(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ОтвязатьОтЗаказа(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Команда.ОтвязатьОтЗаказа");
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;
Если ВыделенныеСтроки.Количество()>0 Тогда
ОтвязатьСтрокиОтЗаказаНаСервере(КэшированныеЗначения);
ОповеститьОбОкончанииОтвязкиСтрок(ВыделенныеСтроки.Количество());
Иначе
ТекстПредупреждения = НСтр("ru='Выберите строки, которые необходимо отвязать от заказа.'");
ПоказатьПредупреждение(,ТекстПредупреждения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПровестиДокумент(Команда)
ОбщегоНазначенияУТКлиент.Провести(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПровестиИЗакрыть(Команда)
ОбщегоНазначенияУТКлиент.ПровестиИЗакрыть(ЭтаФорма, Истина);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПометкуУдаленияДокумента(Команда)
ОбщегоНазначенияУТКлиент.УстановитьПометкуУдаленияДокумента(ЭтаФорма);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуИнтеграции(Команда)
ИнтеграцияС1СДокументооборотБазоваяФункциональностьКлиент.ВыполнитьПодключаемуюКомандуИнтеграции(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПереопределяемуюКоманду(Команда)
СобытияФормКлиент.ВыполнитьПереопределяемуюКоманду(ЭтаФорма, Команда);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено)
УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
ЭлектронноеВзаимодействиеКлиент.ВыполнитьПодключаемуюКомандуЭДО(Команда, ЭтотОбъект, Объект);
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьЗаказ(Команда)
Если Модифицированность Или Не Объект.Проведен Тогда
ПоказатьВопрос(Новый ОписаниеОповещения("ЗакрытьЗаказЗавершение", ЭтотОбъект),
НСтр("ru = 'Необходимо провести документ для выполнения операции. Провести документ?'"), РежимДиалогаВопрос.ДаНет);
Возврат;
КонецЕсли;
ЗакрытьЗаказФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьЗаказЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Нет Тогда
Возврат;
ИначеЕсли Не Записать(Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение)) Тогда
Возврат;
КонецЕсли;
ЗакрытьЗаказФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ЗакрытьЗаказФрагмент()
СписокЗаказовКЗакрытию = Новый СписокЗначений;
Если ЗначениеЗаполнено(Объект.ЗаказНаВнутреннееПотребление) Тогда
СписокЗаказовКЗакрытию.Добавить(Объект.ЗаказНаВнутреннееПотребление)
Иначе
СписокЗаказовКЗакрытию.ЗагрузитьЗначения(СписокЗаказов.ВыгрузитьЗначения())
КонецЕсли;
СтруктураЗакрытия = Новый Структура;
СтруктураЗакрытия.Вставить("Заказы", СписокЗаказовКЗакрытию);
СтруктураЗакрытия.Вставить("ДокументИнициатор", Объект.Ссылка);
СтруктураЗакрытия.Вставить("ОтменитьНеотработанныеСтроки", Истина);
СтруктураЗакрытия.Вставить("ЗакрыватьЗаказы", Истина);
ОткрытьФорму("Обработка.ПомощникЗакрытияЗаказов.Форма.ФормаЗакрытия",
СтруктураЗакрытия,,,,, Неопределено, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьИнвентарныйНомер(Команда)
Если Объект.ХозяйственнаяОперация <> ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.ПередачаВЭксплуатацию") Тогда
Возврат;
КонецЕсли;
СписокСтрок = Новый Массив;
Для Каждого ИдентификаторСтроки Из Элементы.Товары.ВыделенныеСтроки Цикл
ДанныеСтроки = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ДанныеСтроки.ИнвентарныйУчет Тогда
СписокСтрок.Добавить(ИдентификаторСтроки);
КонецЕсли;
КонецЦикла;
Если СписокСтрок.Количество() = 0 Тогда
ПоказатьПредупреждение(, НСтр("ru = 'Необходимо выбрать строки с инвентарным учетом'"));
Возврат;
КонецЕсли;
ТекстВопроса = НСтр("ru = 'Заполнить инвентарный номер в выбранных строках?'");
ОписаниеОповещения = Новый ОписаниеОповещения("ЗаполнитьИнвентарныйНомерЗавершение", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
Возврат;
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура СвойстваВыполнитьОтложеннуюИнициализацию()
УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОбновитьЭлементыДополнительныхРеквизитов()
УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьЗависимостиДополнительныхРеквизитов()
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент)
УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект);
КонецПроцедуры
#Область ПриИзмененииРеквизитов
&НаКлиенте
Функция ДополнительныеПараметрыОбработкиЗавершения()
Результат = Новый Структура;
Результат.Вставить("ТекущаяСтрока", Неопределено);
Результат.Вставить("ОписаниеОповещения", Неопределено);
Результат.Вставить("СтрокаОтвязанаОтЗаказа", Ложь);
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПриОкончанииИзмененияРеквизитаЛокализации(ИмяЭлемента, ПараметрыОповещения) Экспорт
Если ПараметрыОповещения.ТребуетсяВызовСервера Тогда
ПриИзмененииРеквизитаЗавершениеНаСервере(ИмяЭлемента, ПараметрыОповещения.ПараметрыОбработки);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииРеквизитаЗавершениеНаСервере(Знач ИмяЭлемента, Знач ДополнительныеПараметры)
Если ИмяЭлемента = "ХозяйственнаяОперация" Тогда
ХозяйственнаяОперацияПриИзмененииСервер(ДополнительныеПараметры);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьЗависимыеЭлементыФормыНаСервере(Знач ИзмененныеРеквизиты = "")
ПриИзмененииРеквизитов(ИзмененныеРеквизиты);
СтруктураИзмененныхРеквизитов = Новый Структура(ИзмененныеРеквизиты);
ОбновитьВсе = СтруктураИзмененныхРеквизитов.Количество() = 0;
Если СтруктураИзмененныхРеквизитов.Свойство("ХозяйственнаяОперация")
ИЛИ ОбновитьВсе Тогда
ИзменитьЗаголовкиПоХозОперации();
ВсеРеквизиты = Новый Массив;
РеквизитыОперации = Новый Массив;
Документы.ВнутреннееПотребление.ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(
Объект.ХозяйственнаяОперация,
ВсеРеквизиты,
РеквизитыОперации);
ДенежныеСредстваСервер.УстановитьВидимостьЭлементовПоМассиву(
Элементы,
ВсеРеквизиты,
РеквизитыОперации);
Элементы.Статус.Видимость =
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию
И ИспользоватьСтатусы;
МассивПараметров = Новый Массив;
МассивТиповНоменклатуры = Новый Массив();
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Товар"));
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.МногооборотнаяТара"));
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СписаниеТоваровПоТребованию Тогда
МассивТиповНоменклатуры.Добавить(ПредопределенноеЗначение("Перечисление.ТипыНоменклатуры.Работа"));
КонецЕсли;
ФиксированныйМассивТиповНоменклатуры = Новый ФиксированныйМассив(МассивТиповНоменклатуры);
МассивПараметров.Добавить(Новый ПараметрВыбора("Отбор.ТипНоменклатуры", ФиксированныйМассивТиповНоменклатуры));
Элементы.ТоварыНоменклатура.ПараметрыВыбора = Новый ФиксированныйМассив(МассивПараметров);
КонецЕсли;
Если СтруктураИзмененныхРеквизитов.Свойство("ХозяйственнаяОперация")
ИЛИ СтруктураИзмененныхРеквизитов.Свойство("Склад")
ИЛИ ОбновитьВсе Тогда
Элементы.ГруппаИнформацияНеобходимыСтатусы.Видимость = ВыводитьСообщениеПоИспользованиюСтатусов();
КонецЕсли;
Если СтруктураИзмененныхРеквизитов.Свойство("ХозяйственнаяОперация")
ИЛИ СтруктураИзмененныхРеквизитов.Свойство("Товары")
ИЛИ ОбновитьВсе Тогда
Справочники.КатегорииЭксплуатации.ЗаполнитьПризнакиКатегорииЭксплуатации(Объект.Товары);
КонецЕсли;
Если СтруктураИзмененныхРеквизитов.Свойство("ХозяйственнаяОперация")
ИЛИ ОбновитьВсе Тогда
ЗначениеСвойства = (Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию);
Элементы.ТоварыЗаполнитьИнвентарныйНомер.Видимость = ЗначениеСвойства;
Элементы.ТоварыКонтекстноеМенюЗаполнитьИнвентарныйНомер.Видимость = ЗначениеСвойства;
Элементы.ТоварыЗаполнитьФизическоеЛицо.Видимость = ЗначениеСвойства;
Элементы.ТоварыСоздатьГрупповоеОС.Видимость = ЗначениеСвойства;
Элементы.ТоварыЗаполнитьКатегориюЭксплуатации.Видимость = ЗначениеСвойства;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииРеквизитов(ИзмененныеРеквизиты)
Если НЕ ЗначениеЗаполнено(ИзмененныеРеквизиты) Тогда
Возврат;
КонецЕсли;
СписокРеквизитов = СтрРазделить(ИзмененныеРеквизиты, ",");
Если СписокРеквизитов.Найти("ЗаказНаВнутреннееПотребление") <> Неопределено Тогда
УстановитьДоступностьЭлементовФормыПоЗаказу();
Если ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам Тогда
ОбновитьИнформациюПоЗаказам();
КонецЕсли;
КонецЕсли;
Если СписокРеквизитов.Найти("ХозяйственнаяОперация") <> Неопределено Тогда
ЗаполнитьСтатусыУказанияСерийСервер(Истина);
ЗаполнитьСлужебныеРеквизитыПриИзмененииХозяйственнойОперации();
АктуализироватьПотреблениеПодДеятельность();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ХозяйственнаяОперацияПриИзмененииСервер(ДополнительныеПараметры)
ИзмененныеРеквизиты = "ХозяйственнаяОперация";
Если Объект.ХозяйственнаяОперация <> Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию
И Объект.Статус <> Перечисления.СтатусыВнутреннихПотреблений.Принято Тогда
Объект.Статус = Перечисления.СтатусыВнутреннихПотреблений.Принято;
КонецЕсли;
ЗаполнитьСтатусыУказанияСерийСервер(Истина);
Если ДополнительныеПараметры.ОчиститьТовары Тогда
Объект.Товары.Очистить();
Объект.ЗаказНаВнутреннееПотребление = Неопределено;
ИзмененныеРеквизиты = ИзмененныеРеквизиты + ",Товары,ЗаказНаВнутреннееПотребление";
УстановитьПризнакЗаполненияСкладаНаСервере();
КонецЕсли;
ПараметрыНастройки = Документы.ВнутреннееПотребление.ПараметрыНастройкиСчетовУчета(Объект.ХозяйственнаяОперация);
НастройкаСчетовУчетаСервер.ПриИзмененииПараметровНастройки(ЭтотОбъект, ПараметрыНастройки);
ПараметрыВыбораСтатейИАналитик = Документы.ВнутреннееПотребление.ПараметрыВыбораСтатейИАналитик(Объект.ХозяйственнаяОперация);
ДоходыИРасходыСервер.ПриИзмененииПараметровВыбораСтатей(ЭтотОбъект, ПараметрыВыбораСтатейИАналитик);
НастроитьЗависимыеЭлементыФормыНаСервере(ИзмененныеРеквизиты);
НастроитьПанельНавигации();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыПриИзмененииХозяйственнойОперации()
ПодразделениеОбязательно = ПолучитьФункциональнуюОпцию("ИспользоватьПроизводство")
Или ПолучитьФункциональнуюОпцию("ФормироватьВидыЗапасовПоПодразделениямМенеджерам")
Или Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию;
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииПотреблениеПоНесколькимЗаказам(ЗаказСсылка = Неопределено)
Объект.ЗаказНаВнутреннееПотребление = ЗаказСсылка;
Если Объект.ПотреблениеПоЗаказам Тогда
Если Объект.Товары.Количество() = 0 Тогда
ЗаполнитьПоЗаказуСервер();
Иначе
ПривязатьСтрокиКЗаказамНаВнутреннееПотребление(Не ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам);
КонецЕсли;
Иначе
ОтвязатьСтрокиОтЗаказов();
Объект.ЗаказНаВнутреннееПотребление = Неопределено;
СписокЗаказов.Очистить();
МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
КонецЕсли;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПересчитатьКоличествоУпаковок");
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий);
ОбновитьИнформациюПоЗаказам();
УстановитьДоступностьЭлементовФормыПоЗаказу();
УстановитьДоступностьКомандБуфераОбмена();
НастроитьКомандуПодобратьПоЗаказамОрдерам(Ложь);
НаправленияДеятельностиСервер.УстановитьВидимостьЭлементовОбособленно(ЭтотОбъект);
КонецПроцедуры
&НаСервере
Процедура ОрганизацияПриИзмененииНаСервере()
АктуализироватьПотреблениеПодДеятельность();
КонецПроцедуры
&НаСервере
Процедура СкладПриИзмененииСервер()
Объект.ВидЦены = Справочники.Склады.УчетныйВидЦены(Объект.Склад);
ОрдернаяСхемаПриОтгрузке = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Объект.Склад, Объект.Дата);
ОчиститьТабличнуюЧастьТоварыПриИзмененииСклада();
ЗаполнитьСтатусыУказанияСерийСервер(Истина);
УстановитьВидимостьЭлементовСерий();
Склад = Объект.Склад;
АктуализироватьПотреблениеПодДеятельность();
НастроитьКомандуПодобратьПоЗаказамОрдерам();
НастроитьЗависимыеЭлементыФормыНаСервере("Склад");
КонецПроцедуры
&НаСервере
Процедура ОчиститьТабличнуюЧастьТоварыПриИзмененииСклада()
Если Объект.ПотреблениеПоЗаказам И Объект.Товары.Количество() > 0 Тогда
Объект.Товары.Очистить();
Если ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам Тогда
ОбновитьИнформациюПоЗаказам();
КонецЕсли;
УстановитьПризнакЗаполненияСкладаНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ДатаПриИзмененииСервер()
ОрдернаяСхемаПриОтгрузке = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Склад, Объект.Дата);
НастроитьКомандуПодобратьПоЗаказамОрдерам();
ЗаполнитьСтатусыУказанияСерийСервер(Истина);
УстановитьВидимостьЭлементовСерий();
АктуализироватьПотреблениеПодДеятельность();
КонецПроцедуры
&НаСервере
Процедура НаправлениеДеятельностиПриИзмененииСервер()
НаправленияДеятельностиСервер.ПриИзмененииНаправленияДеятельности(ЭтотОбъект);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
АктуализироватьПотреблениеПодДеятельность();
КонецПроцедуры
&НаСервере
Процедура АктуализироватьПотреблениеПодДеятельность(Проверить = Истина)
ПараметрыЗаполнения = Документы.ВнутреннееПотребление.ПараметрыЗаполненияВидаДеятельностиНДС(Объект);
Если Проверить Тогда
УчетНДСУП.ЗаполнитьВидДеятельностиНДС(
Объект.ПотреблениеДляДеятельности,
ПараметрыЗаполнения,
УчетНДСКэшированныеЗначенияПараметров);
КонецЕсли;
УчетНДСУП.ЗаполнитьСписокВыбораВидаДеятельностиНДС(
Элементы.ПотреблениеДляДеятельности,
Объект.ПотреблениеДляДеятельности,
ПараметрыЗаполнения,
УчетНДСКэшированныеЗначенияПараметров);
КонецПроцедуры
&НаКлиенте
Процедура ПриДобавлениСтрокиТоваровНаКлиенте(Строка)
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, Строка, "Объект.Товары");
КонецПроцедуры
&НаСервере
Процедура ПриДобавлениСтрокиТоваровНаСервере(Строка)
ДоходыИРасходыКлиентСервер.ПриДобавленииСтрокиВТаблицу(ЭтотОбъект, Строка, "Объект.Товары");
КонецПроцедуры
&НаКлиенте
Процедура УстановитьПризнакЗаполненияСкладаНаКлиенте()
СкладОбязателен = ?(Объект.Товары.Итог("СкладОбязателен") = 0, 0, 1);
КонецПроцедуры
&НаСервере
Процедура УстановитьПризнакЗаполненияСкладаНаСервере()
СкладОбязателен = ?(Объект.Товары.Итог("СкладОбязателен") = 0, 0, 1);
КонецПроцедуры
&НаСервере
Процедура ОбновитьОбязательностьСкладаВТЧ()
ПараметрыЗаполнения = Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Ложь);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатуры", ПараметрыЗаполнения);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, Неопределено);
СкладОбязателен = ?(Объект.Товары.Итог("СкладОбязателен") = 0, 0, 1);
КонецПроцедуры
#КонецОбласти
#Область ПодборыИОбработкаПроверкиКоличества
&НаКлиенте
Процедура ОткрытьПодборТоваровПоЗаказамОрдерам()
РеквизитыШапки = Новый Структура("Организация, Подразделение, Склад, Сделка, ХозяйственнаяОперация, Ссылка, НаправлениеДеятельности");
ЗаполнитьЗначенияСвойств(РеквизитыШапки, Объект);
ДополнительныеПоля = Новый Структура("ДатаОтгрузки");
ПараметрыФормы = Новый Структура();
ПараметрыФормы.Вставить("РеквизитыШапки", РеквизитыШапки);
ПараметрыФормы.Вставить("Заказ", Объект.ЗаказНаВнутреннееПотребление);
ПараметрыФормы.Вставить("Накладная", Объект.Ссылка);
ПараметрыФормы.Вставить("ОрдернаяСхемаПриОтгрузке", ОрдернаяСхемаПриОтгрузке);
ПараметрыФормы.Вставить("АдресТовары", АдресТоварыНакладной());
ПараметрыФормы.Вставить("НакладнаяПоЗаказам", Объект.ПотреблениеПоЗаказам);
ПараметрыФормы.Вставить("ИспользоватьНакладныеПоНесколькимЗаказам", ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам);
ПараметрыФормы.Вставить("ИспользуютсяЗаказы", ИспользуютсяЗаказы);
ПараметрыФормы.Вставить("ДополнительныеПоля", ДополнительныеПоля);
ОткрытьФорму("ОбщаяФорма.ПодборТоваровИзЗаказа",
ПараметрыФормы, ЭтаФорма, УникальныйИдентификатор,,,,РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаСервере
Функция АдресТоварыНакладной()
Таблица = Объект.Товары.Выгрузить();
Таблица.Колонки.ЗаказНаВнутреннееПотребление.Имя = "ЗаказНаВнутреннееПотреблениеИсходный";
Таблица.Колонки.Добавить("ЗаказНаВнутреннееПотребление", Новый ОписаниеТипов("ДокументСсылка.ЗаказНаВнутреннееПотребление,
|ДокументСсылка.ВнутреннееПотребление"));
Таблица.Колонки.Добавить("Сделка", Новый ОписаниеТипов("СправочникСсылка.СделкиСКлиентами"));
Таблица.Колонки.Добавить("ДатаОтгрузки", Новый ОписаниеТипов("Дата"));
Для Каждого Строка Из Таблица Цикл
Строка.ЗаказНаВнутреннееПотребление = ?(ЗначениеЗаполнено(Строка.ЗаказНаВнутреннееПотреблениеИсходный),
Строка.ЗаказНаВнутреннееПотреблениеИсходный, Объект.Ссылка);
КонецЦикла;
Таблица.ЗаполнитьЗначения(Объект.Сделка, "Сделка");
Таблица.ЗаполнитьЗначения(ТекущаяДатаСеанса(), "ДатаОтгрузки");
Возврат ПоместитьВоВременноеХранилище(Таблица);
КонецФункции
&НаСервере
Процедура ОбработкаВыбораПодборНаСервере(ВыбранноеЗначение)
ТаблицаТоваров = ПолучитьИзВременногоХранилища(ВыбранноеЗначение.АдресТоваровВХранилище);
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействий,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатуры", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Ложь));
ОбрабатываемыеСтроки = Новый Массив();
Для каждого СтрокаТовара Из ТаблицаТоваров Цикл
ТекущаяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара, "Номенклатура, Характеристика,
| ХарактеристикиИспользуются, Упаковка, КоличествоУпаковок, Серия, Обособленно");
НаправленияДеятельностиКлиентСервер.ЗаполнитьНазначениеПоФлагуОбособленно(ЭтотОбъект, ТекущаяСтрока);
Если Объект.ПотреблениеПоЗаказам Тогда
ТекущаяСтрока.РасхождениеЗаказ = 1;
КонецЕсли;
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары);
Для каждого ТекущаяСтрока Из ОбрабатываемыеСтроки Цикл
ПриДобавлениСтрокиТоваровНаСервере(ТекущаяСтрока);
КонецЦикла;
ЗаполнитьСтатусыУказанияСерийСервер();
МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
УстановитьПризнакЗаполненияСкладаНаСервере();
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаСервере
Функция ПоместитьТабличнуюЧастьТоварыВоВременноеХранилищеДляПроверкиКоличества(ВыгруженаТолькоНеМаркируемаяПродукция = Ложь)
ТабличнаяЧастьТовары = Объект.Товары.Выгрузить();
Если ТабличнаяЧастьТовары.Колонки.Найти("МаркируемаяПродукция") <> Неопределено Тогда
НомерТекущейСтроки = ТабличнаяЧастьТовары.Количество()-1;
Пока НомерТекущейСтроки >= 0 Цикл
Если ТабличнаяЧастьТовары[НомерТекущейСтроки].МаркируемаяПродукция Тогда
ТабличнаяЧастьТовары.Удалить(НомерТекущейСтроки);
ВыгруженаТолькоНеМаркируемаяПродукция = Истина;
КонецЕсли;
НомерТекущейСтроки = НомерТекущейСтроки - 1;
КонецЦикла;
КонецЕсли;
ТабличнаяЧастьТовары.Свернуть("Номенклатура, Характеристика, Серия, СтатусУказанияСерий, ТипНоменклатуры, ХарактеристикиИспользуются, Упаковка", "КоличествоУпаковок");
АдресВоВременномХранилище = ПоместитьВоВременноеХранилище(ТабличнаяЧастьТовары, УникальныйИдентификатор);
Возврат АдресВоВременномХранилище;
КонецФункции
&НаСервере
Процедура ИзменитьТабличнуюЧастьПоРезультатамПроверки(ВозвращаемыеПараметры, КэшированныеЗначения)
ТаблицаТовары = ПолучитьИзВременногоХранилища(ВозвращаемыеПараметры.Товары);
СтруктураДействийНайденныеСтроки = Новый Структура;
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействийНайденныеСтроки,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийНайденныеСтроки);
СтруктураДействийНайденныеСтроки.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийНайденныеСтроки.Вставить("ПриИзмененииТипаНоменклатуры", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Ложь));
СтруктураДействийНовыеСтроки = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийНовыеСтроки);
СтруктураДействийНовыеСтроки.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийНовыеСтроки.Вставить("ПриИзмененииТипаНоменклатуры", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Ложь));
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(
ЭтотОбъект, "Номенклатура", СтруктураДействийНовыеСтроки);
ОбрабатываемыеНовыеСтроки = Новый Массив;
ОбрабатываемыеНайденныеСтроки = Новый Массив;
УдаляемыеСтроки = Новый Массив;
Для Каждого СтрокаИсточник Из ТаблицаТовары Цикл
Отбор = Новый Структура("Номенклатура, Характеристика, Серия, СтатусУказанияСерий, Упаковка");
ЗаполнитьЗначенияСвойств(Отбор, СтрокаИсточник);
НайденныеСтроки = Объект.Товары.НайтиСтроки(Отбор);
Для Каждого СтрокаТЧ Из НайденныеСтроки Цикл
Если СтрокаИсточник.КоличествоУпаковок = 0 Тогда
Прервать;
КонецЕсли;
Если СтрокаИсточник.КоличествоУпаковок >= 0 Тогда
СтрокаТЧ.КоличествоУпаковок = СтрокаТЧ.КоличествоУпаковок + СтрокаИсточник.КоличествоУпаковок;
СтрокаИсточник.КоличествоУпаковок = 0;
Иначе
КоличествоКСписанию = -СтрокаИсточник.КоличествоУпаковок;
КоличествоВСтроке = СтрокаТЧ.КоличествоУпаковок;
Если КоличествоКСписанию > КоличествоВСтроке Тогда
СтрокаИсточник.КоличествоУпаковок = КоличествоВСтроке - КоличествоКСписанию;
СтрокаТЧ.КоличествоУпаковок = 0;
Иначе
СтрокаИсточник.КоличествоУпаковок = 0;
СтрокаТЧ.КоличествоУпаковок = КоличествоВСтроке - КоличествоКСписанию;
КонецЕсли;
КонецЕсли;
Если СтрокаТЧ.КоличествоУпаковок = 0 Тогда
УдаляемыеСтроки.Добавить(СтрокаТЧ);
Иначе
ОбрабатываемыеНайденныеСтроки.Добавить(СтрокаТЧ);
КонецЕсли;
КонецЦикла;
Если НайденныеСтроки.Количество() = 0 Тогда
СтрокаТЧ = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(СтрокаТЧ, СтрокаИсточник);
ОбрабатываемыеНовыеСтроки.Добавить(СтрокаТЧ);
КонецЕсли;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеНовыеСтроки,
СтруктураДействийНовыеСтроки,
Объект.Товары,
КэшированныеЗначения);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеНайденныеСтроки,
СтруктураДействийНайденныеСтроки,
Объект.Товары,
КэшированныеЗначения);
Для Каждого СтрокаТЧ Из ОбрабатываемыеНовыеСтроки Цикл
ПриДобавлениСтрокиТоваровНаСервере(СтрокаТЧ);
КонецЦикла;
Для Каждого СтрокаТЧ Из ОбрабатываемыеНайденныеСтроки Цикл
ПриДобавлениСтрокиТоваровНаСервере(СтрокаТЧ);
КонецЦикла;
Для Каждого СтрокаТЧ Из УдаляемыеСтроки Цикл
Объект.Товары.Удалить(СтрокаТЧ);
КонецЦикла;
ЗаполнитьСтатусыУказанияСерийСервер();
УстановитьПризнакЗаполненияСкладаНаСервере();
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКоличествоВДокументе(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Команда.ПроверитьКоличествоВДокументе");
ВыгруженаТолькоНеМаркируемаяПродукция = Ложь;
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("АдресВоВременномХранилище", ПоместитьТабличнуюЧастьТоварыВоВременноеХранилищеДляПроверкиКоличества(ВыгруженаТолькоНеМаркируемаяПродукция));
ПараметрыОткрытия.Вставить("ИмяТабличнойЧасти", "Товары");
ПараметрыОткрытия.Вставить("Ссылка", Объект.Ссылка);
ПараметрыОткрытия.Вставить("ПревышениеКоличестваТоваровРазрешено", Не Объект.ПотреблениеПоЗаказам Или ВнутреннееПотреблениеСверхЗаказа);
ПараметрыОткрытия.Вставить("ПараметрыУказанияСерий", ПараметрыУказанияСерий);
ПараметрыОткрытия.Вставить("Склад", Объект.Склад);
ПараметрыОткрытия.Вставить("ВыгруженаТолькоНеМаркируемаяПродукция", ВыгруженаТолькоНеМаркируемаяПродукция);
ОткрытьФорму("ОбщаяФорма.ПроверкаЗаполненияДокументов", ПараметрыОткрытия,,,,, Новый ОписаниеОповещения("ПроверитьКоличествоВДокументеЗавершение", ЭтотОбъект), РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьКоличествоВДокументеЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВозвращаемыеПараметры = Результат;
Если ВозвращаемыеПараметры <> Неопределено Тогда
ИзменитьТабличнуюЧастьПоРезультатамПроверки(ВозвращаемыеПараметры,
?(КэшированныеЗначения = Неопределено, ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения(), КэшированныеЗначения));
Модифицированность = Истина;
ТекстОснования = НСтр("ru = 'введенного на основании распоряжения или недоступна роль ""Внутреннее потребление сверх заказа"".'");
ОбщегоНазначенияУТКлиент.ВывестиСообщениеПревышенияПоКоличеству(ВозвращаемыеПараметры, ТекстОснования);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УказатьСерии(Команда)
ОткрытьПодборСерий();
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтроку(Команда)
Если НЕ МожноРазбитьСтроку() Тогда
Возврат;
КонецЕсли;
ТаблицаФормы = Элементы.Товары;
ДанныеТаблицы = Объект.Товары;
Оповещение = Новый ОписаниеОповещения("РазбитьСтрокуЗавершение", ЭтотОбъект);
РаботаСТабличнымиЧастямиКлиент.РазбитьСтроку(ДанныеТаблицы, ТаблицаФормы, Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура РазбитьСтрокуЗавершение(НоваяСтрока, ДополнительныеПараметры) Экспорт
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если НоваяСтрока <> Неопределено Тогда
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(НоваяСтрока, СтруктураДействий, КэшированныеЗначения);
НастройкаСчетовУчетаКлиент.ПриКопированииСтроки(ЭтотОбъект, Элементы.Товары, НоваяСтрока);
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказы);
КонецПроцедуры
&НаСервере
Процедура ОбработкаПодбораТоваровИзЗаказа(АдресВХранилище)
РезультатПодбора = ПолучитьИзВременногоХранилища(АдресВХранилище);
Объект.ШтрихкодыУпаковок.Загрузить(РезультатПодбора.ШтрихкодыУпаковок);
Таблица = РезультатПодбора.Товары;
ИменаПолей = "НомерСтроки";
СтруктураПоиска = Новый Структура(ИменаПолей);
Таблица.Сортировать(ИменаПолей + " Убыв");
ДеревоСтрок = Новый Массив();
Для Каждого СтрокаТаблицы Из Таблица Цикл
Если СтруктураПоиска.НомерСтроки <> СтрокаТаблицы.НомерСтроки Тогда
МассивСтрок = Новый Массив();
ДеревоСтрок.Добавить(МассивСтрок);
ЗаполнитьЗначенияСвойств(СтруктураПоиска, СтрокаТаблицы);
КонецЕсли;
МассивСтрок.Добавить(СтрокаТаблицы);
КонецЦикла;
ПоляСвязиСЗаказом = Новый Структура("КодСтроки, ЗаказНаВнутреннееПОтребление", 0, Неопределено);
ДобавленныеСтроки = НакладныеСервер.ЗаполнитьТоварыПодобраннымиИзЗаказа(ДеревоСтрок, ИменаПолей, Объект.Товары, ПоляСвязиСЗаказом);
КэшированныеЗначения = ПакетнаяОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруКэшируемыеЗначения();
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий);
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатуры", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Ложь));
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействий,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ДобавленныеСтроки,
СтруктураДействий,
Объект.Товары,
КэшированныеЗначения);
Для Каждого СтрокаТовары Из ДобавленныеСтроки Цикл
Если ЗначениеЗаполнено(СтрокаТовары.ЗаказНаВнутреннееПОтребление) Тогда
Объект.ПотреблениеПоЗаказам = Истина;
Если Не ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам Тогда
Объект.ЗаказНаВнутреннееПотребление = СтрокаТовары.ЗаказНаВнутреннееПОтребление;
КонецЕсли;
КонецЕсли;
ПриДобавлениСтрокиТоваровНаСервере(СтрокаТовары);
КонецЦикла;
Документы.ВнутреннееПотребление.ОбработатьДокументПослеДобавленияСтрок(Объект);
ЗаполнитьСлужебныеРеквизитыТабличнойЧасти();
ЗаполнитьСтатусыУказанияСерийСервер();
ОбновитьИнформациюПоЗаказам();
УстановитьДоступностьЭлементовФормыПоЗаказу();
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
НастроитьЗависимыеЭлементыФормыНаСервере("ХозяйственнаяОперация,Товары");
Если Объект.ПотреблениеПоЗаказам Тогда
Для Каждого Строка Из Объект.Товары Цикл
Если Строка.КодСтроки = 0 Тогда
Строка.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
КонецЕсли;
НаправленияДеятельностиСервер.УстановитьВидимостьЭлементовОбособленно(ЭтотОбъект);
НаправленияДеятельностиСервер.ПерезаполнитьСлужебныеРеквизитыТабличнойЧасти(ЭтотОбъект);
УстановитьПризнакЗаполненияСкладаНаСервере();
ПродажиСерверЛокализация.ПеренестиШтрихкодыУпаковок(ЭтотОбъект, РезультатПодбора.ШтрихкодыУпаковок);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
#КонецОбласти
#Область ШтрихкодыИТорговоеОборудование
&НаКлиенте
Процедура ОбработатьШтрихкоды(ДанныеШтрихкодов)
Если Не ШтрихкодированиеНоменклатурыКлиент.ШтрихкодыВалидны(ДанныеШтрихкодов) Тогда
Возврат;
КонецЕсли;
СтруктураДействийСДобавленнымиСтроками = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСДобавленнымиСтроками);
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействийСДобавленнымиСтроками.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействийСДобавленнымиСтроками,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
ПараметрыПроверкиСерий = Новый Структура("Склад, ПараметрыУказанияСерий", Объект.Склад, ПараметрыУказанияСерий);
СтруктураДействийСДобавленнымиСтроками.Вставить("ПроверитьСериюРассчитатьСтатус", ПараметрыПроверкиСерий);
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(ЭтотОбъект, "Номенклатура", СтруктураДействийСДобавленнымиСтроками);
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСДобавленнымиСтроками);
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействийСДобавленнымиСтроками);
СтруктураДействийСИзмененнымиСтроками = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействийСИзмененнымиСтроками);
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействийСИзмененнымиСтроками);
СтруктураДействий = ШтрихкодированиеНоменклатурыКлиент.ПараметрыОбработкиШтрихкодов();
СтруктураДействий.Штрихкоды = ДанныеШтрихкодов;
СтруктураДействий.СтруктураДействийСДобавленнымиСтроками = СтруктураДействийСДобавленнымиСтроками;
СтруктураДействий.СтруктураДействийСИзмененнымиСтроками = СтруктураДействийСИзмененнымиСтроками;
СтруктураДействий.ПараметрыУказанияСерий = ПараметрыУказанияСерий;
СтруктураДействий.ДобавлятьТолькоТоварСверхЗаказа = Истина;
Если Объект.ХозяйственнаяОперация = ПредопределенноеЗначение("Перечисление.ХозяйственныеОперации.СписаниеТоваровПоТребованию") Тогда
СтруктураДействий.ТолькоТоварыИРабота = Истина;
Иначе
СтруктураДействий.ТолькоТовары = Истина;
КонецЕсли;
ОбработатьШтрихкодыСервер(СтруктураДействий,КэшированныеЗначения);
ШтрихкодированиеНоменклатурыКлиент.ОбработатьНеизвестныеШтрихкоды(СтруктураДействий,КэшированныеЗначения,ЭтаФорма);
Если ШтрихкодированиеНоменклатурыКлиент.НужноОткрытьФормуУказанияСерийПослеОбработкиШтрихкодов(СтруктураДействий) Тогда
ТекущиеДанныеИдентификатор = СтруктураДействий.МассивСтрокССериями[0];
ПодключитьОбработчикОжидания("ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры",0.1,Истина);
КонецЕсли;
Если СтруктураДействий.ТекущаяСтрока <> Неопределено Тогда
Элементы.Товары.ТекущаяСтрока = СтруктураДействий.ТекущаяСтрока;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьШтрихкодыСервер(СтруктураПараметровДействия,КэшированныеЗначения)
ШтрихкодированиеНоменклатурыСервер.ОбработатьШтрихкоды(ЭтаФорма, Объект,СтруктураПараметровДействия,КэшированныеЗначения);
Для Каждого Строка Из Объект.Товары Цикл
ПриДобавлениСтрокиТоваровНаСервере(Строка);
ОбновитьОтклоненияОтЗаказаВСтроке(Строка, Объект.ПотреблениеПоЗаказам);
КонецЦикла;
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
#КонецОбласти
#Область Серии
&НаСервере
Функция ЕстьЗаполненныеСерииПоFEFO()
Возврат НоменклатураСервер.ЕстьСтрокиСЗаполненнымиПоFEFOСериями(Объект.Товары);
КонецФункции
&НаКлиенте
Процедура ЗаполнитьСерииПоFEFO(Команда)
ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина,
"Документ.ВнутреннееПотребление.ФормаДокумента.Команда.ЗаполнитьСерииПоFEFO");
Если ЕстьЗаполненныеСерииПоFEFO() Тогда
НоменклатураКлиент.ЗадатьВопросОПерезаполненииСерийПоFEFO(
Новый ОписаниеОповещения("ЗаполнитьСерииПоFEFOЗавершение", ЭтотОбъект));
Возврат;
КонецЕсли;
Если Не ЗаполнитьСерииПоFEFOСервер() Тогда
НоменклатураКлиент.ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьСерииПоFEFOЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если НЕ Результат Тогда
Возврат;
КонецЕсли;
Если Не ЗаполнитьСерииПоFEFOСервер() Тогда
НоменклатураКлиент.ПредупредитьОбОтсутствииСтрокЗаполняемыхПоFEFO();
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьСерииПоFEFOСервер()
Если НоменклатураСервер.ЕстьСтрокиСЗаполняемымиПоFEFOСериями(Объект.Товары) Тогда
НоменклатураСервер.ЗаполнитьСерииПоFEFO(Объект,ПараметрыУказанияСерий);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ОткрытьПодборСерийПриСканированииШтрихкодаНоменклатуры()
Если ТекущиеДанныеИдентификатор = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Объект.Товары.НайтиПоИдентификатору(ТекущиеДанныеИдентификатор);
ОткрытьПодборСерий(,ТекущиеДанные);
КонецПроцедуры
&НаСервере
Процедура УстановитьВидимостьЭлементовСерий()
Элементы.ТоварыСтатусУказанияСерий.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыУказатьСерии.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыЗаполнитьСерииПоFEFO.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
Элементы.ТоварыСерия.Видимость = ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры;
МожноЗаполнитьСерииПоОтгрузке =
ОрдернаяСхемаПриОтгрузке
И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад",Новый Структура("Склад", Объект.Склад))
И ПолучитьФункциональнуюОпцию("ИспользоватьСерииНоменклатурыСклад", Новый Структура());
КонецПроцедуры
&НаСервере
Процедура ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий)
НоменклатураСервер.ОбработатьУказаниеСерий(Объект,ПараметрыУказанияСерий,ПараметрыФормыУказанияСерий);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(ТекущаяСтрокаИдентификатор, КэшированныеЗначения)
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Объект,
ПараметрыУказанияСерий, ТекущаяСтрокаИдентификатор, КэшированныеЗначения);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСтатусыУказанияСерийСервер(ОбновитьПараметрыУказанияСерий = Ложь)
Если ОбновитьПараметрыУказанияСерий Тогда
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ВнутреннееПотребление));
КонецЕсли;
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект,ПараметрыУказанияСерий);
КонецПроцедуры
#КонецОбласти
#Область ЗаполнениеПоЗаказуПоОрдеру
&НаКлиенте
Процедура ПотреблениеПоЗаказуУстановленоЗаказВыбран(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Объект.ПотреблениеПоЗаказам = Ложь;
Иначе
ЕстьСтрокиДоЗаполнения = Объект.Товары.Количество() > 0;
ПриИзмененииПотреблениеПоНесколькимЗаказам(Результат);
Если ЕстьСтрокиДоЗаполнения Тогда
ОповеститьОПривязкеСтрокКЗаказам(Результат);
Иначе
ОповеститьОЗаполненииПоОстаткамЗаказов(Результат);
Объект.ПотреблениеПоЗаказам = Объект.Товары.Количество() > 0;
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
УстановитьВидимостьКомандПоЗаказу();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОПривязкеСтрокКЗаказам(ЗаказСсылка = Неопределено)
Если ЗаказСсылка <> Неопределено Тогда
ШаблонТекста = НСтр("ru='Строки в списке ""Товары"" привязаны к строкам документа %Заказ%.'");
ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
Иначе
ТекстОповещения = НСтр("ru='Строки в списке ""Товары"" привязаны к строкам неоформленных заказов.'");
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка списка ""Товары""'"),, ТекстОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОЗаполненииПоОстаткамЗаказов(ЗаказСсылка = Неопределено)
Если Объект.Товары.Количество() > 0 Тогда
Если ЗаказСсылка <> Неопределено Тогда
ШаблонТекста = НСтр("ru='Список ""Товары"" заполнен остатками неоформленных товаров по документу %Заказ%.'");
ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
Иначе
ТекстОповещения = НСтр("ru='Список ""Товары"" заполнен остатками неоформленных товаров по заказам.'");
КонецЕсли;
ПоказатьОповещениеПользователя(НСтр("ru = 'Обработка списка ""Товары""'"),, ТекстОповещения);
Иначе
Если ЗаказСсылка <> Неопределено Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по документу %Заказ%.'");
ТекстОповещения = СтрЗаменить(ШаблонТекста, "%Заказ%", ЗаказСсылка);
Иначе
Если Не ЗначениеЗаполнено(Объект.Склад) Тогда
ТекстОповещения = НСтр("ru='Не заполнен склад.'");
ИначеЕсли Не ЗначениеЗаполнено(Объект.Организация) Тогда
ТекстОповещения = НСтр("ru='Не заполнена организация.'");
ИначеЕсли ИспользоватьНесколькоОрганизаций И ИспользоватьПодразделения И ЗначениеЗаполнено(Объект.Подразделение) Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на внутреннее потребление
|со склада ""%1"" в подразделении ""%2"" в организации ""%3""'");
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.Склад, Объект.Подразделение, Объект.Организация);
ИначеЕсли ИспользоватьНесколькоОрганизаций Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на внутреннее потребление
|со склада ""%1"" в организации ""%2""'");
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.Склад, Объект.Организация);
ИначеЕсли ИспользоватьПодразделения И ЗначениеЗаполнено(Объект.Подразделение) Тогда
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на внутреннее потребление
|со склада ""%1"" в подразделении ""%2""'");
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.Склад, Объект.Подразделение);
Иначе
ШаблонТекста = НСтр("ru='Нет неоформленных товаров по заказам на внутреннее потребление
|со склада ""%1""'");
ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонТекста,
Объект.Склад);
КонецЕсли;
КонецЕсли;
ПоказатьПредупреждение(, ТекстОповещения);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОтвязатьСтрокиОтЗаказов()
СтруктураДействий = Новый Структура();
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтотОбъект, СтруктураДействий);
Для Каждого ТекСтрока Из Объект.Товары Цикл
ТекСтрока.КодСтроки = 0;
ТекСтрока.ЗаказНаВнутреннееПотребление = Неопределено;
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий);
КонецПроцедуры
&НаСервере
Функция ПривязатьСтрокиКЗаказамНаВнутреннееПотребление(ОтобратьПоЗаказу = Ложь)
ТекстыЗапроса = Новый Массив();
Текст =
"ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
|ПОМЕСТИТЬ Товары
|ИЗ
| &Товары КАК Товары
|ГДЕ
| Товары.КодСтроки = 0
| И Товары.ЗаказНаВнутреннееПотребление В(&ПустыеЗначенияЗаказов)";
ТекстыЗапроса.Добавить(Текст);
Тексты = Новый Массив();
Если ПравоДоступа("Чтение", Метаданные.Документы.ЗаказНаВнутреннееПотребление) Тогда
Текст =
"ВЫБРАТЬ
| Таблица.Ссылка КАК Заказ
|ИЗ
| Документ.ЗаказНаВнутреннееПотребление КАК Таблица
|ГДЕ
| ВЫБОР КОГДА &ОтобратьПоЗаказу ТОГДА
| Таблица.Ссылка = &Заказ
| ИНАЧЕ Таблица.Подразделение = &Подразделение
| И Таблица.Организация = &Организация
| И Таблица.Склад = &Склад
| И Таблица.Сделка = &Сделка
| И Таблица.ХозяйственнаяОперация = &ХозяйственнаяОперация
| КОНЕЦ
| И Таблица.Проведен";
Тексты.Добавить(Текст);
КонецЕсли;
Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| Таблица.Заказ КАК Заказ
|ПОМЕСТИТЬ ВтЗаказыОтбор
|ИЗ
| &ТекстОбъединения КАК Таблица";
ТекстОбъединения = СтрСоединить(Тексты, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
Текст = СтрЗаменить(Текст, "&ТекстОбъединения", СтрШаблон("(%1)", ТекстОбъединения));
ТекстыЗапроса.Добавить(Текст);
Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаЗаказы.ЗаказНаВнутреннееПотребление КАК ЗаказНаВнутреннееПотребление,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.КодСтроки КАК КодСтроки,
| СУММА(ТаблицаЗаказы.КОформлению) КАК КОформлениюОстаток
|ПОМЕСТИТЬ ЗаказыНаВнутреннееПотреблениеБезАналитик
|ИЗ
| (
|
| ВЫБРАТЬ
| Заказы.ЗаказНаВнутреннееПотребление КАК ЗаказНаВнутреннееПотребление,
| Заказы.Номенклатура КАК Номенклатура,
| Заказы.Характеристика КАК Характеристика,
| Заказы.КодСтроки КАК КодСтроки,
| Заказы.КОформлениюОстаток КАК КОформлению
| ИЗ
| РегистрНакопления.ЗаказыНаВнутреннееПотребление.Остатки(
| ,
| ЗаказНаВнутреннееПотребление В(
| ВЫБРАТЬ
| Таблица.Заказ КАК Заказ
| ИЗ
| ВтЗаказыОтбор КАК Таблица)
| И (Номенклатура, Характеристика) В
| (ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
| ИЗ
| Товары КАК Товары)
| И (Склад = &Склад ИЛИ Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))) КАК Заказы
|
| ОБЪЕДИНИТЬ ВСЕ
|
| ВЫБРАТЬ
| ЗаказыДвижения.ЗаказНаВнутреннееПотребление,
| ЗаказыДвижения.Номенклатура,
| ЗаказыДвижения.Характеристика,
| ЗаказыДвижения.КодСтроки,
| ВЫБОР
| КОГДА ЗаказыДвижения.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход)
| ТОГДА -ЗаказыДвижения.КОформлению
| ИНАЧЕ ЗаказыДвижения.КОформлению
| КОНЕЦ
| ИЗ
| РегистрНакопления.ЗаказыНаВнутреннееПотребление КАК ЗаказыДвижения
| ГДЕ
| ЗаказыДвижения.Регистратор = &Регистратор
| И ЗаказыДвижения.Активность
| И ЗаказыДвижения.ЗаказНаВнутреннееПотребление В(
| ВЫБРАТЬ
| Таблица.Заказ КАК Заказ
| ИЗ
| ВтЗаказыОтбор КАК Таблица)
| И (ЗаказыДвижения.Склад = &Склад ИЛИ ЗаказыДвижения.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))
| И (ЗаказыДвижения.Номенклатура, ЗаказыДвижения.Характеристика) В
| (ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика
| ИЗ
| Товары КАК Товары)) КАК ТаблицаЗаказы
|
|СГРУППИРОВАТЬ ПО
| ТаблицаЗаказы.Номенклатура,
| ТаблицаЗаказы.Характеристика,
| ТаблицаЗаказы.КодСтроки,
| ТаблицаЗаказы.ЗаказНаВнутреннееПотребление
|
|ИМЕЮЩИЕ
| СУММА(ТаблицаЗаказы.КОформлению) > 0";
ТекстыЗапроса.Добавить(Текст);
Тексты = Новый Массив();
Если ПравоДоступа("Чтение", Метаданные.Документы.ЗаказНаВнутреннееПотребление) Тогда
Текст =
"ВЫБРАТЬ
| ТаблицаЗаказы.ЗаказНаВнутреннееПотребление КАК ЗаказНаВнутреннееПотребление,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.КодСтроки КАК КодСтроки,
| ЗаказТовары.Ссылка.Сделка КАК Сделка,
| ТаблицаЗаказы.КОформлениюОстаток КАК КОформлениюОстаток,
| ЗаказТовары.СтатьяРасходов КАК СтатьяРасходов,
| ЗаказТовары.АналитикаРасходов КАК АналитикаРасходов,
| ЗаказТовары.ГруппаПродукции КАК ГруппаПродукции,
| ЗаказТовары.АналитикаАктивовПассивов КАК АналитикаАктивовПассивов,
|
| ВЫБОР КОГДА ЗаказТовары.Обособленно ТОГДА
|
| ТаблицаЗаказы.ЗаказНаВнутреннееПотребление.Назначение
|
| ИНАЧЕ
|
| ЗНАЧЕНИЕ(Справочник.Назначения.ПустаяСсылка)
|
| КОНЕЦ КАК Назначение,
|
| ЗаказТовары.ФизическоеЛицо КАК ФизическоеЛицо,
| ЗаказТовары.КатегорияЭксплуатации КАК КатегорияЭксплуатации
|
|ИЗ
| ЗаказыНаВнутреннееПотреблениеБезАналитик КАК ТаблицаЗаказы
|
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.ЗаказНаВнутреннееПотребление.Товары КАК ЗаказТовары
| ПО ЗаказТовары.Ссылка = ТаблицаЗаказы.ЗаказНаВнутреннееПотребление
| И ЗаказТовары.КодСтроки = ТаблицаЗаказы.КодСтроки";
Тексты.Добавить(Текст);
КонецЕсли;
ТекстОбъединения = СтрСоединить(Тексты, ОбщегоНазначенияУТ.РазделительЗапросовВОбъединении());
Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
| ТаблицаЗаказы.ЗаказНаВнутреннееПотребление КАК ЗаказНаВнутреннееПотребление,
| ТаблицаЗаказы.Номенклатура КАК Номенклатура,
| ТаблицаЗаказы.Характеристика КАК Характеристика,
| ТаблицаЗаказы.КодСтроки КАК КодСтроки,
| ТаблицаЗаказы.Сделка КАК Сделка,
| ТаблицаЗаказы.КОформлениюОстаток КАК КОформлениюОстаток,
| ТаблицаЗаказы.СтатьяРасходов КАК СтатьяРасходов,
| ТаблицаЗаказы.АналитикаРасходов КАК АналитикаРасходов,
| ТаблицаЗаказы.ГруппаПродукции КАК ГруппаПродукции,
| ТаблицаЗаказы.АналитикаАктивовПассивов КАК АналитикаАктивовПассивов,
| ТаблицаЗаказы.Назначение КАК Назначение,
| ТаблицаЗаказы.ФизическоеЛицо КАК ФизическоеЛицо,
| ТаблицаЗаказы.КатегорияЭксплуатации КАК КатегорияЭксплуатации
|ПОМЕСТИТЬ ЗаказыНаВнутреннееПотребление
|ИЗ
| &ТекстОбъединения КАК ТаблицаЗаказы";
Текст = СтрЗаменить(Текст, "&ТекстОбъединения", СтрШаблон("(%1)", ТекстОбъединения));
ТекстыЗапроса.Добавить(Текст);
Текст =
"ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоДублей,
| ЗаказыНаВнутреннееПотребление.Номенклатура КАК Номенклатура,
| ЗаказыНаВнутреннееПотребление.Характеристика КАК Характеристика,
| ЗаказыНаВнутреннееПотребление.СтатьяРасходов КАК СтатьяРасходов,
| ЗаказыНаВнутреннееПотребление.АналитикаРасходов КАК АналитикаРасходов,
| ЗаказыНаВнутреннееПотребление.АналитикаАктивовПассивов КАК АналитикаАктивовПассивов,
| ЗаказыНаВнутреннееПотребление.ГруппаПродукции КАК ГруппаПродукции,
| ЗаказыНаВнутреннееПотребление.ФизическоеЛицо КАК ФизическоеЛицо,
| ЗаказыНаВнутреннееПотребление.КатегорияЭксплуатации КАК КатегорияЭксплуатации
|ПОМЕСТИТЬ ДублиТоваров
|ИЗ
| ЗаказыНаВнутреннееПотребление КАК ЗаказыНаВнутреннееПотребление
|
|СГРУППИРОВАТЬ ПО
| ЗаказыНаВнутреннееПотребление.Номенклатура,
| ЗаказыНаВнутреннееПотребление.Характеристика,
| ЗаказыНаВнутреннееПотребление.СтатьяРасходов,
| ЗаказыНаВнутреннееПотребление.АналитикаРасходов,
| ЗаказыНаВнутреннееПотребление.ГруппаПродукции,
| ЗаказыНаВнутреннееПотребление.АналитикаАктивовПассивов,
| ЗаказыНаВнутреннееПотребление.ФизическоеЛицо,
| ЗаказыНаВнутреннееПотребление.КатегорияЭксплуатации
|;
|
|
|ВЫБРАТЬ
| Заказы.ЗаказНаВнутреннееПотребление КАК ЗаказНаВнутреннееПотребление,
| Заказы.Номенклатура КАК Номенклатура,
| Заказы.Характеристика КАК Характеристика,
| Заказы.СтатьяРасходов КАК СтатьяРасходов,
| Заказы.АналитикаРасходов КАК АналитикаРасходов,
| Заказы.ГруппаПродукции КАК ГруппаПродукции,
| Заказы.АналитикаАктивовПассивов КАК АналитикаАктивовПассивов,
| Заказы.Назначение КАК Назначение,
| Заказы.КодСтроки КАК КодСтроки,
| Заказы.КОформлениюОстаток КАК КОформлениюОстаток,
| 0 КАК Распределено,
| ДублиТоваров.КоличествоДублей КАК КоличествоДублей,
| Заказы.ФизическоеЛицо КАК ФизическоеЛицо,
| Заказы.КатегорияЭксплуатации КАК КатегорияЭксплуатации
|ИЗ
| ЗаказыНаВнутреннееПотребление КАК Заказы
|
| ЛЕВОЕ СОЕДИНЕНИЕ ДублиТоваров КАК ДублиТоваров
| ПО Заказы.ФизическоеЛицо = ДублиТоваров.ФизическоеЛицо
| И Заказы.КатегорияЭксплуатации = ДублиТоваров.КатегорияЭксплуатации
| И Заказы.Номенклатура = ДублиТоваров.Номенклатура
| И Заказы.СтатьяРасходов = ДублиТоваров.СтатьяРасходов
| И Заказы.АналитикаРасходов = ДублиТоваров.АналитикаРасходов
| И Заказы.ГруппаПродукции = ДублиТоваров.ГруппаПродукции
| И Заказы.АналитикаАктивовПассивов = ДублиТоваров.АналитикаАктивовПассивов
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| ЗаказНаВнутреннееПотребление";
ТекстыЗапроса.Добавить(Текст);
ТекстЗапроса = СтрСоединить(ТекстыЗапроса, ОбщегоНазначения.РазделительПакетаЗапросов());
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("Заказ", Объект.ЗаказНаВнутреннееПотребление);
Запрос.УстановитьПараметр("Организация", Объект.Организация);
Запрос.УстановитьПараметр("Склад", Объект.Склад);
Запрос.УстановитьПараметр("Подразделение", Объект.Подразделение);
Запрос.УстановитьПараметр("Сделка", Объект.Сделка);
Запрос.УстановитьПараметр("ХозяйственнаяОперация", Объект.ХозяйственнаяОперация);
Запрос.УстановитьПараметр("Регистратор", Объект.Ссылка);
Запрос.УстановитьПараметр("ОтобратьПоЗаказу", ОтобратьПоЗаказу);
ПустыеЗначенияЗаказов = Новый Массив();
ПустыеЗначенияЗаказов.Добавить(Неопределено);
УстановитьПривилегированныйРежим(Истина);
ПустыеЗначенияЗаказов.Добавить(Документы.ЗаказНаВнутреннееПотребление.ПустаяСсылка());
УстановитьПривилегированныйРежим(Ложь);
Запрос.УстановитьПараметр("ПустыеЗначенияЗаказов", ПустыеЗначенияЗаказов);
Запрос.УстановитьПараметр("Товары", Объект.Товары.Выгрузить(,"КодСтроки,Номенклатура,Характеристика,ЗаказНаВнутреннееПотребление"));
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
РезультатЗапроса = Запрос.ВыполнитьПакет();
Если РезультатЗапроса[2].Пустой() Тогда
Возврат Ложь;
КонецЕсли;
Выборка = РезультатЗапроса[5].Выбрать();
ТаблицаНераспределенныхТоваров = Новый ТаблицаЗначений();
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Номенклатура");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Характеристика");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("ЗаказНаВнутреннееПотребление");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("КодСтроки");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Количество");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("Назначение");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("СтатьяРасходов");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("АналитикаРасходов");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("ГруппаПродукции");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("АналитикаАктивовПассивов");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("ФизическоеЛицо");
ТаблицаНераспределенныхТоваров.Колонки.Добавить("КатегорияЭксплуатации");
Пока Выборка.Следующий() Цикл
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("Номенклатура", Выборка.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", Выборка.Характеристика);
СтруктураПоиска.Вставить("КодСтроки", 0);
СтруктураПоиска.Вставить("СтатьяРасходов", Выборка.СтатьяРасходов);
СтруктураПоиска.Вставить("АналитикаРасходов", Выборка.АналитикаРасходов);
СтруктураПоиска.Вставить("ГруппаПродукции", Выборка.ГруппаПродукции);
СтруктураПоиска.Вставить("АналитикаАктивовПассивов", Выборка.АналитикаАктивовПассивов);
СтруктураПоиска.Вставить("ФизическоеЛицо", Выборка.ФизическоеЛицо);
СтруктураПоиска.Вставить("КатегорияЭксплуатации", Выборка.КатегорияЭксплуатации);
НайденныеСтроки = Объект.Товары.НайтиСтроки(СтруктураПоиска);
НераспределенноеКоличество = Выборка.КОформлениюОстаток;
Если Выборка.КоличествоДублей < 2 Тогда
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Количество > НераспределенноеКоличество Тогда
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекСтрока);
НоваяСтрока.Количество = ТекСтрока.Количество - НераспределенноеКоличество;
ТекСтрока.Количество = НераспределенноеКоличество;
КонецЕсли;
ЗаполнитьЗначенияСвойств(ТекСтрока, Выборка, "КодСтроки,ЗаказНаВнутреннееПотребление,Назначение");
НераспределенноеКоличество = НераспределенноеКоличество - ТекСтрока.Количество;
Если НераспределенноеКоличество <= 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Иначе
НайденаПодходящаяСтрока = Ложь;
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Количество = Выборка.КОформлениюОстаток Тогда
НайденаПодходящаяСтрока = Истина;
ЗаполнитьЗначенияСвойств(ТекСтрока, Выборка, "КодСтроки,ЗаказНаВнутреннееПотребление,Назначение");
Прервать;
КонецЕсли;
КонецЦикла;
Если Не НайденаПодходящаяСтрока Тогда
НоваяСтрока = ТаблицаНераспределенныхТоваров.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
НоваяСтрока.Количество = НераспределенноеКоличество;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТаблицаНераспределенныхТоваров.Количество() > 0 Тогда
СтрокиТовары = Новый Массив();
Для Каждого СтрокаТовары Из Объект.Товары Цикл
Если СтрокаТовары.КодСтроки = 0 И Не ЗначениеЗаполнено(СтрокаТовары.ЗаказНаВнутреннееПотребление) Тогда
СтрокиТовары.Добавить(СтрокаТовары);
КонецЕсли;
КонецЦикла;
СтрокиТовары = Объект.Товары.НайтиСтроки(СтруктураПоиска);
ВсегоСтрокДляОбработки = СтрокиТовары.Количество();
Индекс = 0;
Пока Индекс < ВсегоСтрокДляОбработки Цикл
СтрокаТовары = СтрокиТовары[Индекс];
СтруктураПоиска = Новый Структура();
СтруктураПоиска.Вставить("Номенклатура", СтрокаТовары.Номенклатура);
СтруктураПоиска.Вставить("Характеристика", СтрокаТовары.Характеристика);
СтруктураПоиска.Вставить("СтатьяРасходов", СтрокаТовары.СтатьяРасходов);
СтруктураПоиска.Вставить("АналитикаРасходов", СтрокаТовары.АналитикаРасходов);
СтруктураПоиска.Вставить("ГруппаПродукции", СтрокаТовары.ГруппаПродукции);
СтруктураПоиска.Вставить("АналитикаАктивовПассивов", СтрокаТовары.АналитикаАктивовПассивов);
СтруктураПоиска.Вставить("ФизическоеЛицо", СтрокаТовары.ФизическоеЛицо);
СтруктураПоиска.Вставить("КатегорияЭксплуатации", СтрокаТовары.КатегорияЭксплуатации);
НайденныеСтроки = ТаблицаНераспределенныхТоваров.НайтиСтроки(СтруктураПоиска);
Для Каждого ТекСтрока Из НайденныеСтроки Цикл
Если ТекСтрока.Номенклатура = СтрокаТовары.Номенклатура
И ТекСтрока.Характеристика = СтрокаТовары.Характеристика
И ТекСтрока.Количество > 0 Тогда
КоличествоЗаполнить = Мин(ТекСтрока.Количество, СтрокаТовары.Количество);
Если КоличествоЗаполнить < СтрокаТовары.Количество Тогда
НоваяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТовары);
НоваяСтрока.Количество = СтрокаТовары.Количество - КоличествоЗаполнить;
СтрокиТовары.Добавить(НоваяСтрока);
ВсегоСтрокДляОбработки = ВсегоСтрокДляОбработки + 1;
КонецЕсли;
СтрокаТовары.Количество = КоличествоЗаполнить;
ЗаполнитьЗначенияСвойств(СтрокаТовары, ТекСтрока, "КодСтроки,ЗаказНаВнутреннееПотребление,Назначение");
ТекСтрока.Количество = ТекСтрока.Количество - СтрокаТовары.Количество;
Прервать;
КонецЕсли;
КонецЦикла;
Индекс = Индекс + 1;
КонецЦикла;
КонецЕсли;
Для Каждого ТекСтрока Из Объект.Товары Цикл
Если Не ЗначениеЗаполнено(ТекСтрока.КодСтроки) Или Не ЗначениеЗаполнено(ТекСтрока.ЗаказНаВнутреннееПотребление) Тогда
ТекСтрока.КодСтроки = 0;
ТекСтрока.ЗаказНаВнутреннееПотребление = Объект.ЗаказНаВнутреннееПотребление;
ТекСтрока.Назначение = Справочники.Назначения.ПустаяСсылка();
КонецЕсли;
КонецЦикла;
ТаблицаТоваров = Объект.Товары.Выгрузить();
ПоляСворачивания = Новый Массив();
Для Каждого Колонка Из ТаблицаТоваров.Колонки Цикл
Если Колонка.Имя = "АналитикаУчетаНоменклатуры"
Или Колонка.Имя = "Количество"
Или Колонка.Имя = "КоличествоУпаковок" Тогда
Продолжить;
КонецЕсли;
ПоляСворачивания.Добавить(Колонка.Имя);
КонецЦикла;
ТаблицаТоваров.Свернуть(СтрСоединить(ПоляСворачивания, ","), "Количество");
Объект.Товары.Загрузить(ТаблицаТоваров);
Для каждого СтрокаТовар Из Объект.Товары Цикл
ОбновитьОтклоненияОтЗаказаВСтроке(СтрокаТовар, Объект.ПотреблениеПоЗаказам);
КонецЦикла;
ЗаполнитьСтатусыУказанияСерийСервер();
Возврат Истина;
КонецФункции
&НаСервере
Процедура ПерезаполнитьПоОрдерам(МассивЗаказов)
ПараметрыЗаполнения = Документы.ВнутреннееПотребление.ПараметрыЗаполненияДокумента();
ПараметрыЗаполнения.ФормаОткрыта = Истина;
ПараметрыЗаполнения.ФормаОбъекта = ЭтотОбъект;
ПараметрыЗаполнения.ЗаполнятьПоОрдеру = Истина;
ТаблицаНакладная = Документы.ВнутреннееПотребление.ДанныеТаблицыТоварыДокумента(Объект.Ссылка);
РеквизитыШапки = Новый Структура("Организация, Подразделение, Склад, Сделка,
|ХозяйственнаяОперация, Ссылка, НаправлениеДеятельности");
ЗаполнитьЗначенияСвойств(РеквизитыШапки, Объект);
Документы.ВнутреннееПотребление.ИнициализироватьПараметрыЗаполнения(ПараметрыЗаполнения,
РеквизитыШапки, МассивЗаказов);
Документы.ВнутреннееПотребление.ЗаполнитьПоЗаказамОрдерам(ТаблицаНакладная, Объект.Ссылка, ПараметрыЗаполнения, Объект.ШтрихкодыУпаковок);
КоличествоИндексов = ТаблицаНакладная.Количество() - 1;
Для Индекс = 0 По КоличествоИндексов Цикл
Строка = ТаблицаНакладная[КоличествоИндексов - Индекс];
Если МассивЗаказов.Найти(Строка.ЗаказНаВнутреннееПотребление) = Неопределено Тогда
Продолжить;
КонецЕсли;
Если Строка.КоличествоВОрдере = 0 Тогда
ТаблицаНакладная.Удалить(Строка);
Иначе
Строка.Количество = Строка.КоличествоВОрдере;
КонецЕсли;
КонецЦикла;
Объект.Товары.Загрузить(ТаблицаНакладная);
Документы.ВнутреннееПотребление.ОбновитьЗависимыеРеквизитыТабличнойЧасти(Объект.Товары, ПараметрыЗаполнения);
Документы.ВнутреннееПотребление.ОбработатьДокументПослеДобавленияСтрок(Объект);
ЗаполнитьСлужебныеРеквизитыТабличнойЧасти();
Для Каждого Строка Из Объект.Товары Цикл
ПриДобавлениСтрокиТоваровНаСервере(Строка);
КонецЦикла;
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
ОбновитьИнформациюПоЗаказам();
НастроитьЗависимыеЭлементыФормыНаСервере("ХозяйственнаяОперация,Товары");
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаКлиенте
Процедура СообщитьОРезультатахЗаполнения()
Если РезультатыЗаполнения <> Неопределено Тогда
Если РезультатыЗаполнения.ЕстьНесобранные Тогда
ПоказатьОповещениеПользователя(
НСтр("ru = 'Количество перезаполнено'"),,
НСтр("ru='В строках перезаполнено количество с учетом собирающихся на складе товаров.'"),
БиблиотекаКартинок.Информация32);
Иначе
ПоказатьОповещениеПользователя(
НСтр("ru = 'Количество перезаполнено'"),,
НСтр("ru='В строках перезаполнено количество.'"),
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Товары
&НаКлиенте
Процедура ТоварыПриОкончанииРедактированияДляСерверногоВызова()
ТоварыПриОкончанииРедактированияНаСервере();
КонецПроцедуры
&НаСервере
Процедура ТоварыПриОкончанииРедактированияНаСервере()
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаСервере
Процедура ТоварыПослеУдаленияСервер(НеобходимоОбновитьСтатусыСерий, КэшированныеЗначения)
Если НеобходимоОбновитьСтатусыСерий Тогда
ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Неопределено, КэшированныеЗначения);
КонецЕсли;
Если ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам Тогда
ОбновитьИнформациюПоЗаказам();
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецПроцедуры
&НаКлиенте
Процедура ТоварыРаспоряжениеНачалоВыбораЗавершение(Результат, ДополнительныеПараметры) Экспорт
Элементы.Товары.ТекущиеДанные.ЗаказНаВнутреннееПотребление = Результат;
ТоварыРаспоряжениеНачалоВыбораФрагмент();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыРаспоряжениеНачалоВыбораФрагмент()
ОбновитьИнформациюПоЗаказам();
КонецПроцедуры
&НаКлиенте
Процедура ТоварыНоменклатураПриИзмененииВопросПользователюЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Не Результат Тогда
Возврат;
КонецЕсли;
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ПроверитьХарактеристикуПоВладельцу", ТекущаяСтрока.Характеристика);
СтруктураДействий.Вставить("ПроверитьЗаполнитьУпаковкуПоВладельцу", ТекущаяСтрока.Упаковка);
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
СтруктураДействий.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
СтруктураДействий.Вставить("ПриИзмененииТипаНоменклатуры", Новый Структура("ЕстьРаботы, ЕстьОтменено", Истина, Ложь));
СтруктураДействий.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
ПараметрыПроверкиСерий = Новый Структура("Склад, ПараметрыУказанияСерий", Объект.Склад, ПараметрыУказанияСерий);
СтруктураДействий.Вставить("ПроверитьСериюРассчитатьСтатус", ПараметрыПроверкиСерий);
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(ЭтотОбъект, "Номенклатура", СтруктураДействий);
СтруктураДействий.Вставить("НоменклатураПриИзмененииПереопределяемый", Новый Структура("ИмяФормы, ИмяТабличнойЧасти",
ЭтаФорма.ИмяФормы, "Товары"));
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействий,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
УстановитьПризнакЗаполненияСкладаНаКлиенте();
КонецПроцедуры
#КонецОбласти
#Область Прочее
&НаКлиентеНаСервереБезКонтекста
Функция ЗаказВСтрокеСверхЗаказа(ПотреблениеПоЗаказам, ЗаказНаВнутреннееПотребление)
Возврат ?(ПотреблениеПоЗаказам И ЗначениеЗаполнено(ЗаказНаВнутреннееПотребление), ЗаказНаВнутреннееПотребление, Неопределено);
КонецФункции
&НаКлиенте
Процедура Подключаемый_ЗакрытьФорму()
Закрыть();
КонецПроцедуры
&НаСервере
Процедура УстановитьСнятьОтметкуОбособленно(Установить)
НаправленияДеятельностиСервер.УстановитьСнятьОтметкуОбособленно(ЭтотОбъект, Установить);
КонецПроцедуры
&НаСервере
Функция ПоместитьТоварыИВидыЗапасовВХранилище()
ПараметрыРедактированияВидовЗапасов = ЗапасыСервер.ПараметрыРедактированияВидовЗапасов();
Если ПолучитьФункциональнуюОпцию("ИспользоватьПодакцизныеТовары") Тогда
ПараметрыРедактированияВидовЗапасов.ОтображатьСуммуАкциза = Истина;
ПараметрыРедактированияВидовЗапасов.ИспользоватьПодакцизныеТовары = Истина;
КонецЕсли;
Возврат ЗапасыСервер.ПоместитьТоварыИВидыЗапасовВХранилище(ЭтотОбъект, ПараметрыРедактированияВидовЗапасов);
КонецФункции
&НаСервере
Процедура ПолучитьВидыЗапасовИзХранилища(ВыбранноеЗначение)
ЗапасыСервер.ОбработатьВводВидовЗапасовВручную(ВыбранноеЗначение, ЭтаФорма);
КонецПроцедуры
&НаСервере
Процедура ПриЧтенииСозданииНаСервере()
ИспользуютсяЗаказы = ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыНаВнутреннееПотребление");
ИспользуютсяЗаказы = ИспользуютсяЗаказы ИЛИ ПолучитьФункциональнуюОпцию("ИспользоватьУправлениеРемонтами");
ИспользоватьСтатусы = ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыВнутреннихПотреблений");
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ВнутреннееПотребление));
ОрдернаяСхемаПриОтгрузке = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Объект.Склад, Объект.Дата);
ЭтоРаспоряжениеНакладная = ЭтоРаспоряжениеНакладная(Объект.Ссылка, ОрдернаяСхемаПриОтгрузке);
Если Параметры.Свойство("РезультатыПроверки") И Параметры.РезультатыПроверки.ЕстьПредупреждения Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Параметры.РезультатыПроверки.ТекстПредупреждения);
КонецЕсли;
УстановитьВидимостьЭлементовСерий();
ЗаполнитьСлужебныеРеквизитыТабличнойЧасти();
ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам = ПолучитьФункциональнуюОпцию("ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам");
ИспользоватьНесколькоОрганизаций = ПолучитьФункциональнуюОпцию("ИспользоватьНесколькоОрганизаций");
ИспользоватьПодразделения = ПолучитьФункциональнуюОпцию("ИспользоватьПодразделения");
НаправленияДеятельностиСервер.ПриЧтенииСозданииНаСервере(ЭтотОбъект);
НастроитьКомандуПодобратьПоЗаказамОрдерам();
ОбновитьИнформациюПоЗаказам();
Если Не ИспользуютсяЗаказы Тогда
Элементы.КартинкаРасхождениеЗаказ.Видимость = Ложь;
Элементы.КартинкаРасхождениеЗаказы.Видимость = Ложь;
КонецЕсли;
ВнутреннееПотреблениеСверхЗаказа = ПраваПользователяПовтИсп.ВнутреннееПотреблениеСверхЗаказа();
УстановитьДоступностьЭлементовФормыПоЗаказу();
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу(Истина);
АктуализироватьПотреблениеПодДеятельность(Ложь);
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказы);
ЗаполнитьСлужебныеРеквизитыПриИзмененииХозяйственнойОперации();
УстановитьВидимостьКомандПоЗаказу();
НастроитьЗависимыеЭлементыФормыНаСервере();
НастроитьПанельНавигации();
ОбновитьОбязательностьСкладаВТЧ();
РаботаСТабличнымиЧастями.ИнициализироватьКэшСтрок(Элементы.Товары);
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОПроведенииДокумента(ПараметрыЗаписи)
ПараметрОбработкиОповещения = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ПараметрыЗаписи);
Если ТипЗнч(ВладелецФормы) = Тип("ФормаКлиентскогоПриложения") Тогда
ИдентификаторФормыВладельца = ВладелецФормы.УникальныйИдентификатор;
Иначе
ИдентификаторФормыВладельца = Неопределено;
КонецЕсли;
ПараметрОбработкиОповещения.Вставить("ИдентификаторФормыВладельца", ИдентификаторФормыВладельца);
ПараметрОбработкиОповещения.Вставить("КлючиДокументаОповещение", РаботаСЖурналамиДокументовКлиент.ПолучитьПараметрыКлючаПоДокументу(
Объект.Ссылка, Объект.Дата, Объект.ХозяйственнаяОперация));
Оповестить("Запись_ВнутреннееПотребление", ПараметрОбработкиОповещения, Объект.Ссылка);
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьЭлементовФормыПоЗаказу()
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ТоварыОтвязатьОтЗаказа");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюОтвязатьОтЗаказа");
МассивЭлементов.Добавить("ТоварыГруппаЗаказНаВнутреннееПотребление");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Видимость",
Объект.ПотреблениеПоЗаказам И ВнутреннееПотреблениеСверхЗаказа);
МассивЭлементов = Новый Массив;
МассивЭлементов.Добавить("ТоварыДобавить");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюДобавить");
МассивЭлементов.Добавить("ТоварыСкопировать");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюСкопировать");
МассивЭлементов.Добавить("ТоварыПоискПоШтрихкоду");
МассивЭлементов.Добавить("ТоварыОткрытьПодбор");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
Не Объект.ПотреблениеПоЗаказам Или (Объект.ПотреблениеПоЗаказам И ВнутреннееПотреблениеСверхЗаказа));
КонецПроцедуры
&НаСервере
Процедура НастроитьКомандуПодобратьПоЗаказамОрдерам(УстанавливатьДоступность = Истина)
СтруктураПараметров = Новый Структура("ОрдернаяСхемаПриОтгрузке, ИспользоватьЗаказы, ИспользоватьНакладныеПоНесколькимЗаказам",
ОрдернаяСхемаПриОтгрузке, ИспользуютсяЗаказы, ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам);
НакладныеСервер.НастроитьКомандуПодобратьПоЗаказамОрдерам(
Элементы.ТоварыПодобратьТоварыПоЗаказамОрдерам, СтруктураПараметров, УстанавливатьДоступность);
Если Объект.Исправление Тогда
Элементы.ТоварыПодобратьТоварыПоЗаказамОрдерам.Видимость = Ложь;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбновитьИнформациюПоЗаказам()
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказы);
ПараметрыОбновления = ЗаказыСервер.ПараметрыОбновленияИнформацииПоЗаказамВФорме();
ПараметрыОбновления.ИмяРеквизитаСписокЗаказов = "СписокЗаказов";
ПараметрыОбновления.ПутьЗаказаВШапке = "Объект.ЗаказНаВнутреннееПотребление";
ПараметрыОбновления.ИмяНадписиЗаголовка = "НадписьЗаголовокЗаказы";
ПараметрыОбновления.ИмяГруппыКолонокВТабличнойЧасти = "ТоварыГруппаЗаказНаВнутреннееПотребление";
ПараметрыОбновления.ИмяЗаказаВТабличнойЧасти = "ЗаказНаВнутреннееПотребление";
ПараметрыОбновления.ИспользоватьЗаказыВТабличнойЧасти = ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам;
ЗаказыСервер.ОбновитьИнформациюПоЗаказамВФорме(ЭтаФорма,Объект.Товары, ПараметрыОбновления);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьПоЗаказуСервер()
Объект.Товары.Очистить();
МассивЗаказов = Новый Массив();
Если Не ИспользоватьВнутреннееПотреблениеПоНесколькимЗаказам Тогда
МассивЗаказов.Добавить(Объект.ЗаказНаВнутреннееПотребление);
КонецЕсли;
РеквизитыШапки = Новый Структура("Организация, НаправлениеДеятельности, Подразделение, Склад, Сделка, ХозяйственнаяОперация, Ссылка");
ЗаполнитьЗначенияСвойств(РеквизитыШапки, Объект);
ДанныеОтбора = Новый Структура("МассивЗаказов, РеквизитыШапки", МассивЗаказов, РеквизитыШапки);
ПорядокОформления = Константы.ПорядокОформленияНакладныхРасходныхОрдеров.Получить();
ПорядокСначалаОрдера = ПорядокОформления = Перечисления.ПорядокОформленияНакладныхРасходныхОрдеров.СначалаОрдера;
ДанныеОтбора.Вставить("ЗаполнятьПоОрдеру", ОрдернаяСхемаПриОтгрузке И ПорядокСначалаОрдера);
РезультатЗапроса = Документы.ВнутреннееПотребление.РезультатЗапросаПоОстаткамЗаказов(ДанныеОтбора, "ЗаполнениеПоЗаказам");
Если ДанныеОтбора.ЗаполнятьПоОрдеру Тогда
ПоляКлюча = "ЗаказНаВнутреннееПотребление, Номенклатура, Характеристика, Назначение, Серия";
НакладныеСервер.ЗаполнитьПоказательКоличествоПоОрдерам(РезультатЗапроса.ТаблицаОформить, РезультатЗапроса.ТаблицаОтгружено, ПоляКлюча);
НакладныеСервер.ЗаполнитьПоВарианту(Объект.Товары, РезультатЗапроса.ТаблицаОформить, "ЗаполнятьПоОрдеру");
Иначе
НакладныеСервер.ЗаполнитьПоВарианту(Объект.Товары, РезультатЗапроса.ТаблицаОформить, "ЗаполнятьПоЗаказу");
КонецЕсли;
Документы.ВнутреннееПотребление.ОбработатьДокументПослеДобавленияСтрок(Объект);
ЗаполнитьСлужебныеРеквизитыТабличнойЧасти();
ЗаполнитьСтатусыУказанияСерийСервер();
НастроитьЗависимыеЭлементыФормыНаСервере("Товары");
УстановитьПризнакЗаполненияСкладаНаСервере();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий)
СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьМногооборотнуюТаруИзХранилищаСервер(АдресТарыВХранилище)
СтруктураДействийИзмененныеСтроки = Новый Структура;
СтруктураДействийИзмененныеСтроки.Вставить("ПересчитатьКоличествоУпаковок");
СтруктураДействийДобавленныеСтроки = Новый Структура;
СтруктураДействийДобавленныеСтроки.Вставить("ПересчитатьКоличествоУпаковок");
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействийДобавленныеСтроки);
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействийДобавленныеСтроки,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
МногооборотнаяТараСервер.ЗаполнитьМногооборотнуюТаруИзХранилища(
Объект,
АдресТарыВХранилище,
"Товары",
"Номенклатура,Характеристика",
СтруктураДействийИзмененныеСтроки,
СтруктураДействийДобавленныеСтроки);
ЗаполнитьСлужебныеРеквизитыТабличнойЧасти();
ЗаполнитьСтатусыУказанияСерийСервер();
НастроитьЗависимыеЭлементыФормыНаСервере("Товары");
КонецПроцедуры
&НаСервере
Процедура ИзменитьЗаголовкиПоХозОперации()
АвтоЗаголовок = Истина;
Заголовок = "";
Элементы.НакладнаяПоЗаказу.Заголовок = НСтр("ru = 'Потребление по заказу'");
Элементы.НакладнаяПоЗаказам.Заголовок = НСтр("ru = 'Потребление по заказам'");
Если ПолучитьФункциональнуюОпцию("БазоваяВерсия") Тогда
АвтоЗаголовок = Ложь;
Если ЗначениеЗаполнено(Объект.Ссылка) Тогда
Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Списание товаров на хознужды %1 от %2'"),
Объект.Номер,
Объект.Дата);
Иначе
Заголовок = НСтр("ru = 'Списание товаров на хознужды (создание)'");
КонецЕсли;
ИначеЕсли ЗначениеЗаполнено(Объект.ХозяйственнаяОперация) Тогда
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию Тогда
Элементы.НакладнаяПоЗаказу.Заголовок = НСтр("ru = 'Передача по заказу'");
Элементы.НакладнаяПоЗаказам.Заголовок = НСтр("ru = 'Передача по заказам'");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьУсловноеОформление()
УсловноеОформление.Элементы.Очистить();
НоменклатураСервер.УстановитьУсловноеОформлениеЕдиницИзмерения(ЭтаФорма);
НоменклатураСервер.УстановитьУсловноеОформлениеХарактеристикНоменклатуры(ЭтаФорма);
НоменклатураСервер.УстановитьУсловноеОформлениеСерийНоменклатуры(ЭтаФорма, "СерииПриПланированииОтгрузкиУказываютсяВТЧТовары");
НоменклатураСервер.УстановитьУсловноеОформлениеСтатусовУказанияСерий(ЭтаФорма, Ложь);
ЗапасыСервер.УстановитьУсловноеОформлениеПодразделенияДляВидовЗапасов(ЭтаФорма);
НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеФлагаОбособленно(ЭтотОбъект);
НаправленияДеятельностиСервер.УстановитьУсловноеОформлениеНаправленияДеятельности(ЭтаФорма);
ТМЦВЭксплуатацииСервер.УстановитьУсловноеОформлениеИнвентарногоНомера(
ЭтотОбъект,,, Неопределено);
ТМЦВЭксплуатацииСервер.УстановитьУсловноеОформлениеФизЛица(
ЭтотОбъект,,, Неопределено);
ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(
УсловноеОформление, "Склад", "Объект.Склад", "СкладОбязателен");
#Область ПодразделениеОтметкаНеЗаполненного
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Подразделение.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ХозяйственнаяОперация");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Перечисления.ХозяйственныеОперации.СписаниеТоваровПоТребованию;
Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
#КонецОбласти
#Область ТоварыКодСтрокиВидимость
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыКодСтроки.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПотреблениеПоЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
#КонецОбласти
#Область ТоварыРаспоряжениеЦветТекста
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаВнутреннееПотребление.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗаказНаВнутреннееПотребление");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ГиперссылкаЦвет);
#КонецОбласти
#Область ТоварыРаспоряжениеТолькоПросмотр
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаВнутреннееПотребление.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗаказНаВнутреннееПотребление");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
#Область ТоварыРаспоряжениеТекст
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаВнутреннееПотребление.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.КодСтроки");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ЗаказНаВнутреннееПотребление");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказНаВнутреннееПотребление");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийОшибкуТекст);
Элемент.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = 'Сверх заказа, заказ не выбран'"));
#КонецОбласти
#Область ТоварыРаспоряжениеВидимость
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыЗаказНаВнутреннееПотребление.Имя);
ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных"));
ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ЗаказНаВнутреннееПотребление");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено;
ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПотреблениеПоЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
#КонецОбласти
#Область Прочее
ОбщегоНазначенияУТ.УстановитьСнятьОтметкуНезаполненного(
УсловноеОформление, "Подразделение", "Объект.Подразделение", "ПодразделениеОбязательно");
Элемент = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыНоменклатура.Имя);
ПолеЭлемента = Элемент.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыХарактеристика.Имя);
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.ПотреблениеПоЗаказам");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ВнутреннееПотреблениеСверхЗаказа");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
Элемент.Оформление.УстановитьЗначениеПараметра("ТолькоПросмотр", Истина);
#КонецОбласти
#Область ТоварыОсновноеСредство_Видимость
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыОсновноеСредство.Имя);
ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.УчитыватьВВидеГрупповогоОС");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Ложь;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
#КонецОбласти
#Область ТоварыАналитикаРасходов_Видимость
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыАналитикаРасходов.Имя);
ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.УчитыватьВВидеГрупповогоОС");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
#КонецОбласти
#Область ТоварыОсновноеСредство_Текст
ЭлементУсловногоОформления = УсловноеОформление.Элементы.Добавить();
ПолеЭлемента = ЭлементУсловногоОформления.Поля.Элементы.Добавить();
ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ТоварыОсновноеСредство.Имя);
ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.УчитыватьВВидеГрупповогоОС");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ОтборЭлемента.ПравоеЗначение = Истина;
ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Товары.ОсновноеСредство");
ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь);
ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра("Текст", НСтр("ru = '<создается автоматически, если не заполнено>'"));
#КонецОбласти
КонецПроцедуры
&НаСервере
Процедура ОтвязатьСтрокиОтЗаказаНаСервере(КэшированныеЗначения)
Если НЕ Объект.ПотреблениеПоЗаказам Тогда
Возврат;
КонецЕсли;
ВыделенныеСтроки = Элементы.Товары.ВыделенныеСтроки;
Для каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
ОтвязатьСтрокуОтЗаказа(ИдентификаторСтроки, КэшированныеЗначения);
КонецЦикла;
ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу();
КонецПроцедуры
&НаСервере
Процедура ОтвязатьСтрокуОтЗаказа(ИдентификаторСтроки, КэшированныеЗначения)
Если НЕ Объект.ПотреблениеПоЗаказам Тогда
Возврат;
КонецЕсли;
СтрокаТаблицы = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
НоменклатураКлиентСервер.ОбновитьКешированныеЗначенияДляУчетаСерий(СтрокаТаблицы,КэшированныеЗначения,ПараметрыУказанияСерий);
СтрокаТаблицы.КодСтроки = 0;
СтрокаТаблицы.Назначение = Неопределено;
СтрокаТаблицы.Обособленно = Ложь;
СтрокаТаблицы.РасхождениеЗаказ = 1;
СтрокаТаблицы.ЗаказНаВнутреннееПотребление = ЗаказВСтрокеСверхЗаказа(Объект.ПотреблениеПоЗаказам, Объект.ЗаказНаВнутреннееПотребление);
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерийПриОкончанииРедактированияСтрокиТЧ(Объект,ПараметрыУказанияСерий,ИдентификаторСтроки,КэшированныеЗначения);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЭтоРаспоряжениеНакладная(Ссылка, ОрдернаяСхемаПриОтгрузке)
Возврат ОрдернаяСхемаПриОтгрузке И НакладныеСервер.ЕстьРасходныйОрдерДляЗаказовНаОтгрузку(Ссылка);
КонецФункции
&НаСервере
Процедура УстановитьВидимостьКомандПоЗаказу()
Элементы.ЗакрытьЗаказ.Видимость = Объект.ПотреблениеПоЗаказам;
Элементы.ЗакрытьЗаказы.Видимость = Объект.ПотреблениеПоЗаказам;
КонецПроцедуры
&НаСервере
Процедура УстановитьПараметрыВыбора()
#Область ТоварыСтатьяРасходов
НовыеСвязиПараметровВыбора = Новый Массив;
НоваяСвязь = Новый СвязьПараметраВыбора("УчитыватьВВидеГрупповогоОС", "Элементы.Товары.ТекущиеДанные.УчитыватьВВидеГрупповогоОС", РежимИзмененияСвязанногоЗначения.НеИзменять);
НовыеСвязиПараметровВыбора.Добавить(НоваяСвязь);
Элементы.ТоварыСтатьяРасходов.СвязиПараметровВыбора = Новый ФиксированныйМассив(НовыеСвязиПараметровВыбора);
#КонецОбласти
#Область ТоварыАналитикаРасходов
НовыеСвязиПараметровВыбора = Новый Массив;
НоваяСвязь = Новый СвязьПараметраВыбора("Отбор.Владелец", "Элементы.Товары.ТекущиеДанные.СтатьяРасходов", РежимИзмененияСвязанногоЗначения.Очищать);
НовыеСвязиПараметровВыбора.Добавить(НоваяСвязь);
НоваяСвязь = Новый СвязьПараметраВыбора("УчитыватьВВидеГрупповогоОС", "Элементы.Товары.ТекущиеДанные.УчитыватьВВидеГрупповогоОС", РежимИзмененияСвязанногоЗначения.НеИзменять);
НовыеСвязиПараметровВыбора.Добавить(НоваяСвязь);
Элементы.ТоварыАналитикаРасходов.СвязиПараметровВыбора = Новый ФиксированныйМассив(НовыеСвязиПараметровВыбора);
#КонецОбласти
КонецПроцедуры
&НаКлиенте
Процедура СтатусПриИзмененииЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
ЗаполнитьСерииПоОтгрузке = Ложь;
Ответ = РезультатВопроса;
Если Ответ = КодВозвратаДиалога.Да Тогда
ЗаполнитьСерииПоОтгрузке = Истина;
КонецЕсли;
СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке);
КонецПроцедуры
&НаСервере
Процедура СтатусПриИзмененииСервер(ЗаполнитьСерииПоОтгрузке)
ПараметрыУказанияСерий = Новый ФиксированнаяСтруктура(НоменклатураСервер.ПараметрыУказанияСерий(Объект, Документы.ВнутреннееПотребление));
Если ЗаполнитьСерииПоОтгрузке Тогда
Документы.ВнутреннееПотребление.ЗаполнитьСерииПоОтгрузке(Объект);
СобытияФорм.ПриИзмененииЭлемента(ЭтотОбъект, "Товары");
КонецЕсли;
НоменклатураСервер.ЗаполнитьСтатусыУказанияСерий(Объект, ПараметрыУказанияСерий);
НастроитьЗависимыеЭлементыФормыНаСервере("Статус");
КонецПроцедуры
&НаСервере
Функция ВыводитьСообщениеПоИспользованиюСтатусов()
ВыводитьСообщениеПоИспользованиюСтатусов = Ложь;
Если ПараметрыУказанияСерий.ИспользоватьСерииНоменклатуры
И Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию
И НЕ ПолучитьФункциональнуюОпцию("ИспользоватьСтатусыВнутреннихПотреблений") Тогда
УстановитьПривилегированныйРежим(Истина);
ВозможенУчетСерийВЭксплуатации = ТМЦВЭксплуатацииПовтИсп.ВозможенУчетСерийВЭксплуатации();
ПолитикиУчетаСерийСкладОтправитель = СкладыСервер.ИспользованиеСерийНаСкладеПоПолитикамУчета(Объект.Склад);
ИспользоватьОрдернуюСхемуОтправитель = СкладыСервер.ИспользоватьОрдернуюСхемуПриОтгрузке(Объект.Склад, Объект.Дата);
ПараметрыСерийСкладаОтправитель = СкладыСервер.ИспользованиеСерийНаСкладе(Объект.Склад, Ложь);
УстановитьПривилегированныйРежим(Ложь);
Если ИспользоватьОрдернуюСхемуОтправитель Тогда
Если НЕ ПолитикиУчетаСерийСкладОтправитель.УказыватьПриПланированииОтгрузки
И ВозможенУчетСерийВЭксплуатации Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ВозможенУчетСерийВЭксплуатации Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
Иначе
Если Не ПараметрыСерийСкладаОтправитель.ИспользоватьСерииНоменклатуры
И ВозможенУчетСерийВЭксплуатации Тогда
ВыводитьСообщениеПоИспользованиюСтатусов = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Возврат ВыводитьСообщениеПоИспользованиюСтатусов;
КонецФункции
&НаКлиенте
Функция МожноРазбитьСтроку()
ТекущаяСтрока = Элементы.Товары.ТекущиеДанные;
Если ТекущаяСтрока <> Неопределено И ТекущаяСтрока.ИнвентарныйУчет Тогда
ТекстСообщения = НСтр("ru = 'Невозможно разбить строку с инвентарным учетом.'");
ПоказатьПредупреждение(,ТекстСообщения);
Возврат Ложь;
КонецЕсли;
Возврат Истина;
КонецФункции
#КонецОбласти
#Область РаботаСБуферомОбмена
&НаСервере
Процедура СкопироватьСтрокиНаСервере()
РаботаСТабличнымиЧастями.СкопироватьСтрокиВБуферОбмена(Объект.Товары, Элементы.Товары.ВыделенныеСтроки);
КонецПроцедуры
&НаСервере
Процедура ПолучитьСтрокиИзБуфераОбмена()
ПараметрыОтбора = Новый Соответствие;
Если Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.СписаниеТоваровПоТребованию Тогда
ПараметрыОтбора.Вставить("Номенклатура.ТипНоменклатуры", НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТареРаботе(Ложь));
Иначе
ПараметрыОтбора.Вставить("Номенклатура.ТипНоменклатуры", НоменклатураКлиентСервер.ОтборПоТоваруМногооборотнойТаре(Ложь));
КонецЕсли;
Колонки = "Номенклатура,Характеристика,Упаковка,КоличествоУпаковок,КатегорияЭксплуатации,ФизическоеЛицо,ИнвентарныйНомер,
|СтатьяРасходов,АналитикаРасходов,АналитикаАктивовПассивов,ОсновноеСредство";
ТаблицаТоваров = РаботаСТабличнымиЧастями.СтрокиИзБуфераОбмена(ПараметрыОтбора, Колонки);
Если Не ЗначениеЗаполнено(ТаблицаТоваров) Тогда
Возврат;
КонецЕсли;
СтруктураДействий = Новый Структура;
ДобавитьВСтруктуруДействияПриИзмененииКоличестваУпаковок(СтруктураДействий);
ДоходыИРасходыКлиентСервер.ВставитьДействиеЗаполнитьСтатьюАналитикуРасходовНоменклатуры(
СтруктураДействий,
ЭтотОбъект,
Объект.ХозяйственнаяОперация,
Объект.Организация,
Объект.Подразделение);
НаправленияДеятельностиКлиентСервер.СтруктураДействийВставитьПриДобавленииСтроки(ЭтаФорма, СтруктураДействий);
ОбрабатываемыеСтроки = Новый Массив();
Для каждого СтрокаТовара Из ТаблицаТоваров Цикл
ТекущаяСтрока = Объект.Товары.Добавить();
ЗаполнитьЗначенияСвойств(ТекущаяСтрока, СтрокаТовара);
ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, Объект.ПотреблениеПоЗаказам);
ТекущаяСтрока.ЗаказНаВнутреннееПотребление = ЗаказВСтрокеСверхЗаказа(
Объект.ПотреблениеПоЗаказам, Объект.ЗаказНаВнутреннееПотребление);
ОбрабатываемыеСтроки.Добавить(ТекущаяСтрока);
КонецЦикла;
ПакетнаяОбработкаТабличнойЧастиСервер.ОбработатьСтрокиТЧ(
ОбрабатываемыеСтроки,
СтруктураДействий,
Объект.Товары);
Для каждого ТекущаяСтрока Из ОбрабатываемыеСтроки Цикл
ПриДобавлениСтрокиТоваровНаСервере(ТекущаяСтрока);
КонецЦикла;
ЗаполнитьСлужебныеРеквизитыТабличнойЧасти();
ЗаполнитьСтатусыУказанияСерийСервер();
УстановитьПризнакЗаполненияСкладаНаСервере();
МногооборотнаяТараСервер.ОбновитьСостояниеЗаполненияМногооборотнойТары(Объект.СостояниеЗаполненияМногооборотнойТары);
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказы);
НастроитьЗависимыеЭлементыФормыНаСервере("Товары");
КонецПроцедуры
&НаСервере
Процедура УстановитьДоступностьКомандБуфераОбмена()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("ТоварыВставитьСтроки");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
РаботаСТабличнымиЧастями.ЕстьСтрокиВБуфереОбмена() И (Не Объект.ПотреблениеПоЗаказам Или ВнутреннееПотреблениеСверхЗаказа));
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьКомандБуфераОбменаНаКлиенте()
МассивЭлементов = Новый Массив();
МассивЭлементов.Добавить("ТоварыВставитьСтроки");
МассивЭлементов.Добавить("ТоварыКонтекстноеМенюВставитьСтроки");
ОбщегоНазначенияУТКлиентСервер.УстановитьСвойствоЭлементовФормы(Элементы, МассивЭлементов, "Доступность",
(НЕ Объект.ПотреблениеПоЗаказам ИЛИ ВнутреннееПотреблениеСверхЗаказа));
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСлужебныеРеквизитыТабличнойЧасти()
Для каждого СтрокаТовар Из Объект.Товары Цикл
ОбновитьОтклоненияОтЗаказаВСтроке(СтрокаТовар, Объект.ПотреблениеПоЗаказам);
КонецЦикла;
ПараметрыЗаполненияРеквизитов = Новый Структура;
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакХарактеристикиИспользуются", Новый Структура("Номенклатура", "ХарактеристикиИспользуются"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакТипНоменклатуры", Новый Структура("Номенклатура", "ТипНоменклатуры"));
ПараметрыЗаполненияРеквизитов.Вставить("ЗаполнитьПризнакАртикул", Новый Структура("Номенклатура", "Артикул"));
ПакетнаяОбработкаТабличнойЧастиКлиентСерверЛокализация.ДополнитьСтруктуруДействийПриИзмененииЭлемента(ЭтотОбъект, "Номенклатура", ПараметрыЗаполненияРеквизитов);
НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(Объект.Товары,ПараметрыЗаполненияРеквизитов);
Справочники.КатегорииЭксплуатации.ЗаполнитьПризнакиКатегорииЭксплуатации(Объект.Товары);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборСерий(Текст = "", ТекущиеДанные = Неопределено)
Если НоменклатураКлиент.ДляУказанияСерийНуженСерверныйВызов(ЭтаФорма,ПараметрыУказанияСерий,Текст, ТекущиеДанные)Тогда
Если ТекущиеДанные = Неопределено Тогда
ТекущиеДанныеИдентификатор = Элементы.Товары.ТекущиеДанные.ПолучитьИдентификатор();
Иначе
ТекущиеДанныеИдентификатор = ТекущиеДанные.ПолучитьИдентификатор();
КонецЕсли;
ПараметрыФормыУказанияСерий = ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор);
ДополнительныеПараметры = Новый Структура("ПараметрыФормыУказанияСерий", ПараметрыФормыУказанияСерий);
ОписаниеОповещения = Новый ОписаниеОповещения("ОткрытьПодборСерийЗавершение", ЭтотОбъект, ДополнительныеПараметры);
ОткрытьФорму(ПараметрыФормыУказанияСерий.ИмяФормы,
ПараметрыФормыУказанияСерий,
ЭтаФорма,,,,
ОписаниеОповещения,
РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПодборСерийЗавершение(Результат, ДополнительныеПараметры) Экспорт
ПараметрыФормыУказанияСерий = ДополнительныеПараметры.ПараметрыФормыУказанияСерий;
ЗначениеВозврата = Результат;
Если ЗначениеВозврата <> Неопределено Тогда
ОбработатьУказаниеСерийСервер(ПараметрыФормыУказанияСерий);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПараметрыФормыУказанияСерий(ТекущиеДанныеИдентификатор)
Возврат НоменклатураСервер.ПараметрыФормыУказанияСерий(Объект, ПараметрыУказанияСерий, ТекущиеДанныеИдентификатор, ЭтаФорма);
КонецФункции
#КонецОбласти
#Область РасхожденияВДокументахОтгрузки
&НаСервере
Процедура ОбновитьЗависимыеРеквизитыФормыСерверПоЗаказу(ЭтоЧтениеОбъекта = Ложь)
Если Объект.Товары.Количество() = 0
ИЛИ НЕ Объект.ПотреблениеПоЗаказам
ИЛИ НЕ ИспользуютсяЗаказы Тогда
Элементы.КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
Элементы.КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
НадписьРасхождениеЗаказ = "";
Если Объект.Товары.Количество() > 0 И НЕ ЭтоЧтениеОбъекта Тогда
Для каждого СтрокаТовары Из Объект.Товары Цикл
СтрокаТовары.РасхождениеЗаказ = 0;
КонецЦикла;
КонецЕсли;
Возврат;
КонецЕсли;
ОбновитьЗависимыеРеквизитыФормыПоЗаказу(
Объект.Товары,
НадписьРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказ,
Элементы.КартинкаРасхождениеЗаказы);
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьЗависимыеРеквизитыФормыПоЗаказу(Товары, НадписьРасхождениеЗаказ, КартинкаРасхождениеЗаказ, КартинкаРасхождениеЗаказы)
КоличествоРасхождений = Товары.Итог("РасхождениеЗаказ");
Если КоличествоРасхождений > 0 Тогда
КартинкаРасхождениеЗаказ.Картинка = БиблиотекаКартинок.ПревышениеЗаказа;
КартинкаРасхождениеЗаказы.Картинка = БиблиотекаКартинок.ПревышениеЗаказа;
НадписьРасхождениеЗаказ = СтрЗаменить(НСтр("ru='Строк сверх заказа: %КоличествоРасхождений%'"), "%КоличествоРасхождений%", КоличествоРасхождений);
Иначе
КартинкаРасхождениеЗаказ.Картинка = Новый Картинка();
КартинкаРасхождениеЗаказы.Картинка = Новый Картинка();
НадписьРасхождениеЗаказ = "";
КоличествоРасхождений = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОбОкончанииОтвязкиСтрок(КоличествоОтработанныхСтрок, СтрокиОтвязаны = Истина)
Если СтрокиОтвязаны Тогда
ТекстОповещения = НСтр("ru='В документе от заказов отвязано строк (%%Количество%%).'");
ТекстОповещения = СтрЗаменить(ТекстОповещения, "%%Количество%%", КоличествоОтработанныхСтрок);
ПоказатьОповещениеПользователя(
НСтр("ru = 'Строки отвязаны'"),
,
ТекстОповещения,
БиблиотекаКартинок.Информация32);
Иначе
ПоказатьОповещениеПользователя(
НСтр("ru = 'Строки не отвязаны'"),
,
НСтр("ru='Ни одна строка не была отвязана.'"),
БиблиотекаКартинок.Информация32);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ОбновитьОтклоненияОтЗаказаВСтроке(ТекущаяСтрока, ПотреблениеПоЗаказам)
Если ПотреблениеПоЗаказам Тогда
Если ТекущаяСтрока.КодСтроки = 0 Тогда
ТекущаяСтрока.РасхождениеЗаказ = 1;
Иначе
ТекущаяСтрока.РасхождениеЗаказ = 0;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВопросПользователюПриИзмененииРеквизитаСтроки(ОписаниеОповещения, ТекущаяСтрока)
Если ТекущаяСтрока.КодСтроки = 0 Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина);
Возврат;
КонецЕсли;
Если ТекущаяСтрока.Номенклатура = ПредыдущиеРеквизитыСтроки.Номенклатура
И ТекущаяСтрока.Характеристика = ПредыдущиеРеквизитыСтроки.Характеристика Тогда
ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина);
Возврат;
КонецЕсли;
ДополнительныеПараметры = ДополнительныеПараметрыОбработкиЗавершения();
ДополнительныеПараметры.ТекущаяСтрока = ТекущаяСтрока;
ДополнительныеПараметры.ОписаниеОповещения = ОписаниеОповещения;
ТекстВопроса = НСтр("ru='Редактируемая строка перестанет быть связанной со строкой заказа. Продолжить?'");
ПоказатьВопрос(
Новый ОписаниеОповещения("ВопросПользователюПриИзмененииРеквизитаСтрокиВопросЗавершение", ЭтотОбъект, ДополнительныеПараметры),
ТекстВопроса,
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ВопросПользователюПриИзмененииРеквизитаСтрокиВопросЗавершение(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ = КодВозвратаДиалога.Да Тогда
ДополнительныеПараметры.ТекущаяСтрока.КодСтроки = 0;
ДополнительныеПараметры.СтрокаОтвязанаОтЗаказа = Истина;
ОбновитьОтклоненияОтЗаказаВСтроке(ДополнительныеПараметры.ТекущаяСтрока, Объект.ПотреблениеПоЗаказам);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, Истина);
Иначе
ЗаполнитьЗначенияСвойств(ДополнительныеПараметры.ТекущаяСтрока, ПредыдущиеРеквизитыСтроки);
ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОписаниеОповещения, Ложь);
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ТМЦВЭксплуатации
&НаСервере
Процедура НастроитьПанельНавигации()
СтруктураНастроек = Новый Структура;
СтруктураНастроек.Вставить("ИспользоватьМатериалыВЭксплуатации",
Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ПередачаВЭксплуатацию
ИЛИ Объект.ХозяйственнаяОперация = Перечисления.ХозяйственныеОперации.ВозвратИзЭксплуатации);
ОбщегоНазначенияУТ.НастроитьФормуПоПараметрам(ЭтотОбъект, СтруктураНастроек);
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииКатегорииЭксплуатации(ТекущаяСтрока)
СтруктураДействий = Новый Структура;
СтруктураДействий.Вставить("ЗаполнитьПризнакиКатегорииЭксплуатации");
ПакетнаяОбработкаТабличнойЧастиКлиент.ОбработатьСтрокуТЧ(ТекущаяСтрока, СтруктураДействий, КэшированныеЗначения);
ДоходыИРасходыКлиентСервер.СтатьяПриИзменении(ЭтотОбъект, Элементы.ТоварыСтатьяРасходов);
Если НЕ ТекущаяСтрока.УчетПоФизЛицам Тогда
ТекущаяСтрока.ФизическоеЛицо = ПредопределенноеЗначение("Справочник.ФизическиеЛица.ПустаяСсылка");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьКатегориюЭксплуатацииЗавершение(Результат, ДополнительныеПараметры) Экспорт
ВыделенныеСтроки = ДополнительныеПараметры.ВыделенныеСтроки;
Для каждого ИдентификаторСтроки Из ВыделенныеСтроки Цикл
ТекущаяСтрока = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
ПриИзмененииКатегорииЭксплуатации(ТекущаяСтрока);
КонецЦикла;
ТМЦВЭксплуатацииКлиент.ОбработатьСтрокуПриИзмененииКатегорииЭксплуатации(ВыделенныеСтроки, Объект.Товары);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьИнвентарныйНомерЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
ЗаполнитьИнвентарныйНомерНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьИнвентарныйНомерНаСервере()
УчестьИнвентарныеНомера = Новый Массив;
Для Каждого ДанныеСтроки Из Объект.Товары Цикл
Если ДанныеСтроки.ИнвентарныйУчет
И ЗначениеЗаполнено(ДанныеСтроки.ИнвентарныйНомер)
И Элементы.Товары.ВыделенныеСтроки.Найти(ДанныеСтроки.ПолучитьИдентификатор()) = Неопределено Тогда
УчестьИнвентарныеНомера.Добавить(ДанныеСтроки.ИнвентарныйНомер);
КонецЕсли;
КонецЦикла;
СписокСтрок = Новый Массив;
Для Каждого ИдентификаторСтроки Из Элементы.Товары.ВыделенныеСтроки Цикл
ДанныеСтроки = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ДанныеСтроки.ИнвентарныйУчет Тогда
СписокСтрок.Добавить(ИдентификаторСтроки);
КонецЕсли;
КонецЦикла;
НовыеИнвентарныеНомера = ТМЦВЭксплуатацииСервер.НовыеИнвентарныеНомера(
СписокСтрок.Количество(),
УчестьИнвентарныеНомера,
Объект.Ссылка);
Для Индекс = 0 По СписокСтрок.ВГраница() Цикл
ДанныеСтроки = Объект.Товары.НайтиПоИдентификатору(СписокСтрок[Индекс]);
ДанныеСтроки.ИнвентарныйНомер = НовыеИнвентарныеНомера[Индекс];
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СоздатьГрупповоеОСЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса = КодВозвратаДиалога.Да Тогда
СоздатьГрупповоеОСНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СоздатьГрупповоеОСНаСервере()
СписокСтрок = Новый Массив;
Для Каждого ИдентификаторСтроки Из Элементы.Товары.ВыделенныеСтроки Цикл
ДанныеСтроки = Объект.Товары.НайтиПоИдентификатору(ИдентификаторСтроки);
Если ДанныеСтроки.УчитыватьВВидеГрупповогоОС Тогда
СписокСтрок.Добавить(ДанныеСтроки);
КонецЕсли;
КонецЦикла;
Если СписокСтрок.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ТабличнаяЧасть = Объект.Товары;
СписокКатегорий = ТабличнаяЧасть.Выгрузить(СписокСтрок, "КатегорияЭксплуатации").ВыгрузитьКолонку("КатегорияЭксплуатации");
ТекстЗапроса =
"ВЫБРАТЬ
| КатегорииЭксплуатации.Ссылка КАК Ссылка,
| КатегорииЭксплуатации.ГруппаОС КАК ГруппаОС,
| &ДатаНачалаЭксплуатации КАК ДатаНачалаЭксплуатации,
| ВЫБОР
| КОГДА ЕСТЬNULL(КатегорииЭксплуатации.СрокЭксплуатации, 0) <> 0
| ТОГДА НАЧАЛОПЕРИОДА(КОНЕЦПЕРИОДА(ДОБАВИТЬКДАТЕ(&ДатаНачалаЭксплуатации, МЕСЯЦ, КатегорииЭксплуатации.СрокЭксплуатации), МЕСЯЦ), ДЕНЬ)
| ИНАЧЕ ДАТАВРЕМЯ(1,1,1)
| КОНЕЦ КАК ДатаЗавершенияЭксплуатации,
| КатегорииЭксплуатации.СрокЭксплуатации КАК СрокЭксплуатации
|ИЗ
| Справочник.КатегорииЭксплуатации КАК КатегорииЭксплуатации
|ГДЕ
| КатегорииЭксплуатации.Ссылка В (&СписокКатегорий)
| И КатегорииЭксплуатации.УчитыватьВВидеГрупповогоОС";
Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("СписокКатегорий", СписокКатегорий);
Запрос.УстановитьПараметр("ДатаНачалаЭксплуатации", НачалоМесяца(Объект.Дата));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
СозданныеОС = Новый Соответствие();
ПараметрыНаименования = Новый Структура("ДатаНачалаЭксплуатации,ДатаЗавершенияЭксплуатации,СрокЭксплуатации,КатегорияЭксплуатации");
Пока Выборка.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ПараметрыНаименования, Выборка);
ПараметрыНаименования.КатегорияЭксплуатации = Выборка.Ссылка;
ОсновноеСредство = Справочники.ОбъектыЭксплуатации.СоздатьЭлемент();
ОсновноеСредство.ТипОС = Перечисления.ТипыОС.ГрупповоеОС;
ОсновноеСредство.Наименование = Справочники.ПартииТМЦВЭксплуатации.СформироватьНаименованиеГрупповогоОС(ПараметрыНаименования);
ОсновноеСредство.ГруппаОС = Выборка.ГруппаОС;
ОсновноеСредство.Записать();
СозданныеОС.Вставить(Выборка.Ссылка, ОсновноеСредство.Ссылка);
КонецЦикла;
Для Каждого ДанныеСтроки Из СписокСтрок Цикл
ОсновноеСредство = СозданныеОС.Получить(ДанныеСтроки.КатегорияЭксплуатации);
Если ОсновноеСредство <> Неопределено Тогда
ДанныеСтроки.ОсновноеСредство = ОсновноеСредство;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура Подключаемый_ОбработатьЗаписьОбъекта()
ОбщегоНазначенияУТКлиент.ОбработатьЗаписьОбъектаВФорме(ЭтотОбъект, ПараметрыДляЗаписи);
КонецПроцедуры
#КонецОбласти