8.х Подсчет кол-ва элементов в справочниках

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ted, 2 авг 2009.

  1. TopicStarter Overlay
    ted
    Offline

    ted

    Регистрация:
    19 май 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Задача - подсчитать для всех справочников в конфигурации количество записей. Подумал и реализовал так:
    Код:
    	Для Каждого Справочник Из Метаданные.Справочники Цикл
    ИмяСправочника = Справочник.Имя;
    ЗапросКоличества = Новый Запрос;
    ЗапросКоличества.Текст = "ВЫБРАТЬ
    | Количество(Справочник.Код) КАК Всего
    | ИЗ
    | Справочник." + ИмяСправочника + " КАК Справочник";
    Результат = ЗапросКоличества.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
    КоличествоЗаписей = Результат.Всего;
    КонецЦикла;
    Сообщить("Число записей в справочнике " + ИмяСправочника + ": " + КоличествоЗаписей + " шт.");
    КонецЦикла;
    
    Но я уверен, что можно реализовать красивее. Например без запроса к БД. Справку полистал, но идей не прибавилось. Не поможете?
  2. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Нормальная реализация. Единственное, что я бы поправил - не у всех справочников есть код. Если такой встретится, будет ошибка. Так что лучше Справочник.Код поменять на Справочник.Ссылка.
    Ну и с группами определиться нужно, считать их вместе с элементами или нет.
  3. TopicStarter Overlay
    ted
    Offline

    ted

    Регистрация:
    19 май 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    ASh, спасибо за советы, изменил. Теперь выглядит так:
    Код:
    	Для Каждого Справочник Из Метаданные.Справочники Цикл
    ИмяСправочника = Справочник.Имя;
    
    ТекстЗапроса = "ВЫБРАТЬ
    | Количество(Справочник.Ссылка) КАК Всего
    | ИЗ
    | Справочник." + ИмяСправочника + " КАК Справочник";
    Если (Справочник.Иерархический) Тогда
    ТекстЗапроса = ТекстЗапроса + " 
    | ГДЕ Справочник.ЭтоГруппа = ЛОЖЬ";
    КонецЕсли;
    
    ЗапросКоличества = Новый Запрос(ТекстЗапроса);
    Результат = ЗапросКоличества.Выполнить().Выбрать();
    Результат.Следующий();
    КоличествоЗаписей = Результат.Всего;
    
    Сообщить("Число записей в справочнике " + ИмяСправочника + ": " + КоличествоЗаписей + " шт.");
    КонецЦикла;
    
    Только остался вопрос - реквизит "Код" ведь обязательно должен быть у всех справочников, или нет?
  4. ASh
    Offline

    ASh Опытный в 1С

    Регистрация:
    10 сен 2008
    Сообщения:
    568
    Симпатии:
    0
    Баллы:
    26
    Нет, код поле необязательное. Если установить длину кода равной 0, то такого поля не будет.
  5. DmitryS
    Offline

    DmitryS Опытный в 1С

    Регистрация:
    20 июл 2007
    Сообщения:
    119
    Симпатии:
    0
    Баллы:
    26
    Он есть, но его длина может равнятся 0-лю.
  6. TopicStarter Overlay
    ted
    Offline

    ted

    Регистрация:
    19 май 2009
    Сообщения:
    3
    Симпатии:
    0
    Баллы:
    1
    Ясно, спасибо!

Поделиться этой страницей