1С8 пример. Поиск договора по номеру, указанному в платежном ордере

Пример вычисления договора, по номеру, указанному в поле "Назначение платежа" платежного поручения.

Задачи такого рода часто встречаются при обработке банковских документов, при разнесении платежей.

Обычно строка "Назначение Платежа" выглядит так: НазначениеПлатежа = "Договор аренды № 11/12 от 01.09.2012";

Первое что приходит на ум - "парсить" строку "Назначение Платежа", - искать в ней номер договора. Затем искать сам договор по этому номеру в справочнике/таблице договоров. Мотив этого подхода "найти то не знаю что".

Пример приведенный ниже альтернативный вариант. Это - всего лишь один из способов решения такой задачи. Идея в следующем:

1. Вычисляем таблицу всех возможных договоров, которые мы ищем. В Таблице есть два столбца: НомерДоговора, СсылкаНаДоговор

2. Перебором записей таблицы ищем договор, номер которого содержится в строке "Назначение платежа".

1С8 пример. Платежное поручение входящее ищем договор.

1С8 пример. Платежное поручение входящее ищем договор.


// 
// Простой перебор таблицы "ТаблицаДоговоров" пока не встретим нужный номер договора.
Функция ПолучитьДоговор(ТаблицаДоговоров,НазначениеПлатежа)
	Для каждого запись из ТаблицаДоговоров Цикл
		Состояние(НазначениеПлатежа + "  " +  запись.Номер);
		//сообщить(НазначениеПлатежа + "  " +  запись.Номер);
		если Найти(НазначениеПлатежа," " + запись.Номер + " ") > 0 тогда
			сообщить(НазначениеПлатежа + "  " +  запись.Номер);
            Возврат запись.Договор;	
        КонецЕсли;        
	КонецЦикла;
	
	Возврат Неопределено;
	
КонецФункции 

//
// Получить таблицу договоров
Функция ПолучитьТаблицуДоговоров()	
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	ДоговорыКонтрагентов.Ссылка как Договор,
	|	ДоговорыКонтрагентов.Дата,
	|	ДоговорыКонтрагентов.Номер,
	|	ДоговорыКонтрагентов.Наименование
	|ИЗ
	|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
	|ГДЕ
	|	ДоговорыКонтрагентов.Дата > &ДатаС";
	
	//Параметры запроса
	//YYYYMMDDHHMMSS                          y  m  d  h  m  s
	Запрос.УстановитьПараметр("ДатаС",Дата(2010,01,01,01,01,01)); // Дата(<Год>, <Месяц>, <День>, <Час>, <Минута>, <Секунда>) 	
	ТаблицаДоговоров = Запрос.Выполнить().Выгрузить();
	
	Возврат ТаблицаДоговоров;

КонецФункции //ПолучитьТаблицуДоговоров()

// так обычно выглядит строчка назначение платежа в банковском документе
НазначениеПлатежа = "Договор аренды № 11/12 от 01.09.2012";

// один раз делаем выборку договоров. В дальнейшем используем эту таблицу
// значений для других платежек, поступивших их банка
ТаблицаДоговоров = ПолучитьТаблицуДоговоров();       

// вычисляем договор       
Договор = ПолучитьДоговор(ТаблицаДоговоров,НазначениеПлатежа);

В "Конфигураторе" это выглядит так:

Чтобы посмотреть таблицу значений договоров - жмем правой кнопкой мышки или

1С8 пример. Платежное поручение входящее ищем договор.

1С8 пример. Платежное поручение входящее ищем договор.




Рекламный блок:

Предлагаем решение Ваших задач 1С.

Внедрение 1С:

Доработка и сопровождение 1С:

Ориентировочная стоимость работ программиста 1С : 500 р. за 1 час работы.

Пишите: j008@j008.ru

Звоните: 8 916 710 83 51 Ольга