Как решить проблемы с подключением COM-объектов и зависшими сеансами в 1С:Бухгалтерии 3.0.129.13 и выше?

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

После обновления конфигурации «Бухгалтерия предприятия» до версии 3.0.129.13 и последующих релизов пользователи и администраторы часто сталкиваются с рядом специфических проблем. Мы разберем наиболее частые из них: ошибки при программном подключении через COM-объекты (в частности, V83.Application) и проблему зависших сеансов на сервере 1С:Предприятия. Также рассмотрим особенности настройки «Вариант работы» для механизма RLS.

Проблема 1: Ошибка подключения COM-объекта V83.Application и "Тип не определен (ОписаниеКомандыСистемыВзаимодействия)"

Одним из самых неприятных «сюрпризов» после обновления стало невозможность программного взаимодействия с базой через COM-объект V83.Application. Пользователи сообщали, что при попытке вызова метода Connect приложение просто «висит» без ошибки или, что еще чаще, выдает сообщение:

{ОбщийМодуль.УведомленияОтФНСАУСНКлиент.Модуль(109,23)}: Тип не определен (ОписаниеКомандыСистемыВзаимодействия)

Эта ошибка указывала на проблему с инициализацией модуля УведомленияОтФНСАУСНКлиент при программном запуске.

Причина ошибки

Выяснилось, что проблема была вызвана изменениями, связанными с обменом с банком через сервис АУСН (Автоматизированная упрощенная система налогообложения), реализованными в версии 3.0.129.13 «Бухгалтерии предприятия».

Официальное решение: Патч EF_60005452

Фирма 1С оперативно отреагировала на проблему и выпустила официальное исправление. Если вы столкнулись с ошибкой ОписаниеКомандыСистемыВзаимодействия при подключении через V83.Application, первым делом проверьте наличие и установку патча под названием EF_60005452. Этот патч предназначен специально для устранения данной ошибки.

Как работают патчи (исправления) 1С:

  1. Особый формат: Патчи представляют собой особым образом подготовленные расширения конфигурации.
  2. Без монопольного режима: Они вносят необходимые изменения в код без необходимости переводить базу в монопольный режим, что минимизирует простои.
  3. Перезапуск программы: Для применения исправлений достаточно перезапустить программу 1С.
  4. Автоматическое удаление: При установке нового релиза конфигурации, который уже включает в себя данное исправление, патч автоматически удаляется.
  5. Рекомендации: Рекомендуется использовать автоматическую загрузку и установку исправлений при наличии подписки 1С:ИТС.

Если патч установлен, но проблема остается, убедитесь, что он применился корректно, и попробуйте перезапустить приложение 1С. В одном из сообщений форума упоминалось, что ошибка появлялась, несмотря на установленный патч, что может указывать на специфические условия запуска или неполное применение патча.

Альтернативное решение: Переход на V83.COMConnector

Если официальный патч не помогает или вы по каким-то причинам не можете его установить, пользователи нашли обходное решение: вместо V83.Application использовать V83.COMConnector.

Особенности перехода:

  1. Переработка кода: Этот вариант требует существенной переработки программного кода, который осуществлял взаимодействие с 1С. Если ваш код написан на VBA (например, из Excel) или другом языке, вам придется адаптировать его для работы с V83.COMConnector.
  2. Пример использования:

    Используя V83.COMConnector, мы можем подключаться к базе, обходить метаданные и выполнять SQL-запросы. Рассмотрим общие принципы:

    
    // Пример подключения на VBA из Excel
    Dim ComConnector As Object
    Dim V83Connection As Object
            
    Set ComConnector = CreateObject("V83.COMConnector")
    ' Строка соединения может быть разной, для файловой базы или клиент-серверной
    ' Для файловой: File="C:\Базы\МояБаза";Usr="ИмяПользователя";Pwd="Пароль";
    ' Для клиент-серверной: Srvr="ИмяСервера";Ref="ИмяБазы";Usr="ИмяПользователя";Pwd="Пароль";
    Dim ConnectionString As String
    ConnectionString = "File=""C:\1CBase\MyBP30"";Usr=""МойПользователь"";Pwd=""МойПароль"";"
            
    Set V83Connection = ComConnector.Connect(ConnectionString)
            
    ' Теперь V83Connection - это объект, через который можно взаимодействовать с 1С
    ' Например, получить менеджер запросов:
    Dim Запрос As Object
    Set Запрос = V83Connection.NewObject("Запрос")
            
    ' Выполнить SQL-запрос
    Запрос.Текст = "ВЫБРАТЬ * ИЗ Документ.РеализацияТоваровУслуг";
    Dim РезультатЗапроса As Object
    Set РезультатЗапроса = Запрос.Выполнить()
            
    ' Выгрузить результат
    Dim Выборка As Object
    Set Выборка = РезультатЗапроса.Выбрать()
            
    ' Обход метаданных также возможен через V83Connection.Метаданные
    Dim МетаданныеКонфигурации As Object
    Set МетаданныеКонфигурации = V83Connection.Метаданные
            
    ' Например, получить все документы
    For Each ДокументМетаданных In МетаданныеКонфигурации.Документы
        ' Работаем с ДокументМетаданных.Имя, ДокументМетаданных.Представление
    Next
            
    ' Закрытие соединения
    Set V83Connection = Nothing
    Set ComConnector = Nothing
    

    Обратите внимание, что при использовании V83.COMConnector для пользователя, под которым происходит подключение к целевой базе, должны быть корректно настроены права доступа. Часто требуется установить профили «Администратор» и/или «Синхронизация данных с другими программами» в разделе «Администрирование» -> «Настройки пользователей и прав» -> «Пользователи» целевой базы. Иначе вы можете получить ошибку «Внешнее соединение не разрешено для указанного пользователя 1С:Предприятия».

  3. Облачная 1С.Фрэш: Подключение к облачной 1С.Фрэш через V83.COMConnector, имея только логин/пароль бухгалтера, невозможно. COM-объекты предполагают прямое взаимодействие с установленной на сервере или локально платформой 1С:Предприятия. Для работы с 1С.Фрэш используются другие механизмы, как правило, через веб-сервисы или специализированные API, предоставляемые сервисом.

Регистрация COM-объектов

В некоторых случаях после обновления платформы классы V83.Application или V83.COMConnector могут исчезнуть из реестра. В таком случае их необходимо зарегистрировать вручную. Мы выполним это с помощью командной строки:

  1. Для V83.COMConnector: regsvr32 "C:\Program Files\1cv8\[номер платформы]\bin\comcntr.dll"

    Замените [номер платформы] на актуальную версию вашей платформы 1С (например, 8.3.22.1750).

  2. Для V83.Application: "C:\Program Files\1cv8\[версия платформы]\bin\1cv8.exe" /regserver

    Также замените [версия платформы] на вашу версию.

Проблема 2: Подвисшие сеансы на сервере 1С:Предприятия

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

Причина и виды сеансов (зависшие vs. спящие)

Важно различать действительно зависшие сеансы и «спящие» сеансы. Начиная с платформы 8.3.5, 1С реализовала механизм «спящих» сеансов для повышения устойчивости работы клиентских приложений. При длительной неактивности пользователя или засыпании клиентского компьютера сеанс не завершается, а переходит в спящий режим и возобновляется при появлении активности. Платформа периодически (каждые 5-10 минут) вызывает сервер для поддержания активности сеанса, поэтому не рекомендуется устанавливать время засыпания сеанса менее 10 минут. Зависшие сеансы, в отличие от спящих, не имеют активного соединения и рабочего процесса и могут висеть сутками, не реагируя на стандартные методы завершения.

Решение через консоль кластера 1С

Мы предлагаем эффективный способ борьбы с зависшими сеансами через консоль администрирования серверов 1С:Предприятия:

  1. Зайдем в консоль кластера: Откроем оснастку «Администрирование серверов 1С:Предприятие».
  2. Перейдем к локальному кластеру: Найдем и выберем «Локальный кластер», который содержит нужную базу данных.
  3. Откроем свойства кластера: Щелкнем правой кнопкой мыши по выбранному кластеру и выберем пункт «Свойства».
  4. Изменим интервал перезапуска: В открывшихся свойствах кластера найдем параметр «Интервал перезапуска рабочих процессов (сек)». Обычно его значение составляет 86400 секунд (24 часа). Мы временно изменим его на 10 секунд.
  5. Установим флаг принудительного завершения: Обязательно установим флаг «Принудительно завершать проблемные процессы».
  6. Дождемся завершения сеансов: Подождем 10-15 секунд, пока рабочие процессы кластера перезапустятся, и проблемные сеансы будут принудительно завершены.
  7. Вернем настройки обратно: После того как убедимся, что зависшие сеансы исчезли, вернем параметр «Интервал перезапуска рабочих процессов (сек)» на исходное значение (например, 86400) и снимем флаг «Принудительно завершать проблемные процессы».

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

Дополнительные методы борьбы

Помимо настроек в консоли кластера, существуют и другие подходы к управлению зависшими сеансами:

  1. Проверка соединений: В службе 1С на сервере, а также в консоли кластера, важно различать «Сеансы» и «Соединения». Порой зависшее соединение является причиной невозможности полного завершения сеанса. Проверьте раздел «Соединения» в консоли кластера.
  2. Перезапуск веб-сервера (для веб/тонкого клиента): Если вы работаете через веб- или тонкий клиент 1С с использованием веб-сервера (например, MS IIS), стандартной рекомендацией является перезапуск веб-сервера. Для минимизации неудобств для других пользователей, можно настроить отдельные пулы приложений IIS для каждой опубликованной базы. Это позволит перезапускать только пул, связанный с проблемной базой, не затрагивая работу других приложений.
  3. Перезапуск службы агента сервера 1С: Если все вышеперечисленное не помогает, крайней мерой является остановка и перезапуск службы агента сервера 1С:Предприятия. Это приведет к завершению всех активных сеансов и соединений, поэтому выполнять эту операцию следует только в нерабочее время или при согласовании со всеми пользователями.

Дополнительная информация: Настройка "Вариант работы" (стандартный или производительный) для RLS

В ходе обсуждения проблем с COM-подключениями был затронут вопрос настройки «Вариант работы» в разделе «Администрирование» -> «Настройки пользователей и прав» -> «Группы доступа». Хотя эта настройка не оказалась прямым решением проблем с COM-объектами, она важна для понимания работы системы.

Назначение настройки

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

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

Рекомендации по применению

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

В контексте нашей проблемы с COM-объектами, кратковременное переключение на «Производительный» и затем обратно на «Стандартный» вариант (как было описано в сообщении 6) не оказалось стабильным решением и было признано заблуждением (сообщение 9). Однако понимание этой настройки является частью общей грамотности системного администратора и разработчика 1С.

Версия платформы 8.3.23.1437

В ходе обсуждения упоминалась платформа 8.3.23.1437. Мы выяснили, что на момент обсуждения она была доступна как «Версия для ознакомления» или тестовая. Это указывает на то, что данная версия могла содержать новые функциональные возможности, например, автоматическое (каждые 20 минут) сохранение измененных пользователем данных для клиентского приложения, а также возможность управлять сохранением настроек окна клиентского приложения.

Общие рекомендации

Мы всегда рекомендуем следующие действия для поддержания стабильности и работоспособности вашей системы 1С:

  1. Регулярные резервные копии: Перед любыми обновлениями конфигурации или платформы, а также перед внесением существенных изменений, всегда создавайте полные резервные копии ваших информационных баз.
  2. Актуальные обновления: Следите за выпусками новых релизов конфигураций и платформ. Фирма 1С постоянно выпускает исправления ошибок и улучшения.
  3. Тестирование обновлений: По возможности, сначала устанавливайте обновления на тестовых базах, чтобы убедиться в их корректной работе в вашем окружении, прежде чем применять их на рабочих базах.

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

← На главную