Имя: Пароль:
1C
1С v8
БП 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 есть в модуле менеджера справочника аналогичная процедура. ее можно вызвать