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