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