Если фоновый процесс COM-соединения завершается с ошибкой:
{Обработка.ОбменДаннымиXML.МодульОбъекта(15947)}: Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3): Invalid class string
Нужно зарегистрировать библиотеку ComConnector comcntr.dll из каталога программы.
!!! Перед этим нужно отключить службу агента сервера 1С:Предприятия и все программы, использующие эту DLL !!!
В 32-битной версии сервера проблема решилась бы командой: regsvr32 «C:\Program Files (x86)\1cv8\8.3.5.1119\bin\comcntr.dll»
но в 64-битной версии команда будет примерно такой * : C:\Windows\SysWOW64\regsvr32 «C:\Program Files (x86)\1cv8\8.3.5.1119\bin\comcntr.dll»
При удачном выполнении Вы увидите:
Если команда регистрации не помогла, то нужно предварительно удалить регистрацию библиотеки comcntr.dll, запустив ту же команду вызова regsvr32 с ключом /u
Если и это не помогло, попробуйте переустановить платформу 1С в режиме Исправить и отметьте COM соединение
Первым делом, после установки кластера 1С ранее нужно было создать рабочие процессы. Как оказалось, процессы кластера начали создаваться автоматически в зависимости от нагрузки базы.
Пробный запуск фоновых заданий основной базы заставило кластер 1С бесконечно перегружать rphost.exe и дополнительный rphost.exe никак не хотел создаваться. Покопавшись в настройках все стало понятно.
Максимальный объем памяти рабочих процессов - это объем памяти, который могут использовать рабочие процессы вместе. Нужно быть очень внимательными при установке параметра, измеряется в байтах. Если установить неверное значение (недостаточное для нормальной работы пользователей) пользователям будет выдана ошибка "Недостаточно свободной памяти на сервере 1С". Так же эту ошибку можно получить, когда на сервере 1С закончилась квота по памяти.
Безопасный расход памяти за один вызов - позволяет контролировать расход памяти при серверном вызове, измеряется в байтах. Если вызов использует больше памяти чем положено, этот вызов будет завершен в рамках кластера 1С без перезапуска рабочего процесса (rphost.exe). Соответственно "неудачник", который выполнил вызов сервера, утратит сеанс с базой 1С без влияния на работу других пользователей.
в одном ГБ - 1073741824 Байт, следовательно в 2 ГБ - 2147483648 Байта
Объем памяти рабочих процессов, до которого сервер считается производительным - при превышении этого параметра сервер в кластере 1С перестанет принимать новые соединения.
Количество ИБ на процесс - позволяет изолировать информационные базы по рабочим процессам. По умолчанию у текущего кластера 1С было установлено значение - "8", но на протяжении нескольких часов работы сервер себя очень нестабильно, сеансы пользователей зависали. После изоляции каждой информационной базы (значение - "1") проблемы пропали.
Количество соединений на процесс - по умолчанию значение "128". Так как у текущей базы очень большая нагрузка фоновыми заданиями (расчет логистики, анализ прайсов, анализ конкурентов и прочее) было принято решение уменьшить количество до "25".
Немного изменились настройки и самого кластера 1С:
Уровень отказоустойчивости - это количество рабочих серверов, которые могут одновременно выйти из строя, и это не приведет к аварийному завершению работы пользователей. Резервные сервисы запускаются автоматически в количестве, необходимом для обеспечения заданной отказоустойчивости. В реальном режиме времени выполняется репликация активного сервиса на резервные.
Режим распределения нагрузки - есть два варианта параметра: "Приоритет по производительности" - памяти сервера тратится больше и производительность выше, "Приоритет по памяти" - кластер 1С экономит память сервера.
Сервер 8.3 характеризуется переработанным заново внутренним кодом, хотя «снаружи» может показаться что это слега доработанный 8.2.
Сервер стал более «авто настраиваемым», часть параметров типа количества рабочих процессов теперь не создается вручную, а рассчитывается исходя из описаний требований задач по отказоустойчивости и надежности.
Это снижает вероятность неправильной настройки сервера и понижает требования к квалификации админов.
Получил развитие механизм балансировки нагрузки, который можно использовать либо для повышения производительности системы в целом, либо использовать новый режим «экономии памяти», который позволяет работает «с ограниченной памятью» в случаи если используемая конфигурация «любит отъедать память».
Стабильность работы при использовании больших объемов памяти определятся новыми параметрами рабочего сервера.
Особенно интересен параметр «безопасный расход памяти за один вызов». Для тех кто плохо представляет что это такое - лучше не тренируйтесь на «продуктивной» базе. Параметр «Максимальный объем памяти рабочих процессов» позволяет при «переполнении» не обваливать весь рабочий процесс, а только один сеанс «с неудачником». «Объем памяти рабочих процессов, до которого сервер считается производительным» позволяет заблокировать новые соединения как только будет преодолен этот порог памяти.
Рекомендую изолировать рабочие процессы по информационным базам, к примеру указать параметр «Количество ИБ на процесс = 1″. При нескольких высоконагруженных базах это позволит уменьшить взаимное влияние как по надежности, так и по производительности.
Отдельный вклад в стабильность системы вносит «расходование» лицензий/ключей. В 8.3 появилась возможность использования «менеджера программных лицензий» напоминая менеджер «аладина». Цель - возможность вынести ключ на отдельную машину.
Реализован он в виде еще одного «сервиса» в менеджера кластера. Вы можете использовать к примеру «свободный» ноутбук. Добавьте его в кластер 1с 8.3, создайте на нем отдельный менеджер с сервисом «сервис лицензирования». В ноутбук можно воткнуть аппаратных hasp-ключ, или активировать программные лицензии.
Наибольший интерес для программистов должен представлять «Требования назначения функциональности».
Требования назначенной функциональности 1с
Так на ноутбуке с ключом защиты чтобы не запускать пользователей на сервер кластера надо добавить «требования» для объекта требования «Клиентское соединение с ИБ» - «Не назначать», т.е. запретить рабочим процессам данного сервера обрабатывать клиентские соединения.
Еще больший интерес предоставляет возможность запускать «только фоновые задания» на рабочем сервере кластера без сеансов пользователей. Таким образом можно высоконагруженные задачи (код) вынести на отдельный машины. При чем можно одно фоновое задание «закрытия месяца» через «Значение дополнительного параметра» запускать на одном компьютере, а фоновое задание «Обновление полнотекстового индекса» на другом.Уточнение происходит через указание «Значение дополнительного параметра». Например если указать BackgroundJob.CommonModule в качестве значения, то можно ограничить работу рабочего сервера в кластере только фоновыми заданиями с любым содержимым. Значение BackgroundJob.CommonModule.<Имя модуля>.<Имя метода> - укажет конкретный код.
Кластер 1С 8.2
Сеансы позволяют выполнять балансировку загруженности и отказоустойчивости в управляемом приложении.
Менеджер кластера теперь стал сложнее. Часть функций теперь можно выделить в отдельный процесс и даже разместить на другом рабочем сервере кластера. Это позволяет балансировать загруженность сервера.
Отказоустойчивость сервера 8.2 достигается за счет:
Хранение информации о сеансе работы пользователя.
Пользователь не привязан больше к рабочему процессу.
Резервирование рабочих процессов в кластере.
Должно быть несколько рабочих процессов, в том числе резервируемые
Резервирование кластеров.
Указывается запасной кластер, при подключении - перечисляются в строке соединения
Это позволяет обеспечить непрерывность работы!
При разрыве физического соединения клиента с кластером (уборщица выдернула кабель, отключилось питание сетевого оборудования, неполадки у провайдера) не приходится заново подключаться к информационной базе и начинать всю работу сначала. После восстановления физического соединения пользователь может продолжить работу с того места, на котором она была прервана.
Если требуется техническое обслуживание компьютеров кластера, их можно выключать прямо во время работы, не останавливая работу пользователей с информационной базой.
При выходе из строя любого сервера кластера работа пользователей не остановится она будет автоматически переведена на резервный кластер и/или на резервные рабочие процессы. Для пользователей такой переход будет незаметным.
Если один из рабочих процессов кластера завершится аварийно, подключенные к нему пользователи будут автоматически переведены на другие или резервные рабочие процессы. Такой переход также будет незаметен для пользователей.
Ставя очередное обновление Бухгалтерии получил ошибку "Я работаю только на 8.3.4", ну вот... пришло время поставить 8.3.4. и так:
Процесс скачивания и установки новой платформы я описывать не буду, там все просто.
Служба Агент Сервера 1С
По умолчанию он ставиться на порт 1540, а там у меня крутится 8.2, поэтому меняем в ветке рееста
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\1C:Enterprise 8.3 Server Agent Параметр ImagePath
меняем номера портов, добавляя смещение: "C:\Program Files\1cv8\8.3.4.365\bin\ragent.exe" -srvc -agent -regport 1741 -port 1740 -range 1660:1691 -d "C:\Program Files\1cv8\srvinfo"
Запускаем Агента и Открываем консоль Администрирования серверов 1С и создаем кластер 8.3
Указал имя сервера и настроил на порт 1740 (на 1540 работает 8.2)
Создаем кластер + чуток оптимизировал( У меня всего небольшой ОДИН сервер, поэтому - указываю Интервал перезапуска рабочих процессов и объем памяти. т.к у меня один сервер - уровень отказоустойчивости - 0)
Теперь подробнее:
1. Интервал перезапуска: 86400 сек (24 часа). Момент перезапуска не регламентируется, видимо с момента установки параметров, либо запуска сервера приложений.
2. Также можно указать допустимый объем памяти: 3000000 Кб (3 Гб) - Для сервера с 4 ГБ оперативы, Если ее меньше, то не заполняйте этот параметр!.
3. Интервал превышения допустимого объема памяти — это непрерывный интервал времени превышения допустимого объема памяти, после которого сервер перезапустит процесс. Если указано 0 сек — будет ждать вечно.
4. Количество Рабочих процессов расчитывается автоматически на основании Ваших настроек
5. Уровень отказоустойчивости можно задавать уровень отказоустойчивости кластера как количество рабочих серверов, которые могут одновременно выйти из строя, и это не приведет к аварийному завершению работы пользователей. Резервные сервисы запускаются автоматически в количестве, необходимом для обеспечения заданной отказоустойчивости; в реальном режиме времени выполняется репликация активного сервиса на резервные.
6. Режим распределения нагрузки, который можно использовать либо для повышения производительности системы вцелом, либо использовать новый режим «экономии памяти», который позволяет работает «с ограниченной памятью» в случаи если используемая конфигурация «любит отъедать память».
Рабочий сервер
Сервер у меня простенький, 2 Gb оперативы всего и на нем будет всего 2 базы, поэтому настрою его так:
параметр Количество ИБ на процесс ставлю равным 1, т.е. хочу чтобы для каждой ИБ запускался свой процесс - это позволит уменьшить взаимное влияние как по надежности, так и по производительности. Вы же настраивате под характеристики своего сервера!
Информационная база
Добавляю ИБ:
В стартере пописываю базу:
Требования назначения функциональности
Я у себя это не настраиваю но думаю надо сказать об этом:
Управление кластером заключается в том, что администратор определяет состав компьютеров (рабочих серверов), на которых размещается кластер. Кроме этого (при необходимости) он может определить "требования" к ним: какие сервисы и соединения с информационными базами должны работать на каждом из рабочих серверов. Менеджеры кластера и рабочие процессы запускаются автоматически, исходя из назначенных "требований". "Требования" к рабочим серверам могут быть заданы интерактивно, из консоли администрирования кластера, или программно, из встроенного языка.
Так на ноутбуке с ключом защиты чтобы не запускать пользователей на сервер кластера надо добавить «требования» для объекта требования «Клиентское соединение с ИБ» — «Не назначать», т.е. запретить рабочим процессам данного сервера обрабатывать клиентские соединения. Еще больший интерес предоставляет возможность запускать «только фоновые задания» на рабочем сервере кластера без сеансов пользователей. Таким образом можно высоконагруженные задачи (код) вынести на отдельный машины. При чем можно одно фоновое задание «закрытия месяца» через «Значение дополнительного параметра» запускать на одном компьютере, а фоновое задание «Обновление полнотекстового индекса» на другом. Уточнение происходит через указание "Значение дополнительного параметра". Например если указать BackgroundJob.CommonModule в качестве значения, то можно ограничить работу рабочего сервера в кластере только фоновыми заданиями с любым содержимым. Значение BackgroundJob.CommonModule..- укажет конкретный код.
Профили безопасности
Профили безопасности служат для того, чтобы запретить прикладному решению выполнять действия, которые могут быть потенциально опасны для функционирования кластера серверов.
Администратор кластера может назначить любой информационной базе один из существующих в кластере профилей безопасности. И тогда потенциально опасная функциональность прикладного решения будет ограничена в тех пределах, которые описаны в этом профиле.
Стандартно, после создания, профиль безопасности запрещает выполнение всех потенциально опасных действий:
-обращение к файловой системе сервера;
-запуск COM-объектов;
-использование внешних компонентов 1С:Предприятия;
-запуск внешних обработок и отчётов;
-запуск приложений, установленных на сервере;
-обращение к ресурсам Интернета.
Таким образом защититься от нежелательных действий незнакомого прикладного решения очень просто: нужно создать пустой профиль безопасности и назначить его информационной базе. Далее, если есть необходимость, можно расширять этот профиль, описывая в нём действия, которые разрешается выполнять прикладному решению.
Расположение служебных файлов менеджера кластера в 1С Предприятии 8.3
Если при установке системы! «1С:Предприятие» был выбран вариант запуска сервера «1С:Предприятия» как сервиса, то первый запуск агента сервера будет выполнен еще в процессе установки системы. При этом сервис будет запущен от имени пользователя, выбранного в диалоге установки системы, но служебные файлы кластера серверов будут расположены в каталоге <каталог установки системы 1С:Предприятие>\srvinfo (в параметрах сервиса будет в явном виде указан ключ запуска -d).
Если при установке системы «1С:Предприятие» был выбран вариант запуска сервера как приложения, то запуск сервера в процессе установки системы не выполняется; агента сервера необходимо запустить самостоятельно, после того как установка системы будет закончена. При этом если ключ запуска -d указан не будет, служебные файлы кластера серверов будут расположены в каталоге по умолчанию: %USERPROFILE%\LocalSettings\ApplicationData\lC\lCv8 (%LOCALAPPDATA%\lC\lCv8 для ОС WindowsVista и старше).
ВНИМАНИЕ! Если однажды на данном центральном сервере уже был создан кластер, то при смене варианта запуска агента сервера (сервис, приложение) или при смене пользователя, от имени которого работает агент сервера, всегда следует заботиться о правильном указании пути к каталогу служебных файлов кластера серверов. Если в процессе запуска агент сервера не обнаружит список кластеров, он создаст новый кластер на данном сервере.
В операционной системе Linux служебные файлы кластера серверов будут расположены в папке /home/usrlcv8/.lcv8/lC/lcv8 (или сокращенный вариант записи - ~/.1cv8/1C/1cv8).
При обмене данными с веб-сайтами зачастую используется формат JSON. К сожалению, в 1С нет стандартных процедур для работы с данным форматом. В процессе реализации одного из проектов мной был разработан ряд процедур и функций облегчающих жизнь программисту 1С при работе с данными в формате JSON.
По сути, при работе с JSON требуется две операции: сформировать строку JSON (например, для передачи параметров на веб-сервер в формате JSON из 1С) и прочитать данные из строки JSON (например, когда мы получаем ответ от веб-сервера в формат JSON). Так как формат JSON в упрощенном виде представляет собой набор параметров в виде <ИмяПараметра>:<ЗначениеПараметра> то для работы с JSON в 1С мной был использован тип "Структура". Т.е. процедура чтения данных из формата JSON преобразует строку JSON в тип 1С "Структура". Так же и строка JSON в 1С формируется из структуры. Т.о. чтобы сформировать строку JSON сначала необходимо заполнить структуру необходимыми значениями, а потом вызвать функцию, преобразующую структуру в JSON. Позднее функционал функции формирования строки JSON был расширен - теперь в JSON может быть преобразован массив и таблица значений. При желании можно доработать функцию так, чтобы она "понимала" и другие типы. Такие как "Cоответствие", "ДеревоЗначений" и др. На практике это редко может пригодиться, поэтому сам я этого делать не стал.
А теперь подробней о том, как работать с функциями преобразования JSON.
Преобразование строки JSON в структуру 1С.
Для преобразования строки JSON в структуру 1С служит функция ЗаполнитьСтруктуруИзJSON().
<ТекстJSON> (обязательный) - строка в формате JSON,
которую необходимо преобразовать в структуру.
Возвращаемое значение.
Тип Структура.
Имя значения задается в структуре как Ключ, а само значение, соответственно, как значение. Поддерживаются также вложенные значение ("{}" в "{}") и массивы. В таких случаях тип значения будет Структура и Массив соответственно. Если у в JSON задан только массив, то сформируется структура с одним элементом с ключом "Значение" и типом "Массив". Ниже приведены поясняющие примеры:
Следует заметить, что все значения заполняются как строковые (тип "Строка"). Последующее преобразование (например, к числу) лежит на самом разработчике.
Формирование строки JSON в 1С.
Для формирования строки в формате JSON в 1С предназначена функция СформироватьСтрокуJSON().
<Объект> (обязательный) - объект, который необходимо
преобразовать в формат JSON. Может иметь тип "Структура",
"Массив" или "ТаблицаЗначений".
Если Объект имеет тип "ТаблицаЗначений", то она рассматривается как массив из структур, соответствующих колонкам ТЗ. Все значения приводятся к строковому типу, дата приводится в формат unixtime, значение типа булево "Истина" преобразуется в строку "true", а "Ложь" - в "false, прочие объекты просто преобразуются как "Строка(Объект)".
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было решено использовать геокодирование сервиса Google и Google Visualization для отображение элементов на карте.
Геокодирование – процесс преобразования адресов·(Украина, Киевская область, Киев, Крещатик 20) в географические координаты (широта 37.423021 и долгота -122.083739), которые можно использовать для размещения маркеров или расположения карты. Подробно про геокодирование можно почитать тут.
Важный момент: если у вас программа работает в локальной сети и в Internet, то вам необходимо регистрировать два ключа. В зависимости от того, с какого места подключается пользователь к базе подставлять тот или иной ключ.
И так, собственно программная реализация.
В конфигурации есть две общих формы:
* Форма подбора координат. Данная форма формирует запрос на геокодирование и обрабатывает результат.
* Форма отображения объектов. Данная форма использует API визуализации Google. В частности данная форма использует визуализацию Map.
Запрос и обработка результата геокодирования.
Формирование запроса происходит с ключом output=csv, для вывода результата запроса в csv файл. После выполнения запроса проверяется код результата запроса и разбор csv файла на широту и долготу.
Формирование карты отображения
При формировании отображения объекта на карте к стандартному коду визуализации добавлен следующий:
Это связано с тем, что платформа не хочет сразу обновлять фрейм поля html документа.
Создаем новую запись, заполняем ее поля. Записываем новый набор записей с замещением всех записей, соответствующих отбору. Параметр Замещение метода Записать() по умолчанию имеет значение Истина.
Для чего нужно замещение?
Дело в том, что в любом регистре запись с конкретным ключом записи всегда уникальна. Для непериодического независимого регистра сведений ключом записи является конкретная комбинация значений измерений.
То есть запись с определенной комбинацией значений измерений может присутствовать только в единственном экземпляре. Попытка записать новую запись с тем же набором значений измерений привела бы к ошибке.
Кроме того, в подобной работе можно удариться в другую крайность.
Если не применить отбор, то при записи система попытается заместить все существующие записи регистра. В результате, добавляя новый набор записей с замещением, мы бы удалили все ранее введенные записи регистра! Как добавить записи в независимый регистр сведений?