Comcntr

Отличие понятий сеанс и соединение в «1С:Предприятие 8»

Что Вы узнаете из этой статьи?

  • Правильный ответ на один из самых популярных вопросов при сдаче 1С:Эксперт
  • Предназначение и особенности соединений и сеансов 1С
  • Что хранят сеансовые данные

В чем отличия между сеансом и соединением? Этот, на первый взгляд, простой вопрос на экзамене 1С:Эксперт многих ставит в тупик. Несмотря на немалый опыт программирования, сформулировать четкий и правильный ответ сможет далеко не каждый специалист.

В данной статье проведем детальный разбор этого вопроса. Для начала рассмотрим по отдельности понятия сеанс и соединение в 1С:Предприятие. Отметим, что информация актуальна для версий платформы 8.2.x и 8.3.x.

Сеанс 1С

Обратимся к руководству администратора. В нем понятие сеанса определено следующим образом:

Сеанс определяет активного пользователя информационной базы и поток управления этого пользователя.

Можно сказать, что кластер серверов не видит пользователей, вместо них он видит сеансы и сеансовые данные. В консоли управления кластером в принципе отсутствует раздел «Пользователи», под пользователями кластер понимает сеансы.

Это подтверждает визуальное представление пункта «Сеансы» – иконка отображается в виде пользователей.

Следует уточнить, что под активным пользователем не обязательно понимается клиентское соединение, это также может быть:

  • экземпляр клиентского приложения «1С:Предприятие»
  • экземпляр веб-приложения, где исполняется веб-клиент
  • экземпляр внешнего соединения, полученный из объекта V83.COMConnector
  • 1 экземпляр фонового задания
  • 1 обращение к Web-сервису

Сеансовые данные

Рассмотрим понятие сеансовые данные. Сеанс содержит в себе некоторую информацию, такую как:

  • наименование информационной базы
  • номер сеанса
  • имя аутентифицированного пользователя информационной базы
  • язык интерфейса
  • значения параметров сеанса
  • временные хранилища
  • статистику работы сеанса
  • информацию форм управляемого приложения
  • некоторые внутренние данные платформы

Такая информация называется сеансовыми данными. Причем для каждого активного пользователя сеансовые данные свои, и актуальны они только на время его работы. Если пользователь покидает базу (завершил сеанс) – его сеансовые данные удаляются.

Данные сеансов хранятся на кластере серверов, за это отвечает менеджер кластера, именно для этого существует сервис сеансовых данных. Чтобы ускорить работу, данные сеансов кешируются в рабочих процессах и в толстых клиентах.

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

Для поддержания сеанса тонкий клиент и веб-клиент обеспечивают обращение к кластеру не реже 1 раза в 10 минут.

Соединение 1С

Теперь разберемся с понятием соединение. Вновь обратимся к руководству администратора:

Соединение является средством доступа сеансов к кластеру серверов «1С:Предприятие», содержит ограниченное множество данных соединения, не отождествляется с активным пользователем.

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

В случае если сеанс не обращается к кластеру, то есть пользователь бездействует, ему не будет назначено соединение. Таким образом, сеанс может существовать без соединения.

Нужно отметить, что сеансовые данные хранятся на сервере, поэтому если разрыв соединения длится менее 20 минут, то на сеансе это не отразится, ведь соединение – всего лишь средство доступа.

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

Также соединения используются для взаимодействия процессов кластера, то есть рабочие процессы (rphost) общаются с менеджером кластера (процесс rmngr) при помощи соединений, а не с помощью сеансов.

Отличия соединения от сеансов

Для того чтобы описать основное отличие данных понятий, приведем аналогию.

Допустим, что сеанс – это пассажир, а соединение – такси. Когда пассажиру необходимо добраться домой (сеансу нужно подключится к серверу), он вызывает такси (сеансу назначается соединение из пула соединений).

Если, добравшись домой, пассажир захочет снова поехать на работу, а такси уже уехало (после подключения случился разрыв соединения), то пассажир вызывает новое такси и едет по своим делам (сеансу назначается новое соединение).

В данной аналогии наглядно представлено, что сеанс и соединение далеко не одно и тоже, и сеанс может довольно легко перенести разрыв соединения.

Бурмистров Андрей

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

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

Содержание курса и форма заказа: https://курсы-по-1с.рф/1c-v8/optimization/

35 учебных часов, подготовка к 1С:Эксперт, правильная настройка серверной части, оптимизация кода, мониторинг загруженности оборудования и прочие взрослые вещи.

В этой статье я расскажу о многих особенностях взаимодействия между базами 1С по COM технологии, накопленных за годы развития и использования интеграционного коммерческого продукта 2iS:Интеграция нашей компании 2iS.

Термины

ОС — операционная система

COM-клиент — процесс(поток) ОС, запросивший создание COM-объекта

COM-сервер — COM-объект, созданный по запросу клиента

Com-соединитель — COM-объект V8X.ComСonnector для создания внешних соединений с базами 1С

Automation-сервер — он же OLE-сервер, COM-объект V8X.Application для создания приложений 1С

Издание платформы — подстрока до 2-й точки версии платформы (например 8.2, 8.3)

Сборка платформы — полная строка версии платформы (например 8.2.19.130, 8.2.16.352)

Подключение внешнего соединения

Рассмотрим алгоритм подключения внешнего соединения в деталях

  1. Создание COM-объекта Com-соединитель (Имя класса — V8X.ComConnector). Варианты:
  2. Внутрипроцессное (inproc)
  3. Должен быть зарегистрирован класс V8X.ComConnector той же разрядности, что и COM-клиент
  4. Если издание платформы COM-клиента совпадает с изданием платформы COM-сервера, то также требуется равенство сборки платформы COM-клиента и COM-сервера.
  5. Он регистрируется при установке платформы с опцией «Внешнее соединение». В любой момент его можно зарегистрировать командой «Regsvr32 comcntr.dll» в каталоге исполняемых файлов платформы.
  6. COM-объект создается в памяти COM-клиента
  7. Затраты на создание примерно — 0.01(первое)/0.001(второе) cек
  8. Пример
  9. Внепроцессное локальное (local)
  10. Должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить через dcomcnfg.exe COM+ приложение с активацией «серверное приложение»/»Server apllication». Подробнее рассмотрено далее.
  11. COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на компьютере COM-клиента
  12. Затраты на создание примерно — 0.06(первое)/0.03(второе) сек
  13. Пример
    КомСоединитель = Новый COMОбъект(«V83.ComConnector”);
    ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
  14. Внепроцессное нелокальное (DCOM)
  15. На нелокальном компьютере должен быть зарегистрирован класс V8X.ComConnector любой разрядности и сборки платформы. Необходимо настроить на нелокальном компьютере через dcomcnfg.exe COM+ приложение с активацией «Cерверное приложение»/»Server apllication». Подробнее рассмотрено далее.
  16. Необходимо настроить на нелокальном компьютере роль «Сервер приложений»/»Application server» и включить нелокальный доступ COM+, выбрав опцию «Сетевой доступ к COM+»/”COM+ network access”. Подробнее рассмотрено далее.
  17. COM-объект создается в памяти служебного хост-процесса (dllhost.exe) на другом компьютере
  18. Затраты на создание примерно
  19. Экспериментальные данные

На графике видно, что длительность создания этого COM-объекта прямо пропорциональна задержке канала и коэффициент пропорциональности составляет примерно 24. Можно предположить, что при создании этого COM-объекта происходит 24 вызова через канал.

  1. Пример
    КомСоединитель = Новый COMОбъект(«V83.ComConnector”, ИмяКомпьютера);
    ВнешнееСоединение = КомСоединитель.Connect(СтрокаСоединения);
  2. Выполнение метода Connect (создание внешнего соединения)
  3. Создание сеанса — 1 сек
  4. Инициализация сеанса — сек
  5. ПередНачаломРаботыСистемы (только для Automation-сервера)
  6. ПриНачалеРаботыСистемы
  7. Инициализация параметров сеанса
  8. Подгрузка нужных метаданных

Затраты на COM-вызовы

Каждый раз, когда мы обращаемся во встроенном языке к свойству или методу COM-объекта (выполняем COM-вызов), происходит ряд дополнительных действий по сравнению с обращением к родному объекту встроенного языка. Если COM-сервер находится в другом локальном процессе, то при этом еще сначала выполняется перенос всех параметров из COM-клиента в COM-сервер и в конце выполняется обратный перенос параметров в COM-клиент. Для такого переноса информация естественно должна быть сериализована на стороне отправителя и затем десериализована на стороне получателя, что в совокупности с некоторыми другими действиями получило название маршалинга и демаршалинга. В нелокальном режиме (DCOM) такой перенос будет еще тратить время на сетевые коммуникации и при первом обращении к новому COM-объекту на передачу его «скелета», и поэтому задержка канала будет играть решающую роль (Подробнее о COM вызовах, DCOM в википедии, Технический обзор DCOM,)

Соотношение затрат на вызов по типам расположения COM-сервера

  1. Минимальные для внутрипроцессного Com-сервера
  2. Средние для локального внепроцессного Com-сервера
  3. От средних до больших для нелокального внепроцессного Cоm-сервера в зависимости от качества канала связи

Минимизация количества COM-вызовов

  1. Создаем базовую внешнюю обработку с набором общих методов для приема вызовов от COM-клиента на стороне COM-сервера
  2. Теперь нам не нужно изменять конфигурацию базы COM-сервера, чтобы использовать там сложный функционал.
  3. В нашем продукте мы назвали ее «Сервисный процессор». На ее передачу и инициализацию уходит около 1 сек
  4. Проектируем взаимодействие с COM-сервером по принципу «минимум COM-вызовов”, т.е. готовим все нужное на стороне COM-клиента и передаем в качестве параметров одного большого вызова»
  5. Создаем встроенную обработку для выполнения такого вызова в COM-клиенте
  6. Передача агрегатных объектов
  7. Сериализуем все входные параметры на стороне COM-клиента
  8. Десериализуем все входные параметры на стороне COM-сервера
  9. Сериализуем все выходные параметры на стороне COM-сервера
  10. Десериализуем все выходные параметры на стороне COM-клиента
  11. В нашем продукте мы назвали ее «Выполнение сервиса инфобазы»
  12. Для многократных COM-вызовов предусматриваем регулируемую частоту
  13. Например, информационные вызовы могут выполняться с изменяемой частотой

Обратная связь

При использовании принципа «минимум COM-вызовов» значительную часть времени код будет выполняться в чужом контексте, что серьезно усиливает некоторые неудобства COM-вызовов:

  1. Нельзя прервать поток COM-Клиента и его соединение с сервером приложений 1С, пока не завершится вызов COM-сервера
  2. У COM-Клиента нет информации о прогрессе выполнения вызова в COM-сервере

Для борьбы с этими неудобствами можно организовать обратную связь от COM-сервера к COM-клиенту, передав COM-Серверу ссылку на общий модуль COM-клиента и периодически вызывая через нее COM-клиент. Нужно отметить, что есть ошибки платформы (https://partners.v8.1c.ru/forum/t/1382465/m/1382465), проявляющиеся при создании ссылок на один общий модуль более чем в одном COM-севере сеанса. Поэтому пока лучше очищать ссылки на общий модуль во всех удерживаемых COM-серверах перед помещением в новый. В обратных вызовах можно передавать:

  1. информацию о прогрессе выполнения
  2. накопленные сообщения пользователю (получать функцией ПолучитьСообщенияПользователю(Истина))

Схема принципа «минимум COM-вызовов”

Такая схема дружественна к большим задержкам каналов связи. Поэтому она во многом похожа на вызов веб-сервиса. А следовательно используя ее для COM взаимодействия, вы значительно снижаете затраты на возможные переходы между COM и веб-сервисом в обоих направлениях.

Отладка

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

Чтобы включить возможность отладки внешних соединений, в подкаталоге conf нужно создать файл comcntrcfg.xml с соответствующим содержимым. В окне подключения можно сделать кнопку/флажок для программного создания такого файла. Однако много версий платформы содержат ошибку, из-за которой предметы отладки внешних соединений не видны в отладчике даже с этим корректно настроенным файлом. На платформе 8.3 эти проблемы вроде бы решены.

Пример файла comcntrcfg.xml:

Также нельзя забывать о необходимости запускать конфигуратор для отладки с той же (до регистра букв) строкой соединения, что и предмет отладки. Поэтому в этом диалоге нужно сделать кнопку для запуска конфигуратора COM-сервера с правильной строкой соединения.

В какой-то мере обойти проблему невидимости предмета отладки внешнего соединения и ряд других неудобств можно путем однократного выполнения кода на толстом клиенте с заменой режима «Внешнее соединение» на «Automation-сервер» (приложение), т.е. используя COM класс V8X.Application и включенную видимость. Поэтому в окне подключения нужны параметры для выбора режима подключения.

После создания подключения на стороне COM-клиента обычно требуется подключение отладчика базы COM-сервера и установка там точки останова в нужном месте. Поэтому в окне подключения нужно расположить кнопку подключения отладчика/конфигуратора COM-сервера. Если COM-сервер запущен в режиме видимого приложения, то для подключения отладчика можно воспользоваться асинхронным вызовом исключения в нем. Из диалога с ошибкой в приложении COM-сервера через кнопку «Конфигуратор» можно будет открыть конфигуратор и в большинстве случаев сразу подключить отладчик. Если подключение отладчика таким способом недоступно, то оператору поможет отображение информации о сеансе (его номера) в базе COM-сервера. Также нужна кнопка открытия в открытом отладчике файла внешней обработки, которая будет выполняться в нем.

Управление COM классами и COM+ приложениями 1С

  1. Внешнее соединение (V8X.ComConnector)
  2. Регистрация: Regsvr32 comcntr.dll
  3. Отмена регистрации: Regsvr32 comcntr.dll /u
  4. Automation-сервер (V8X.Application)
  5. Регистрация — 1cv8.exe /regserver
  6. Отмена регистрации — 1cv8.exe /unregserver

Управление COM+ приложениями

Осуществляется через оснастку dcomcnfg.exe. Для регистрации 1С в качестве COM+ приложения необходимо открыть оснастку «dcomcnfg». В ней в ветке «Службы компонентов»-«Компьютеры»-«Мой компьютер»-«Приложения COM+»(COM+ Applications) необходимо добавить новое приложение (application). При добавлении можно указать любое имя. Далее необходимо указать пользователя, от имени которого будет работать COM+ приложение, на закладке Идентификация (Identity). Также нужно задать доступ к приложению для всех пользователей путем добавления, если отсутствует, роли с любым именем в ветке Роли (Roles), и добавления в ее ветку Пользователи (Users) пользователя Все (Everyone). После добавления приложения необходимо создать новую компоненту. Для этого в ветке «Компоненты» созданного приложения необходимо выбрать пункт меню «Создать»-«Компонент». При создании выбрать импорт уже зарегистрированных компонентов и найдите в списке (желательно 64-битную) компоненту 1С (V8x.COMConnector.1).

В нашем продукте имеется инструмент «Управление COM классами 1С» для просмотра/регистрации/изменения всех COM классов и COM+ приложений 1С на указанном компьютере:

Настройка DCOM-сервера

Для Windows 2008 Server нужно добавить роль «Сервер приложений» (Application server). Для этого необходимо открыть панель управления компьютером, щелкнуть правой кнопкой мыши в ветки «Роли» и выбрать пункт меню «Добавить роль».

Появится око в котором необходимо выбрать роль «Сервер приложений»/»Application server». На этапе выбора ролей сервера приложений необходимо указать пункт «Сетевой доступ к COM+»/»COM+ network access». Если это не сделать, то при попытке создания COM-объекта вы будете получать ошибку «Ошибка при вызове конструктора (COMОбъект): The component or application containing the component has been disabled».

Проблемы

  1. Высокие затраты на подключение/инициализацию
  2. Удержание com-серверов — эффективное средство борьбы
  3. Временное хранилище. Производитель не рекомендует, но деваться больше некуда. http://infostart.ru/public/331683/
  4. Повторное использование возвращаемых значений. Очищаются каждые 20 мин
  5. Разные сборки платформы клиента и сервера при одинаковом издании платформы
  6. Для обхода для каждой отличной от COM-клиента сборки платформы назначаем и настраиваем DCOM сервер
  7. Отсутствие информации о типах вложенных в COM-объекты объектов 1С (вместо типа объекта 1С везде получаем тип «COMОбъект») и отсутствие контекстной подсказки по ним
  8. Для обхода применяем принцип «минимум COM-вызовов»
  9. При передаче исключения из COM-сервера оно принимает краткую форму из-за ошибки платформы
  10. Для обхода оборачиваем каждый вызов на стороне COM-сервера в попытку и в исключении перевызываем исключение с полным описанием ошибки
  11. При создании COM-объекта ошибка «Версия компоненты «comcntr» (8.X.XX.XXX) отличается от версии корневого модуля «core82» (8.X.YY.YYY)”
  12. Для обхода создаем COM+ приложение с внепроцессной активацией. Тогда COM-сервер будет создаваться в отдельном процессе и совпадения версий этих модулей не потребуется.
  13. Медленные каналы (большие задержки)
  14. Каждой подсети за отдельным медленным каналом назначаем и настраиваем свой DCOM сервер и при обращении к базам за этим каналом COM-серверы создаем на этом компьютере, минимизируя количество и объемы вызовов Com-клиентCom-сервер
  15. Кешируем (повторно используем) COM-серверы
  16. Невозможно разорвать соединение рабочего процесса, в котором ожидается завершение вызова COM-сервера
  17. Для обхода можно использовать создание COM-объектов в выделенных хост-процессах, настроив соответствующим образом COM+ приложение, и регистрировать идентификаторы этих процессов в привязке к сеансам COM-клиентов. Тогда при необходимости завершить серверное соединение такого сеанса можно сначала убить процесс COM-сервера, а потом и сам сеанс.
  18. При обращении к COM-объекту может возникать ошибка «Неизвестная ошибка». Возможные причины:
  19. Com-сервер перестал существовать. Возможные причины:
  20. Переполнение стека
  21. Невосстановимая ошибка
  22. Хост-процесс завершился
  23. Потеря связи с нелокальным COM-сервером
  24. Совпадение имен свойств и методов без параметров объекта создает неоднозначность обращения к ним через COM
  25. Например, если у справочника есть реквизит ПолноеНаименование, то из-за наличия метода ПолноеНаименование() обращение к реквизиту ПолноеНаименование через COM может привести к вызову метода ПолноеНаименование()
  26. Для обхода используем принцип «минимум COM-вызовов”

Com-технология VS веб-сервисы в локальной сети

  1. Рассмотренные выше сложности с взаимодействием разных сборок платформы 1C, требующие для своего решения сервисный механизм
  2. Высокие затраты на подключение/инициализацию, поэтому при отсутствии кеширования неэффективно для частых мелких вызовов
  3. Привязка к семейству операционных систем (платформе) Windows

Преимущества

  1. Отсутствие необходимости изменять конфигурацию баз, к которым подключаемся
  2. Широкая функциональность
  3. Проще отладка
  4. Не требуется разворачивать и поддерживать веб-сервер

Захват клиентских лицензий

В большинстве случаев всем клиентским приложениям, частным случаем которого являются Automation-сервер и с оговорками является внешнее соединение, в одном сеансе ОС требуется всего лишь одна на всех лицензия. Однако если клиентскому приложению не удалось получить аппаратную лицензию (от локального HASP или сетевого HASP) и программную лицензию (платформы или базовой конфигурации), то предпринимается попытка получить отдельную лицензию с сервера 1С:Предприятия. Сервер 1С:Предприятия может выдать лицензию только, если в свойствах базы разрешена выдача лицензий сервером 1С:Предприятия. В таком случае каждое клиентское приложение и внешнее соединение может захватывать свою собственную лицензию. Если вы хотите подробнее узнать об описанных особенностях, вы можете бесплатно скачать конфигурацию и демонстрационную базу продукта, для чего необходимо оформить предварительный заказ на Инфостарте на продукт 2iS:Интеграция. Несмотря на наличие в конфигурации защищенного модуля, 99% программного кода конфигурации открыто, то есть Вы можете изучить реализацию описанных приемов.

Поставляемый с платформой COM-компонент позволяет взаимодействовать между собой несколькио информационных баз, а также получать доступ к базам 1С:Предприятия из сторонних приложений. Подробнее можете прочитать на официальном сайте .

Пример работы через COM-соединение мы рассматривали в одной из предыдущих статей . Сегодня рассмотрим действия в системе, необходимые для использования COM-компоненты.

Регистрация в системе

После установки платформы на комьютер COM-компонент должен быть установле автоматически установщиком. Файл внешней компоненты располагается в каталоге:

C:\Program Files\1cv82\\bin\comcntr.dll

Таким образом, при установке новке новой версии платформы компонент будет установлен новый и находится в соответствующей директории. Для использования COM-компоненты она должна быть зарегистрирована в операционной системе.

Бывают ситуации, когда программа установки не может автоматически зарегистрировать DLL в операционной системе, поэтому это приходится делать вручную. Также при установке новой версии платформы поверх уже установленной может понадобиться зарегистрировать comcntrl.dll из каталога установленной версии.

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

regsvr32 comcntrl.dll

запущенной в вышеуказанном каталоге.

Часто бывает нужно получить данные из разных баз, которые, что вовсе не редкость работают на разных платформах. Это может быть и регулярный обмен данными между базами. Также могут быть какие-то разовые обработки по переносу данных. Это могут быть и отчеты, собирающие данные из разных баз и формирующие требуемый итог на выходе.
В каждом из этих случаев необходимо из одной базы подключиться к другой через COM -соединение. Вот на этапе подключения часто подстерегают разные неприятности. В этой статье будут рассмотрены некоторые ошибки и способы их устранения. Тут будут приведены конкретные ошибки при соединении между определенными платформами, но способы устранения могут быть такими же подходящими и при соединении между платформами в иных вариациях.

Ситуация первая. При попытке подключения через COM -соединение к базе-источнику выдается сообщение об ошибке. Что-то вроде: «Ошибка при вызове конструктора (COMObject): -2147221164(0x80040154): Класс не зарегистрирован «.
Для устранения подобной ошибки перво-наперво нужно зарегистрировать библиотеку клиента — приемника. Причем для разных версий клиентов одной версии платформы нужно регистрировать свою библиотеку. То есть для разных сборок платформы версии 8.3 нужно заново регистрировать версию библиотеки нужного релиза платформы. Для платформы версии 8.2 такой же подход.
Библиотека регистрируется следующим образом. Запускается Командная строка из-под Администратора, в ней пишется команда

Regsvr32 «\bin\comcntr.dll ,

Например, regsvr32 «c:\Program Files (x86)\1cv8\8.3.5.1119\bin\comcntr.dll» и команда выполняется. Все открытые приложения 1С при этом лучше закрыть. При успешной регистрации будет выдано сообщение об успехе. Если выдается сообщение об ошибке, то нужно проверить путь, по которому находится библиотека, и все права.
Также эту команду можно поместить в cmd- файл и запустить его с правами Администратора.

Если такая ошибка выпадает при попытке подключить к БД на платформе 7.7, то следует проверить реестр на предмет наличия регистрации 7.7-коннектора. В разделе HKEY_CLASSES_ROOT должны присутствовать ветки, изображенные на картинке:

Для правильной регистрации 7.7-коннектора следует один раз запустить 1С Предприятие 7.7 от имени Администратора.

Ситуация вторая. При попытке установить COM -соединение выпадает ошибка с сообщением о несоответствии версии клиента БД-источника. В этом случае проблема решается регистрацией правильной версии библиотеки comcntr.dllтак, как это было описано выше.

Ситуация третья. При попытке подключения через COM -соединение к базе-источнику на платформе 1С 7.7 ошибок не выдается, но обработка «намертво» «зависает». При снятии задачи соединение через консоль управления серверами 8.х остается и не сбрасывается никакими ухищрениями, кроме перезапуска службы сервера 1С. Такое явление происходит, когда осуществляется попытка соединения из БД на платформе 8.х к БД на платформе 7.7 из сеанса сервера. Четко определенных причин такого поведения программы здесь не приводится. Рекомендация одна — использовать вызов подключения из сеанса клиента (& НаКлиенте).

Ситуация четвертая. При попытке подключения через COM -соединение к базе-источнику на платформе 1С 7.7 ошибок не выдается, но и соединения не происходит. В этом случае, а также в некоторых других помогает ручная регистрация COM- компонентов.

1. Заходим в Панель управления → Администрирование → Службы компонентов.
2. Переходим к ветке Компьютеры → Мой компьютер → Приложения COM+.

3. В контекстном меню выбираем Создать → Приложение. Откроется Мастер установки приложений COM+. Выбираем «Создать новое приложение».

4. Имя нового приложения лучше написать чтобы было понятно о чем речь: V8_ComConnector, способ активации — «серверное приложение».

5. На следующем шаге устанавливаем «Текущий пользователь». Нажимаем «Далее».В ветке созданного приложения переходим на ветку «Роли» открываем роль «CreatorOwner» и далее в разделе «Пользователи» создаем пользователя — учетную запись под которой работает сервер 1С.
6. В ветке созданного приложения переходим на ветку «Компоненты» и создаем компонент: Создать — Компонент Выбираем «Установка новых компонентов», и в диалоге выбираем нужную DLL-ку (в данном примере: \bin\comcntr.dll).
7. В контекстном меню выбираем «Свойства». В открывшемся окне переходим на вкладку «Безопасность».
8. Снимаем галку «Принудительная проверка доступа для приложений». Ставим галку «Применить политику программных ограничений». Устанавливаем Уровень ограничений — «Неограниченный»


9. Нажимаем «ОК».

Как в Windows x32(x86)/x64 зарегистрировать компоненту com-соединения comcntr.dll 1С 8.

Ответ на данный вопрос актуален в контексте натройки обменов между базами 1С с помощью прямого подключения. Один из вариантов установки/регистрации компоненты com-соединения приведен на странице: На ней описан вариант установки компоненты при установке/переустановке компонентов платформы 1С: Предприятие из стандартного пакета установки. Но случается и так, что все-таки com-компонента по каким-то таинственным пирчинам все же не регистрируется при вышеуказанной операции.

На это есть альтернативный вариант с помощью командной строки операционной системы. Забегая немного вперед, и чтобы обезопасить себя от ошибок при регистрации com-компоненты comcntr.dll через командную строку, подобных приведенной на скрине

Чтобы избежать ошибки «Модуль comcntr.dll загружен, но не удалось выполнить вызов DllRegisterServer, код ошибки 0x80070005» запускайте командную строку с правами администратора

В системе с разрядностью x32(x86) для платформы 1С: Предприятие 8.2

C:\Program Files (x86)\1cv82\\bin> regsvr32 comcntr.dll

Где — номер текущего используемого релиза плафтормы 1С 8.

Для платформы 1С: Предприятие 8.3 командная строка для регистрации com-компоненты будет выглядеть примерно так:

C:\Program Files (x86)\1cv8\\bin> regsvr32 comcntr.dll

На скрине, приведенном ниже в качестве пирмере для случая регистрация comcntr.dll в ОС x86 значение — «8.3.9.1818»

Теперь рассмотрим вариант для системы с разрядностью x64 для платформы 1С: Предприятие 8.2, альтернативный вариант:

C:\Windows\SysWOW64>regsvr32 «C:\Program Files (x86)\1cv82\\bin\comcntr.dll»

Для Windows x64 регистирация com-соединения 1С 8.3 может выглдяеть так:

C:\Windows\SysWOW64>regsvr32 «C:\Program Files (x86)\1cv8\\bin\comcntr.dll»

Если все-таки приведенный материал не помог, предлагается обратиться к альтернативным публикациям: Регистрация comcntr.dll-компоненты в 64-битной версии Microsoft Windows и Регистрация компоненты comcntr.dll для COM соединения с 1С 8 в 32-битной операционной системе

© www.. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.

В свое время столкнулся с проблемой создания COM-соединения на стороне сервера. Проблема трудно диагностируется, т.к. код, прекрасно работающий под клиентом отказывается работать на сервере, например, если код исполняет регламентное задание.

Предлагаемая ниже методика позволяет избавиться от описываемой проблемы. К сожалению, после переустановки платформы все возвращается на круги своя и процедуру приходится повторять.

Upd . Дополнение: если на Windows-сервере 64-бит стоит Сервер 1С Предприятие 64-бит (в дистрибутиве windows64.rar),
то такой проблемы не будет. Уставщик позволяет поставить COM-коннектор без установки самого севера. Это полезно, когда приложение реализовано на платформе 8.3, а COM-соединение нужно к базам на 8.2.

За дополнение спасибо brix8x .

Приведен алгоритм настройки системы, со скрином к каждому действию.

2. Регистрация компоненты comcntr.dll

5. Старт сервера 1С. (обязательно:)

Вызываем консоль

Регистрируем компоненту. Компонента отсутствует, если установлен только сервер 1С. Почему-то 1С публикует ее только в составе клиента.

За дополнение спасибо shur52 .

Запускаем службу компонентов. Описывается для Windows Server 2008 R2 Standart.

В ветке Components добавляем новую компоненту comcntr.dll

ВАЖНО!!! После установки нужно немного изменить свойства. Эта тонкость нигде не описана, без нее у меня не работало!

Перезапуск физического сервера

Зачем нужна возможность устанавливать отдельный пароль на изменение ограничения работы программы по дате? оглавление Как указать администратора кластера для серверной базы?

Обновлятор-1с. Решение проблем с com-библиотекой для внешнего подключения к базе.

Обновлятор >> Инструкции 2020-05-28T21:40:01+00:00 Обновлятор-1с в своей работе использует com-библиотеку от 1с для внешнего подключения к базам.

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

Как понять, что у нас проблемы с COM

Для этого нажимаем кнопку «Проверить настройки» удерживая клавишу «Shift» на клавиатуре:

При нормальной работе COM отчёт будет примерно таким:

При проблемах же с COM возникнет вот такая или похожая ошибка:

Ещё может писать, что -то типа «Не удалось создать программное подключение к 1С».

Да, судя по тесту, у нас проблемы с COM

Прежде всего, о какой именно библиотеке идёт речь? Эта библиотека comcntr.dll, которая находится в папке bin конкретной платформы 1с:

Эта библиотека устанавливается и автоматически регистрируется в системе при установке платформы.

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

regsvr32.exe «путь к папке bin\comcntr.dll»

Итак, что мы можем предпринять?

Шаг №0

Обратите внимание на утилиту для отображения и регистрации библиотек RegDllView. При помощи неё вы как минимум сможете контролировать результат работы следующих шагов.

Шаг №1

Прежде всего убеждаемся, что у нас действительно проф-версия платформы, потому что для базовой версии платформы внешнее подключение к базам работать и не должно (это ограничение платформы).

Чтобы понять какая у нас платформа (базовая или проф) выполним вот этот пункт.

Если лицензия на платформу у нас всё же не проф, а базовая, то все остальные шаги не имеют смысла. Внешнее подключение к базам у нас работать не будет (из-за ограничений платформы). Ничего не остаётся, кроме как настроить базы вот так.

Шаг №2

Далее пробуем запустить обновлятор с правами администратора.

Если у вас включён UAC, то добиться этого можно, нажав на ярлыке обновлятора правой кнопкой, и выбрав вариант «Запуск от имени администратора».

Далее выбираем базу и нажимаем кнопку «Проверить настройки». Если ошибка пропала и больше не воспроизводится даже при обычном запуске обновлятора (без прав администратора) — поздравляю, проблема решена. Если нет — идём дальше.

Шаг №3

В 32-битной версии ОС пробуем выполнить команду

regsvr32 «путь к папке bin\comcntr.dll»

В 64-битной версии ОС команда будет такой:

— для регистрации 64-битной платформы 1С:

regsvr32 «путь к папке bin\comcntr.dll»

— для регистрации 32-битной платформы 1С:

C:\Windows\SysWOW64\regsvr32 «путь к папке bin\comcntr.dll»

Эти команды запускаем от имени пользователя с правами администратора. А при включённом UAC, запускаем cmd через «Запуск от имени администратора», либо через такой же запуск написанного батника.

Если команда регистрации не помогла, то нужно предварительно удалить регистрацию библиотеки comcntr.dll, запустив ту же команду вызова regsvr32 с ключом /u

Если и это не помогло, попробуйте переустановить платформу 1С в режиме Исправить, а затем зарегистрируйте библиотеку, как написано выше.

Если этот шаг не помог — идём дальше.

Шаг №4

Похоже, что у обновлятора не получается зарегистрировать COM компоненту из-за настроек безопасности на вашем сервере.
В этом случае:

  1. Заходим в Панель управления — Администрирование — Службы компонентов.
  2. Переходим к ветке Компьютеры — Мой компьютер — Приложения COM+.
  3. В контекстном меню выбираем Создать — Приложение. Откроется Мастер установки приложений COM+.
  4. Нажимаем «Далее».
  5. Выбираем «Создать новое приложение».
  6. Вводим имя «V83COMConnector». Устанавливаем переключатель «Серверное приложение». Нажимаем «Далее».
  7. На следующем шаге устанавливаем «Текущий пользователь». Нажимаем «Далее».
  8. Нажимаем «Готово».
  9. В появившейся ветке V83COMConnector переходим к подветке Компоненты.
  10. В контекстном меню выбираем Создать — Компонент. Откроется Мастер установки компонентов COM+.
  11. Нажимаем «Далее».
  12. Выбираем «Установка новых компонентов».
  13. Выбираем файл <каталог 1С>\bin\comcntr.dll.
  14. Нажимаем «Далее» — «Готово».
  15. Переходим к ветке V83COMConnector.
  16. В контекстном меню выбираем «Свойства». В открывшемся окне переходим на вкладку «Безопасность».
  17. Снимаем галку «Принудительная проверка доступа для приложений». Ставим галку «Применить политику программных ограничений». Устанавливаем Уровень ограничений — «Неограниченный».
  18. Нажимаем «ОК».

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

Шаг №5

Бывает так, что помогает только повторная переустановка платформы (при этом происходит корректная регистрация компоненты).

Шаг №6

Если проблема начала возникать сразу после обновления платформы 1с, то вероятнее всего новой версии платформы 1с не хватает какого-нибудь сервиспака или обновления для вашей операционной системы. Поэтому если есть возможность — ставим их все, если нет — действуем выборочно согласно этой .

Наверняка есть и другие экзотические случаи о которых я пока не знаю — пожалуйста, пишите о них мне на почту helpme1c.box@gmail.com, чтобы я смог дополнить эту статью.

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).
Обновлятор >> Инструкции

Подписывайтесь и получайте новые статьи и обработки на почту (не чаще 1 раза в неделю).
Вступайте в мою группу ВКонтакте, Одноклассниках, Facebook или Google+ — самые последние обработки, исправления ошибок в 1С, всё выкладываю там в первую очередь.

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Зачем нужна возможность устанавливать отдельный пароль на изменение ограничения работы программы по дате? оглавление Как указать администратора кластера для серверной базы?

Немного базовой теории

Перед тем, как перейти к содержательной части, договоримся о некоторых ограничениях:

  • Мы подразумеваем, что Вы знаете о существовании четырёх директив компиляции, доступных в модулях формы: «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» и «&НаКлиентеНаСервереБезКонтекста».
  • Все примеры будут опираться на работу «1С:Предприятие 8» в клиент-серверном режиме. Файловый вариант по сути является эмуляцией клиент-серверного режима, с небольшими отклонениями (для данной статьи это не критично)
  • В рамках этого материала рассматривается исключительно взаимодействие клиента и сервера 1С. Работа с базой данных, преобразование данных и прочие нюансы работы системы – это темы других статей.

Далее, освежим в памяти немного теории.

Директивы, в имени которых упоминается «Клиент», устанавливают ограничение на обращение к базе данных.

Процедуры или функции, написанные под директивой «Без контекста», не имеют доступа к контексту (данным) формы. Исходя из этой информации, легко представить ограничения директив по доступу к данным в виде следующей таблицы:

Директива Данные формы База данных
&НаКлиенте +
&НаСервере + +
&НаСервереБезКонтекста +
&НаКлиентеНаСервереБезКонтекста

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

Отсюда делаем вывод: у методов, описанных под директивой «&НаКлиентеНаСервереБезКонтекста», единственным источником данных являются эти самые переданные параметры.

Не стоит забывать и про доступность вызова одних процедур и функций из других. Для этого стоит запомнить, что можно вызывать только те процедуры и функции, которые находятся под одноимённой (с родительским методом) директивой или под директивой, находящейся ниже (чем у родительского метода) согласно списку:

  • &НаКлиенте
  • &НаСервере
  • &НаСервереБезКонтекста
  • &НаКлиентеНаСервереБезКонтекста.

То есть из метода, описанного под директивой «&НаКлиенте», можно вызывать процедуры и функции, описанные под любой директивой. А вот «из-под» директивы «&НаСервереБезКонтекста» можно вызывать только то, что описано под директивой «&НаСервереБезКонтекста» или «&НаКлиентеНаСервереБезКонтекста».

Теперь про серверный вызов

Серверный вызов – это передача какой-то информации с клиентской части «1С:Предприятие 8» на серверную часть с целью вернуть обратно некий набор данных.

Самый первый серверный вызов инициализируется в момент начала сеанса работы 1С. То есть когда пользователь выполняет вход в информационную базу:

Рисунок 1

«Оу! При чём тут Библиотека?!» – спросите Вы.

Всё очень просто:

Рисунок 2

Обратите внимание, что доступ к базе данных есть только на серверной части, а соединение между клиентом и сервером имеет ограниченную пропускную способность. Это и неудивительно – ведь соединение между клиентской и серверной частью может быть установлено даже по нестабильному низкоскоростному каналу связи (например, посредством мобильного интернета).

Кроме этого, передача данных между клиентом и сервером возможна только посредством серверного вызова.

Но, для того чтобы перейти к основной теме данной статьи, необходимо сначала разобраться – где будет выполняться программный код, написанный под определенными директивами. То есть на какой части приложения «1С:Предприятие 8» будут доступны процедуры и функции, описанные под директивами «&НаКлиенте», «&НаСервере», «&НаСервереБезКонтекста» и «&НаКлиентеНаСервереБезКонтекста»:

Рисунок 3

Видим, что на стороне клиента у нас будут доступны процедуры и функции, написанные под двумя директивами из четырёх, а на стороне сервера – под тремя из четырёх.

Сразу возникают вопросы: «Зачем такое многообразие и чем оно полезно?», «Как метод, описанный под директивой «&НаКлиентеНаСервереБезКонтекста» может выполняться и на клиенте, и на сервере?».

Сейчас мы постараемся понять особенности работы системы при использовании директив и почему необходимо уметь правильно использовать каждую из существующих директив компиляции.

И в этом нам помогут наши новые друзья, знакомьтесь!

Это процесс клиентской части приложения «1С:Предприятие 8». Он запускается на компьютере пользователя и сожительствует в оперативной памяти с другими процессами (38 вкладок браузера, поток аудио из социальной сети, telegram и другие). Может порождать серверный вызов.
Это процесс серверной части приложения «1С:Предприятие 8». Он существует на сервере 1С. Знает, какие клиентские сеансы в данный момент запущены, но самостоятельно не может инициировать взаимодействие с ними. Работает с клиентской частью только через полученный от неё серверный вызов.
А это серверный вызов. Как было сказано выше, он порождается процессом клиентской части и призван «прислуживать» ему. Он передает запросы со стороны клиента на сторону сервера, а также занимается транспортировкой данных с клиента на сервер и обратно.

Итак, давайте рассмотрим несколько особенностей работы программного кода в «1С:Предприятие 8», написанного под разными директивами.

Действие 1. Открытие пользователем формы с данными.

Рисунок 4 Рисунок 5 В момент нажатия Пользователем кнопки открытия формы из интерфейса, происходит передача управления на Сервер. По переданным параметрам получаются необходимые для построения данные из БД и происходит формирование контекста формы, который затем отправляется на клиентскую часть. У пользователя на экране отображается запрошенная форма.

Действие 2. Получение из открытой Пользователем формы дополнительных данных из Базы данных.

Рисунок 6

Получение этих данных может быть описано под двумя директивами – «&НаСервере» и «&НаСервереБезКонтекста». Рассмотрим оба случая.

Явление 1. Директива «&НаСервере»

Рисунок 7 При вызове процедуры или функции под директивой «&НаСервере» из формы со стороны клиента происходит «упаковка» всего контекста формы и отправка его на сторону сервера.

После выполнения метода на сервере, весь этот «пакет» транспортируется обратно. Таким образом, форма со всеми элементами и данными дважды проходит через самое узкое место системы.

Явление 2. Директива «&НаСервереБезКонтекста»

Рисунок 8 При вызове процедуры или функции под директивой «&НаСервереБезКонтекста» из формы со стороны клиента происходит передача на сторону сервера только тех данных, которые были указаны в качестве параметров. Обратно же передаётся только необходимая информация в уже подготовленном виде.

Таким образом, серверный вызов не несёт лишней нагрузки, и для передачи данных между клиентом и сервером потребуется меньше ресурсов.

Из примеров видно, что далеко не всегда оправдано указание директивы компиляции «&НаСервере» с точки зрения использования контекста (данных) формы на сервере.

Если возможно решить возникшую задачу путём отправки на сервер только определённого набора данных, то надо эту возможность использовать и описывать метод под директивой «&НаСервереБезКонтекста». Это позволит уменьшить нагрузку на серверный вызов, а также не занимать сервер обработкой и хранением ненужной в текущий момент информации.

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

До этого момента при каждом изменении свойства «Видимость» происходил серверный вызов, как при использовании директивы «&НаСервере».

Но использование директивы «&НаСервереБезКонтекста» не является панацеей. Помимо нагрузки на серверный вызов, всегда необходимо задумываться ещё над одним параметром.

Действие 3. Обработка данных табличной части формы с получением дополнительной информации из Базы данных.

Рисунок 9

Явление 1. Построчная обработка табличной части на стороне клиента с организацией серверного вызова для получения дополнительной информации из базы данных.

Мы уже знаем – лучше использовать директиву «&НаСервереБезКонтекста».

Рисунок 10 Рисунок 11 При таком построении программного кода происходит множественное обращение со стороны клиента на сервер – по количеству элементов цикла, запущенного на стороне клиента.

Явление 2. Предварительная обработка табличной части на стороне клиента с целью подготовки требуемых к обработке на сервере данных и «упаковки» их в набор параметров. Затем передача этого набора на сервер для получения дополнительной информации из базы данных.

Используем всё ту же директиву «&НаСервереБезКонтекста».

Рисунок 12 В данном случае количество серверных вызовов сведено к минимуму за счёт предварительной подготовки параметров.

Большое количество текущих серверных вызовов может свидетельствовать о неоптимальном программном коде.

Избегайте создания серверных вызовов внутри цикла. Подготовьте набор параметров и единожды выполните его передачу для обработки на сервер. Если предполагается сложная обработка большого количества данных формы – передайте её полностью на сервер (при помощи директивы «&НаСервере») и выполните все действия на стороне сервера.

Если цель серверного вызова, созданного внутри цикла – получить какую-либо информацию из базы данных, то данная операция включает в себя запрос в цикле. А это очень негативно влияет на производительность всей системы в целом.

С директивой «&НаСервереБезКонтекста» вроде бы разобрались. Она нужна для того, чтобы уменьшить объем информации, передаваемой в рамках одного серверного вызова. Дополнительно разобрались с количеством текущих серверных вызовов – необходимо стремиться к их минимизации.

Давайте теперь попробуем разобраться, для чего нужна директива «&НаКлиентеНаСервереБезКонтекста».

Действие 4. Выполнение обработки данных.

Когда предполагается выполнение одной и той же обработки данных из нескольких участков программного кода, разумно этот код поместить в самостоятельную процедуру или функцию. Остаётся только решить, под какой директивой её написать.

Рисунок 13

Та-дам!

Рисунок 14

Для копирования у нас есть ксерокс. Но куда его поставить? На сторону клиента или сервера? Под какой директивой его разместить?

Как было озвучено ранее – любая процедура и функция поддерживает обработку информации, переданной в неё в качестве параметров.

Давайте для начала попробуем разместить копировальный аппарат на стороне клиента. Для этого описываем процедуру или функцию «Ксерокс» под директивой «&НаКлиенте». Тогда процесс клиентской части в любой момент сможет без проблем обратиться к ней и все действия будут выполнены в соответствии с программным кодом.

Но что произойдёт, если потребность в копировании возникнет на стороне сервера? Например, для подготовки данных, передаваемых на сторону клиента, потребуется сделать копию? Напомню – процесс серверной части не имеет возможности самостоятельно инициировать клиентские вызовы.

Рисунок 15

Получается, что использовать директиву «&НаКлиенте» неправильно, а директиву «&НаСервере», как мы изучили ранее – нежелательно. Давайте посмотрим поведение системы при использовании директивы «&НаСервереБезКонтекста».

Рисунок 16

Вроде бы результат достигнут – и с сервера, и с клиента доступно копирование. Но для того, чтобы получить копию данных, используемых на клиенте, приходится делать серверный вызов. А это опять ведет к лишней нагрузке на соединение и временным затратам.

Избавиться от излишней передачи на сервер при сохранении возможности копирования на клиенте и на сервере можно при помощи директивы «&НаКлиентеНаСервереБезКонтекста».

Рисунок 17

Не углубляясь в детали, отметим, что метод, описанный под данной директивой управления, создаётся в двух копиях – и на стороне клиента, и на стороне сервера. Это позволяет выполнить необходимые действия там, где появилась потребность в них (клиент/сервер), без лишних серверных вызовов.

Конечно, вместо того чтобы выделять повторяющийся программный код, описывать его в отдельном методе под директивой «&НаКлиентеНаСервереБезКонтекста», можно поступить по-другому. Просто взять и написать один и тот же участок кода и в клиентской, и в серверной процедуре.

С точки зрения выполнения программы результат будет одинаков. Но объяснение «почему так не надо делать» – это уже совершенно другая тема…

Вместо заключения

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

Придерживайтесь при разработке следующих правил:

  • По возможности не передавайте контекст формы на сторону сервера
  • Минимизируйте количество текущих серверных вызовов
  • Длительные и ресурсоёмкие задачи запускайте на выполнение на стороне сервера (при возможности – в фоновом режиме).

Учитывайте потребность в доступности тех или иных видов данных, обоснованность передачи управления и не стесняйтесь при необходимости дробить процедуры и функции. И будет Вашему серверному вызову всегда легко, а Вы от пользователей Вашей программы получите «молчаливую благодарность»!

Так ли это важно думать об оптимизации? Тут имеет смысл вспомнить одну историю.

Программист Иван при доработке 1С на своём предприятии сделал ошибку в выборе директивы компиляции. Из-за неё длительность одного из серверных вызовов была больше возможной на полсекунды.

Пользователей, применяющих этот функционал, – 25 человек, и каждый из них за рабочий день в среднем совершает 110 таких операций. Всего впустую за рабочий месяц потрачено 28875 секунд (21 рабочий день * 25 человек * 110 операций * 0,5 секунды) = 8,02 часов.

Иван, каково тебе осознавать, что за месяц ты задолжал своему предприятию целый рабочий день?

Об авторе

Автор статьи – Павел Ванин

г. Владимир

E-mail: pahich@mail.ru

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в нее – сделайте это сейчас, и в блоке ниже (на этой странице) появятся ссылки на скачивание материалов.

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кэш браузера или подписаться через другой браузер.

Cклонения по падежам  6
  НаКлиенте Процедура Команда1(Команда) ФИО = » Иванов Иван Иванович» ; Падеж = 2; Пол = 1; Результат = СклонениеФИО(ФИО, Падеж, пол); Сообщить(Результат); КонецПроцедуры НаСервере Функция СклонениеФИО(ФИО, Падеж, пол) Результат = » » ; v7plus.dll — отсутствует CLSID либо отсутствует интерфейс llnitDone  0
 При выгрузке отчетности в 1С 7.7 программа ругается на v7plus.dll и указывает, что отсутствует интерфейс llritDone. Что делать? 1) Поудалять нафиг все v7plus.dll из каталогов ИБ и папок пользователей 2) Оставить только в bin каталоге и зарегить чер V82.COMConnector.1: Не найдена лицензия COM-соединением  1
 При подключении из одной базы к другой через COM внезапно стала появляться следующая ошибка: «V82.COMConnector.1: Не найдена лицензия COM-соединением», хотя никаких изменений на серверах не делалось. Релиз платформы был 8.2.13. Обновил до 14-го – не База 1С при запуске уходит в дамп и вылетает  1
  В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window Внутренняя ошибка компоненты DBENG8  0
 Ошибка СУБД: Внутренняя ошибка компоненты dbeng8 по причине: Внутренняя ошибка компоненты dbeng8 Решение: 1: Тестирование исправление базы 2: Проверка базы используя chdbfl.exe 3: Обновить версию Платформы 4: Обновить dbeng8.dll в