Документ в серверной базе 1С: открыть, найти блокировку, ускорить
Содержание
Документ в серверной базе 1С открывается так же, как в файловой: из журнала документов двойным щелчком или по навигационной ссылке вида e1cib/data/Документ.ИмяДокумента?ref=… через команду «Перейти по ссылке» в главном меню. Если форма не открывается, открывается только на просмотр или грузится минуту, виноваты обычно три вещи: документ заблокирован другим сеансом, у пользователя не хватает прав или в документе слишком много строк.
Причину ищут от простого к сложному: сначала то, что видно в самой программе, потом консоль кластера, в конце технологический журнал. Всё описано для платформы 8.3 с интерфейсом «Такси» и типовых конфигураций на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11). Логика общая для платформы, отличаются только пути к служебным отчётам.
Как устроено открытие документа в клиент-серверной базе
В клиент-серверном режиме данные лежат в СУБД (MS SQL Server или PostgreSQL), а работу с ними выполняет кластер серверов 1С. Тонкий клиент на компьютере пользователя данных из базы сам не читает. Он только показывает форму и передаёт команды серверу.
Цепочка выглядит так:
- 🖥️ Клиент обращается к агенту сервера (по умолчанию порт
1540). - 🔀 Агент передаёт его менеджеру кластера (порт
1541). - ⚙️ Менеджер назначает рабочий процесс. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера, по умолчанию
1560–1591. - 🗄️ Рабочий процесс читает документ из СУБД и выполняет серверный код формы, в первую очередь обработчик
ПриСозданииНаСервере. - 📤 Готовая форма с данными уходит клиенту.
Отсюда практический вывод. Медленное открытие почти всегда упирается не в компьютер пользователя, а в серверную часть: тяжёлый запрос в обработчике формы, большая табличная часть или ожидание блокировки в СУБД.
Что значит «открыть на сервере» в коде
В управляемом приложении фраза «открыть документ на сервере» имеет и второй смысл: получить объект документа в серверной процедуре. Ссылку ДокументСсылка можно передавать между клиентом и сервером. Объект ДокументОбъект существует только на сервере: его получают методом Ссылка.ПолучитьОбъект() внутри процедуры с директивой &НаСервере. Пример кода разобран ниже, в разделе про внешние обработки.
Чем серверная база отличается от файловой
| Что | Файловая база | Клиент-серверная база |
|---|---|---|
| Где выполняется серверный код | В процессе клиента | В рабочем процессе кластера |
| Как видно сеансы | Отчёт «Активные пользователи» | Отчёт + консоль кластера + rac |
| Блокировки данных | Таблица целиком | Управляемые блокировки на уровне записей |
| Диагностика тормозов | Замер производительности | Замер + технологический журнал на сервере |
Если документ занят: как найти блокировку и сеанс
Есть два разных вида блокировок, и путать их нельзя.
Объектная блокировка. Ставится, когда другой пользователь открыл документ и начал его менять. Вы откроете форму, но при попытке правки увидите сообщение Ошибка блокировки объекта. Объект уже заблокирован: с указанием пользователя, компьютера и номера сеанса. Документ не испорчен: его просто редактирует коллега.
Транзакционная блокировка. Возникает при записи или проведении, когда два сеанса одновременно меняют одни и те же записи регистров. Типичный текст: Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки. На открытие формы она влияет редко, а вот на кнопку «Провести» — постоянно.
Шаг 1. Посмотрите, кто работает в базе
В типовых конфигурациях откройте Администрирование → Обслуживание → Активные пользователи. В части релизов раздел называется «Поддержка и обслуживание». В списке видно пользователя, компьютер, время начала сеанса и номер сеанса. Номер сравните с тем, что указан в тексте ошибки.
Часто «заблокировавший» пользователь давно ушёл домой, а его окно с документом осталось открытым. Попросите его закрыть форму без сохранения или записать изменения.
Шаг 2. Проверьте сеансы и блокировки в консоли кластера
Если пользователя нет на месте, нужна консоль «Администрирование серверов 1С Предприятия»:
- Разверните кластер →
Информационные базы→ нужная база. - Узел
Сеансыпокажет все подключения: пользователь, компьютер, приложение, время последней активности. - Узел
Блокировкипокажет, какой сеанс держит блокировку и на какой объект.
Та же информация доступна из командной строки через утилиту rac (нужен запущенный сервис ras):
rac cluster list
rac session list --cluster=<id_кластера> --infobase=<id_базы>
rac lock list --cluster=<id_кластера> --infobase=<id_базы>
Если какие-то параметры не принимаются вашей версией утилиты, смотрите встроенную справку rac help session и rac help lock.
Завершение сеанса в консоли обрывает работу пользователя. Несохранённые изменения в его открытых формах пропадут, незавершённая транзакция откатится. Сначала свяжитесь с пользователем, и только если это невозможно — завершайте сеанс, лучше в паузе между операциями, а не во время закрытия месяца.
Шаг 3. Если сеанса уже нет, а блокировка «висит»
Бывает, что компьютер пользователя выключили, а сеанс остался в кластере. Обычно платформа сама снимает такой сеанс по таймауту, но это может занять время. Завершите «повисший» сеанс в консоли — объектная блокировка снимется вместе с ним. Перезапускать рабочий процесс или службу сервера ради одного документа не нужно.
Права пользователя: почему документ не открывается или открывается только на чтение
Если вместо формы появляется Нарушение прав доступа!, проблема не в сервере, а в настройках пользователя. Сервер просто честно применил правила.
В конфигурациях на БСП права задают не ролями напрямую, а группами доступа:
- Откройте
Администрирование → Настройки пользователей и прав → Группы доступа. - Найдите группы, куда входит пользователь, и посмотрите их профиль.
- В профиле проверьте, есть ли роль, дающая доступ к нужному виду документов. Для чтения хватает права «Просмотр», для правки нужны «Изменение» и интерактивные права.
- На вкладке ограничений группы проверьте, к каким организациям, складам или видам документов открыт доступ.
Второй частый случай: в журнале документ виден, а открыть его нельзя или он открывается только для просмотра. Обычно это ограничение доступа на уровне записей (RLS) или запрет изменения по дате запрета редактирования. Если документ попадает в закрытый период, форма откроется, но записать его не получится — это нормальное поведение, а не сбой.
Быстрая проверка прав: откройте тот же документ под своей учётной записью администратора. Открылся у вас и не открывается у коллеги — дело в правах. Не открывается ни у кого — ищите причину в сервере, блокировках или самом документе.
Технологический журнал: что включить, чтобы увидеть причину
Когда «Активные пользователи» и консоль ничего не объясняют, нужен технологический журнал. Он пишется на сервере 1С и показывает, что именно рабочий процесс делал, пока пользователь ждал форму.
Настройки задаются в файле logcfg.xml. Его кладут в каталог conf платформы на сервере, например C:\Program Files\1cv8\conf\. Платформа подхватывает изменения без перезапуска службы, обычно в течение минуты.
Пример настройки под разбор ошибок и блокировок:
<?xml version="1.0" encoding="UTF-8"?>
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="D:\1c_techlog" history="24">
<event><eq property="name" value="EXCP"/></event>
<event><eq property="name" value="TLOCK"/></event>
<event><eq property="name" value="TTIMEOUT"/></event>
<event><eq property="name" value="TDEADLOCK"/></event>
<property name="all"/>
</log>
</config>
Что здесь важно:
- 📁
location— отдельная пустая папка только под журнал, на диске со свободным местом. Не указывайте каталог базы или платформы. - ⏳
history="24"— сколько часов хранить файлы. - ❗
EXCP— исключения: сюда попадают ошибки прав, блокировок и сбои кода формы. - 🔒
TLOCK,TTIMEOUT,TDEADLOCK— ожидания, таймауты и взаимоблокировки управляемых блокировок.
Журнал с property name="all" растёт очень быстро. Включайте его на время воспроизведения проблемы и потом удаляйте или переименовывайте logcfg.xml, иначе диск сервера заполнится и остановит работу всех пользователей.
Для медленного открытия формы к этому набору добавляют события CALL (серверные вызовы) и DBMSSQL или DBPGSQL (запросы к СУБД) с фильтром по длительности. Без фильтра они дают гигабайты логов за час.
Порядок разбора простой. Воспроизведите медленное открытие, запомните время с точностью до минуты, откройте файлы .log за этот час в папке процесса rphost_* и найдите события с большой длительностью. В строке события есть имя пользователя, контекст (модуль и строка кода) и текст запроса.
Тяжёлый документ открывается долго: как ускорить
Пользователи жалуются «документ на сервере открывается вечность» чаще всего на трёх типах документов: инвентаризация, большая реализация на тысячи строк и документы с длинной историей изменений.
Сначала измерьте
- Откройте базу в конфигураторе и запустите отладку.
- Включите
Отладка → Замер производительности. - В запущенном клиенте откройте проблемный документ.
- Остановите замер и посмотрите строки кода с наибольшим временем.
Так сразу станет видно, где теряется время: в чтении табличной части, в обработчике ПриСозданииНаСервере, в условном оформлении или в коде расширения.
Что обычно помогает
| Причина | Признак | Что сделать |
|---|---|---|
| Табличная часть на 5–10 тысяч строк | Долго открываются только крупные документы | Делить операцию на несколько документов |
| Тяжёлый код формы в расширении или доработке | Замер показывает модуль формы | Переносить расчёты из открытия формы в команду по кнопке |
| Медленная СУБД | В техжурнале долгие события DBMSSQL или DBPGSQL | Обновить статистику и индексы регламентными заданиями СУБД |
| Устаревший кэш клиента | Тормозит у одного пользователя | Запуск с параметром /ClearCache |
| Сеть между клиентом и сервером | Медленно всё, не только документы | Проверить задержку, работать через RDP рядом с сервером |
Запуск с очисткой кэша для серверной базы:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /ClearCache
Здесь srv1c — имя сервера 1С, buh — имя базы в кластере. Очистка кэша безопасна: удаляются только локальные файлы клиента, данные базы не трогаются.
Открыть нужный документ по ссылке или из внешней обработки
Иногда документ проще открыть адресно, чем искать в журнале среди тысяч строк. Для этого есть три способа.
Способ 1. Навигационная ссылка
В открытой форме документа есть команда «Получить ссылку» (значок цепочки в заголовке формы). Ссылку можно отправить коллеге в мессенджере: он вставит её в окно «Перейти по ссылке» главного меню и попадёт сразу в этот документ, если у него есть права.
Способ 2. Ссылка в параметрах запуска
Тонкий клиент умеет открыть базу
сразу на нужном объекте. Параметр /URL передаёт навигационную ссылку:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /URL"e1cib/data/Документ.РеализацияТоваровУслуг?ref=<идентификатор>"
Удобно для ярлыков на рабочем столе бухгалтера и ссылок из писем.
Способ 3. Внешняя обработка
Пример формы обработки: пользователь вводит номер и дату, программа ищет документ на сервере и открывает его форму на клиенте. Реквизиты формы НомерДокумента (строка) и ДатаДокумента (дата) создайте сами.
&НаСервереБезКонтекста
Функция НайтиРеализацию(Номер, Дата)
Возврат Документы.РеализацияТоваровУслуг.НайтиПоНомеру(Номер, Дата);
КонецФункции
&НаСервереБезКонтекста
Функция КоличествоСтрокТоваров(Ссылка)
ДокументОбъект = Ссылка.ПолучитьОбъект();
Возврат ДокументОбъект.Товары.Количество();
КонецФункции
&НаКлиенте
Процедура ОткрытьДокумент(Команда)
Ссылка = НайтиРеализацию(НомерДокумента, ДатаДокумента);
Если Не ЗначениеЗаполнено(Ссылка) Тогда
Сообщить("Документ с таким номером не найден");
Возврат;
КонецЕсли;
Сообщить(СтрШаблон("Строк в документе: %1", КоличествоСтрокТоваров(Ссылка)));
ПоказатьЗначение(, Ссылка);
КонецПроцедуры
Что делает код:
- 🔍
НайтиПоНомерувыполняется на сервере и возвращает ссылку или пустую ссылку. Дата нужна, если номера документа уникальны в пределах года. - 🧱
ПолучитьОбъект()вызывается только на сервере: объект документа на клиент не передаётся, клиенту уходит число. - 🪟
ПоказатьЗначение(, Ссылка)открывает основную форму документа так же, как двойной щелчок в журнале.
Имя документа и табличной части подставьте свои: в Бухгалтерии 3.0 и УТ 11 реализация называется РеализацияТоваровУслуг, табличная часть — Товары.
В серверной базе внешняя обработка выполняется на сервере 1С, поэтому пользователю нужно право на интерактивное открытие внешних обработок. В типовых конфигурациях при открытии файла .epf появится предупреждение безопасности — это штатное поведение.
Частые вопросы
Можно ли открыть документ серверной базы, не запуская 1С на своём компьютере?
#e1cib/data/….Почему документ открывается быстро у меня и медленно у коллеги?
/ClearCache.Видно ли, кто последним открывал или менял документ?
Администрирование → Обслуживание → Журнал регистрации, отбор по документу. Просто открытие формы без записи туда, как правило, не попадает.