Ситуация, когда в проведенном заказе клиента после сохранения меняется номенклатура (например, с «саморез 35» на «саморез 40»), является одной из самых сложных для диагностики. Часто пользователи сталкиваются с тем, что стандартная История изменений показывает отсутствие правок, а печатные формы, созданные в момент оформления, противоречат текущему состоянию документа. Давайте разберем, как последовательно проанализировать эту проблему и найти виновника.
Самая распространенная причина — это существование в справочнике Номенклатура двух практически идентичных элементов. Если у вас есть две позиции с одинаковым наименованием, может произойти путаница при выборе товара или при автоматическом обновлении данных регламентными заданиями.
Номенклатура.Возможно, при подборе товара в заказ была выбрана одна позиция, а автоматизированный процесс (например, перепроведение или обмен) привязал заказ к ссылке на другую позицию, которую ошибочно посчитали «основной».
Если История изменений пуста, это не значит, что изменений не было. Механизм версионирования срабатывает только при записи объекта через стандартные формы 1С. Рассмотрим варианты, когда записи в истории не появляются:
Групповое изменение реквизитов с установленным режимом «Разработчик» позволяет менять данные, обходя подписки на события.Если вы подозреваете подмену, сравнивайте не наименование, а Уникальный идентификатор (УИД) объекта. Наименования могут быть одинаковыми, но ссылки в базе данных — разными.
Пример программного способа получения УИД для анализа:
// Пример получения УИД для проверки
СсылкаНаТовар = ДокументОбъект.Товары[0].Номенклатура;
УИД = Строка(СсылкаНаТовар.УникальныйИдентификатор());
Сообщить("УИД номенклатуры в заказе: " + УИД);
Не ограничивайтесь поиском изменений только в объекте Документ.ЗаказКлиента. Расширьте область поиска:
Журнал регистрации.Справочник.Номенклатура.Если проблема критична, используйте метод сравнения баз. Разверните резервную копию, сделанную до момента обнаружения ошибки.
Сравните текущий документ в «живой» базе и в бэкапе по УИД. Если в бэкапе в заказе стоит «саморез 35», а в текущей базе там же стоит «саморез 40», значит, была произведена именно манипуляция с данными внутри заказа. Если же и там, и там стоит «саморез 35», но в текущей базе объект номенклатуры переименован — ищите следы в Истории изменений номенклатуры.
Заключение: Чудес не бывает. Если данные изменились, значит, сработал программный код или внешний скрипт. В первую очередь проверяйте наличие дублей номенклатуры, так как это самая частая причина «самопроизвольных» подмен, которые пользователи принимают за мистику.