Имя: Пароль:
1C
1С v8
Исключить группы после выполнения запроса метаданных
0 _leon4uk_
 
22.12.15
13:31
Задача: необходимо получить ПОСЛЕДНИЙ ЭЛЕМЕНТ по коду справочника. Если нет кода - любой ЭЛЕМЕНТ.

Не получается сделать уникальность, т.к. существуют справочники, у которых нет кода.

Пока делаю так:
Процедура ПолученияПоследнегоПоКодуЭлемента()
    
    СписокСправочников.Очистить();    
    
    Для Каждого Спр из Метаданные.Справочники Цикл
        
        Запрос = Новый Запрос;
        Запрос.Текст =
        "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
        | Справочник.Ссылка Как Ссылка
        |ИЗ
        | Справочник."+ Спр.Имя+ " КАК Справочник
        |УПОРЯДОЧИТЬ ПО
        |Ссылка УБЫВ";
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Если ВыборкаДетальныеЗаписи.Количество()=1 Тогда //если справочник совсем пуст
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                Попытка
                    ОткрытиеЗаписьЗакрытиеФормыСправочника(ВыборкаДетальныеЗаписи.Ссылка, спр); //здесь открывается форма, перезаписывается элемент, закрывается форма
                    ТЗ=СписокСправочников.Добавить();
                    ТЗ.КакВКонфигураторе = Спр.Имя;
                    ТЗ.НаименованиеСправочника = Спр.Синоним;
                    Тз.Код = ВыборкаДетальныеЗаписи.Ссылка.Код;
                    Тз.Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
                    Тз.Перезаписан=Истина;
                Исключение
                    ТЗ=СписокСправочников.Добавить();
                    ТЗ.КакВКонфигураторе = Спр.Имя;
                    ТЗ.НаименованиеСправочника = Спр.Синоним;
                    Тз.Код = ВыборкаДетальныеЗаписи.Ссылка.Код;
                    Тз.Ссылка = ВыборкаДетальныеЗаписи.Ссылка;
                    Тз.Перезаписан=Ложь;
                    Тз.Ошибка = ОписаниеОшибки();
                КонецПопытки;
                
            КонецЦикла;
        Иначе
            ТЗ=СписокСправочников.Добавить();
            ТЗ.КакВКонфигураторе = Спр.Имя;
            ТЗ.НаименованиеСправочника = Спр.Синоним;
            Тз.Перезаписан=Ложь;
            Тз.Ошибка = "Справочник не содержит элементов.";
        КонецЕсли;
        
    КонецЦикла;
    
    СписокСправочников.Сортировать("НаименованиеСправочника",+);
    
КонецПроцедуры
1 Fannasankh
 
22.12.15
13:36
Проверяй до запроса через попытку есть ли реквизит код, а в зависимости от этого получай 1 элемент с последний кодом или любой
2 _leon4uk_
 
22.12.15
13:44
(1) код может быть и у группы.
мне нужно исключить группы.
3 butterbean
 
22.12.15
13:48
(2) НЕ ЭтоГруппа
4 _leon4uk_
 
22.12.15
13:51
(3) запрос не выполнится, если в каком-либо справочнике нет группы.
5 butterbean
 
22.12.15
13:52
(4) ну проверяй есть ли иерархия у справочника, какие проблемы?