Обработка ошибки

1. usershmuser 25.04.23 11:59 Сейчас в теме
Прошу помощи.
Задача: сделать кнопку для создания пачки документов (счетов) для повторяющихся платежей (типа по договорам и кредитам) с заранее запланированной датой оплаты.
Кнопку сделал, работает, но как отработать ситуацию, когда документы уже созданы?
&НаСервере
Процедура СозданиеСчетовНаСервере() 
	
	ПервыйПлатеж = Объект.ДатаПервогоПлатежа;
	КолПлатежей = Объект.КоличествоПлатежей - 1;   

	СоздСчета = ЕстьЛиСозданныеСчета(Объект.Ссылка);
	
	
	
	Для КолДобМесяцев = 0 ПО КолПлатежей Цикл
		//Вычисляем дату платежа следующего документа
                ДатаПлатежа = ДобавитьМесяц(Объект.ДатаПервогоПлатежа, КолДобМесяцев);
		
		НовыйДокумент = Документы.Счета.СоздатьДокумент();
		НовыйДокумент.Дата = ТекущаяДата();
		НовыйДокумент.Организация = Объект.Организация;
		НовыйДокумент.БанкОрганизации = Объект.БанкОрганизации;
		НовыйДокумент.Контрагент = Объект.Контрагент;
		НовыйДокумент.БанкКонтрагента = Объект.БанкКонтрагента;
		НовыйДокумент.НазначениеПлатежа = Объект.НазначениеПлатежа;
		НовыйДокумент.Сумма = Объект.СуммаПлатежа;
		НовыйДокумент.Направление = Объект.Направление;
		НовыйДокумент.ВидПлатежа = Объект.ВидПлатежа;
		НовыйДокумент.ОснованиеПлатежа = Объект.ОснованиеПлатежа;
		НовыйДокумент.ПовторяющийсяПлатеж = Объект.Ссылка; 
		НовыйДокумент.ДатаОплаты = ДатаПлатежа;
		НовыйДокумент.Записать();
		
				
	КонецЦикла;
	
КонецПроцедуры    



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


В документе "Счет" есть ссылка на документ основание (в котором я нажимаю кнопку) и дата оплаты (которая присваивается в коде).
Делаю запрос в документы, возвращается массив.
Как мне в этот массив посмотреть перед созданием документа и если документ с такой датой есть, то не создавать его и продолжить цикл?
Может есть еще какие методы обработки подобных действий?
По теме из базы знаний
Найденные решения
3. usershmuser 25.04.23 13:17 Сейчас в теме
Разобрался сам
&НаСервере
Процедура СозданиеСчетовНаСервере() 
	
	ПервыйПлатеж = Объект.ДатаПервогоПлатежа;
	КолПлатежей = Объект.КоличествоПлатежей - 1;   

	СоздСчета = ЕстьЛиСозданныеСчета(Объект.Ссылка);
	 
	
	
	Для КолДобМесяцев = 0 ПО КолПлатежей Цикл
		
		//Вычисляем дату следующего платежа
		ДатаПлатежа = ДобавитьМесяц(Объект.ДатаПервогоПлатежа, КолДобМесяцев);
		
		ЕстьТакойСчет = СоздСчета.Найти(ДатаПлатежа); 
		
		Если ЕстьТакойСчет <> Неопределено Тогда
			Сообщить(ЕстьТакойСчет.ДатаОплаты);
			Продолжить;	
		Иначе	
			НовыйДокумент = Документы.Счета.СоздатьДокумент();
			НовыйДокумент.Дата = ТекущаяДата();
			НовыйДокумент.Организация = Объект.Организация;
			НовыйДокумент.БанкОрганизации = Объект.БанкОрганизации;
			НовыйДокумент.Контрагент = Объект.Контрагент;
			НовыйДокумент.БанкКонтрагента = Объект.БанкКонтрагента;
			НовыйДокумент.НазначениеПлатежа = Объект.НазначениеПлатежа;
			НовыйДокумент.Сумма = Объект.СуммаПлатежа;
			НовыйДокумент.Направление = Объект.Направление;
			НовыйДокумент.ВидПлатежа = Объект.ВидПлатежа;
			НовыйДокумент.ОснованиеПлатежа = Объект.ОснованиеПлатежа;
			НовыйДокумент.ПовторяющийсяПлатеж = Объект.Ссылка; 
			НовыйДокумент.ДатаОплаты = ДатаПлатежа;
			НовыйДокумент.Записать();
			
		КонецЕсли;	
		
	КонецЦикла;
	
КонецПроцедуры    



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

Показать


Из запроса возвращаю таблицу значений и уже в этой таблице смотрю дату оплаты.
Получается, если часть документов создано руками, то создадутся только те, которых нет.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 25.04.23 12:56 Сейчас в теме
(1)
СчетовЕщеНет_НужноДелатьНовые = Запрос.Выполнить().Пустой();
3. usershmuser 25.04.23 13:17 Сейчас в теме
Разобрался сам
&НаСервере
Процедура СозданиеСчетовНаСервере() 
	
	ПервыйПлатеж = Объект.ДатаПервогоПлатежа;
	КолПлатежей = Объект.КоличествоПлатежей - 1;   

	СоздСчета = ЕстьЛиСозданныеСчета(Объект.Ссылка);
	 
	
	
	Для КолДобМесяцев = 0 ПО КолПлатежей Цикл
		
		//Вычисляем дату следующего платежа
		ДатаПлатежа = ДобавитьМесяц(Объект.ДатаПервогоПлатежа, КолДобМесяцев);
		
		ЕстьТакойСчет = СоздСчета.Найти(ДатаПлатежа); 
		
		Если ЕстьТакойСчет <> Неопределено Тогда
			Сообщить(ЕстьТакойСчет.ДатаОплаты);
			Продолжить;	
		Иначе	
			НовыйДокумент = Документы.Счета.СоздатьДокумент();
			НовыйДокумент.Дата = ТекущаяДата();
			НовыйДокумент.Организация = Объект.Организация;
			НовыйДокумент.БанкОрганизации = Объект.БанкОрганизации;
			НовыйДокумент.Контрагент = Объект.Контрагент;
			НовыйДокумент.БанкКонтрагента = Объект.БанкКонтрагента;
			НовыйДокумент.НазначениеПлатежа = Объект.НазначениеПлатежа;
			НовыйДокумент.Сумма = Объект.СуммаПлатежа;
			НовыйДокумент.Направление = Объект.Направление;
			НовыйДокумент.ВидПлатежа = Объект.ВидПлатежа;
			НовыйДокумент.ОснованиеПлатежа = Объект.ОснованиеПлатежа;
			НовыйДокумент.ПовторяющийсяПлатеж = Объект.Ссылка; 
			НовыйДокумент.ДатаОплаты = ДатаПлатежа;
			НовыйДокумент.Записать();
			
		КонецЕсли;	
		
	КонецЦикла;
	
КонецПроцедуры    



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

Показать


Из запроса возвращаю таблицу значений и уже в этой таблице смотрю дату оплаты.
Получается, если часть документов создано руками, то создадутся только те, которых нет.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот