Документ в серверной базе 1С: открыть, найти блокировку, ускорить

· 10 мин

Содержание

Документ в серверной базе 1С открывается так же, как в файловой: из журнала документов двойным щелчком или по навигационной ссылке вида e1cib/data/Документ.ИмяДокумента?ref=… через команду «Перейти по ссылке» в главном меню. Если форма не открывается, открывается только на просмотр или грузится минуту, виноваты обычно три вещи: документ заблокирован другим сеансом, у пользователя не хватает прав или в документе слишком много строк.

Причину ищут от простого к сложному: сначала то, что видно в самой программе, потом консоль кластера, в конце технологический журнал. Всё описано для платформы 8.3 с интерфейсом «Такси» и типовых конфигураций на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11). Логика общая для платформы, отличаются только пути к служебным отчётам.

Как устроено открытие документа в клиент-серверной базе

В клиент-серверном режиме данные лежат в СУБД (MS SQL Server или PostgreSQL), а работу с ними выполняет кластер серверов 1С. Тонкий клиент на компьютере пользователя данных из базы сам не читает. Он только показывает форму и передаёт команды серверу.

Цепочка выглядит так:

  1. 🖥️ Клиент обращается к агенту сервера (по умолчанию порт 1540).
  2. 🔀 Агент передаёт его менеджеру кластера (порт 1541).
  3. ⚙️ Менеджер назначает рабочий процесс. Диапазон портов рабочих процессов задаётся в свойствах рабочего сервера, по умолчанию 1560–1591.
  4. 🗄️ Рабочий процесс читает документ из СУБД и выполняет серверный код формы, в первую очередь обработчик ПриСозданииНаСервере.
  5. 📤 Готовая форма с данными уходит клиенту.

Отсюда практический вывод. Медленное открытие почти всегда упирается не в компьютер пользователя, а в серверную часть: тяжёлый запрос в обработчике формы, большая табличная часть или ожидание блокировки в СУБД.

Что значит «открыть на сервере» в коде

В управляемом приложении фраза «открыть документ на сервере» имеет и второй смысл: получить объект документа в серверной процедуре. Ссылку ДокументСсылка можно передавать между клиентом и сервером. Объект ДокументОбъект существует только на сервере: его получают методом Ссылка.ПолучитьОбъект() внутри процедуры с директивой &НаСервере. Пример кода разобран ниже, в разделе про внешние обработки.

Чем серверная база отличается от файловой

ЧтоФайловая базаКлиент-серверная база
Где выполняется серверный кодВ процессе клиентаВ рабочем процессе кластера
Как видно сеансыОтчёт «Активные пользователи»Отчёт + консоль кластера + rac
Блокировки данныхТаблица целикомУправляемые блокировки на уровне записей
Диагностика тормозовЗамер производительностиЗамер + технологический журнал на сервере

Если документ занят: как найти блокировку и сеанс

Есть два разных вида блокировок, и путать их нельзя.

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

Транзакционная блокировка. Возникает при записи или проведении, когда два сеанса одновременно меняют одни и те же записи регистров. Типичный текст: Конфликт блокировок при выполнении транзакции: Превышено максимальное время ожидания предоставления блокировки. На открытие формы она влияет редко, а вот на кнопку «Провести» — постоянно.

Шаг 1. Посмотрите, кто работает в базе

В типовых конфигурациях откройте Администрирование → Обслуживание → Активные пользователи. В части релизов раздел называется «Поддержка и обслуживание». В списке видно пользователя, компьютер, время начала сеанса и номер сеанса. Номер сравните с тем, что указан в тексте ошибки.

Часто «заблокировавший» пользователь давно ушёл домой, а его окно с документом осталось открытым. Попросите его закрыть форму без сохранения или записать изменения.

Шаг 2. Проверьте сеансы и блокировки в консоли кластера

Если пользователя нет на месте, нужна консоль «Администрирование серверов 1С Предприятия»:

  1. Разверните кластер → Информационные базы → нужная база.
  2. Узел Сеансы покажет все подключения: пользователь, компьютер, приложение, время последней активности.
  3. Узел Блокировки покажет, какой сеанс держит блокировку и на какой объект.

Та же информация доступна из командной строки через утилиту 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. Если сеанса уже нет, а блокировка «висит»

Бывает, что компьютер пользователя выключили, а сеанс остался в кластере. Обычно платформа сама снимает такой сеанс по таймауту, но это может занять время. Завершите «повисший» сеанс в консоли — объектная блокировка снимется вместе с ним. Перезапускать рабочий процесс или службу сервера ради одного документа не нужно.

Диагностика: выберите симптом

Права пользователя: почему документ не открывается или открывается только на чтение

Если вместо формы появляется Нарушение прав доступа!, проблема не в сервере, а в настройках пользователя. Сервер просто честно применил правила.

В конфигурациях на БСП права задают не ролями напрямую, а группами доступа:

  1. Откройте Администрирование → Настройки пользователей и прав → Группы доступа.
  2. Найдите группы, куда входит пользователь, и посмотрите их профиль.
  3. В профиле проверьте, есть ли роль, дающая доступ к нужному виду документов. Для чтения хватает права «Просмотр», для правки нужны «Изменение» и интерактивные права.
  4. На вкладке ограничений группы проверьте, к каким организациям, складам или видам документов открыт доступ.

Второй частый случай: в журнале документ виден, а открыть его нельзя или он открывается только для просмотра. Обычно это ограничение доступа на уровне записей (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_* и найдите события с большой длительностью. В строке события есть имя пользователя, контекст (модуль и строка кода) и текст запроса.

Тяжёлый документ открывается долго: как ускорить

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

Сначала измерьте

  1. Откройте базу в конфигураторе и запустите отладку.
  2. Включите Отладка → Замер производительности.
  3. В запущенном клиенте откройте проблемный документ.
  4. Остановите замер и посмотрите строки кода с наибольшим временем.

Так сразу станет видно, где теряется время: в чтении табличной части, в обработчике ПриСозданииНаСервере, в условном оформлении или в коде расширения.

Что обычно помогает

ПричинаПризнакЧто сделать
Табличная часть на 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.
Видно ли, кто последним открывал или менял документ?
Изменения видно в журнале регистрации: Администрирование → Обслуживание → Журнал регистрации, отбор по документу. Просто открытие формы без записи туда, как правило, не попадает.
Нужно ли перезапускать сервер 1С, если документ «завис»?
Нет. Достаточно найти и завершить сеанс, который держит блокировку. Перезапуск службы обрывает работу всех пользователей базы, поэтому это крайняя мера и только вне рабочего времени.
Документ открывается, но поля серые и ничего не меняется. Это блокировка?
Чаще нет. Так выглядит документ в закрытом периоде (дата запрета изменения) или открытый пользователем только с правом просмотра. Блокировка другим сеансом даёт явное сообщение с именем пользователя.