Постановка задачи:
При заключении договора лизинга в обязательном порядке подписывается утверждённый график платежей в соответствии с которым лизингополучатель осуществляет оплату. Соответственно, лизингодатель каждый месяц должен формировать документы реализации и отправлять их лизингополучателю. Так как все необходимые данные для формирования документов имеются, то можно автоматизировать этот процесс.
Решение:
Необходимо где-то хранить информацию о графике платежа (дата платежа и сумма платежа). В конфигурацию "Бухгалтерия предприятия, редакция 3.0" был добавлен новый справочник "ГрафикПлатежей" (можно добавить в расширение).
Реквизиты: Контрагент, Договор, ВидДоговора
Табличная часть: Платежи (ДатаПлатежа, СуммаПлатежа)
В форму элемента справочника выведены реквизиты: Наименование, Контрагент, Договор, Вид договора и Табличная часть "Оплата" с реквизитами ДатаПлатежа и СуммаПлатежа.
В модуле формы прописываем код для формирования документов
&НаСервере
Функция СформироватьРТиУНаСервере()
РТУ = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
Сегодня = ТекущаяДата();
РТУ.Дата = КонецМесяца(Сегодня);
РТУ.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Наша фирма""");
РТУ.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Услуги;
РТУ.ДоговорКонтрагента = Объект.Договор;
РТУ.ВалютаДокумента = Объект.Договор.ВалютаВзаиморасчетов;
РТУ.Контрагент = Объект.Договор.Владелец;
РТУ.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
РТУ.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02");
РТУ.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
РТУ.СуммаВключаетНДС = Истина;
РТУ.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основная цена продажи");
ТекущийМесяц = Месяц(ТекущаяДата());
ТекущийГод = Год(ТекущаяДата());
НоваяСтрока = РТУ.Услуги.Добавить();
Если Объект.ВидДоговора.Наименование = "Аренда" Тогда
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000333");
НоваяСтрока.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Аренда");
ИначеЕсли
Объект.ВидДоговора.Наименование = "Лизинговый платеж"
Тогда
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000025");
НоваяСтрока.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Лизинговый платеж");
КонецЕсли;
НоваяСтрока.Содержание = Строка(НоваяСтрока.Номенклатура)+" по договору "+Строка(Объект.Договор);
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НоваяСтрока.СчетДоходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
НоваяСтрока.СчетРасходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
НоваяСтрока.СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03");
Для Каждого Элемент из Объект.Платежи Цикл
Если ТекущийМесяц = Месяц(Элемент.ДатаПлатежа) И ТекущийГод = Год(Элемент.ДатаПлатежа) Тогда
НоваяСтрока.Цена = Элемент.СуммаПлатежа;
НоваяСтрока.Сумма = Элемент.СуммаПлатежа;
НоваяСтрока.СуммаНДС = Элемент.СуммаПлатежа*(1-1/1.2);
КонецЕсли;
КонецЦикла;
РТУ.Записать(РежимЗаписиДокумента.Запись);
Возврат РТУ.Ссылка;
КонецФункции
&НаКлиенте
Процедура СформироватьРТиУ(Команда)
ОткрытьЗначение(СформироватьРТиУНаСервере());
КонецПроцедуры
Таким образом, при нажатии на кнопку "Сформировать РТиУ" формируется документ реализации, заполняется шапка документа, табличная часть "Услуги" и документ записывается с датой последнего дня текущего месяца.
Табличная часть заполняется в соответствии со значениями справочника "График платежей"
Так можно сформировать документ для каждого конкретного договора.
Для того, чтобы сформировать документы по нескольким договорам была написана внешняя обработка "Формирование РТиУ"
В модуле формы обработки при нажатии на кнопку "Заполнить" сначала заполняем таблицу из справочника "График платежей"
&НаСервере
Процедура ЗаполнитьНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ГрафикПлатежей.Ссылка КАК График,
| ГрафикПлатежей.Контрагент КАК Контрагент
|ИЗ
| Справочник.ГрафикПлатежей КАК ГрафикПлатежей";
Таблица.Загрузить(Запрос.Выполнить().Выгрузить());
Для Каждого Строка Из Таблица Цикл
Строка.Выбор = Истина;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Заполнить(Команда)
ЗаполнитьНаСервере();
КонецПроцедуры
Затем, при нажатии на кнопку "Сформировать РТиУ" формируем документы, которые отмечены крыжиком
&НаСервере
Процедура СформироватьРТУНаСервере()
Для каждого Строка Из Таблица Цикл
Если Строка.Выбор Тогда
Выборка = Строка.График;
РТУ = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
Сегодня = ТекущаяДата();
//РТУ.Дата = Дата(Год(Сегодня),Месяц(Сегодня),20);
РТУ.Дата = КонецМесяца(Сегодня);
РТУ.Организация = Справочники.Организации.НайтиПоНаименованию("ООО ""Наша фирма""");
РТУ.ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.Услуги;
РТУ.ДоговорКонтрагента = Выборка.Договор;
РТУ.ВалютаДокумента = Выборка.Договор.ВалютаВзаиморасчетов;
РТУ.Контрагент = Выборка.Договор.Владелец;
РТУ.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
РТУ.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.02");
РТУ.СпособЗачетаАвансов = Перечисления.СпособыЗачетаАвансов.Автоматически;
РТУ.СуммаВключаетНДС = Истина;
РТУ.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Основная цена продажи");
ТекущийМесяц = Месяц(ТекущаяДата());
ТекущийГод = Год(ТекущаяДата());
НоваяСтрока = РТУ.Услуги.Добавить();
Если Выборка.ВидДоговора.Наименование = "Аренда" Тогда
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000333");
НоваяСтрока.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Аренда");
ИначеЕсли
Выборка.ВидДоговора.Наименование = "Лизинговый платеж"
Тогда
НоваяСтрока.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("00000000025");
НоваяСтрока.Субконто = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Лизинговый платеж");
КонецЕсли;
НоваяСтрока.Содержание = Строка(НоваяСтрока.Номенклатура)+" по договору "+Строка(Выборка.Договор);
НоваяСтрока.СтавкаНДС = Перечисления.СтавкиНДС.НДС20;
НоваяСтрока.СчетДоходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
НоваяСтрока.СчетРасходов = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.02.1");
НоваяСтрока.СчетУчетаНДСПоРеализации = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.03");
Для Каждого Элемент из Выборка.Платежи Цикл
Если ТекущийМесяц = Месяц(Элемент.ДатаПлатежа) И ТекущийГод = Год(Элемент.ДатаПлатежа) Тогда
НоваяСтрока.Цена = Элемент.СуммаПлатежа;
НоваяСтрока.Сумма = Элемент.СуммаПлатежа;
НоваяСтрока.СуммаНДС = Элемент.СуммаПлатежа*(1-1/1.2);
КонецЕсли;
КонецЦикла;
РТУ.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура СформироватьРТУ(Команда)
СформироватьРТУНаСервере();
КонецПроцедуры
Код формирования документов, фактически, повторяет код в справочнике, только добавлен цикл по строкам таблицы
Обработка в режиме предприятия
Помимо формирования документов, добавление в базу информации о графиках платежей, позволяет с помощью простенького отчета проводить план-фактный анализ поступления платежей
Запрос
ВЫБРАТЬ
ГрафикПлатежейПлатежи.Ссылка.Наименование КАК Наименование,
ГрафикПлатежейПлатежи.Ссылка.Контрагент КАК Контрагент,
ГрафикПлатежейПлатежи.Ссылка.Договор КАК Договор,
ГрафикПлатежейПлатежи.НомерСтроки КАК НомерСтроки,
ГрафикПлатежейПлатежи.ДатаПлатежа КАК ДатаПлатежа,
ГрафикПлатежейПлатежи.СуммаПлатежа КАК СуммаПлатежа,
ПоступлениеНаРасчетныйСчет.Контрагент КАК Контрагент1,
ПоступлениеНаРасчетныйСчет.Дата КАК Дата,
ПоступлениеНаРасчетныйСчет.ДоговорКонтрагента КАК ДоговорКонтрагента,
ПоступлениеНаРасчетныйСчет.СуммаДокумента КАК СуммаДокумента,
ПоступлениеНаРасчетныйСчет.Ссылка КАК Ссылка
ИЗ
Справочник.ГрафикПлатежей.Платежи КАК ГрафикПлатежейПлатежи
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеНаРасчетныйСчет КАК ПоступлениеНаРасчетныйСчет
ПО ГрафикПлатежейПлатежи.Ссылка.Договор = ПоступлениеНаРасчетныйСчет.ДоговорКонтрагента
И (НАЧАЛОПЕРИОДА(ГрафикПлатежейПлатежи.ДатаПлатежа, МЕСЯЦ) = НАЧАЛОПЕРИОДА(ПоступлениеНаРасчетныйСчет.Дата, МЕСЯЦ))
Сам отчет
В табличную часть справочника "График платежей" информация загружалась с использованием стандартной обработки "ЗагрузкаДанныхИзТабличногоДокумента.epf"