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