Листинги модулей документов
Листинг И.1 – Код модуля объекта документ АктОбИсправимомБраке
Примечание – Источник: собственная разработка
Процедура ОбработкаПроведения(Отказ, Режим)
ФСЗН = ПолучитьКонстанты.ПолучитьПроцентФСЗН() / 100;
Страховые = ПолучитьКонстанты.ПолучитьПроцентСтраховыхОтчислений() / 100;
Движения.ИсправимыйВнутреннийБрак.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;
// регистр Управленческий Д28 К10
// сумма всех используемых материалов для исправления брака будет списываться пропорционально количеству бракованных партий продукции
ОбщаяСуммаМатериалов = 0;
Для Каждого ТекСтрока Из МатериалыНаИсправление Цикл
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.СчетКт = ПланыСчетов.Управленческий.Материалы;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.Период = Дата;
Движение.Сумма = ТекСтрока.Сумма;
ОбщаяСуммаМатериалов = ОбщаяСуммаМатериалов + ТекСтрока.Сумма;
Движение.КоличествоКт = ТекСтрока.Количество;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрока.Номенклатура;
КонецЦикла;
КоличествоПартий = СписокБракованныхТоваров.Количество();
Для Каждого ТекСтрокаСписокБракованныхТоваров Из СписокБракованныхТоваров Цикл
// рагистр ИсправимыйВнутреннийБрак
Движение = Движения.ИсправимыйВнутреннийБрак.Добавить();
Движение.Период = Дата;
Движение.Подразделение = Подразделение;
Движение.МОЛ = МОЛ;
Движение.Номенклатура = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.ПричинаБрака = ПричинаБрака;
Движение.ОтветственныйЗаИсправление = ОтветственныйЗаИсправление;
Движение.КоличествоБракованныхТоваров = ТекСтрокаСписокБракованныхТоваров.Количество;
// стоимость оплаты за исправление и стоимость затраченных ресурсов записываются пропорционально количеству бракованных партий продукции
Движение.ОплатаЗаИсправление = ОплатаЗаИсправление / КоличествоПартий;
Движение.СтоимостьЗатраченныхМатериалов = ОбщаяСуммаМатериалов / КоличествоПартий;
Если (ПричинаБрака = Перечисления.ПричинаБрака.Технический) тогда
// регистр Управленческий Д28 К70
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.СчетКт = ПланыСчетов.Управленческий.РасчетыСПерсоналомПоОплатеТруда;
Движение.Период = Дата;
Движение.Сумма = ОплатаЗаИсправление / КоличествоПартий;
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = ОтветственныйЗаИсправление;
// регистр Управленческий Д28 К69
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.СчетКт = ПланыСчетов.Управленческий.РасчетыПоСоциальномуСтрахованиюИОбеспечению;
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.Период = Дата;
Движение.Сумма = ОплатаЗаИсправление * ФСЗН / КоличествоПартий;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = ОтветственныйЗаИсправление;
// регистр Управленческий Д28 К76
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.СчетКт = ПланыСчетов.Управленческий.РасчетыПоИмущественномуИЛичномуСтрахованию;
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.Период = Дата;
Движение.Сумма = ОплатаЗаИсправление * Страховые / КоличествоПартий;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = ОтветственныйЗаИсправление;
// регистр Управленческий Д20 К28
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.ОсновноеПроизводство;
Движение.СчетКт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.Период = Дата;
Движение.Сумма = (ОбщаяСуммаМатериалов / КоличествоПартий) + (ОплатаЗаИсправление / КоличествоПартий) + (ОплатаЗаИсправление * ФСЗН / КоличествоПартий) + (ОплатаЗаИсправление * Страховые / КоличествоПартий);
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.КоличествоКт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
ИначеЕсли (МОЛ <> ОтветственныйЗаИсправление) тогда
// регистр Управленческий Д28 К70
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.СчетКт = ПланыСчетов.Управленческий.РасчетыСПерсоналомПоОплатеТруда;
Движение.Период = Дата;
Движение.Сумма = ОплатаЗаИсправление / КоличествоПартий;
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = ОтветственныйЗаИсправление;
// регистр Управленческий Д28 К69
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.СчетКт = ПланыСчетов.Управленческий.РасчетыПоСоциальномуСтрахованиюИОбеспечению;
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.Период = Дата;
Движение.Сумма = ОплатаЗаИсправление * ФСЗН / КоличествоПартий;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = ОтветственныйЗаИсправление;
// регистр Управленческий Д28 К76
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.СчетКт = ПланыСчетов.Управленческий.РасчетыПоИмущественномуИЛичномуСтрахованию;
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.Период = Дата;
Движение.Сумма = ОплатаЗаИсправление * Страховые / КоличествоПартий;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = ОтветственныйЗаИсправление;
// регистр Управленческий Д73 К28
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.РасчетыПоВозмещениюУщерба;
Движение.СчетКт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.КоличествоКт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.Период = Дата;
Движение.Сумма = (ОбщаяСуммаМатериалов / КоличествоПартий) + (ОплатаЗаИсправление / КоличествоПартий) + (ОплатаЗаИсправление * ФСЗН / КоличествоПартий) + (ОплатаЗаИсправление * Страховые / КоличествоПартий);
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Иначе
// регистр Управленческий Д20 К28
// В случае отсутствия затрат проводка не формируется
Если (ОбщаяСуммаМатериалов > 0) тогда
Движение = Движения.Управленческий.Добавить();
Движение.СчетДт = ПланыСчетов.Управленческий.ОсновноеПроизводство;
Движение.СчетКт = ПланыСчетов.Управленческий.БракВПроизводстве;
Движение.Период = Дата;
Движение.Сумма = (ОбщаяСуммаМатериалов / КоличествоПартий) + (ОплатаЗаИсправление / КоличествоПартий) + (ОплатаЗаИсправление * ФСЗН / КоличествоПартий) + (ОплатаЗаИсправление * Страховые / КоличествоПартий);
Движение.КоличествоДт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.КоличествоКт = ТекСтрокаСписокБракованныхТоваров.Количество;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Подразделение] = Подразделение;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.МОЛ] = МОЛ;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.ПричинаБрака] = ПричинаБрака;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатуры] = ТекСтрокаСписокБракованныхТоваров.Номенклатура;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Листинг И.2 – Код модуля формы документа АктОбИсправимомБраке
Примечание – Источник: собственная разработка
&НаСервере
Функция ЦенаНоменклатуры(Номенклатура)
Возврат Номенклатура.Цена;
КонецФункции
&НаКлиенте
Функция РасчётСуммы(Количество, Цена)
Возврат Количество * Цена;
КонецФункции
&НаКлиенте
Процедура СписокБракованныхТоваровНоменклатураПриИзменении(Элемент)
Элем = Элементы.СписокБракованныхТоваров.ТекущиеДанные;
Элем.Цена = ЦенаНоменклатуры(Элем.Номенклатура);
Элем.Сумма = РасчётСуммы(Элем.Количество, Элем.Цена);
КонецПроцедуры
&НаКлиенте
Процедура СписокБракованныхТоваровКоличествоПриИзменении(Элемент)
Элем = Элементы.СписокБракованныхТоваров.ТекущиеДанные;
Элем.Сумма = РасчётСуммы(Элем.Количество, Элем.Цена);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыНаИсправлениеНоменклатураПриИзменении(Элемент)
Элем = Элементы.МатериалыНаИсправление.ТекущиеДанные;
Элем.Цена = ЦенаНоменклатуры(Элем.Номенклатура);
Элем.Сумма = РасчётСуммы(Элем.Количество, Элем.Цена);
КонецПроцедуры
&НаКлиенте
Процедура МатериалыНаИсправлениеКоличествоПриИзменении(Элемент)
Элем = Элементы.МатериалыНаИсправление.ТекущиеДанные;
Элем.Сумма = РасчётСуммы(Элем.Количество, Элем.Цена);
КонецПроцедуры
&НаКлиенте
Процедура ОплатаЗаИсправлениеПриИзменении(Элемент)
ОтветственныйМОЛ();
КонецПроцедуры
&НаКлиенте
Процедура ОтветственныйМОЛ()
Если (Объект.МОЛ = Объект.ОтветственныйЗаИсправление) тогда
Объект.ОплатаЗаИсправление = 0;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура МОЛПриИзменении(Элемент)
ОтветственныйМОЛ();
КонецПроцедуры
&НаКлиенте
Процедура ОтветственныйЗаИсправлениеПриИзменении(Элемент)
ОтветственныйМОЛ();
КонецПроцедуры