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