При разработке новой конфигурации 1С или доработке типовой конфигурации может возникнуть необходимость первоначального заполнения справочников, констант и т.п.
В качестве примера будет взята конфигурация 1С: Управление отелем, редакция 2.1 созданная на основе 1С: Библиотека стандартных подсистем, редакция 2.2.
Для начала необходимо создать общий модуль «ОбновлениеИнформационнойБазыУО», в котором будет указываться текущая версия нашей подсистемы и процедуры-обработчики обновления данных ИБ. Данный модуль будет выполняться на сервере в клиент-серверном варианте и использоваться во внешнем соединении.
Объявим в общем модуле процедуру «ПриДобавленииПодсистемы», который будет заполнять основные сведения о библиотеке. И вставим текст кода, как указанно ниже.
// Заполняет основные сведения о библиотеке или основной конфигурации.
// Библиотека, имя которой имя совпадает с именем конфигурации в метаданных, определяется как основная конфигурация.
// Параметры:
// Описание – Структура – сведения о библиотеке:
// Имя – Строка – имя библиотеки, например, "СтандартныеПодсистемы".
// Версия – Строка – версия в формате из 4-х цифр, например, "2.1.3.6".
// ТребуемыеПодсистемы – Массив – имена других библиотек (Строка), от которых зависит данная библиотека.
// Обработчики обновления таких библиотек должны быть вызваны ранее
// обработчиков обновления данной библиотеки.
// При циклических зависимостях или, напротив, отсутствии каких-либо зависимостей,
// порядок вызова обработчиков обновления определяется порядком добавления модулей
// в процедуре ПриДобавленииПодсистем общего модуля ПодсистемыКонфигурацииПереопределяемый.
//
Процедура ПриДобавленииПодсистемы(Описание) Экспорт
Если Не СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации() Тогда
Описание.Имя = "УправлениеОтелем";
Иначе
Описание.Имя = "УправлениеОтелемБазовая";
КонецЕсли;
Далее добавим в список процедуры-обработчики обновления данных ИБ. Для этого создадим процедуру «ПриДобавленииОбработчиковОбновления» и вставим в него текст кода указанный ниже.
// Добавляет в список процедуры-обработчики обновления данных ИБ
// для всех поддерживаемых версий библиотеки или конфигурации.
// Вызывается перед началом обновления данных ИБ для построения плана обновления.
// Параметры:
// Обработчики – ТаблицаЗначений – описание полей
// см. в процедуре ОбновлениеИнформационнойБазы.НоваяТаблицаОбработчиковОбновления
// Пример добавления процедуры-обработчика в список:
// Обработчик = Обработчики.Добавить();
// Обработчик.Версия = "1.0.0.0";
// Обработчик.Процедура = "ОбновлениеИБ.ПерейтиНаВерсию_1_0_0_0";
// Обработчик.МонопольныйРежим = Ложь;
// Обработчик.Опциональный = Истина;
//
Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт
// Обновление профилей и групп доступа.
Обработчик = Обработчики.Добавить();
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.Версия = "*";
Обработчик.Процедура = "ОбновлениеИнформационнойБазыУО.ЗаполнитьПрофилиГруппДоступа";
Обработчик = Обработчики.Добавить();
Обработчик.НачальноеЗаполнение = Истина;
Обработчик.Версия = "*";
Обработчик.Процедура = "ОбновлениеИнформационнойБазыУО.ПервыйЗапуск";
В данной процедуре будет описано какие процедуры необходимо выполнять при начальном заполнении или при обновлении определенной версии нашей подсистемы.
И создадим процедуру «ПервыйЗапуск» и "ПервыйЗапуск_ГлавныйУзел", который будет выполнять обработчики заполнения и укажем в нем обработчики, которые будут выполнять начальное заполнение.
// Процедура выполняет обработчики при первом запуске
Процедура ПервыйЗапуск_ГлавныйУзел() Экспорт
// Процедура выполняет обработчики при первом запуске
Процедура ПервыйЗапуск() Экспорт
Если ПланыОбмена.ГлавныйУзел() = Неопределено Тогда
Для того, чтобы срабатывал наш общий модуль при первом запуске или при обновлении необходимо его объявить в общем модуле «ПодсистемыКонфигурацииПереопределяемый»
Процедура ПриДобавленииПодсистем(МодулиПодсистем) Экспорт
МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыУО");
МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыБПО");
МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыЗарплатаКадры");
МодулиПодсистем.Добавить("ОбновлениеИнформационнойБазыЭД");
После обновление информационнной базы справочники будут заполнены и в регистре сведений "Версии подсистем" будет запись о нашей подсистеме
- Контроль вносимых изменений;
- Исключение избыточной нагрузки;
- Обеспечение работоспособности системы
Рассмотрим два пути, если при открытии программы 1С появляется сообщение:
Можно согласиться и продолжить действие (тогда программа запустится, и в ней можно будет работать дальше) или отказаться и решить проблему. Если мы решили пойти вторым путем, нам нужно понять, в чем же состоит причина данного сообщения.
- Первое – при выполнении обновления. Обновление не прошло до конца по каким-либо причинам: вышли из программы, не приняв их, или же просто произошел сбой при выполнении, и процесс не был завершен (если программа наша открывается при этом – это уже хорошо).
- Второй вариант – кто-то случайно (или в процессе разработки) внес правки, и соответственно они также остались незавершенными, не принятыми программой. Проанализировав ситуацию, необходимо сделать вывод, нужно ли просто принять сделанные правки или придется возвращать базу в исходное состояние.
В обоих случаях просто не выполнена реструктуризация, поэтому ее нужно обновить и, если нужно, привести в соответствие с основной конфигурацией.
Рассмотрим, как решить эти вопросы, не забывая, что перед любыми действиями с информационной базой, рекомендуется сделать ее резервную копию.
Для решения проблемы заходим в базу через Конфигуратор.
Когда действительно имело место обновление, не завершившее процесс, или разработчиками все-таки вносились нужные, но не завершившиеся изменения, нам надо дать команду программе – завершить процессы. Обратите внимание на заголовок окна конфигурации. Там стоит восклицательный знак . Это говорит о том, что наша конфигурация изменена и отличается от конфигурации БД. Завершаем нашу операцию через одноименный пункт меню.
Или для выполнения этого же действия можно использовать кнопку на панели инструментов в виде синего цилиндра со стрелочкой.
Обратите внимание на горячие клавиши в подсказке. С клавиатуры это действие может быть выполнено нажатием функциональной клавиши F7.
Программа выполнит обновление, принимаем все изменения и можем заходить в программу. Сообщение больше появляться не будет.
Восстановление исходного состояния информационной базы
Если в конфигурацию были внесены случайные изменения, или программист (разработчик) вносил изменения в конфигурацию, после чего были обнаружены ошибки, исправить которые проблемно, можно восстановить ее, заменив измененные метаданные метаданными из конфигурации базы данных. Для этого в уже используемом нами пункте меню заходим в раздел «Вернуться к конфигурации БД».
Программа предупредит, о потере изменений, сделанных в программе, но мы соглашаемся на продолжение выполнения действия.
После окончания процесса метаданные нашей конфигурации будут соответствовать основной.
Простыми словами о сложном
18 мая 2015 г.
Не найден идентификатор в справочнике "Идентификаторы объектов метаданных"
“<ОбщийМодуль.ОбщегоНазначения.Модуль(2986)>: Ошибка при выполнении функции ОбщегоНазначения.ИдентификаторОбъектаМетаданных().
Для объекта метаданных "Отчет.ОстаткиПоСкладам"
не найден идентификатор
в справочнике "Идентификаторы объектов метаданных".
Для разработчика: возможно требуется обновить вспомогательные данные,
которые влияют на работу программы. Для выполнения обновления можно:
– воспользоваться внешней обработкой
"Инструменты разработчика: Обновление вспомогательных данных",
– либо запустить программу с параметром командной строки 1С:Предприятия 8
"/С ЗапуститьОбновлениеИнформационнойБазы",
– либо увеличить номер версии конфигурации, чтобы при очередном запуске
выполнились процедуры обновления данных информационной базы.
ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(“
Сервис – Параметры, далее как на картинке – указать параметр запуска “ЗапуститьОбновлениеИнформационнойБазы”