Как изменить текущий магазин в периферийной базе РИБ «1С:Розница»?

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

При развертывании распределенной информационной базы (РИБ) в конфигурации «1С:Розница» (редакции 2.1, 2.2, 2.3) технические специалисты часто сталкиваются со следующей проблемой: после создания начального образа подчиненного узла и первого запуска программы в новой базе по умолчанию устанавливается магазин центрального узла. При попытке зайти в настройки пользователя или открыть Рабочее место кассира (РМК) система выдает ошибки блокировки или сообщает о том, что для текущего пользователя нет доступных складов и касс ККМ. При этом ручное изменение настроек пользователя в режиме «1С:Предприятие» не дает результатов — после перезапуска сеанса все настройки сбрасываются обратно.

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

Выясняем причину: почему сбрасывается текущий магазин?

Для того чтобы понять природу этой ошибки, давайте обратимся к архитектуре конфигурации «1С:Розница». При запуске клиентского сеанса система выполняет процедуру инициализации параметров сеанса. Один из ключевых параметров, определяющих поведение интерфейса и доступность торгового оборудования — это параметр ПараметрыСеанса.ТекущийМагазин.

Алгоритм заполнения этого параметра работает следующим образом:

  1. При старте программы система определяет, запущена ли база в режиме подчиненного узла РИБ по магазинам. За это отвечает план обмена ПланыОбмена.ПоМагазину.
  2. Программа обращается к предопределенному элементу этого плана обмена — ЭтотУзел (который в контексте текущей информационной базы указывает на нее саму).
  3. У данного узла проверяется табличная часть Магазины. Конфигурация ожидает увидеть там перечень магазинов, которые жестко закреплены за текущей базой.
  4. Если табличная часть заполнена, система инициализирует параметр ТекущийМагазин значением из этой таблицы. Если в таблице указано несколько магазинов, приоритет отдается первому в списке либо значению по умолчанию, определенному для текущего пользователя.
  5. Если же табличная часть оказывается пустой, система либо подтягивает первый попавшийся магазин из справочника (зачастую это именно центральный магазин, который был выгружен при создании образа), либо оставляет параметр сеанса пустым (значение Неопределено).

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

Основная причина, почему табличная часть Магазины у элемента ЭтотУзел оказывается пустой — это нарушение последовательности действий администратором при создании РИБ. Если сначала был создан и выгружен образ подчиненного узла, а уже после этого в центральной базе были добавлены новые магазины или изменены настройки узла обмена, то в периферийную базу эти метаданные не запишутся в предопределенный элемент автоматически.

Способ 1: Программное исправление в периферийной базе

Если подчиненный узел РИБ уже развернут на удаленной торговой точке, заполнен локальными данными, и пересоздавать базу с нуля слишком трудозатратно, проблему пустой табличной части можно оперативно решить программным путем. Нам необходимо принудительно перезаписать данные предопределенного узла ЭтотУзел непосредственно в периферийной базе.

Для выполнения этой операции нам потребуется запустить фрагмент кода. Сделать это можно с помощью внешней обработки «Консоль кода» (или «Групповая обработка объектов»), запущенной под правами Администратора с полными правами в режиме «1С:Предприятие».

Рассмотрим по шагам программный алгоритм, который вернет базу в рабочее состояние:


// Шаг 1. Получаем объект текущего узла плана обмена "По магазину"
ТекущийУзелОбъект = ПланыОбмена.ПоМагазину.ЭтотУзел().ПолучитьОбъект();

// Шаг 2. Очищаем старые привязки магазинов, если они некорректны
ТекущийУзелОбъект.Магазины.Очистить();

// Шаг 3. Находим нужный магазин в справочнике по наименованию или коду
// Замените "Название_Вашего_Магазина" на точное наименование из вашей базы
НужныйМагазин = Справочники.Магазины.НайтиПоНаименованию("Название_Вашего_Магазина");

Если ЗначениеЗаполнено(НужныйМагазин) Тогда
    // Шаг 4. Добавляем новую строку в табличную часть узла обмена
    НоваяСтрока = ТекущийУзелОбъект.Магазины.Добавить();
    НоваяСтрока.Магазин = НужныйМагазин;
    
    // Шаг 5. Записываем объект, отключая стандартные проверки при необходимости
    ТекущийУзелОбъект.ОбменДанными.Загрузка = Истина;
    ТекущийУзелОбъект.Записать();
    
    Сообщить("Текущий узел успешно привязан к магазину: " + НужныйМагазин);
Иначе
    ВызватьИсключение "Указанный магазин не найден в справочнике! Проверьте правильность наименования.";
КонецЕсли;

Давайте проанализируем, что делает данный код. Сначала мы получаем объектную форму предопределенного узла. Свойство ОбменДанными.Загрузка = Истина крайне важно использовать, чтобы обойти платформенные ограничения и проверки конфигурации при изменении предопределенных узлов планов обмена в режиме РИБ. После записи объекта база жестко ассоциирует себя с выбранной торговой точкой.

После выполнения этого скрипта обязательно нужно выполнить полный перезапуск сеанса 1С:Предприятия. При новом входе в систему параметр сеанса ПараметрыСеанса.ТекущийМагазин будет заполнен корректно. Ошибки доступа исчезнут, и вы сможете беспрепятственно зайти в Рабочее место кассира. При необходимости вернуть параметры кассового узла без повторного подключения оборудования подойдёт обработка для восстановления настроек РМК и текущего рабочего места.

Способ 2: Правильная настройка узлов в Центральной базе (Профилактика)

Чтобы избежать подобных проблем при создании новых магазинов в будущем, мы рекомендуем строго придерживаться правильной последовательности действий в Главной (Центральной) базе данных. Ошибка инициализации узла не возникнет, если настройки обмена будут полностью завершены до момента генерации начального образа РИБ. Для регулярного обмена данными по расписанию на основе настроенных планов обмена применяется программа для автоматического обмена данными между базами 1С.

Рассмотрим правильный регламент создания нового узла РИБ по шагам:

  1. В центральной базе перейдите в раздел «НСИ» и создайте новый элемент справочника Магазины. Сразу же создайте подчиненные ему склады, кассы организации и кассы ККМ.
  2. Перейдите в раздел «Администрирование» -> «Синхронизация данных» и откройте настройки синхронизации (Планы обмена по магазинам).
  3. Создайте новую настройку синхронизации для филиала. На этапе заполнения правил отправки данных обязательно перейдите на вкладку отбора по магазинам.
  4. Критически важный шаг: В окне настройки узла установите флаг (или добавьте в список) напротив вновь созданного магазина. Этим действием вы привязываете данный узел плана обмена к конкретной торговой точке на уровне метаданных центральной базы.
  5. Запишите настройки узла обмена.
  6. Только после завершения всех настроек выберите пункт «Создать начальный образ подчиненного узла РИБ».

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

Дополнительная настройка пользователей после исправления РИБ

После того как вы применили программное исправление (Способ 1) или создали корректный образ (Способ 2), необходимо проверить и настроить права пользователей в периферийной базе, чтобы кассиры могли беспрепятственно пробивать чеки.

Для этого выполните следующие действия:

  1. Перейдите в меню «Администрирование» -> «Пользователи и права» -> «Пользователи».
  2. Откройте карточку нужного пользователя (например, администратора магазина или кассира).
  3. В верхней части панели нажмите на голубую гиперссылку «Настройки пользователя» (в некоторых версиях интерфейса этот пункт находится в разделе «Органайзер» или «Персональные настройки»).
  4. В открывшемся списке настроек найдите параметры Основной магазин, Основной склад и Основная касса ККМ. Теперь эти поля станут доступными для редактирования, и в них отобразятся элементы, принадлежащие именно вашему новому магазину.
  5. Установите корректные значения по умолчанию для каждого сотрудника и нажмите кнопку «Сохранить настройки».

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

← На главную