Создание стартовой базы
Часто требуется создать «Новую базу» почти пустую, но совпадающую с «Исходной базой» по необходимым обязательным настройкам: константам, регистрам сведений, справочникам, видам субконто и планами счетов и т.п., при этом:
-
Все объекты «Новой базы» должны совпадать по уникальным идентификаторам ( Guid ) с «Исходной базой»
-
Все настройки работы в «Новой базе», включая настройки учетной политики организации, полностью повторяют настройки «Исходной базы».
-
Заполнение данными должно быть достаточным для запуска «Новой базы» в режиме «1С:Предприятие» без синтаксических ошибок и без необходимости выполнения процедур обновления.
В чем смысл?
У меня был смысл создать базу витрину для налогового мониторинга, чтобы далее в «Новую базу» из «Исходной базы» подкачали остатки и другие урезанные данные для налоговиков.
Сама ситуация похожа на создание начального образа в случае РИБ, но эта первая идея придумать РИБ на ровном месте и создать из него узел, да чтобы ещё все правильно настроилось, я отбросил из-за сложности исполнения.
Вторая идея – взять «Исходную базу» и почистить из неё данные…. Ну при размере в 100 Гб это прям нет-нет. У меня нет столько недель ждать, пока все почиститься.
Третья идея – перенести из «Исходной базы» нужные данные с помощью обще известной обработки ВыгрузкаЗагрузкаДанныхXML.epf натолкнулась на 2 неприятных препятствия:
-
Конфа «Исходной базы» была незнакома, была значительно переписана и содержала несколько встроенных нетиповых подсистем – вся эта каша в итоге приводила к тому, что простое открытие базы из пустой конфы не стартовало, вызывая кучу синтаксических ошибок, с которыми надо было бороться заплатками, игнорируя риск потерять что-нибудь важное из стартовых фундаментальных данных «Новой базы». С горем пополам эта махина запускалась, но далее вызывала нелепые ошибки в простых случая, когда требовалось что-то открыть или создать – просто кошки скреблись в душе от этого.
-
Второй момент, все знают, что при разворачивании пустой базы и конфигурации происходит начальное заполнение и создание новых базовых объектов, т.к. : валюты, банки, классификаторы ед. измерения, другие классификаторы, предопределенные значения, типа плана счетов и субконто и много других служебных данных. Это начальное заполнение вело к нарушению условия задачи о совпадении всех объектов «Новой базы» по Уникальному идентификатору (Guid) с «Исходной базой». И порождало дубли, с которыми пришлось бы в дальнейшем работать, что тоже не быстро.
Потребовалось осознать очевидное, что «Новую базу» нужно заполнить ещё до первого открытия 1С:Предприятия.
Обработка ВыгрузкаЗагрузкаДанныхXML.epf тут не очень заходила, т.к. обменивалась через файл XML и требовала открытия «Новой базы» для загрузки этого файла, от открытия которой я как раз хотел уйти из-за вышеописанных проблем.
Мне требовался режим COM для ВыгрузкаЗагрузкаДанныхXML.epf и фильтры выгрузки.
Поиск по Инфостарт не предлагал готового решения для скачивания. Но в итоге удалось собрать решение:
Нашёл уже не помню, в какой публикации обработку ВыгрузкаЗагрузкаДанныхXML82_COM.epf для платформы 8.2 для обычных форм, которая имела нужные возможности:
-
фильтры выгрузки (это стандартная опция этой версии обработки для обычных форм) и
-
имела возможность передачи данных межу базами по COM при условии встройки самой обработки в Базу-приемник, что было необходимо на время соединения для вызова специальных методов на стороне Базы-приемника по команде Базы-источника.
Тут было пару проблем:
-
что «Исходная база» работала в Управляемом интерфейсе, а обработка была на обычных формах
-
обработка предназначалась для платформ 8.1 и 8.2, но не работала для 8.3
-
встраивать обработку в конфигурацию «Новой базы» через хранилище было возможно, но немного затруднительно согласовывать.
Эти моменты решились на лайте:
-
Как отрыть обработку на Обычных формах в базе с Управляемым интерфейсом?
В «Исходной базе» создаем пользователя «АдминистраторОП» (сокращение от Администратор обычное приложение) с ролями: Полные права и Интерактивное открытие внешних обработок. У пользователя обязательно указываем Режим запуска = «Обычное приложение». Заходим под ним в «Исходную базу» (окно ввода пароля открывается 2 раза, в случае старта базы с Управляемым интерфейсом под Обычным приложением)
Рис.1 Создание пользователя АдминистраторОП в «Исходная база»
Рис.2 Открытие «Исходная база» в режиме «Обычное приложение» видно характерное старое меню
-
Как в обработку добавить режим работы для платформы 8.3?
Открываем обработку в конфигураторе, в форме обработки правой кнопкой мыши на центральной области меняем закладку на «Выгрузка в ИБ приемник». В поле Платформа в список выбора добавляем элемент для платформа «8.3».
Рис. 3 Смена закладки
Рис. 4 Добавление платформы 8.3 в список выбора
-
Как добавить обработку в «Новую базу» не встраивая в саму конфигурацию?
Конечно через расширение. Открываем «Новую базу» в конфигураторе, добавляем расширение и встраиваем в него обработку. Обновляем «Новую базу» из конфигуратора, конечно же, не открывая саму базу в режиме 1С:Предприятие, т.е. через команду меню Конфигурация – Обновить конфигурацию базы данных.
Рис. 5 Расширение с обработкой в «новой базе»
Рис. 6 Обновление расширения в «Новой базе»
Почти все готово.
Для вызова COM подключения в конфигураторе «Новой базы» создаем нового пользователя для простоты я его назвал также как пользователя в «Исходной базе», а именно «АдминистраторОП» с набором ролей {Полные права, Администратор системы, Интерактивное открытие внешних обработок} без флага «Защита от опасных действий».
Рис. 7 Создание пользователя в конфигураторе «Новой базы»
Сам перенос данных по шагам:
-
В «Исходной базе» запускаем сеанс под пользователем «АдминистраторОП»
-
Открываем обработку «Выгрузка и загрузка данных COM-XML» через меню – Файл – Открыть.
-
Указываем настройками обмена COM с «Новой базой» {указываем адрес базы на сервере 1С, подключение под пользователем «АдминистраторОП» и паролем}.
Рис. 8 Обработка обмена открытая в «Исходной базе»
-
Отключаем передачу всех объектов по ссылке, сняв флажки в колонке «При необходимости»
-
Для обмена включаем все Константы, регистры сведений Учетной политики, регистр сведений Версии подсистем, дополнительные регистры настроек характеризующие вашу базу. Справочники валют, Классификаторов единиц измерения, и других классификаторов поставить тянуть по ссылке, установив флажки в колонке «При необходимости»
- перегружаем эти данные в «Новую базу» по кнопке [Выгрузить данные].
После переноса, можно первый раз открыть «Новую базу» в режиме 1С:Предприятие.
Мне пришлось сделать пару итераций, чтобы выяснить полный список объектов, которые нужно сразу передать (типа рег.сведений Версии подсистем, или спраочник "Ключевые операции"). Вычислял я эти объекты открывая Журнал регистрации в «Новой базе» и смотря те объекты, которые создавались при открытии сеанса. Перед повтором итерации я восстанавливал «Новую базу» из её заранее сохраненного архива до переноса, включал в перенос вычисленный объект и переносил по новой. Пока при открытии «Новой базы» перестали создавать объекты. Все это нужно чтобы соблюсти условия по совпадению Уникальных идентификаторов по Guid.
Всё было бы хорошо, если бы я частями не забыл про гадские предопределенные значения… Планы счетов субконто и некоторые другие предопределенные значения создались все таки с Guid «Новой базы», а не «Исходной базы». Их пришлось починить постобработками.
Как починить предопределенные значения в «Новой базе», исправив их уникальные идентификаторы как у «Исходной базы»?
-
Надо убрать признак предопределение у предопределенных элементов в «Новой базе» и пометить их на удаление и удалить.
-
Перегрузить по COM из «Исходной базы» в «Новую базу» эти объекты той же обработкой обмена. Тем самым в «Новой базе» появятся предопределенные элементы с Guid как в «Исходной базе»
По планам счетов есть момент что надо виды субконто сначала почистить, пример кода в листинге ниже. По всем остальным типам код идентичный (убираем строку Об.ВидыСубконто.Очистить(); и в самом запросе тип объекта меняем на нужный справочник или ПВХ, для примера по Видам субконто еще ниже пример)
&НаСервере
Процедура Команда1НаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| Хозрасчетный.Ссылка КАК Ссылка
|ИЗ
| ПланСчетов.Хозрасчетный КАК Хозрасчетный";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Об = Выборка.Ссылка.ПолучитьОбъект();
Об.ИмяПредопределенныхДанных = Неопределено;
Об.ВидыСубконто.Очистить();
Об.ПометкаУдаления = Истина;
Об.ОбменДанными.Загрузка = Истина;
Об.Записать();
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура Команда1НаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ВидыСубконтоХозрасчетные.Ссылка КАК Ссылка
|ИЗ
| ПланВидовХарактеристик.ВидыСубконтоХозрасчетные КАК ВидыСубконтоХозрасчетные";
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Об = Выборка.Ссылка.ПолучитьОбъект();
Об.ИмяПредопределенныхДанных = Неопределено;
Об.ПометкаУдаления = Истина;
Об.ОбменДанными.Загрузка = Истина;
Об.Записать();
КонецЦикла;
КонецПроцедуры
Если убрать подготовку кухни, то Стартовая база менее чем в течение 1 часа создается, а из знаний нужно только понимание 1С.
Кажется все…. если, что пишите.
Ссылка на компетенции по 1С:ERP - команда со знаниями, умениями и успешными проектами