При развертывании распределенной информационной базы (РИБ) в конфигурации «1С:Розница» (редакции 2.1, 2.2, 2.3) технические специалисты часто сталкиваются со следующей проблемой: после создания начального образа подчиненного узла и первого запуска программы в новой базе по умолчанию устанавливается магазин центрального узла. При попытке зайти в настройки пользователя или открыть Рабочее место кассира (РМК) система выдает ошибки блокировки или сообщает о том, что для текущего пользователя нет доступных складов и касс ККМ. При этом ручное изменение настроек пользователя в режиме «1С:Предприятие» не дает результатов — после перезапуска сеанса все настройки сбрасываются обратно.
В этой статье мы подробно разберем, почему возникает данная проблема, проанализируем внутренние механизмы конфигурации на уровне кода и предложим два надежных способа ее решения: оперативное исправление уже созданной базы программным путем и правильную последовательность настройки узлов в центральной базе для предотвращения подобных сбоев в будущем.
Для того чтобы понять природу этой ошибки, давайте обратимся к архитектуре конфигурации «1С:Розница». При запуске клиентского сеанса система выполняет процедуру инициализации параметров сеанса. Один из ключевых параметров, определяющих поведение интерфейса и доступность торгового оборудования — это параметр ПараметрыСеанса.ТекущийМагазин.
Алгоритм заполнения этого параметра работает следующим образом:
ПланыОбмена.ПоМагазину.ЭтотУзел (который в контексте текущей информационной базы указывает на нее саму).Магазины. Конфигурация ожидает увидеть там перечень магазинов, которые жестко закреплены за текущей базой.ТекущийМагазин значением из этой таблицы. Если в таблице указано несколько магазинов, приоритет отдается первому в списке либо значению по умолчанию, определенному для текущего пользователя.Неопределено).В результате этого стандартные механизмы назначения прав и настроек пользователя дают сбой. Даже если вы создадите нового пользователя и укажете ему другой магазин в его персональных настройках, при входе в систему глобальный параметр сеанса все равно переопределит эту настройку на уровне ядра, заставляя программу думать, что база принадлежит центральному магазину.
Основная причина, почему табличная часть Магазины у элемента ЭтотУзел оказывается пустой — это нарушение последовательности действий администратором при создании РИБ. Если сначала был создан и выгружен образ подчиненного узла, а уже после этого в центральной базе были добавлены новые магазины или изменены настройки узла обмена, то в периферийную базу эти метаданные не запишутся в предопределенный элемент автоматически.
Если подчиненный узел РИБ уже развернут на удаленной торговой точке, заполнен локальными данными, и пересоздавать базу с нуля слишком трудозатратно, проблему пустой табличной части можно оперативно решить программным путем. Нам необходимо принудительно перезаписать данные предопределенного узла ЭтотУзел непосредственно в периферийной базе.
Для выполнения этой операции нам потребуется запустить фрагмент кода. Сделать это можно с помощью внешней обработки «Консоль кода» (или «Групповая обработка объектов»), запущенной под правами Администратора с полными правами в режиме «1С:Предприятие».
Рассмотрим по шагам программный алгоритм, который вернет базу в рабочее состояние:
// Шаг 1. Получаем объект текущего узла плана обмена "По магазину"
ТекущийУзелОбъект = ПланыОбмена.ПоМагазину.ЭтотУзел().ПолучитьОбъект();
// Шаг 2. Очищаем старые привязки магазинов, если они некорректны
ТекущийУзелОбъект.Магазины.Очистить();
// Шаг 3. Находим нужный магазин в справочнике по наименованию или коду
// Замените "Название_Вашего_Магазина" на точное наименование из вашей базы
НужныйМагазин = Справочники.Магазины.НайтиПоНаименованию("Название_Вашего_Магазина");
Если ЗначениеЗаполнено(НужныйМагазин) Тогда
// Шаг 4. Добавляем новую строку в табличную часть узла обмена
НоваяСтрока = ТекущийУзелОбъект.Магазины.Добавить();
НоваяСтрока.Магазин = НужныйМагазин;
// Шаг 5. Записываем объект, отключая стандартные проверки при необходимости
ТекущийУзелОбъект.ОбменДанными.Загрузка = Истина;
ТекущийУзелОбъект.Записать();
Сообщить("Текущий узел успешно привязан к магазину: " + НужныйМагазин);
Иначе
ВызватьИсключение "Указанный магазин не найден в справочнике! Проверьте правильность наименования.";
КонецЕсли;
Давайте проанализируем, что делает данный код. Сначала мы получаем объектную форму предопределенного узла. Свойство ОбменДанными.Загрузка = Истина крайне важно использовать, чтобы обойти платформенные ограничения и проверки конфигурации при изменении предопределенных узлов планов обмена в режиме РИБ. После записи объекта база жестко ассоциирует себя с выбранной торговой точкой.
После выполнения этого скрипта обязательно нужно выполнить полный перезапуск сеанса 1С:Предприятия. При новом входе в систему параметр сеанса ПараметрыСеанса.ТекущийМагазин будет заполнен корректно. Ошибки доступа исчезнут, и вы сможете беспрепятственно зайти в Рабочее место кассира. При необходимости вернуть параметры кассового узла без повторного подключения оборудования подойдёт обработка для восстановления настроек РМК и текущего рабочего места.
Чтобы избежать подобных проблем при создании новых магазинов в будущем, мы рекомендуем строго придерживаться правильной последовательности действий в Главной (Центральной) базе данных. Ошибка инициализации узла не возникнет, если настройки обмена будут полностью завершены до момента генерации начального образа РИБ. Для регулярного обмена данными по расписанию на основе настроенных планов обмена применяется программа для автоматического обмена данными между базами 1С.
Рассмотрим правильный регламент создания нового узла РИБ по шагам:
Магазины. Сразу же создайте подчиненные ему склады, кассы организации и кассы ККМ.При таком подходе платформа 1С автоматически сформирует файл начального образа, в котором табличная часть Магазины у элемента ЭтотУзел уже будет заполнена правильным магазином. При первом запуске базы на удаленной точке система сразу определит нужный магазин без дополнительных манипуляций с кодом.
После того как вы применили программное исправление (Способ 1) или создали корректный образ (Способ 2), необходимо проверить и настроить права пользователей в периферийной базе, чтобы кассиры могли беспрепятственно пробивать чеки.
Для этого выполните следующие действия:
Основной магазин, Основной склад и Основная касса ККМ. Теперь эти поля станут доступными для редактирования, и в них отобразятся элементы, принадлежащие именно вашему новому магазину.После сохранения настроек рекомендуется провести тестовый запуск РМК для проверки подключения торгового оборудования (фискального регистратора, сканера штрихкодов и эквайрингового терминала). Теперь база готова к полноценной автономной работе и последующему обмену данными с центральным офисом. Для запуска обмена данными непосредственно из кассового интерфейса можно использовать расширение для синхронизации через РМК.