Как в 1С:Торговля и Склад 7.7 получить входящий номер и дату платежного поручения из выписки банка?

Программист 1С v7.7 Управленческий учет Торговля и дистрибуция
← На главную

При ведении оперативного учета в конфигурации «1С:Торговля и Склад 7.7» (ТиС) с последующей периодической выгрузкой данных в «1С:Бухгалтерию 7.7» разработчики часто сталкиваются с неприятной особенностью. В отличие от бухгалтерской конфигурации, где документы банковской выписки содержат явные реквизиты для хранения входящего номера и даты платежного поручения, в ТиС 7.7 документы СтрокаВыпискиПриход и СтрокаВыпискиРасход таких реквизитов в явном виде на форме не имеют. Из-за этого при формировании актов сверки или при переносе данных в бухгалтерию входящие номера платежек теряются, а вместо них выводятся внутренние номера документов 1С.

В этой статье мы подробно разберем, как решить эту проблему, выясним, где на самом деле хранятся скрытые данные банковских документов в ТиС 7.7, и рассмотрим два практических метода их извлечения и использования: без изменения метаданных и с доработкой конфигурации.

Где хранятся входящие номер и дата в ТиС 7.7?

Давайте проанализируем структуру типовой конфигурации «Торговля и Склад 7.7». В документах СтрокаВыпискиПриход и СтрокаВыпискиРасход присутствует скрытый, но крайне важный реквизит — КлиентРеквизиты. Он имеет тип данных «Строка» (неограниченной длины).

При импорте банковской выписки через стандартную обработку «Клиент-банк» (файл ПредприятиеКлиент.ert) в этот реквизит полностью записывается текстовый блок из файла обмена kl_to_1c.txt, соответствующий конкретной платежке. Этот блок структурирован по стандарту 1CClientBankExchange и содержит строки формата Ключ=Значение.

Внутри этого реквизита гарантированно содержатся следующие параметры:

Таким образом, физически данные уже присутствуют в вашей базе данных, их просто нужно правильно извлечь.

Способ 1. Программный парсинг данных «на лету» (без изменения метаданных)

Если по каким-то причинам вам запрещено менять структуру метаданных конфигурации (например, база находится на жесткой поддержке, хотя для 7.7 это редкий случай), мы можем написать универсальную функцию для извлечения нужных параметров прямо из текстового поля КлиентРеквизиты. Этот метод отлично подойдет для использования непосредственно в правилах конвертации данных при выгрузке в «1С:Бухгалтерию».

Рассмотрим алгоритм функции, которая перебирает строки текстового блока, находит нужный ключ и возвращает его значение:


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

Давайте разберем, как вызвать эту функцию для получения входящего номера и даты в коде обработки выгрузки:


// Пример использования функции в обработке экспорта данных
СтрокаРеквизитов = Источник.КлиентРеквизиты;

ВхНомер = ПолучитьПараметрИзРеквизитов(СтрокаРеквизитов, "Номер");
ВхДатаСтрокой = ПолучитьПараметрИзРеквизитов(СтрокаРеквизитов, "Дата");

Если ПустаяСтрока(ВхДатаСтрокой) = 0 Тогда
    ВхДата = Дата(ВхДатаСтрокой);
Иначе
    ВхДата = ПолучитьПустуюДату(); // Или дата самого документа строки выписки
КонецЕсли;

Этот способ хорош тем, что не требует монопольного доступа к базе данных для изменения конфигурации, однако постоянный парсинг строк при обработке больших массивов данных может снижать производительность системы.

Способ 2. Рекомендуемый метод с доработкой метаданных конфигурации

Для долгосрочной перспективы и удобства ведения учета правильнее один раз доработать конфигурацию. Это позволит видеть входящие реквизиты прямо на форме документов строки выписки, использовать их в стандартных отчетах (например, в Акте сверки) и мгновенно выгружать в бухгалтерию без лишнего парсинга.

Разберем этот процесс по шагам:

  1. Добавление реквизитов в конфигураторе:

    Откройте конфигуратор 1С 7.7. Найдите документы СтрокаВыпискиПриход и СтрокаВыпискиРасход. Добавьте в каждый из них два новых реквизита шапки:

    • НомерДокВходящий (Тип: Строка, длина 20–30 символов).
    • ДатаДокВходящий (Тип: Дата).

    Выведите эти реквизиты на формы соответствующих документов, установив для них свойство «Доступность» в зависимости от того, хотите ли вы разрешить пользователям редактировать их вручную.

  2. Модернизация обработки импорта «Клиент-банк»:

    Нам необходимо сделать так, чтобы при загрузке выписок эти реквизиты заполнялись автоматически. Для этого откройте внешнюю обработку загрузки выписок ПредприятиеКлиент.ert (обычно она находится в каталоге базы данных ExtForms).

    Найдите в модуле обработки процедуру, которая создает и записывает новые документы строк выписки (обычно это функция создания документов или заполнения их реквизитов). В месте, где заполняются реквизиты создаваемого документа выписки, добавьте явное присвоение:

    
    // Добавление заполнения созданных реквизитов при импорте
    // Переменные НомерДокумента и ДатаДокумента берутся из текущей секции файла импорта
    Док.НомерДокВходящий = СокрЛП(СтруктураСекции.Получить("Номер"));
    Док.ДатаДокВходящий = Дата(СтруктураСекции.Получить("Дата"));
    

    Примечание: Названия переменных и способ обхода секций в разных версиях обработки «Клиент-банк» могут немного отличаться, ориентируйтесь по заполнению реквизита КлиентРеквизиты в этой же процедуре.

  3. Настройка правил выгрузки в «1С:Бухгалтерию»:

    Теперь при ежеквартальной выгрузке данных вам достаточно сопоставить новые реквизиты НомерДокВходящий и ДатаДокВходящий с соответствующими полями входящего номера и даты платежного документа в бухгалтерской программе. Больше никаких сложных алгоритмов парсинга при выгрузке использовать не придется.

Важные технические нюансы и подводные камни

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

1. Контроль уникальности номеров документов в 1С.
Никогда не пытайтесь записывать входящий номер платежного поручения из банка в стандартный системный реквизит НомерДок документов 1С 7.7. Внутренний номер 1С должен оставаться на автонумерации (например, "000001", "000002" и т.д.). Входящие номера документов от разных контрагентов очень часто дублируются (например, каждый второй клиент может прислать платежку с номером 1 или 5). Если вы запишете сторонний номер в стандартное поле НомерДок, система выдаст ошибку уникальности номера и откажется записывать документ выписки.

2. Корректность формирования Актов сверки взаиморасчетов.
Наличие выделенных и заполненных реквизитов НомерДокВходящий и ДатаДокВходящий в оперативной базе крайне важно для формирования понятных актов сверки с контрагентами. Если эти поля не заполнены, то в печатной форме акта сверки ваши оплаты будут отражаться с внутренними номерами документов 1С (например, «Строка выписки расход № 0000456»). Контрагент не сможет сопоставить эту информацию со своей выпиской. При наличии заполненных полей вы сможете модифицировать печатную форму акта сверки, чтобы она выводила презентабельный текст: «Оплата по п/п № [НомерДокВходящий] от [ДатаДокВходящий]».

← На главную