В работе с конфигурацией 1С:Документооборот (1С:ДО) пользователи часто сталкиваются с ситуацией, когда перестают приходить уведомления о новых задачах, просроченных процессах или других событиях системы. Причиной часто становится внезапное исчезновение так называемой Системной учетной записи в справочнике УчетныеЗаписиЭлектроннойПочты. Рассмотрим подробнее, почему это происходит и как восстановить функционал рассылок, если объект считается неудаляемым, но в базе отсутствует.
Системная учетная запись в 1С является предопределенным элементом. Это означает, что она создается на уровне метаданных в Конфигураторе. В нормальном состоянии система связывает описание элемента в коде с конкретной записью в таблице базы данных (SQL или файловой). Проблема возникает тогда, когда эта связь разрывается.
Разберем основные причины «исчезновения»:
Обновление предопределенных данных установлено значение «Не обновлять автоматически», то после реструктуризации базы ссылка может стать «битой».ОбменДанными.Загрузка = Истина) или внешних обработок по очистке базы, запись может быть физически удалена из таблицы.Проанализируем ситуацию: если в «чистой» конфигурации запись есть, а в рабочей — нет, значит, нам нужно заставить систему создать этот объект заново и привязать его к метаданным. Выясним, как это сделать максимально быстро.
Это самый простой и часто наиболее эффективный способ, не требующий написания кода. Рассмотрим его по шагам:
Система просканирует метаданные справочника УчетныеЗаписиЭлектроннойПочты, обнаружит, что предопределенному элементу СистемнаяУчетнаяЗаписьЭлектроннойПочты не соответствует ни одна запись в базе, и создаст её автоматически. После этого запись появится в списке, и вы сможете заново ввести в неё настройки SMTP/POP3 сервера.
В современных версиях 1С:Предприятие 8.3, использующих Библиотеку стандартных подсистем (БСП), предусмотрен программный механизм инициализации данных. Попробуем инициировать обновление через командную строку.
Для этого необходимо запустить 1С:Предприятие с дополнительным ключом:
/C ЗапуститьОбновлениеИнформационнойБазы
При таком запуске система выполнит все регламентные процедуры обновления, включая поиск и создание недостающих предопределенных элементов. Разберем альтернативный вариант: если у вас есть доступ к консоли разработчика или внешним обработкам БСП, можно запустить обработку «Обновление предопределенных данных», которая позволит вручную связать элемент справочника с его идентификатором в конфигурации.
Если штатные средства не помогают, мы можем принудительно создать элемент и назначить ему признак предопределенного. Посмотрим на пример кода, который можно выполнить во внешней обработке:
Процедура ВосстановитьСистемнуюУчетку()
// Получаем имя предопределенного узла из метаданных
ИмяПредопределенного = "СистемнаяУчетнаяЗаписьЭлектроннойПочты";
// Проверяем, существует ли уже такая ссылка
СсылкаНаУчетку = Справочники.УчетныеЗаписиЭлектроннойПочты[ИмяПредопределенного];
Если СсылкаНаУчетку.Пустая() Тогда
// Если ссылки нет, создаем новый объект
НовыйОбъект = Справочники.УчетныеЗаписиЭлектроннойПочты.СоздатьЭлемент();
НовыйОбъект.Наименование = "Системная учетная запись (восстановленная)";
// Устанавливаем имя предопределенного для связи с метаданными
НовыйОбъект.ИмяПредопределенныхДанных = ИмяПредопределенного;
НовыйОбъект.Записать();
Сообщить("Системная учетная запись успешно создана!");
Иначе
Сообщить("Ссылка уже существует в базе данных.");
КонецЕсли;
КонецПроцедуры
Обратите внимание на использование свойства ИмяПредопределенныхДанных. В платформе 8.3 именно оно отвечает за связь объекта в базе данных с элементом, описанным в Конфигураторе. После выполнения этого кода в справочнике появится элемент с характерной иконкой «шарика».
Иногда полезно посмотреть, как инициализируются такие данные в других типовых решениях. Проанализируем пример процедуры инициализации, встречающийся в типовых конфигурациях (например, ЗУП или ERP):
Процедура ПриНачальномЗаполненииЭлементов(КодыЯзыков, Элементы, ТабличныеЧасти) Экспорт
Элемент = Элементы.Добавить();
Элемент.ИмяПредопределенныхДанных = "СистемнаяУчетнаяЗаписьЭлектроннойПочты";
Элемент.Наименование = "Системная учетная запись";
Элемент.ИмяПользователя = "1С:Предприятие";
Элемент.ИспользоватьДляПолучения = Ложь;
Элемент.ИспользоватьДляОтправки = Ложь;
Элемент.ВремяОжидания = 30;
Элемент.ПортСервераВходящейПочты = 110;
Элемент.ПортСервераИсходящейПочты = 25;
Элемент.ПротоколВходящейПочты = "POP";
КонецПроцедуры
Этот код показывает, что система при первом запуске программно заполняет поля учетной записи по умолчанию. Если ваша запись пропала, вы можете вручную создать аналогичную структуру. Однако помните, что для работы регламентных заданий 1С:Документооборот важен именно статус предопределенного элемента, так как система обращается к нему не по коду или наименованию, а через конструкцию Справочники.УчетныеЗаписиЭлектроннойПочты.СистемнаяУчетнаяЗаписьЭлектроннойПочты.
После того как вам удастся восстановить запись, выполните следующие действия:
Таким образом, восстановление пропавшей системной записи в 1С:ДО — это задача восстановления связи между метаданными и данными. Рассмотренные методы позволяют решить её как через стандартный интерфейс тестирования, так и с помощью минимального программного вмешательства.