Почему при загрузке документов СБИС в 1С УТ 11 не подставляется склад?

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

Многие пользователи при расширении бизнеса сталкиваются с тем, что автоматизация, которая идеально работала для одного склада, начинает «капризничать» при вводе второго. В случае с интеграцией СБИС и 1С:Управление торговлей (УТ 11) часто возникает ситуация, когда документы ПриобретениеТоваровУслуг создаются с пустым полем Склад. Давайте вместе разберемся, где «прячется» проблема и как ее можно диагностировать и устранить.

Анализируем причину: как работает механизм выбора склада

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


Функция СкладПоУмолчанию(УчитыватьГруппыСкладов = Ложь, ИсключитьГруппыДоступныеВЗаказах = Ложь) Экспорт
    Если УчитыватьГруппыСкладов Тогда
        Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2 Склад ИЗ Справочник.Склады КАК Таблица ГДЕ...");
    Иначе
        Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2 Склад ИЗ Справочник.Склады КАК Таблица ГДЕ НЕ Таблица.ЭтоГруппа");
    КонецЕсли;
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда
        Склад = Выборка.Склад;
    Иначе
        Склад = Справочники.Склады.ПустаяСсылка();
    КонецЕсли;
    Возврат Склад;
КонецФункции

В чем здесь подвох? Обратите внимание на условие Выборка.Количество() = 1. Разработчик логики намеренно заложил жесткое ограничение: если в базе найдено более одного склада (или если запрос возвращает два и более элемента), система не пытается «угадать» нужный, а сознательно возвращает ПустаяСсылка. Когда склад был один, условие выполнялось, и всё работало. Как только складов стало два, условие перестало выполняться, и обработка «сдается», оставляя поле пустым.

Разбор методов получения значений по умолчанию

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


сбисОписаниеОбъекта.Значение = Вычислить("УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной(""глТекущийПользователь""),""ОсновнойСклад"")");

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

Шаги по исправлению ситуации

Для решения задачи предлагаем пройтись по следующим этапам:

  1. Проверка настроек в самой обработке. Прежде чем лезть в код, откройте форму настройки интеграции СБИС внутри 1С. Часто разработчики предусматривают поле «Склад по умолчанию» именно в интерфейсе настроек модуля. Если вы его найдете, заполните его, и обработка перестанет обращаться к функциям поиска склада, используя фиксированное значение из настроек.
  2. Адаптация кода под УТ 11. Если настройки в интерфейсе отсутствуют, потребуется доработка модуля. Вам необходимо изменить функцию ПолучитьСклад таким образом, чтобы она обращалась к актуальному хранилищу настроек. Вместо использования Вычислить с устаревшими методами, используйте прямой запрос к регистру сведений настроек пользователей вашей конфигурации.
  3. Принудительное определение склада. Если вам не принципиально динамическое определение, можно модифицировать функцию СкладПоУмолчанию так, чтобы она всегда возвращала конкретный Склад, если его Наименование совпадает с заданным, либо брать Первый из списка, убрав ограничение Количество() = 1. Однако помните, что это решение «в лоб», которое может быть неудобным, если склад меняется часто.
  4. Очистка кэша. Помните, что обработка использует МестныйКэш и метод сбисЗакэшироватьЗначениеРассчитанногоОбъекта. Если вы внесли правки в код, обязательно перезапустите сеанс работы с 1С или очистите кэш данных обработки, иначе система продолжит использовать старое, «запомненное» значение пустой ссылки.

Рекомендация по отладке

Чтобы точно увидеть, на каком этапе «отваливается» определение склада, рекомендуем поставить точку останова в функции ПолучитьСклад(Контекст). Запустите загрузку документа и пошагово пройдите выполнение кода. Если вы увидите, что сбисОписаниеОбъекта.Значение становится Неопределено, значит, обработка не находит настроек и, следовательно, не может заполнить реквизит документа. Это будет прямым сигналом к тому, что нужно либо настроить пользователя, либо переписать алгоритм поиска на более актуальный для УТ 11.

← На главную