Обработка клиент-банка при работе использует следующие процедуры в модуле менеджера обработки:
Процедура ЗаполнитьКонтрагентов(ДокументыКЗагрузке, ТаблицаДокументов) Экспорт
которая вызывается из процедуры
Процедура ПодготовитьСтрокиВыписки(ДокументыКЗагрузке, БанковскийСчет, НомерСчета)
В Таблицу документов попадают строки, которые должны быть выгружены в соответствии с выбранным номером счета. В таблице так же есть два реквизита, влияющие на поиск:
ИННДляПоиска = ?(Исходящий, СтрокаДокумента.ПолучательИНН, СтрокаДокумента.ПлательщикИНН); СтрокаДокумента.ПроверятьИНН = ЗначениеЗаполнено(ИННДляПоиска); КППДляПоиска = ?(Исходящий, СтрокаДокумента.ПолучательКПП, СтрокаДокумента.ПлательщикКПП); СтрокаДокумента.ПроверятьКПП = (ЗначениеЗаполнено(КППДляПоиска) И КППДляПоиска <> "0");
Далее ищется контрагент и номер счета. Поиск осуществляется по нескольким способам, распределенным по приоритетам. В случае обнаружения контрагента, результаты, найденные способом более низкого приоритета, игнорируются.
ВЫБРАТЬ ТаблицаДокументов.НомерСтроки КАК НомерСтроки, ДанныеСправочника.Владелец КАК Контрагент, ДанныеСправочника.Ссылка КАК СчетКонтрагента, 0 КАК Приоритет ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаОрганизаций КАК ДанныеСправочника ПО (ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета) И (ДанныеСправочника.Владелец.ИНН = ТаблицаДокументов.ИНН) И (ТаблицаДокументов.ПроверятьИНН) И (НЕ ДанныеСправочника.Закрыт) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, Контрагенты.Ссылка, ДанныеСправочника.Ссылка, 5 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты ПО (Контрагенты.Ссылка = ТаблицаДокументов.Контрагент) ЛЕВОЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника ПО (ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета) И (ДанныеСправочника.Владелец = Контрагенты.Ссылка) И (НЕ ДанныеСправочника.Закрыт) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, ДанныеСправочника.Владелец, ДанныеСправочника.Ссылка, 10 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника ПО (ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета) И (ДанныеСправочника.Владелец.ИНН = ТаблицаДокументов.ИНН) И (ДанныеСправочника.Владелец.КПП = ТаблицаДокументов.КПП) И (ТаблицаДокументов.ПроверятьКПП) И (НЕ ДанныеСправочника.Закрыт) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, ДанныеСправочника.Владелец, ДанныеСправочника.Ссылка, 20 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника ПО (ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета) И (ДанныеСправочника.Владелец.ИНН = ТаблицаДокументов.ИНН) И (ТаблицаДокументов.ПроверятьИНН) И (НЕ ДанныеСправочника.Закрыт) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, ДанныеСправочника.Владелец, ДанныеСправочника.Ссылка, 30 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.БанковскиеСчетаКонтрагентов КАК ДанныеСправочника ПО (ДанныеСправочника.НомерСчета = ТаблицаДокументов.НомерСчета И ДанныеСправочника.Владелец.НаименованиеПолное = ТаблицаДокументов.Наименование ИЛИ ДанныеСправочника.Владелец.НаименованиеПолное = ТаблицаДокументов.СокращенноеНаименование И НЕ ДанныеСправочника.Закрыт) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, ДанныеСправочника.Ссылка, НЕОПРЕДЕЛЕНО, 40 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК ДанныеСправочника ПО (ДанныеСправочника.ИНН = ТаблицаДокументов.ИНН) И (ДанныеСправочника.КПП = ТаблицаДокументов.КПП) И (ТаблицаДокументов.ПроверятьКПП) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, ДанныеСправочника.Ссылка, НЕОПРЕДЕЛЕНО, 50 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК ДанныеСправочника ПО (ДанныеСправочника.ИНН = ТаблицаДокументов.ИНН) И (ТаблицаДокументов.ПроверятьИНН) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, ДанныеСправочника.Ссылка, НЕОПРЕДЕЛЕНО, 60 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК ДанныеСправочника ПО (ДанныеСправочника.НаименованиеПолное = ТаблицаДокументов.Наименование) И (ДанныеСправочника.ИНН = "" ИЛИ НЕ ТаблицаДокументов.ПроверятьИНН) И (ДанныеСправочника.КПП = "" ИЛИ НЕ ТаблицаДокументов.ПроверятьКПП) ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ТаблицаДокументов.НомерСтроки, ДанныеСправочника.Ссылка, НЕОПРЕДЕЛЕНО, 70 ИЗ ТаблицаДокументов КАК ТаблицаДокументов ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ДанныеСправочника ПО (ДанныеСправочника.Наименование = ТаблицаДокументов.Наименование) И (ДанныеСправочника.ИНН = ТаблицаДокументов.ИНН ИЛИ ДанныеСправочника.ИНН = "" ИЛИ НЕ ТаблицаДокументов.ПроверятьИНН) УПОРЯДОЧИТЬ ПО НомерСтроки, Приоритет
Для отлавливания ошибки задвоения, необходимо поставить точку останова после данного запроса и посмотреть результат этого запроса. Обращаю внимание, что запуск этих процедур выполняется в фоновом задании, поэтому необходимо в отладке настроить автоматическое подключение фоновых заданий.