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