Внешняя обработка для тех, у кого пакет обмена БСП или РИБ ходит через FTP по плохому каналу. Связь моргнула на середине, и следующая попытка везёт пакет с нулевого байта. Если канал рвётся чаще, чем пакет успевает дойти целиком, обмен не проходит никогда.
Хуже второе: штатный FTP-транспорт БСП пишет пакет на сервер одним вызовом сразу под настоящим именем. После обрыва там остаётся огрызок, и принимающая сторона по коду не отличает его от целого пакета: берёт самый свежий файл ненулевого размера. Хеш штатный транспорт не сверяет. Обработка везёт пакет частями, после обрыва продолжает с первой недоехавшей части и кладёт пакет в каталог обмена только после совпадения SHA-256.
Что делает
- Отправка частями по 8 МБ. Каждая часть пишется во временное имя
NNNN.part.tmpи переименовывается вNNNN.partтолько после полной записи. Файл с финальным именем на сервере и есть признак "часть доехала". - Докачка после обрыва. Следующий запуск читает опись на FTP, пропускает доехавшие части и продолжает с первой недоехавшей. Теряется максимум одна часть.
- Сверка до загрузки. Опись с SHA-256 пакета и каждой части уходит первой, отметка готовности последней. Получатель сверяет хеш каждой части и собранного пакета и только потом переносит пакет в каталог обмена. Битая часть удаляется с FTP, следующая отправка досылает только её.
- Свой пакет от чужого. Исходящий и входящий пакет в общем каталоге различаются по имени БСП
Message_Отправитель_Получатель. Код своего узла обработка берёт из планов обмена сама, поле "Код этого узла" перебивает автоматику. - Защита от двойного запуска. Ручной запуск поверх регламентного получает ответ "Уже идёт отправка из этого каталога обмена другим запуском обработки" и ничего не трогает. Брошенный замок (форму закрыли посреди передачи) перехватывается через 15 минут, передача продолжается с той же части.
- Журнал и выгрузка в Markdown для нейросети. По каждому пакету все попытки, место обрыва и отдельной строкой число частей, ушедших повторно. Логин и пароль FTP в журнал и выгрузку не попадают.
Сам обмен обработка не выгружает и не загружает, узлы и транспорт не настраивает. Это делает штатный обмен, обработка только везёт файл.
Как подключить
- В настройке синхронизации узла выбрать транспорт "Локальный или сетевой каталог" и указать каталог на сервере 1С. То же на второй стороне.
- В обработке заполнить адрес FTP (
ftp://сервер:21/obmen, каталог на FTP общий для обоих узлов), пользователя, пароль, пассивный режим и тот же каталог обмена, что в узле. - Отправитель после выгрузки жмёт "Отправить пакет", получатель "Получить пакет", дальше штатная загрузка.
- По расписанию: зарегистрировать файл в "Дополнительные отчёты и обработки" (нужна БСП) и включить расписание у команды "Отправить и получить пакеты обмена через FTP". Команда сначала отправляет исходящие, потом забирает входящие. Обрыв при регламентном запуске пишется в журнал, следующий запуск продолжит с той же части.
Конфигурацию править не нужно. Настройки и журнал общие для всех пользователей базы.
Частые вопросы
Почему частями по 8 МБ, а не с того байта, где оборвалось?
У FTPСоединение нет записи со смещения: Записать и Получить принимают ровно два параметра, третий даёт "Слишком много фактических параметров". 8 МБ на канале 1 Мбит/с уходят примерно за минуту, столько и теряется в худшем случае. Таймаут одной операции 10 минут: у платформы он считается на всю операцию, поэтому канал медленнее 14 КБ/с часть не протащит.
Что будет, если пакет доехал битым?
Не совпал SHA-256 части или целого пакета, и пакет в каталог обмена не попадает, в таблице красная строка с номером части. Часть удаляется с FTP, следующая отправка дошлёт только её.
Что будет с пакетом, который обмен перевыгрузил, пока старый ехал?
Отправитель сверяет каждую часть с описью, а перед отметкой готовности размер и время изменения файла. Файл поменялся, и попытка закрывается с пометкой "пакет изменился". Следующая отправка удаляет старые части и везёт новый пакет.
Работает ли в базе с режимом совместимости 8.2?
Да. Обработка не пользуется функциями, которые режим совместимости закрывает (СтрНайти с направлением, СтрРазделить, СтрСоединить и им подобные), и проверена в базах с режимами 8.2.16, 8.3.5 и 8.3.10: полная отправка и приём пакета, SHA-256 совпал. Сама платформа нужна от 8.3.20.
Где хранится пароль?
В общих настройках базы, как настройки отчётов. В журнал, текст итога и выгрузку для нейросети логин и пароль не попадают. Логин и пароль прямо в адресе (ftp://логин:пароль@сервер) обработка не принимает и просит перенести в поля.
А FTPS?
В коде параметр защищённого соединения есть, но на стенде с TLS передача зависала на листинге каталога. Пока не проверено на живом FTPS-сервере, не заявляется. SFTP обработка не умеет.
Что учесть на своей базе
- Каталог обмена смотрится на сервере 1С: учётке службы 1С нужны права на запись в него.
- Пакеты с нестандартными именами (не
Message_...) обработка не увидит. Так их называет БСП, у РИБ без БСП имя задаёт разработчик. - Нужно место на диске получателя под части плюс собранный пакет.
- Прежний пакет в каталоге обмена, положенный другой учёткой, служба 1С может не иметь права заменить. Тогда итог "пакет собран и SHA-256 совпал, но положить его в каталог обмена не удалось" с текстом ошибки, скачанные части сохраняются.
На чём проверялась
Управление торговлей 11.5.22.67, БСП 3.1.11, платформа 8.3.27, локальный FTP-сервер. Настоящий пакет обмена на 603,7 МБ (76 частей). Три прогона: обрыв посреди отправки и посреди приёма с докачкой без повторной передачи ушедших частей; испорченная часть на FTP, из-за которой пакет не лёг в каталог, а отправитель дослал одну часть; чистая передача и загрузка доставленного пакета платформенными объектами обмена без ошибок. SHA-256 сверен независимо от 1С: у отправителя, в склейке частей на FTP и у получателя. Совместимость проверена во временных базах с режимами 8.2.16, 8.3.5 и 8.3.10, замок от двойного запуска проверен вызовом.
Что в файле
Внешняя обработка (.epf) на управляемых формах. Открывается через "Файл - Открыть", встраивать в конфигурацию не нужно; для запуска по расписанию регистрируется как дополнительная обработка БСП. Код открыт.
Проверено на следующих конфигурациях и релизах:
- Управление торговлей, редакция 11, релизы 11.5.22.67
Вступайте в нашу телеграмм-группу Инфостарт