Интеграция старых нетиповых конфигураций, таких как 1С:Управление торговлей 10.3, с современными CMS (например, 1С-Битрикс) часто превращается в головную боль для разработчика. Когда стандартные механизмы обмена кажутся сложными или «ломаются» из-за кастомных доработок конфигурации, возникает соблазн создать собственную схему обмена через выгрузку XML-файлов на FTP-сервер и последующий ручной или полуавтоматический импорт скриптами. Однако такой подход порождает множество проблем: задержки в обновлении остатков, отсутствие оперативного резервирования, ручную работу менеджеров и потенциальные ошибки при транзакциях.
В этой статье мы подробно разберем, как уйти от «костыльных» решений с FTP-серверами, правильно настроить автоматический двусторонний обмен, организовать работу с заказами и кассой, а также решить критически важную проблему мгновенного резервирования остатков в режиме реального времени.
Рассмотрим стандартную ситуацию: разработчик выгружает файлы offers.xml, import.xml, prices.xml и rests.xml на FTP, а затем запускает скрипт импорта (например, 1c_import_lite.php) на стороне сайта. Проанализируем минусы этой схемы:
Выясним причину, почему предыдущие разработчики отказались от готового решения. Чаще всего это связано с тем, что встроенный в старую конфигурацию УТ 10.3 механизм обмена использует устаревший формат CommerceML 2.05, структура которого не совпадает с ожиданиями современного Битрикса. Но это не повод писать велосипеды. Решение лежит в использовании официальных инструментов.
Вместо встроенного в 1С механизма обмена необходимо использовать официальный бесплатный модуль интеграции, который компания «1С-Битрикс» регулярно обновляет и выпускает в том числе для старых конфигураций, включая УТ 10.3. Этот модуль устанавливается как внешняя обработка или внедряется в саму конфигурацию.
Переход на официальный модуль решает следующие задачи:
Чтобы запустить автоматизацию, достаточно настроить регламентное задание в 1С, которое будет вызывать обработку обмена по расписанию (например, каждые 10–15 минут). Обмен при этом происходит не через FTP, а напрямую по протоколу HTTP/HTTPS: 1С обращается к скрипту /bitrix/admin/1c_exchange.php на сайте, передавая данные пакетами.
Синхронизация каталога товаров — это лишь половина дела. Нам необходимо настроить обратный поток: получение заказов с сайта в 1С. Рассмотрим, как функционирует этот процесс в штатном режиме:
ЗаказПокупателя. Если контрагент новый, система создает его карточку на основе данных из XML (ФИО, телефон, email, ИНН).Если конфигурация УТ 10.3 сильно переписана и типовой модуль Битрикс интегрировать сложно, альтернативным решением является написание собственного обмена через REST API или HTTP-сервисы. В этом случае 1С отправляет JSON-пакеты напрямую на веб-хуки сайта при проведении документов.
В условиях задачи упоминается облачная касса Терминал-ФА, которая автоматически фискализирует чеки при оплате на сайте. Как правильно отразить эти операции в 1С УТ 10.3, чтобы не возникло двоения выручки и остатки списывались корректно? Разберем по шагам рабочую схему:
Важное правило: Физически пробивать чек на кассовом аппарате в магазине для интернет-заказов, оплаченных на сайте, НЕЛЬЗЯ. Облачная касса «Терминал-ФА» уже отправила электронный чек в ОФД и налоговую. Повторное пробитие приведет к двоению налогооблагаемой базы.
Для корректного учета в 1С мы должны отразить безналичную оплату и списание товара:
ЗаказПокупателя.ОплатаОтПокупателяПлатежнойКартой (эквайринговая операция). Этот документ фиксирует поступление денежных средств на расчетный счет (за вычетом комиссии банка-эквайера) и закрывает задолженность покупателя, не задействуя физическую кассу магазина.РеализацияТоваровУслуг.Рассмотрим детально классическую проблему розничной торговли: ходовой товар остался в единственном экземпляре. Покупатель на сайте оформляет заказ и едет за ним, но в этот же момент розничный покупатель в магазине забирает этот товар с полки, и кассир пробивает его по кассе. Когда интернет-покупатель приезжает, товара уже нет.
Обычный периодический обмен (даже раз в 5 минут) не решает эту проблему, так как существует временной лаг. Единственный надежный способ избежать этого — внедрение синхронного онлайн-резервирования через Web-сервисы.
Схема работы выглядит следующим образом:
ЗаказПокупателя и ставит товар в резерв (например, на 30 минут — время, дающееся покупателю на завершение оплаты).Посмотрим на пример реализации метода HTTP-сервиса в 1С для проверки и резервирования номенклатуры:
Функция РезервироватьТоварНаСкладе(КодТовара, Количество, НомерЗаказаСайта) Экспорт
// Поиск номенклатуры по коду
СсылкаНоменклатуры = Справочники.Номенклатура.НайтиПоКоду(КодТовара);
Если СсылкаНоменклатуры.Пустая() Тогда
Возврат "Ошибка: Товар не найден";
КонецЕсли;
// Проверка текущего свободного остатка (с учетом резервов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладахОстатки.ВНаличииОстаток - ТоварыВРезервеНаСкладахОстатки.КоличествоОстаток КАК СвободныйОстаток
|ИЗ
| РегистрНакопления.ТоварыНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыНаСкладахОстатки
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(, Номенклатура = &Номенклатура) КАК ТоварыВРезервеНаСкладахОстатки
| ПО ТоварыНаСкладахОстатки.Номенклатура = ТоварыВРезервеНаСкладахОстатки.Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", СсылкаНоменклатуры);
РезультатЗапроса = Запрос.Выполнить();
СвободныйОстаток = 0;
Если Не РезультатЗапроса.Пустой() Тогда
Выборка = РезультатЗапроса.Выбрать();
Выборка.Следующий();
СвободныйОстаток = Выборка.СвободныйОстаток;
КонецЕсли;
Если СвободныйОстаток < Количество Тогда
Возврат "Ошибка: Недостаточно свободного остатка. Доступно: " + Строка(СвободныйОстаток);
КонецЕсли;
// Создание Заказа покупателя для резервирования товара
НовыйЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
НовыйЗаказ.Дата = ТекущаяДата();
НовыйЗаказ.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000"); // Пример заполнения
НовыйЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Розничный покупатель (сайт)");
НовыйЗаказ.ДоговорКонтрагента = НовыйЗаказ.Контрагент.ОсновнойДоговорКонтрагента;
НовыйЗаказ.Комментарий = "Авторезерв с сайта. Заказ № " + НомерЗаказаСайта;
// Заполнение табличной части
НоваяСтрока = НовыйЗаказ.Товары.Добавить();
НоваяСтрока.Номенклатура = СсылкаНоменклатуры;
НоваяСтрока.Количество = Количество;
НоваяСтрока.Размещение = Справочники.Склады.НайтиПоНаименованию("Основной склад"); // Склад резервирования
Попытка
НовыйЗаказ.Записать(РежимЗаписиДокумента.Проведение);
Возврат "Успешно зарезервировано. Номер документа 1С: " + НовыйЗаказ.Номер;
Исключение
Возврат "Ошибка при проведении документа: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
Такой подход полностью исключает человеческий фактор (не нужно ждать, пока менеджер обработает заказ) и гарантирует абсолютную точность остатков в розничной точке и на интернет-витрине в режиме 24/7.
Чтобы система работала стабильно и не вызывала негатива у покупателей, рекомендуем придерживаться следующих правил:
Резюмируя: отказ от устаревшей схемы обмена через FTP-костыли в пользу штатного модуля интеграции 1С-Битрикс и внедрение веб-сервисов для онлайн-резервирования позволит вам создать современную, надежную и масштабируемую систему автоматизации розничной торговли.