Решая одну из проблем, связанных с использованием Frontol xPOS я столкнулся с тем, что в 1С Управление торговлей совсем не очевидно как работают правила обмена с подключаемым оборудованием Offline.

Пришлось потратить время, чтобы прочитать код из конфигурации и разобраться что к чему, что в итоге помогло сократить количество товаров, которые выгружаются во Frontol xPOS примерно в 10 раз, но обо всем по порядку.

Внедряя Frontol xPOS 3 на одну из торговых точек возникла интересная проблема - визуальный поиск на Frontol xPOS 3 версии 3.3.0.2185 работает таким образом, что отображает все товары, т.е. в том числе товары с нулевой ценой и нулевым остатком и нет возможности изменить такое поведение.

В принципе это нормально, но в нашем каталоге таких товаров оказалось примерно 30 000 из-за чего визуальный поиск существенно притормаживал.

Окно визуального поиска в программе Frontol xPOS3 с нулевыми остатками и ценами для товаров

Первое, что пришло в голову - это сделать так, чтобы из 1С товары с нулевой ценой и остатком не выгружались во Frontol. И тут то и началось это ужасное приключение.

Стоит упомянуть, что у нас используется 1С Управление торговлей 11.3.4.185 на платформе 8.3.15.1830.

Открываем 1С, идем в "НСИ и администрирование" → "РМК и оборудование" → "Правила обмена с подключаемым оборудованием Offline" → открываем используемое для Frontol xPOS 3 правило обмена и видим вот такое окно

Исходное окно правил обмена в 1С Управление торговлей 11.3

Ставим галочки на строках "Только с ценами" и "Только с остатками на складе" и обновляем список товаров.

Окно с измененными правилами обмена в 1С Управление торговлей 11.3

Товары, которые не подходят под наши критерии отбора товаров отметились серым цветом. Вроде все хорошо. Выгружаем товары во Frontol xPOS 3, открываем окно визуального поиска во Frontol и видим, что ничего не изменилось, т.е. там так же присутствуют товары с нулевыми ценами и нулевыми остатками.

В моем случае обмен данными происходит через FTP сервер, поэтому открываю файл обмена, смотрю, все товары, которые должны были исчезнуть из файла - не исчезли, т.е. проблема явно где-то со стороны выгрузки из 1С УТ.

Содержимое файла обмена между 1С Управление торговлей 11.3 и Frontol xPOS 3

Пришлось потратить много времени в поисковиках пытаясь найти ответ на вопрос, что же я сделал не так, но ничего внятного так и не удалось найти. Открываю конфигуратор в 1С, трачу пару часов на разбор кода и эврика!

Если изначально задаться правильным вопросом, то все становится очевидно. Что случится, если мы из Frontol xPOS уберем товары, которых сейчас нет в наличии, но которые скажем были в наличии еще вчера? Как например тогда оформить возврат по такому товару?

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

Оформление возврата в программе Frontol xPOS3 при нарушенной целостности связей в данных

Было бы здорово, если бы разработчики 1С упомянули об этом хоть где-нибудь, например на сайте ИТС, но они видимо посчитали, что это очевидно.

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

Учет таких товаров в 1С идет в отдельном регистре сведений, который называется "Коды товаров подключаемого оборудования offline" и который содержит в себе связь между правилом обмена и товаром, который уже выгружался во Frontol.

Как все же убрать из Frontol товары с нулевой ценой и нулевым остатком? Можно попробовать создать новое правило обмена и до первого обмена с подключаемым оборудованием правильно настроить все условия отбора товара.

Если так сделать и совершить обмен, то как мы выяснили нарушится целостность связей во Frontol, т.е. единственный простой способ сделать все правильно - это удалить все данные из Frontol, потом настроить правило обмена и только потом совершить выгрузить каталог товаров.

Серьезно? Удалить все данные? Нет! Дело в том, что если уже какое-то время Frontol работал на торговой точке и мы удалим из него все данные, то становится не понятно на основании чего тогда делать возврат?

В момент написания этих строк меня осенило, что самым оптимальным решением в этом случае будет следующее:

  1. Составить список кодов товаров, которые были использованы во Frontol за все время его использования;
  2. Из регистра сведений "Коды товаров подключаемого оборудования offline" удалить все товары для правила обмена с Frontol у которых не стоит галочка "Используется" и которых нет в списке, который мы составили на первом шаге;
  3. Профит, представляем сцену, где на заднем фоне все взрывается, а главный персонаж идет медленным шагом и надевает солнцезащитные очки.

Первый шаг легко реализуется с помощью выгрузки данных из Frontol за все время, дальнейшего импорта полученных в CSV данных в Google Spreadsheet и удаления дублей для колонки с кодами.

Подробнее процесс выгрядит следующим образом:

  1. Выгружаем данные из Frontol за все время;
  2. Открываем получившийся файл, удаляем из него первые 2 строки и сохраняем с расширением .csv;
  3. Импортируем файл в Google Spreadsheet, выбираем в качестве разделителя ";" и выбираем не преобразовывать импортируемые данные;
  4. В столбце номер 8 содержатся коды товаров, которые мы будем использовать позже в 1С, поэтому оставляем только этот столбец, а все остальное удаляем;
  5. Выделяем все данные в этом столбце и выбираем в верхнем меню Google Spreadsheet пункт "Data" → "Remove duplicates";
  6. Из получившегося столбца удаляем пустую строку и строку, содержащую ноль;
  7. Сортируем данные в столбце от меньшего к большему и проверяем. Обычно все коды товаров, которые выгружаются на подключаемое оборудование имеют значение больше 100 000, поэтому будет не лишним проверить попали ли в этот список какие-нибудь меньшие значения. Если да - смело удаляем их;

На выходе у меня получилось 554 шестизначных кода, каждый из которых соответствует определенному товару в нашем каталоге в 1С.

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

Регистр сведений Коды товаров подключаемого оборудования offline в 1С Управление торговлей 11.3 с выбранными фильтрами

После чего выделяем все записи через Ctrl+A и удаляем их.

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

В случае использования Frontol мы теперь знаем как это поправить, хотя в большинстве случаев в этом нет необходимости.

Забавный факт - я вовсе не хотел заниматься решением этой задачи самостоятельно, т.к. от всей души не люблю все, что связано с 1С.

Практика показала, что делегирование этой задачи без понимания сути работы всего механизма привело бы только к потере лишних денег и времени. Не понятно только откуда, например менеджеру, который хочет делегировать такую задачу все это узнать?

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

Изначальная постановка задачи на бирже фриланса для 1С разработчиков

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

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

В заключении хочется сказать только одно - да прибудет с вами сила! Она определенно вам понадобится, если вы связались с 1С.