Прошу помощи.
Задача: сделать кнопку для создания пачки документов (счетов) для повторяющихся платежей (типа по договорам и кредитам) с заранее запланированной датой оплаты.
Кнопку сделал, работает, но как отработать ситуацию, когда документы уже созданы?
В документе "Счет" есть ссылка на документ основание (в котором я нажимаю кнопку) и дата оплаты (которая присваивается в коде).
Делаю запрос в документы, возвращается массив.
Как мне в этот массив посмотреть перед созданием документа и если документ с такой датой есть, то не создавать его и продолжить цикл?
Может есть еще какие методы обработки подобных действий?
Задача: сделать кнопку для создания пачки документов (счетов) для повторяющихся платежей (типа по договорам и кредитам) с заранее запланированной датой оплаты.
Кнопку сделал, работает, но как отработать ситуацию, когда документы уже созданы?
&НаСервере
Процедура СозданиеСчетовНаСервере()
ПервыйПлатеж = Объект.ДатаПервогоПлатежа;
КолПлатежей = Объект.КоличествоПлатежей - 1;
СоздСчета = ЕстьЛиСозданныеСчета(Объект.Ссылка);
Для КолДобМесяцев = 0 ПО КолПлатежей Цикл
//Вычисляем дату платежа следующего документа
ДатаПлатежа = ДобавитьМесяц(Объект.ДатаПервогоПлатежа, КолДобМесяцев);
НовыйДокумент = Документы.Счета.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Объект.Организация;
НовыйДокумент.БанкОрганизации = Объект.БанкОрганизации;
НовыйДокумент.Контрагент = Объект.Контрагент;
НовыйДокумент.БанкКонтрагента = Объект.БанкКонтрагента;
НовыйДокумент.НазначениеПлатежа = Объект.НазначениеПлатежа;
НовыйДокумент.Сумма = Объект.СуммаПлатежа;
НовыйДокумент.Направление = Объект.Направление;
НовыйДокумент.ВидПлатежа = Объект.ВидПлатежа;
НовыйДокумент.ОснованиеПлатежа = Объект.ОснованиеПлатежа;
НовыйДокумент.ПовторяющийсяПлатеж = Объект.Ссылка;
НовыйДокумент.ДатаОплаты = ДатаПлатежа;
НовыйДокумент.Записать();
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЕстьЛиСозданныеСчета (ПовтПлат)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Счета.ДатаОплаты КАК ДатаОплаты,
| Счета.ПовторяющийсяПлатеж КАК ПовторяющийсяПлатеж,
| Счета.Ссылка КАК Ссылка
|ИЗ
| Документ.Счета КАК Счета
|ГДЕ
| Счета.ПовторяющийсяПлатеж = &ПовторяющийсяПлатеж";
Запрос.УстановитьПараметр("ПовторяющийсяПлатеж", ПовтПлат);
Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка");
КонецФункции
ПоказатьВ документе "Счет" есть ссылка на документ основание (в котором я нажимаю кнопку) и дата оплаты (которая присваивается в коде).
Делаю запрос в документы, возвращается массив.
Как мне в этот массив посмотреть перед созданием документа и если документ с такой датой есть, то не создавать его и продолжить цикл?
Может есть еще какие методы обработки подобных действий?
По теме из базы знаний
- Регламентные/фоновые задачи с запуском внешней обработки подгруженной в справочник или указанного на диске файла (*.epf). Управляемые формы/Обычные формы
- Ошибка при анализе данных: {ОбщийМодуль.ОбменДаннымиXDTOСервер.Модуль(5332)}: Для уникального идентификатора и узла назначено несколько ссылок
- Исправление ошибки сохранения стажей в ЗУП 3.1.10, 3.1.14. Расширение + обработка
- Обработка перенаправлений 3xx (HTTP Redirect) средствами 1С
- Семерых одним ударом: ищем все ошибки в запросе за один раз!
Найденные решения
Разобрался сам
Из запроса возвращаю таблицу значений и уже в этой таблице смотрю дату оплаты.
Получается, если часть документов создано руками, то создадутся только те, которых нет.
&НаСервере
Процедура СозданиеСчетовНаСервере()
ПервыйПлатеж = Объект.ДатаПервогоПлатежа;
КолПлатежей = Объект.КоличествоПлатежей - 1;
СоздСчета = ЕстьЛиСозданныеСчета(Объект.Ссылка);
Для КолДобМесяцев = 0 ПО КолПлатежей Цикл
//Вычисляем дату следующего платежа
ДатаПлатежа = ДобавитьМесяц(Объект.ДатаПервогоПлатежа, КолДобМесяцев);
ЕстьТакойСчет = СоздСчета.Найти(ДатаПлатежа);
Если ЕстьТакойСчет <> Неопределено Тогда
Сообщить(ЕстьТакойСчет.ДатаОплаты);
Продолжить;
Иначе
НовыйДокумент = Документы.Счета.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Объект.Организация;
НовыйДокумент.БанкОрганизации = Объект.БанкОрганизации;
НовыйДокумент.Контрагент = Объект.Контрагент;
НовыйДокумент.БанкКонтрагента = Объект.БанкКонтрагента;
НовыйДокумент.НазначениеПлатежа = Объект.НазначениеПлатежа;
НовыйДокумент.Сумма = Объект.СуммаПлатежа;
НовыйДокумент.Направление = Объект.Направление;
НовыйДокумент.ВидПлатежа = Объект.ВидПлатежа;
НовыйДокумент.ОснованиеПлатежа = Объект.ОснованиеПлатежа;
НовыйДокумент.ПовторяющийсяПлатеж = Объект.Ссылка;
НовыйДокумент.ДатаОплаты = ДатаПлатежа;
НовыйДокумент.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЕстьЛиСозданныеСчета (ПовтПлат)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Счета.ДатаОплаты КАК ДатаОплаты,
| Счета.ПовторяющийсяПлатеж КАК ПовторяющийсяПлатеж,
| Счета.Ссылка КАК Ссылка
|ИЗ
| Документ.Счета КАК Счета
|ГДЕ
| Счета.ПовторяющийсяПлатеж = &ПовторяющийсяПлатеж";
Запрос.УстановитьПараметр("ПовторяющийсяПлатеж", ПовтПлат);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
ПоказатьИз запроса возвращаю таблицу значений и уже в этой таблице смотрю дату оплаты.
Получается, если часть документов создано руками, то создадутся только те, которых нет.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Разобрался сам
Из запроса возвращаю таблицу значений и уже в этой таблице смотрю дату оплаты.
Получается, если часть документов создано руками, то создадутся только те, которых нет.
&НаСервере
Процедура СозданиеСчетовНаСервере()
ПервыйПлатеж = Объект.ДатаПервогоПлатежа;
КолПлатежей = Объект.КоличествоПлатежей - 1;
СоздСчета = ЕстьЛиСозданныеСчета(Объект.Ссылка);
Для КолДобМесяцев = 0 ПО КолПлатежей Цикл
//Вычисляем дату следующего платежа
ДатаПлатежа = ДобавитьМесяц(Объект.ДатаПервогоПлатежа, КолДобМесяцев);
ЕстьТакойСчет = СоздСчета.Найти(ДатаПлатежа);
Если ЕстьТакойСчет <> Неопределено Тогда
Сообщить(ЕстьТакойСчет.ДатаОплаты);
Продолжить;
Иначе
НовыйДокумент = Документы.Счета.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Организация = Объект.Организация;
НовыйДокумент.БанкОрганизации = Объект.БанкОрганизации;
НовыйДокумент.Контрагент = Объект.Контрагент;
НовыйДокумент.БанкКонтрагента = Объект.БанкКонтрагента;
НовыйДокумент.НазначениеПлатежа = Объект.НазначениеПлатежа;
НовыйДокумент.Сумма = Объект.СуммаПлатежа;
НовыйДокумент.Направление = Объект.Направление;
НовыйДокумент.ВидПлатежа = Объект.ВидПлатежа;
НовыйДокумент.ОснованиеПлатежа = Объект.ОснованиеПлатежа;
НовыйДокумент.ПовторяющийсяПлатеж = Объект.Ссылка;
НовыйДокумент.ДатаОплаты = ДатаПлатежа;
НовыйДокумент.Записать();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ЕстьЛиСозданныеСчета (ПовтПлат)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Счета.ДатаОплаты КАК ДатаОплаты,
| Счета.ПовторяющийсяПлатеж КАК ПовторяющийсяПлатеж,
| Счета.Ссылка КАК Ссылка
|ИЗ
| Документ.Счета КАК Счета
|ГДЕ
| Счета.ПовторяющийсяПлатеж = &ПовторяющийсяПлатеж";
Запрос.УстановитьПараметр("ПовторяющийсяПлатеж", ПовтПлат);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
ПоказатьИз запроса возвращаю таблицу значений и уже в этой таблице смотрю дату оплаты.
Получается, если часть документов создано руками, то создадутся только те, которых нет.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот