Ввод документов на основании Заявки на кассовый расход

Пример ввода в ББУ на основании двух документов — ЗаявкаНаКассовыйРасход и ЗаявкаНаКассовыйРасходСокращенная, документов ПринятоеБюджетноеОбязательство и ОбязательствоПоПД

Добавляем в реквизиты документов ПринятоеБюджетноеОбязательство и ПринятоеОбязательствоПоПД реквизит СсылкаНаОснование с составным типом, состоящим из ДокументСсылка.ЗаявкаНаКассовыйРасход, СправочникСсылка.Договоры, ДокументСсылка.ЗаявкаНаКассовыйРасходСокращенная, ДокументСсылка.ПланФинансированияОбязательства

В свойствах документов ПринятоеБюджетноеОбязательство и ПринятоеОбязательствоПоПД на закладке Ввод на основании добавляем документы ЗаявкаНаКассовыйРасход и ЗаявкаНаКассовыйРасходСокращенная 

В модуле документа ПринятоеБюджетноеОбязательство дописываем в в конец процедуры ОбработкаЗаполнения(Основание) 

 

Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип("СправочникСсылка.Договоры") Тогда
Если НЕ ЗначениеЗаполнено(Основание.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.УчреждениеИсполнитель Тогда
Возврат;
КонецЕсли;
Договор= Основание.Ссылка;
Учреждение= Основание.Учреждение;
ВидОперации = Справочники.ВидыОпераций.ПринятоеБюджетноеОбязательство_ЗаСчетЛБО;
Дата= ОбщегоНазначения.ПолучитьРабочуюДату();

ЗаполнениеРеквизитовПоВыбранномуДоговору();

ОпределитьПланФинансированияПоДоговору();

ЗаполнитьДанныеДляБюджетногоУчета();

ИначеЕсли ТипЗнч(Основание) = Тип("ДокументСсылка.ПланФинансированияОбязательства") Тогда
Если НЕ ЗначениеЗаполнено(Основание.Договор.Учреждение) Тогда
Возврат;
КонецЕсли;
Если Основание.Договор.УчреждениеИсполнитель Тогда
Возврат;
КонецЕсли;
Договор= Основание.Договор.Ссылка;
Учреждение= Основание.Договор.Учреждение;
ВидОперации= Справочники.ВидыОпераций.ПринятоеБюджетноеОбязательство_ЗаСчетЛБО;
ПланФинансирования= Основание;
Дата= ОбщегоНазначения.ПолучитьРабочуюДату();

ЗаполнениеРеквизитовПоВыбранномуДоговору();

ЗаполнитьНаОснованииПланаФинансирования(ПланФинансирования);

ЗаполнитьДанныеДляБюджетногоУчета();

// 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 >>

 

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *