В процессе эксплуатации распределенных информационных баз (РИБ) в конфигурации «1С:Управление торговлей 11.4» администраторы часто сталкиваются с проблемой: обмен данными отлично работает под учетной записью с полными правами, но совершенно не запускается, когда в программе работает обычный кассир. Это связано с жесткой политикой безопасности УТ 11, где права доступа разграничены гораздо строже, чем, например, в 1С:Розница.
Разберем подробно, почему это происходит и какими способами можно обеспечить стабильный обмен данными, не наделяя при этом кассира избыточными правами администратора. Мы рассмотрим как стандартные настройки системы, так и возможность программной доработки интерфейса.
Проанализируем ситуацию с точки зрения архитектуры 1С. Для выполнения синхронизации данных системе требуется доступ к чтению и записи таблиц регистрации изменений, а также к планам обмена. В типовом профиле Кассир эти права отсутствуют. Более того, при интерактивном запуске обмена система проверяет наличие прав на использование внешних ресурсов и доступ к файловой системе или COM-соединению, что также закрыто для обычного пользователя.
В отличие от «1С:Розница», где роль для работы в магазине подразумевает автономность и регулярные обмены, «1С:Управление торговлей» ориентирована на работу в среде, где за технические процессы отвечает администратор или автоматика. Поэтому просто «включить галочку» в настройках пользователя зачастую недостаточно.
Это самый простой и правильный с точки зрения безопасности способ. Суть его заключается в том, чтобы обмен выполнялся в фоновом режиме по расписанию, но не от лица текущего пользователя (кассира), а от лица специально выделенной технической учетной записи с полными правами.
Рассмотрим по шагам, как это реализовать:
Синхронизация данных с ... (вместо многоточия будет указано имя вашей центральной или периферийной базы).Администратор (или любую другую с полными правами).Теперь, даже если в программе работает кассир, фоновый процесс будет запускаться системой под правами администратора. Кассир этого даже не заметит, а данные будут актуализироваться автоматически.
Если специфика работы требует, чтобы кассир мог сам инициировать обмен (например, перед закрытием смены), нам необходимо создать специальный Профиль групп доступа. Обычного добавления ролей в типовой профиль кассира лучше избегать, чтобы сохранить конфигурацию на поддержке и не нарушить типовую логику.
Проанализируем, какие роли критически важны для синхронизации:
Выполнение синхронизации данных — базовая роль для доступа к механизмам обмена.Удаленный доступ (обмен данными) — позволяет работать с внешними интерфейсами передачи данных.Просмотр журнала регистрации — необходим, так как при старте обмена система записывает события начала и окончания сеанса, и без доступа к журналу процедура может завершиться аварийно.После создания такого профиля и назначения его пользователю-кассиру, у него появится техническая возможность запускать синхронизацию, однако он все равно может столкнуться с интерфейсными ограничениями (отсутствие кнопок).
Посмотрим на ситуацию со стороны пользователя. Кассиру неудобно искать пункты меню в разделе администрирования. Ему нужна кнопка в его рабочем интерфейсе или в РМК (Рабочем месте кассира). Чтобы это реализовать и при этом не давать кассиру лишних прав, мы можем использовать механизм Привилегированного режима в расширении.
Рассмотрим пример кода, который можно разместить в модуле команды или обработчике нажатия кнопки:
&НаСервере
Процедура ВыполнитьСинхронизациюПривилегированно()
// Устанавливаем привилегированный режим, чтобы обойти проверку прав кассира
УстановитьПривилегированныйРежим(Истина);
// Получаем узел информационной базы, с которым настроен обмен
УзелОбмена = ПланыОбмена.СинхронизацияДанныхЧерезУниверсальныйФормат.НайтиПоНаименованию("Центральная база");
Если Не УзелОбмена.Пустая() Тогда
// Запуск стандартной процедуры обмена
ОбменДаннымиСервер.ВыполнитьОбменДаннымиДляУзла(УзелОбмена);
Сообщить("Синхронизация успешно запущена в фоновом режиме.");
Иначе
Сообщить("Настройки обмена не найдены!");
КонецЕсли;
КонецПроцедуры
Этот код позволяет выполнить обмен с правами администратора в тот момент, когда кассир нажимает на кнопку. При этом в остальное время кассир остается в рамках своих ограниченных прав. Это самый элегантный и безопасный способ кастомизации интерфейса.
Важно проанализировать еще один момент: конфликты данных. Если и в центре, и в периферийной базе был изменен один и тот же документ, при обмене возникнет конфликт. У кассира нет прав на форму Конфликты при синхронизации данных.
Чтобы обмен не «зависал» на ожидании решения пользователя, необходимо в центральной базе зайти в настройки синхронизации и установить правило Автоматическое разрешение конфликтов. Обычно выбирается приоритет центральной базы. Это гарантирует, что обмен пройдет до конца в автоматическом режиме без участия кассира.
Выясним, есть ли способ обойтись без программирования и изменения настроек прав. Существует практика создания на рабочем столе кассира отдельного ярлыка для 1С. В параметрах запуска прописывается технический пользователь с полными правами и запуск конкретной обработки.
Пример строки запуска в ярлыке:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\1C_Bases\Retail" /N"RobotSync" /P"Password123" /Execute"C:\Scripts\RunSync.epf"
Где RunSync.epf — внешняя обработка, которая при открытии сразу запускает обмен и закрывает приложение. Кассир просто нажимает на ярлык, открывается окно 1С на несколько секунд и закрывается. Это «костыльный», но рабочий метод для случаев, когда администратору запрещено вносить изменения в конфигурацию или расширения.
Подводя итог, наиболее стабильным решением является комбинация Решения №1 (автоматический обмен под администратором) и, при необходимости, Решения №3 (кнопка в интерфейсе через привилегированное расширение). Это обеспечит бесперебойную передачу чеков и остатков между магазином и офисом.