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