|
БП 3, Внешняя печатная форма не видит новый документ-объект | ☑ | ||
---|---|---|---|---|
0
breakthrough
14.10.14
✎
08:19
|
Всем привет!
Создал новый документ в конфигурации, пытаюсь указать его в качестве назначения дле внешней печатной формы, но в списке этого документа нет. Вопрос: как его туда добавить? |
|||
1
Мимохожий Однако
14.10.14
✎
08:25
|
Обнови справочник ИдентификаторыОбъектовМетаданных
|
|||
2
breakthrough
14.10.14
✎
08:26
|
(1)Обновил не один раз.
|
|||
3
breakthrough
14.10.14
✎
08:27
|
Может где-то в обработке внутри самой конфигурации нужно прописать?
|
|||
4
Мимохожий Однако
14.10.14
✎
08:33
|
(2)Как обновлял?
|
|||
5
breakthrough
14.10.14
✎
08:42
|
(4) Обработкой "ИнструментыРазработчикаОбновлениеВспомогательныхДанных.epf" с ИТС. Обновлялл ВСЕ.
|
|||
6
breakthrough
14.10.14
✎
08:52
|
(4) Точнее не с ИТС, а с БСП.
|
|||
7
Мимохожий Однако
14.10.14
✎
08:56
|
Попробуй..Взял из объекта модуля справочника...
.... // Процедура обновляет данные справочника по метаданным конфигурации. // // Параметры: // ЕстьИзменения - Булево (возвращаемое значение) - в этот параметр возвращается // значение Истина, если производилась запись, иначе не изменяется. // // ЕстьУдаленные - Булево (возвращаемое значение) - в этот параметр возвращается // значение Истина, если хотя бы один элемент справочника был помечен // на удаление, иначе не изменяется. // Процедура ОбновитьДанныеСправочника(ЕстьИзменения = Ложь, ЕстьУдаленные = Ложь) Экспорт УстановитьПривилегированныйРежим(Истина); Если МонопольныйРежим() Тогда МонопольныйРежим = Истина; Иначе МонопольныйРежим = Ложь; УстановитьМонопольныйРежим(Истина); КонецЕсли; СвойстваКоллекцийОбъектовМетаданных = СвойстваКоллекцийОбъектовМетаданных(); СвойстваОбъектовМетаданных = СвойстваОбъектовМетаданных(СвойстваКоллекцийОбъектовМетаданных); СправочникМенеджер = ОбщегоНазначения.МенеджерОбъектаПоПолномуИмени("Справочник.ИдентификаторыОбъектовМетаданных"); // Найден - состояние, когда для объекта метаданных найден идентификатор. СвойстваОбъектовМетаданных.Колонки.Добавить("Найден", Новый ОписаниеТипов("Булево")); // Порядок обновления: // 1. Переименование объектов метаданных (с учетом нижестоящих подсистем). // 2. Обновление предопределенных идентификаторов (коллекций объектов метаданных). // 3. Обновление идентификаторов объектов метаданных, которые имеют ключ объекта метаданных. // 4. Обновление идентификаторов объектов метаданных, которые не имеют ключа объекта метаданных. // 5. В процессе 3 и 4 пометка удаления дублей идентификаторов (по полным именам). // 6. Добавление новых идентификаторов объектов метаданных. // 7. Обновление родителей идентификаторов объектов метаданных и запись обновленных. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ИдентификаторыОбъектовМетаданных"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; ЭлементБлокировки = Блокировка.Добавить("Константа.ПараметрыБазовойФункциональности"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Идентификаторы.Ссылка, | Идентификаторы.Родитель, | Идентификаторы.ПометкаУдаления, | Идентификаторы.Предопределенный КАК Предопределенный, | Идентификаторы.Наименование, | Идентификаторы.ПорядокКоллекции, | Идентификаторы.Имя, | Идентификаторы.Синоним, | Идентификаторы.ПолноеИмя, | Идентификаторы.ПолныйСиноним, | Идентификаторы.БезДанных, | Идентификаторы.ЗначениеПустойСсылки, | Идентификаторы.КлючОбъектаМетаданных КАК ХранилищеКлюча |ИЗ | Справочник.ИдентификаторыОбъектовМетаданных КАК Идентификаторы"; Выгрузка = Запрос.Выполнить().Выгрузить(); Выгрузка.Колонки.Добавить("КлючОбъектаМетаданных"); Выгрузка.Колонки.Добавить("БезКлючаОбъектаМетаданных", Новый ОписаниеТипов("Булево")); Выгрузка.Колонки.Добавить("ЭтоНовый", Новый ОписаниеТипов("Булево")); Выгрузка.Колонки.Добавить("Обновлен", Новый ОписаниеТипов("Булево")); Выгрузка.Колонки.Добавить("ОбъектМетаданных"); // Упорядочение иденитификаторов перед обработкой. Для каждого Строка Из Выгрузка Цикл Строка.КлючОбъектаМетаданных = Строка.ХранилищеКлюча.Получить(); Строка.БезКлючаОбъектаМетаданных = Строка.КлючОбъектаМетаданных = Неопределено ИЛИ Строка.КлючОбъектаМетаданных = Тип("Неопределено"); КонецЦикла; Выгрузка.Сортировать("Предопределенный УБЫВ, |ПометкаУдаления ВОЗР, |БезКлючаОбъектаМетаданных ВОЗР"); Выгрузка.Индексы.Добавить("ПолноеИмя"); // Переименование полных имен перед обработкой. ТаблицаПереименования = ТаблицаПереименованияДляТекущейВерсии(СвойстваКоллекцийОбъектовМетаданных); Для каждого ОписаниеПереименования Из ТаблицаПереименования Цикл ДлинаСтарогоПолногоИмени = СтрДлина(ОписаниеПереименования.СтароеПолноеИмя); ЭтоПодсистема = ВРег(Лев(ОписаниеПереименования.СтароеПолноеИмя, 11)) = ВРег("Подсистема."); Для каждого Строка Из Выгрузка Цикл Если Строка.Предопределенный Тогда Продолжить; КонецЕсли; Если ЭтоПодсистема Тогда Если ВРег(Лев(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени)) = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя + Сред(Строка.ПолноеИмя, ДлинаСтарогоПолногоИмени + 1); КонецЕсли; Иначе Если ВРег(Строка.ПолноеИмя) = ВРег(ОписаниеПереименования.СтароеПолноеИмя) Тогда Строка.ПолноеИмя = ОписаниеПереименования.НовоеПолноеИмя; КонецЕсли; КонецЕсли; КонецЦикла; КонецЦикла; // Обработка идентификаторов объектов метаданных. Для каждого Свойства Из Выгрузка Цикл // Проверка и обновление свойств идентификаторов коллекций объектов метаданных. СвойстваКоллекции = СвойстваКоллекцийОбъектовМетаданных.Найти( Свойства.Ссылка, "ИдентификаторКоллекции"); Если СвойстваКоллекции <> Неопределено Тогда ПроверитьОбновитьСвойстваКоллекции(Свойства, СвойстваКоллекции); Продолжить; КонецЕсли; Если Свойства.Предопределенный Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В справочнике ""Идентификаторы объектов метаданных"" |для предопределенного элемента |с именем ""%1"" |и представлением ""%2"" |не найдено типа объектов метаданных. | |Следует удалить предопределенный элемент.'"), ПолучитьИмяПредопределенного(Свойства.Ссылка), Строка(Свойства.Ссылка)); КонецЕсли; КлючОбъектаМетаданных = Свойства.КлючОбъектаМетаданных; ОбъектМетаданных = ОбъектМетаданныхПоКлючу(КлючОбъектаМетаданных); Если ОбъектМетаданных = Неопределено Тогда // Если объект метаданных без ключа, то его можно найти только по полному имени. ОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя); Иначе // Если объект метаданных удалялся с целью реструктуризации, тогда // старый идентификатор нужно использовать для нового объекта метаданных, // а для старых объектов метаданных создать новые идентификаторы. Если ВРег(Лев(ОбъектМетаданных.Имя, СтрДлина("Удалить"))) = ВРег("Удалить") И ВРег(Лев(Свойства.Имя, СтрДлина("Удалить"))) <> ВРег("Удалить") Тогда НовыйОбъектМетаданных = Метаданные.НайтиПоПолномуИмени(Свойства.ПолноеИмя); Если НовыйОбъектМетаданных <> Неопределено Тогда ОбъектМетаданных = НовыйОбъектМетаданных; КлючОбъектаМетаданных = Неопределено; // Чтобы выполнить обновление идентификатора. КонецЕсли; КонецЕсли; КонецЕсли; // Если объект метаданных найден по ключу или полному имени, // тогда нужно подготовить строку свойств объекта метаданных. Если ОбъектМетаданных <> Неопределено Тогда Свойства.ОбъектМетаданных = ОбъектМетаданных; СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(ОбъектМетаданных.ПолноеИмя(), "ПолноеИмя"); КонецЕсли; Если ОбъектМетаданных = Неопределено ИЛИ СвойстваОбъекта.Найден Тогда // Если объект метаданных не найден или найден повторно // тогда идентификатор требуется пометить на удаление. Если НЕ Свойства.ПометкаУдаления ИЛИ ЗначениеЗаполнено(Свойства.Родитель) ИЛИ Лев(Свойства.Наименование, 1) <> "?" ИЛИ Лев(Свойства.Имя, 1) <> "?" ИЛИ Лев(Свойства.Синоним, 1) <> "?" ИЛИ Лев(Свойства.ПолноеИмя, 1) <> "?" ИЛИ Лев(Свойства.ПолныйСиноним, 1) <> "?" ИЛИ Свойства.ЗначениеПустойСсылки <> Неопределено ИЛИ Свойства.КлючОбъектаМетаданных <> Неопределено Тогда // Установка новых свойств идентификатора объекта метаданных. Свойства.ПометкаУдаления = Истина; Свойства.Родитель = ПустаяСсылка(); Свойства.Наименование = ВставитьЗнакВопроса(Свойства.Наименование); Свойства.Имя = ВставитьЗнакВопроса(Свойства.Имя); Свойства.Синоним = ВставитьЗнакВопроса(Свойства.Синоним); Свойства.ПолноеИмя = ВставитьЗнакВопроса(Свойства.ПолноеИмя); Свойства.ПолныйСиноним = ВставитьЗнакВопроса(Свойства.ПолныйСиноним); Свойства.ЗначениеПустойСсылки = Неопределено; Свойства.КлючОбъектаМетаданных = Неопределено; Свойства.Обновлен = Истина; ЕстьУдаленные = Истина; КонецЕсли; Иначе // Обновление свойств существующих объектов метаданных, если изменились. СвойстваОбъекта.Найден = Истина; Если Свойства.Наименование <> СвойстваОбъекта.Наименование ИЛИ Свойства.ПорядокКоллекции <> СвойстваОбъекта.ПорядокКоллекции ИЛИ Свойства.Имя <> СвойстваОбъекта.Имя ИЛИ Свойства.Синоним <> СвойстваОбъекта.Синоним ИЛИ Свойства.ПолноеИмя <> СвойстваОбъекта.ПолноеИмя ИЛИ Свойства.ПолныйСиноним <> СвойстваОбъекта.ПолныйСиноним ИЛИ Свойства.БезДанных <> СвойстваОбъекта.БезДанных ИЛИ Свойства.ЗначениеПустойСсылки <> СвойстваОбъекта.ЗначениеПустойСсылки ИЛИ Свойства.ПометкаУдаления ИЛИ КлючОбъектаМетаданных = Неопределено ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда // Установка новых свойств идентификатора объекта метаданных. ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); Если КлючОбъектаМетаданных = Неопределено ИЛИ СвойстваОбъекта.БезКлючаОбъектаМетаданных И КлючОбъектаМетаданных <> Тип("Неопределено") Тогда Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(СвойстваОбъекта.ПолноеИмя); КонецЕсли; Свойства.ПометкаУдаления = Ложь; Свойства.Обновлен = Истина; КонецЕсли; КонецЕсли; КонецЦикла; // Добавление идентификаторов новых объектов метаданных. Для каждого СвойстваОбъекта Из СвойстваОбъектовМетаданных.НайтиСтроки(Новый Структура("Найден", Ложь)) Цикл Свойства = Выгрузка.Добавить(); ЗаполнитьЗначенияСвойств(Свойства, СвойстваОбъекта); Свойства.ЭтоНовый = Истина; Свойства.Ссылка = ПолучитьСсылку(); Свойства.Предопределенный = Ложь; Свойства.ПометкаУдаления = Ложь; Свойства.ОбъектМетаданных = СвойстваОбъекта.ОбъектМетаданных; Свойства.КлючОбъектаМетаданных = КлючОбъектаМетаданных(Свойства.ПолноеИмя); КонецЦикла; // Обновление родителей идентификаторов объектов метаданных. Для каждого Свойства Из Выгрузка Цикл Если НЕ Свойства.Предопределенный Тогда СвойстваОбъекта = СвойстваОбъектовМетаданных.Найти(Свойства.ПолноеИмя, "ПолноеИмя"); НовыйРодитель = ПустаяСсылка(); Если СвойстваОбъекта <> Неопределено Тогда Если НЕ ЗначениеЗаполнено(СвойстваОбъекта.ПолноеИмяРодителя) Тогда // Коллекция объектов метаданных. НовыйРодитель = СвойстваОбъекта.Родитель; Иначе // Не коллекция объектов метаданных, например, подсистема. ОписаниеРодителя = Выгрузка.Найти(СвойстваОбъекта.ПолноеИмяРодителя, "ПолноеИмя"); Если ОписаниеРодителя <> Неопределено Тогда НовыйРодитель = ОписаниеРодителя.Ссылка; КонецЕсли; КонецЕсли; КонецЕсли; Если Свойства.Родитель <> НовыйРодитель Тогда Свойства.Родитель = НовыйРодитель; Свойства.Обновлен = Истина; КонецЕсли; КонецЕсли; Если Свойства.ЭтоНовый Тогда ТаблицаОбъект = СоздатьЭлемент(); ТаблицаОбъект.УстановитьСсылкуНового(Свойства.Ссылка); ИначеЕсли Свойства.Обновлен Тогда ТаблицаОбъект = Свойства.Ссылка.ПолучитьОбъект(); Иначе Продолжить; КонецЕсли; ЗаполнитьЗначенияСвойств(ТаблицаОбъект, Свойства); ТаблицаОбъект.КлючОбъектаМетаданных = Новый ХранилищеЗначения(Свойства.КлючОбъектаМетаданных); ТаблицаОбъект.ДополнительныеСвойства.Вставить("ВыполняетсяАвтоматическоеОбновлениеДанныхСправочника"); ТаблицаОбъект.Записать(); ЕстьИзменения = Истина; КонецЦикла; ОбновитьКэшИдентификаторов(Выгрузка, ЕстьИзменения); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; Если НЕ МонопольныйРежим Тогда УстановитьМонопольныйРежим(Ложь); КонецЕсли; КонецПроцедуры |
|||
8
Мимохожий Однако
14.10.14
✎
09:01
|
А БПЗ0 есть в модуле менеджера справочника аналогичная процедура. ее можно вызвать
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |