Почему пропадают штрихкоды и меняются данные номенклатуры в 1С:УНФ при работе через веб-сервер

Программист 1С v8.3 (Управляемые формы) 1С:Управление нашей фирмой Управленческий учет Торговля и дистрибуция
← На главную

В практике работы с 1С:Управление нашей фирмой (УНФ) пользователи иногда сталкиваются с пугающими симптомами: штрихкоды, созданные через внешние обработки или вручную, внезапно исчезают, а характеристики номенклатуры (например, размеры) меняются «сами собой», даже когда в системе якобы никто не работал. Разберем детально причины этого явления и пошагово пройдем путь от диагностики до полного решения проблемы.

Анализируем влияние базовой версии и веб-публикации

Первое, на что стоит обратить внимание в данной ситуации — это использование Базовой версии конфигурации совместно с веб-публикацией через Apache. Рассмотрим, почему это сочетание может приводить к потере данных. Базовые версии имеют жесткие ограничения на уровне платформы по количеству одновременных сеансов и специфике работы с COM-соединениями и HTTP-запросами.

Проанализируем механизм работы веб-сервера. При использовании тонкого или веб-клиента через протокол HTTP, Apache может удерживать сеансы (так называемые «зависшие сеансы»). Если лимит соединений в базовой версии исчерпан, попытка записи нового штрихкода может прерваться без явной ошибки для пользователя. Система сообщает об успехе, но транзакция на стороне сервера откатывается из-за конфликта доступа. Важным шагом в решении стало обновление конфигурации до версии ПРОФ, что снимает ограничения на сессии и обеспечивает более стабильную работу веб-сервисов.

Проблема алгоритмов внешней загрузки данных

Если штрихкоды загружаются через внешнюю обработку (загрузка из табличной части или внешнего файла), необходимо тщательно проверить программный код. Выясним причину, по которой данные могут затираться. В 1С:УНФ штрихкоды хранятся в регистре сведений ШтрихкодыНоменклатуры. Рассмотрим типичную ошибку при написании кода загрузки:


// Опасный метод: может затереть существующие данные при неправильном поиске
НаборЗаписей = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Номенклатура.Установить(ТекущаяНоменклатура);
// Если не добавить отбор по штрихкоду, набор очистит все старые записи!
НаборЗаписей.Записать();

Для корректной работы рекомендуется использовать МенеджерЗаписи или всегда проверять наличие дублей перед записью. Разберем правильный подход к добавлению штрихкода:


МенеджерЗаписи = РегистрыСведений.ШтрихкодыНоменклатуры.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Номенклатура = ВыбраннаяНоменклатура;
МенеджерЗаписи.Штрихкод = НовыйШтрихкод;
МенеджерЗаписи.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
МенеджерЗаписи.Прочитать();

Если Не МенеджерЗаписи.Выбран() Тогда
    МенеджерЗаписи.Записать();
КонецЕсли;

Роль полнотекстового поиска (ППС) в «исчезновении» данных

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

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

  1. Зайти в раздел «Администрирование» — «Поддержка и обслуживание».
  2. Найти пункт «Полнотекстовый поиск данных».
  3. Нажать «Очистить индекс», а затем «Обновить индекс».

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

Версионирование объектов и конфликты блокировок

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

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

Почему данные меняются «сами собой» (Фоновые задания)

Ситуация, когда «никто не подключался, а размер изменился», обычно связана с автоматизированными процессами. Проверим список регламентных заданий в 1С:УНФ. В этой программе работают механизмы синхронизации, которые могут изменять данные:

Итоговый алгоритм решения проблемы

Чтобы гарантированно избавиться от «мистических» изменений и пропаж, выполним следующие шаги:

  1. Переход на версию ПРОФ: Это устранит ограничения на количество сеансов и повысит стабильность работы через Apache.
  2. Настройка веб-сервера: В файле конфигурации Apache (httpd.conf) увеличим KeepAliveTimeout до 60 секунд, чтобы исключить разрывы соединений во время длительных транзакций.
  3. Оптимизация поиска: Отключим или полностью переиндексируем полнотекстовый поиск.
  4. Контроль дублей: Доработаем внешнюю обработку загрузки, добавив проверку на существование штрихкода перед записью, чтобы избежать «затирания» данных.
  5. Аудит доступа: Сменим пароли и проверим настройки публикации, чтобы исключить несанкционированный доступ из интернета.

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

← На главную