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