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