Mazmunga o'tish
Tez Base

Расхождение остатков 1С и WMS: как устроить сверку, которой можно верить

· Chop etilgan:

Интеграции и обмены

Если автоматическая сверка каждый день находит расхождение остатков 1С и WMS, а кладовщик приходит в зону и видит товар на месте, начинать надо с проверки самой сверки. Чаще всего две системы расходятся по определению величины: учётная сторона и складская считают разные вещи в разные моменты, а порог срабатывания стоит в нуле и превращает эту разницу в документы. Обмен при этом может работать безупречно.

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

Шесть требований к сверке остатков

ТребованиеКак проверитьЧто нашлось в разборе
Один момент среза с двух сторонвыписать, на какое время берётся каждая цифраскладская сторона бралась в момент запуска, учётная на конец дня
Одна и та же величина с двух сторонвыписать обе формулы рядомслева зоны, короба и три окна исключений, справа остаток минус хвост ордеров
Лаг отгрузки и непроведённые ордера учтены по замерупомерить лаг на нескольких случаях рукамилаг 0-13 секунд, поправка на 3 часа стояла на этом канале
Порог выше шума методикипостроить распределение модуля разницы за месяцпорог 0, дрейф на быстрой позиции 0,46%
Комментарий документа собран из чиселнайти строку комментария в кодестрока была константой и писалась на каждый документ
Нет круговорота туда и обратнопосчитать долю движений склада, созданную роботом62,7% оборота за 60 дней, 2 081 артикул из 2 102 ездил в обе стороны

Первые три требования про то, что сравнивается. Три последних про то, что сверка делает с результатом сравнения. Ломается обычно всё сразу, потому что каждое окно и каждую поправку ставили под отдельную жалобу склада.

Шаг 1. Достаньте снимок входных значений

Прежде чем спорить о причинах, нужны два числа, которые робот сравнил в момент запуска. В разобранной базе они лежали в журнале регистрации, в событии “Синхронизация остатков”: учётная сторона 438, складская 436, разница 2, перенесено 2.

Документ перемещения с комментарием для этого не годится, он появился позже и пересказывает. Сегодняшний отчёт по остаткам на ту же минуту тоже: срез регистра по всем складам на момент запуска дал 442 (165 + 3 + 10 + 110 + 154), а робот в ту же секунду записал 438. Разрыв 4 единицы больше самой найденной разницы, и документами он не объясняется: все 64 регистратора за период после среза не тронуты.

Так бывает в базе, где за один вечер прошло 670 допроведений документов прошлыми датами, правка наборов записей при перепроведении не журналируется, а регистр остатков складской системы пишется в журнал не полностью (ячейка на 24 штуки исчезла без единого события, replay журнала против живого состояния дал 240 против 214). Ретроспектива в такой базе не отвечает на вопрос “сколько было в 14:07”. Отвечает только снимок прибора.

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

Шаг 2. Выпишите обе формулы рядом

Требования про момент среза и одинаковую величину проверяются одним листом бумаги. В разборе формулы выглядели так.

ОстатокWMS = россыпь(зона_1) + россыпь(зона_2) + содержимое_коробов
             - позиции из списка исключений

ОстатокERP = остаток регистра на конец дня
             - непроведённые расходные ордера младше 3 часов

Список исключений на складской стороне снимал позицию целиком, если по ней:

  • была отгрузка за последние 60 минут по закрытому заказу или 12 часов по открытому;
  • была приёмка младше 12 часов;
  • была корректировка младше 60 минут.

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

У окон разной длины есть побочный эффект, который бьёт по складу. Позиция попадает в документ в первый тихий момент после волны активности, когда все окна закрылись. От события до документа может пройти полсуток, и склад, который добросовестно разбирает “что было в 14:20”, ничего не находит.

Что должно получиться после шага: обе стороны на один момент и одним набором вычетов. Если вычет нужен с одной стороны, он нужен и с другой.

Шаг 3. Померьте лаг, прежде чем его компенсировать

Поправки на непроведённые ордера и окна по отгрузкам нужны, только если канал реально запаздывает. Проверяется это руками на нескольких случаях: время физической отгрузки в WMS против времени появления расходного ордера в 1С.

В разборе пять замеров подряд дали 0, 0, 9, 13 и 1 секунду. Цикл “отбор - отгрузка - расходный ордер” оказался атомарным, а поправка на 3 часа стояла ровно на нём. Настоящий сдвиг нашёлся в другом канале: продажа через маркетплейсы проводится в учётной системе на сутки раньше, чем товар уезжает со склада. Это видно по нетто за пять дней подряд.

ДеньУчётная системаСкладская система
1-31-31
2+50+59
3-13-25
4+60+60
5-10-10
Сумма+56+53

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

Если лаг выходит минутами и часами, проблема уже в самом обмене. Тогда смотрят, встаёт ли изменение в очередь узла, по разбору регистрации изменений в плане обмена.

Шаг 4. Поставьте порог выше шума

Разница между двумя такими величинами колеблется сама по себе, без всякой недостачи. На быстрой позиции в разборе это было 2 единицы при остатке 438, то есть 0,46%. По второй позиции того же снимка разница 4 (86 против 82) разошлась двумя перемещениями, 1 и 3. Порог у робота стоял нулевой, поэтому любая единица превращалась в документ.

Моя позиция: сверка двух систем в первую очередь меряет собственную методику, и её порог обязан быть выше шума этой методики. Подбирают его так:

  1. Взять историю сверок за месяц.
  2. Построить распределение модуля разницы по позициям.
  3. Найти место, где заканчивается шум и начинается хвост.

Второй вариант обходится без подбора числа: позиция уходит в документ, если разница держится два прогона подряд. Шум между прогонами меняется, реальная недостача остаётся.

Граница честности. Порог “от трёх единиц или два прогона подряд” в разборе на исторических данных не проверили, и сколько настоящих недостач он пропустит, неизвестно. Готовой цифрой для чужой конфигурации его считать рано, это гипотеза под прогон по вашей истории.

Шаг 5. Соберите комментарий документа из переменных

В разборе комментарий “при нулевых остатках в WMS” стоял в коде процедуры, которая формирует перемещение, и писался на каждый документ. Когда-то он описывал одну ветку логики, потом ветка поменялась. Восемь месяцев склад искал ноль, которого не было ни разу: в снимке стояло 436.

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

Минимальный честный комментарий содержит то, что робот сравнил:

Сверка: учёт 438, склад 436, разница 2, порог 0, запуск ДД.ММ.ГГГГ чч:мм:сс

С таким текстом кладовщик видит, что речь о двух штуках при остатке в сотни, и не идёт искать пропажу. Похожая подмена бывает у заданий выгрузки, где статус “Выполнено успешно” принимают за доказательство результата, её разбирали в статье про выгрузку 1С по расписанию, которая не работает.

Шаг 6. Посчитайте круговорот на техническом складе

Последнее требование проверяется по движениям самого склада проверки. Цифры разбора за 60 дней:

ПоказательЗначение
Строк движений9 372
Документов-регистраторов2 061
Артикулов2 102
Приход15 879
Расход15 490
Нетто+389
Оборот31 369
Создано напрямую роботом сверки19 660 (62,7%)

2 081 артикул из 2 102 имел по складу проверки и приход, и расход. Робот сверки увозил позицию на проверку, второй робот, пополнение канала, тянул её обратно, и на горячих днях взаимных перекидок набирались десятки. Нетто +389 при обороте 31 369 даёт примерно одно полезное движение на 80.

Как считать у себя: разнести оборот технического склада по видам и авторам регистраторов и отдельно отметить артикулы, у которых за период есть обе стороны. Если доля робота подходит к половине оборота, сверка кормит сама себя.

В разборе осталась неразобранной категория “перемещения с другим комментарием”: 942 документа с нетто +1 584. Это почти треть оборота склада проверки, и что внутри, неизвестно. Такой остаток после разбора лучше записать явно, чем растворить в общем выводе.

Отдельно: список складов собирайте внутри расчёта

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

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

В каком порядке править

Порядок диктует цена правки. Комментарий из чисел стоит около получаса и первым снимает споры со складом. Запись снимка в журнал нужна до всего остального, без неё через неделю расследовать нечего. Выравнивание формул и порог идут последними, потому что требуют истории сверок хотя бы за месяц и замера лага по каждому каналу.

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

С каким порогом стоит сверка у вас, и мерил ли кто-нибудь распределение разницы за месяц до того, как этот порог поставить?

Buni siz uchun hal qila olaman

1C ni istalgan tizim bilan bogʻlaymiz: boshqa 1C bazalari, saytlar, CRM, banklar, davlat tizimlari. "Uzilib qoladigan" va navbat toʻplaydigan almashinuvlarni tuzatamiz.

Narxi
450 000 ₸ danalmashinuv quyi tizimini toʻliq joriy etish; soliqlarsiz, alohida vazifalar - arzonroq

Yozishga erta? O'zingiz o'lchang

Пришлите эксель, и чтобы на втором листе была сводная

Ishlov berishni ochish

INFOSTART TECH EVENT 2026: конференция для 1с-специалистов. если собираетесь, регистрируйтесь по нашей ссылке. Регистрация →

Buni ham o'qing

Регламентное задание 1С обрабатывает не все записи и не выдаёт ошибок: проверка и исправление цикла

Задание прошло, журнал чистый, счётчик обработанных сходится, а утром часть записей по-прежнему ждёт обработки. Частая причина: постраничный обход со смещением по набору, который сам сжимается от обработки. Как подтвердить это холостым прогоном, сколько теряется при разных размерах страницы, как переписать цикл и чем платить за исправление.

Проверка параметров HTTP-сервиса 1С: белый список, ошибка 400 и явные умолчания

Платформа не отвергает параметры, которых обработчик не ждёт, и опечатка в имени превращается в другой запрос с кодом 200. Разбираем четыре правила строгого входа для HTTP-сервиса на встроенном языке: белый список имён, 400 с понятным текстом, видимое умолчание и возраст данных в ответе. Код на BSL и проверка за минуту.

Регистрация изменений в плане обмена 1С: почему правка не встала в очередь

Между записью объекта и строкой в таблице изменений узла в БСП стоят пять ступеней: подписка на событие, включённая синхронизация, выборочная регистрация, авторегистрация и правила регистрации. Разбираем каждую по коду типовой УТ 11.5.22, запрос к очереди узла, замер на стенде и границу того, что показывает файл правил.