Автоматизация взаимодействия с банками в рамках зарплатных проектов — это критически важная задача для любого крупного предприятия, работающего на платформе 1С:Управление производственным предприятием (УПП) 1.3. Переход от ручного ввода платежек к пакетной выгрузке ведомостей позволяет исключить ошибки человеческого фактора и значительно ускорить процесс выплаты заработной платы. В этой статье мы подробно разберем, как настроить экспорт данных, проанализируем программные способы создания файлов и рассмотрим особенности работы с популярными банковскими системами, такими как iBank2.
Прежде чем приступать к написанию собственного кода, давайте проанализируем возможности стандартного функционала 1С:УПП. В системе уже заложен мощный механизм обмена, который поддерживает большинство современных банков.
Для начала работы нам необходимо выполнить следующие шаги:
Если ваш банк (в данном случае ОТП) требует специфический формат, который не поддерживается стандартно, или вы используете старую систему дистанционного банковского обслуживания (ДБО), может потребоваться разработка собственной обработки выгрузки.
Рассмотрим ситуацию, когда банк принимает данные в формате DBF. Это достаточно старый, но все еще надежный формат обмена. Для его реализации в 1С используется объект XBase. Проанализируем пример кода, который позволяет сформировать структуру файла и наполнить его данными из документа «Зарплата к выплате организаций».
Ниже приведен пример реализации, где мы создаем файл, определяем его кодировку и поля:
// Инициализируем объект для работы с DBF
ДокЭкспорт = Новый XBase;
ДокЭкспорт.Кодировка = КодировкаXBase.OEM; // Используем кодировку DOS, часто требуемую банками
// Формируем структуру колонок файла
ДокЭкспорт.поля.Добавить("BRANCH", "S", 3);
ДокЭкспорт.поля.Добавить("ZPKOD", "S", 3);
ДокЭкспорт.поля.Добавить("CARD_NO", "S", 16);
ДокЭкспорт.поля.Добавить("LSTBL", "S", 10);
ДокЭкспорт.поля.Добавить("FAM", "S", 50);
ДокЭкспорт.поля.Добавить("NAME", "S", 50);
ДокЭкспорт.поля.Добавить("OT", "S", 50);
ДокЭкспорт.поля.Добавить("RLSUM", "N", 15, 2); // Числовое поле для суммы с 2 знаками после запятой
ДокЭкспорт.поля.Добавить("INN", "S", 20);
// Создаем физический файл на диске
ДокЭкспорт.СоздатьФайл(ИмяФайла + ".DBF");
ДокЭкспорт.АвтоСохранение = Истина;
// Обходим табличную часть документа с зарплатой
Для Каждого СтрокаТаблицы Из ЗарплатаКВыплате Цикл
ДокЭкспорт.Добавить();
// Заполняем реквизиты из данных информационной базы
ДокЭкспорт.CARD_NO = СокрЛП(СтрокаТаблицы.НомерКарточки);
ДокЭкспорт.LSTBL = СокрЛП(СтрокаТаблицы.Сотрудник.Код);
ДокЭкспорт.FAM = ВРег(СтрокаТаблицы.Фамилия); // Переводим в верхний регистр
ДокЭкспорт.NAME = ВРег(СтрокаТаблицы.Имя);
ДокЭкспорт.OT = ВРег(СтрокаТаблицы.Отчество);
ДокЭкспорт.RLSUM = СтрокаТаблицы.СуммаКВыплате;
ДокЭкспорт.INN = СтрокаТаблицы.ИНН;
ДокЭкспорт.Записать();
КонецЦикла;
ДокЭкспорт.ЗакрытьФайл();
В данном примере важно обратить внимание на использование функции ВРег. Многие банковские системы чувствительны к регистру символов в ФИО, и перевод строк в верхний регистр — стандартная практика. Также отметим использование КодировкаXBase.OEM: если в банковской программе вместо русских букв отображаются «кракозябры», попробуйте сменить кодировку на ANSI.
Современные банки, включая ОТП Банк, чаще используют XML-интерфейсы. Выясним причину популярности этого формата: XML позволяет передавать гораздо более сложную структуру данных, включая информацию о налогах, видах дохода и периодах начисления.
Если стандартная выгрузка 1С по каким-то причинам не проходит валидацию в банке, следует обратить внимание на специализированные модули. Например, для системы iBank2 (которую часто использует ОТП) существует внешняя обработка iBank2-1с.epf. Рассмотрим преимущества работы через такой модуль:
Независимо от выбранного способа выгрузки (будь то XBase или XML), существуют общие требования законодательства и банковских стандартов, которые необходимо соблюдать:
1. Коды вида дохода. С 2020 года в платежных документах на выплату зарплаты обязательно должен указываться код вида дохода (обычно "1" для заработной платы). В 1С:УПП этот реквизит должен быть заполнен в документе выплаты, иначе банк может отклонить платеж или неправильно удержать взыскания по исполнительным листам.
2. Заполнение ИНН. Для формата XML версии 3.x поле ИНН сотрудника является обязательным. Рекомендуем выполнить проверку заполнения ИНН в справочнике Сотрудники перед формированием выгрузки. Проанализируем ситуацию: если ИНН не заполнен, файл XML может быть сформирован, но банковский шлюз выдаст ошибку валидации схемы (Schema Validation Error).
3. Форматирование сумм. При записи суммы в DBF или текстовые форматы всегда используйте функцию Формат(Сумма, "ЧГ=0"), чтобы исключить появление разделителей групп разрядов (пробелов между тысячами), которые могут быть восприняты банковской программой как ошибка.
Мы рассмотрели три основных пути решения задачи по выгрузке зарплаты в 1С:УПП. В большинстве случаев оптимальным решением будет использование стандартного зарплатного проекта с форматом XML. Если же требуется глубокая кастомизация или работа с устаревшими системами банка, использование объекта XBase для формирования DBF-файлов остается надежным инструментом в арсенале программиста. Не забывайте всегда уточнять актуальные требования к формату файла в технической поддержке вашего банка, так как форматы могут обновляться ежегодно.