Администрирование серверов 1С на Linux посредством внешней обработки "Управление серверами"
Альтернативным средством администрирования серверов 1С на Linux служит внешняя обработка "Управление серверами" (УправлениеСерверами.epf). Данная обработка разработана фирмой 1С и входит в поставку платформы начиная с версии 8.3.15 и выше. Обработка УправлениеCерверами.epf располагается в каталоге EXE/EXTREPS/UNIREPS83/ServersControl/. Ее также можно скачать с официального сопроводительного ресурса фирмы 1С: https://its.1c.ru/db/metod8dev#content:5957:hdoc:_top:ras.
Функционал обработки позволяет управлять кластером серверов 1С из запущенного сеанса 1С:Предприятия. Найти обработку можно в списке стандартных обработок, в меню «Все функции». Обмен информацией осуществляется через сервер администрирования (ras). Для подключения к серверу "1С:Предприятия" необходимо указать адрес и порт сервера администрирования. Обработка позволяет администрировать сервера различных версий из одной информационной базы.
В ее основе лежит объект «Администрирование сервера» и его методы.
Справочная информация из синтаксис-помощника: АдминистрированиеСервера (ServerAdministration)
Методы:
Конструкторы:
Описание:
Описывает соединение с агентом сервера "1С:Предприятия". С помощью данного объекта можно управлять кластерами серверов.
Требуется наличие запущенного сервера администрирования (ras).
Доступность:
Тонкий клиент, сервер, толстый клиент, интеграция.
Пример:
Агент = Новый АдминистрированиеСервера("127.х.х.1", 1545);
Агент.ВыполнитьАутентификацию();
Кластеры = Агент .ПолучитьКластеры();
Для каждого Кластер Из Кластеры Цикл
Кластер.ВыполнитьАутентификацию();
СписокИБ = Кластер.ПолучитьИнформационныеБазы();
Для каждого ИБ Из СписокИБ Цикл
Сообщить(ИБ.Имя + ", " + ИБ.Описание);
КонецЦикла;
КонецЦикла;
Методика переноса остатков с помощью конфигурации «Конвертация 2.1»
Цель статьи: привести практический пример работы с конфигурацией "Конвертация данных 2.1", а именно представить и подробно описать пример по переносу остатков из одной конфигурации в другую.
Задача: создать правила переноса остатков по всем разделам учета из конфигурации УПП в конфигурацию УНФ.
В качестве начальных условий возьмем две конфигурации — источником (откуда выгружаем данные) пусть будет «Управление производственным предприятием» 1.2 (УПП), а приемником (куда загружаем) «Управление нашей фирмой» 3.0 (УНФ). В обе конфигурации внесены изменения: добавлены нетиповые регистры накопления, регистры сведений, справочники и документы и т. д. Поэтому при загрузке остатков на первом шаге переносим данные хранящиеся в стандартных объектах, на втором шаге — данные, хранящиеся в нетиповых объектах.
Перенос остатков в документ «Ввод начальных остатков»
Сначала в исходной конфигурации УПП создаем документ «Ввод начальных остатков», в котором повторяем структуру документа ввода начальных остатков из УНФ, нужна только форма документа, движения в этом документе конечно не нужны (рис.1). Такой вариант удобен тем что в этом документе можно визуально проверить правильность сбора информации по остаткам и сравнить их с типовыми отчетами, так же визуально видны недочеты в учете, например отрицательные остатки.
Рис.1 Структура документа «Ввод начальных остатков».
Заполняем разделы документа, проверяем итоги табличных частей на соответствие типовым отчетам.
Следующим шагом «снимаем образы конфигураций» - выгружаем описание структуры метаданных обеих баз данных, с помощью обработок MD83Exp.epf для УНФ и MD82Exp.epf для УПП. Для этого открываем обработки в режиме 1С предприятие, выбираем путь и название файла со структурой метаданных и нажимаем «Выгрузить» (Рис.2).
Рис.2 Выгрузка описания структуры метаданных из конфигурации УНФ в xml-файл.
Затем загружаем эти образы в конфигурацию «Конвертация данных 2.1» (рис.3).
Рис.3 Загрузка структуры метаданных выгруженных конфигураций.
После того как структуры метаданных загружены, создаем новую конвертацию между УПП и УНФ и переходим непосредственно к созданию правил обмена (рис.4).
Рис.4 Правила переноса остатков из конфигурации УПП в УНФ.
Основным объектом конвертации является документ «Ввод начальных остатков». Так как структура документа в УПП полностью соответствует структуре документа в УНФ, нужно только сопоставить свойства объекта документа между Источником и Приемником. Конечно потребуется конвертация справочников, документов и т.д. Если перед загрузкой остатков уже загружены все справочники, то при конвертации важно не задублировать их элементы в базе приемнике. Для этого в правилах конвертации объекта устанавливаем настройки, как изображено на рисунке 5 на примере справочника Основные средства.
Рис.5 Настройки конвертации справочников.
В правилах конвертации свойств справочников, указываем минимальное количество свойств, оптимально только поля для поиска (рис.6).
Рис.6 Правила конвертации свойств объекта.
При конвертации документов, есть большая вероятность, что потребуется загрузка документов старых периодов, поэтому правила конвертации объекта устанавливаем как изображено на рисунке 7.
Рис.7 Настройки конвертации документов.
В правилах конвертации свойств документов также указываем только свойства для поиска объекта (рис.8).
Рис.8 Настройка правил конвертации свойств объекта.
Сохраняем правила и выгружаем. В конфигурации УПП открываем обработку «Универсальный обмен данными в формате XML», загружаем сохраненные правила, указываем файл выгрузки данных и выгружаем документ «Ввод начальных остатков» (Рис.9).
Рис.9 Выгрузка документа «Ввод начальных остатков» из конфигурации УПП.
В конфигурации УНФ так же с помощью обработки « Универсальный обмен данными в формате XML» загружаем файл с данными. В результате должны получить типовой документа «Ввод начальных остатков» (рис. 10).
Рис. 10 Документ «Ввод начальных остатков» по разделу учета УНФ «Имущество».
Перенос остатков в документ «Корректировка регистров».
Теперь, когда загружены остатки по типовым разделам учета, загружаем остатки по нетиповым регистрам. Для примера возьмем загрузку остатков по регистрам накопления.
Для ввода остатков по этим регистрам потребуется документ «Корректировка регистров». Создаем новое правило конвертации объектов — Источник не указываем, а Приемником будет документ «Корректировка регистров» (рис.11).
Рис.11 Правило конвертации объектов с пустым объектом источником.
В конвертации свойств объекта добавляем новое правило (ПКС) так же с пустым Источником, Приемник — реквизит документа «Дата», устанавливаем галки «Получить из входящих данных» и «Поиск». Аналогичным образом добавляем правила для реквизита документа «Номер» и «Комментарий». Теперь добавлением новое ПКС для движений документа по регистру, например, «Остатки параметризованной номенклатуры» (добавляем как группу). Для того что бы была возможность выбрать движения документа в правилах ПКС, при выгрузке описания структуры метаданных должна быть установлена галка «Выгружать движения документов» и переключатель «Выгружать движения только у документов без проведения». Далее в группе движения документа добавляем ПКС для свойств регистра — Номенклатура, Склад, Количество и Период (рис.12).
Рис.12 Настройка правил ПКС для регистра «Остатки параметризованной номенклатуры».
Следующий шаг — добавляем правило выгрузки данных. В качестве правила конвертации объекта указываем наше созданное правило «ОстаткиПараметризованнойНоменклатуры», способ выборки — произвольный алгоритм (рис.13).
Рис.13 Создание правила выгрузки данных.
Теперь можно приступить к получению данных по остаткам регистра. Для того, чтобы создался необходимый документ, нужно указать источник данных. В нашем случае это будет ТаблицаЗначений. Соответственно, в обработчике события "Перед обработкой" инициализируем нужные данные (рис.14).
Рис.14 Выборка данных по остаткам регистра накопления в событии «Перед обработкой».
Здесь создаем и заполняем по результатам запроса таблицу значений «ОстаткиПарамтрН», которую будем передавать в качестве Исходящих данных.
Пример кода выгрузки:
Запрос = Новый Запрос;
Запрос.Текст = "Выбрать
|ТоварыНаСкладах.Номенклатура КАК Номенклатура,
|ТоварыНаСкладах.КоличествоОстаток КАК Количество,
|ТоварыНаСкладах.Склад
|Из РегистрНакопления.ИТ_ОстаткиПараметризированнойНоменклатуры.Остатки(&ДатаОстатков) КАК ТоварыНаСкладах";
Запрос.УстановитьПараметр("ДатаОстатков", КонецДня(Дата("20231231")));
Выборка = Запрос.Выполнить().Выбрать();
ОстаткиПараметрН = Новый ТаблицаЗначений();
ОстаткиПараметрН.Колонки.Добавить("Номенклатура");
ОстаткиПараметрН.Колонки.Добавить("Склад");
ОстаткиПараметрН.Колонки.Добавить("Количество");
ОстаткиПараметрН.Колонки.Добавить("Период");
Пока Выборка.Следующий() Цикл
НовСтрока = ОстаткиПараметрН.Добавить();
НовСтрока.Номенклатура = Выборка.Номенклатура;
НовСтрока.Склад = Выборка.Склад;
НовСтрока.Количество = Выборка.Количество;
НовСтрока.Период = КонецДня(Дата("20231231"));
КонецЦикла;
ТаблицаИменРегистров = Новый ТаблицаЗначений();
ТаблицаИменРегистров.Колонки.Добавить("Имя");
СтрокаТаблицы = ТаблицаИменРегистров.Добавить();
СтрокаТаблицы.Имя = "ИТ_ОстаткиПараметризованнойНоменклатуры";
ИсходящиеДанные = Новый Структура;
ИсходящиеДанные.Вставить("Номер", "00000002");
ИсходящиеДанные.Вставить("Дата", КонецДня(Дата("20231231")));
ИсходящиеДанные.Вставить("Комментарий", "Перенос остатков парам. номенклатуры на 31.12.2023");
ИсходящиеДанные.Вставить("ТаблицаРегистров", ТаблицаИменРегистров);
ИсходящиеДанные.Вставить("ИТ_ОстаткиПараметризованнойНоменклатуры", ОстаткиПараметрН);
ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ОстаткиПараметризованнойНоменклатуры");
В правилах ПКО в обработчике события «При загрузке» добавляем код (рис.15)
Рис.15 Код обработчика события «При загрузке».
Объект — это наш создаваемый документ «Корректировка регистров». Правила готовы, сохраняем их и пробуем выгрузить/загрузить документ корректировки.
В результате получаем проведенный документ «Корректировка регистров» (рис.16).
Рис.16 Документ «Корректировка регистров».
Выводы: В данной статье показан подход к переносу остатков из конфигурации УПП, которая включает в себя большое количество нетиповых объектов — регистров, справочников и т. д. в новую учетную конфигурацию УНФ, в которую так же добавлены те же нетиповые объекты. Показаны два способа переноса остатков: «документ в документ» и по «свободному алгоритму». Стоит сказать, что перенос типовой информации можно реализовать так же и по «свободному алгоритму», но если конфигурации Источника и Приемника имеют много отличий, то могут возникнуть сложности при переносе с использованием такого варианта. Именно поэтому был выбран первый способ переноса.
Мы предлагаем использовать 1С на базе ОС Linux.
Что это дает?
- Не нужно думать про лицензии Microsoft Windows, платформа Linux бесплатная.
- Вы не будете ограничены на уровне железа как это любит делать Microsoft, в Linux доступно все , что у Вас есть.
- Надежность работ ОС Linux существенно превосходит Microsoft.
- Терминальные решения под Linux бесплатны, в отличии от microsoft, ведь Вам придется задуматься о том, как людям работать с Ваше базой. Например терминальный сервер FreeNX или X2go .
- В качестве сервера базы данных используем PostgreSQL , который является отличной альтернативой Microsoft.
На текущий момент компания 1С полностью поддерживает работу своей программы на ОС Linux. Однако это не освободит Вас от лицензирования самого продукта 1С.
Здесь приведены основные вопросы, касающиеся лицензирования программы 1с .
Администрирование программы 1с
Для администрирования кластера 1с можно использовать штатный функционал, но тут есть нюанс, под ОС Linux нет графической утилиты, он доступен только под ОС Windows, однако наши клиенты могут купить модуль расширения для системы СКАРИС и полноценно управлять кластером 1с из графического модуля СКАРИС, в web интерфейсе.
Управление сессиями пользователей
На текущий момент большим неудобством является эксплуатация нескольких серверов 1C, так как консоль управления способна работать только с одним
сервером, т.е для управления вторым сервером требуется заходить на второй сервер и запускать вторую консоль администрирования кластера 1C,
в СКАРИС управление всеми серверами происходит из одного места и по протоколу https.
Используя модуль "Управление базами 1С" системы СКАРИС, Вы можете спокойно управлять (удалять) и отслеживать сессии пользователей на
разных серверах 1с.
Источники внешних данных
Очень часто возникает необходимость получения в 1с данных из других внешних систем. Решать этот вопрос можно по разному, например, использовать COM соединение или файлы xml, или обращение к внешним источникам данных.
В данном случае поговорим о том, что нам надо получить данные из программы, база данных которой располагается на сервере PostgreSQL.
К большому сожалению 1с не умеет работать напрямую с драйвером PG, поэтому обращение строится через создание ODBC подключения. Т.е. сначала мы подключаем на сервере новый ODBC коннектор, а потом внутри программы 1с обращаемся к данному коннектору.
В случае работы в ОС Linux соединение с базой на PGSQL описанной во внешнем источнике в конфигурации устанавливается с помощью метода УстановитьСоединение() с предварительным указанием параметров с помощью УстановитьПараметрыСоединенияСеанса() которому передаются ПараметрыСоединенияВнешнегоИсточникаДанных.
НашВнешнийИсточник = ВнешниеИсточникиДанных["ИмяНашегоВнешнегоИсточникаДанных"];
если НашВнешнийИсточник.ПолучитьСостояние() = СостояниеВнешнегоИсточникаДанных.Подключен тогда
//подключаться не требуется
иначе
ПараметрыСоединения = новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения = "driver={PSQL};server=*.*.*.*;port=****;database=Ourdatabase;";
ПараметрыСоединения.АутентификацияОС = ложь;
ПараметрыСоединения.ИмяПользователя = "Наш пользователь";
ПараметрыСоединения.Пароль = "пароль нашего пользователя";
ПараметрыСоединения.СУБД = "PostgreSQL";
вис_MOVE.УстановитьПараметрыСоединенияСеанса(ПараметрыСоединения);
вис_MOVE.УстановитьСоединение();
конецесли;
Далее данные отбираются из таблиц внешнего источника с помощью стандартного механизма запросов 1С.
Запрос = новый запрос("ВЫБРАТЬ
| ТаблицаВнешнегоИсточника.НужноеПолеТаблицы КАК НужноеПолеТаблицы
|ИЗ
| ВнешнийИсточникДанных.ИмяНашегоВнешнегоИсточникаДанных.Таблица.ТаблицаВнешнегоИсточника КАК ТаблицаВнешнегоИсточника
|ГДЕ
| ТаблицаВнешнегоИсточника.Дата >= &ДатаНачала и ТаблицаВнешнегоИсточника.Дата <= &ДатаОкончания");
Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", ДатаОкончания);
Для ускорения выполнения запросов их необходимо максимально упрощать, после чего полученные данные можно обрабатывать используя, например, таблицы значений и оперировать ими также в запросах. При слишком большом объеме запрашиваемых данных 1С закрывается с сообщением об ошибке и предложением перезагрузки программы. Для исключения подобных ситуаций например, при отборе данных из таблиц, где информация хранится в разрезе даты, можно указывать меньший период в запросе, и повторять запрос несколько раз, т.о. разбив общий период, в котором требуется получить информацию, на части.
Периоды = РаздробитьПериод(ДатаНачала,ДатаОкончания);
для каждого Период из Периоды цикл
FromDate = Период.ДатаНачала;
ToDate = Период.ДатаОкончания;
ПолученныеДанные = ВыполнитьЗапросКВнешнемуИсточнику(ДатаНачала,ДатаОкончания);
Используя данный механизм реализована загрузка документов и справочников стороних систем СУЗ и Движение, в виде двух внешних источников, подключение к которым происходит параллельно. Код вынесен в расширение, что позволяет распространять по базам и быстро обновлять изменения алгоритма. Исключение составляет только редактирование внешних источников, которое происходит непосредственно в конфигурации в каждой базе отдельно.
Методика переноса остатков с помощью конфигурации «Конвертация 2.1»
Администрирование серверов 1С на Linux посредством внешней обработки "Управление серверами"