Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Обработка "Количество элементов в каждом справочнике 1С"

Маргарита Просвирнова Знаток (255), закрыт 2 месяца назад
Есть простая задача: получить название справочника и количество элементов к нем.
Список справочников получила. Могу получить кол-во элементов в конкретном справочнике. Но не могу связать.
Помогите новичку пожалуйста


&НаСервере
Процедура ЗаполнитьНаСервере()

//Получаем список справочников
НазвСпр = Метаданные.Справочники;
СтрукНазвСпр = Новый Структура;

Для Каждого Спр Из НазвСпр Цикл
СтрТаб = Объект.Таб.Добавить();
СтрТаб.Справочник = Спр;

//Получаем кол-во элементов
НазваниеСправочника = Спр.Выбрать(); //ОШИБКА "Метод объекта не обнаружен (Выбрать)"
КоличиствоЭлементов = 0;

Пока НазваниеСправочника.Следующий() Цикл
КоличиствоЭлементов = КоличиствоЭлементов + 1;
КонецЦикла;

СтрТаб.Элемент = КоличиствоЭлементов;
КонецЦикла;

КонецПроцедуры

Лучший ответ
Позывной «Дунай» Просветленный (23891) 2 месяца назад
А зачем собственно усложнять всё?)

&НаСервере
Процедура ЗаполнитьНаСервере()

Для Каждого Спр Из Метаданные.Справочники Цикл
СтрТаб = Объект.Таб.Добавить();
СтрТаб.Справочник = Спр.Имя;

//Получаем кол-во элементов
Выборка = Справочники[Спр.Имя].Выбрать();
СтрТаб.Элемент = Выборка.Количество();
КонецЦикла;

КонецПроцедуры

p.s я не чат гпт, я 1Сник
Маргарита ПросвирноваЗнаток (255) 2 месяца назад
Спасибо. Я обязательно сохраню себе Ваш вариант
Позывной «Дунай» Просветленный (23891) Маргарита Просвирнова, ок, нез
Остальные ответы
Рустам Абдрашитов Мудрец (15311) 2 месяца назад
Для подсчета количества элементов в справочнике нужно использовать менеджер справочника. Вот исправленный код:

&НаСервере
Процедура ЗаполнитьНаСервере()

//Получаем список справочников
НазвСпр = Метаданные.Справочники;

Для Каждого Спр Из НазвСпр Цикл
СтрТаб = Объект.Таб.Добавить();
СтрТаб.Справочник = Спр.Имя;

//Получаем кол-во элементов
МенеджерСправочника = Справочники[Спр.Имя];
Выборка = МенеджерСправочника.Выбрать();
КоличествоЭлементов = 0;

Пока Выборка.Следующий() Цикл
КоличествоЭлементов = КоличествоЭлементов + 1;
КонецЦикла;

СтрТаб.Элемент = КоличествоЭлементов;
КонецЦикла;

КонецПроцедуры

Также можно использовать более быстрый способ подсчета через запрос:

&НаСервере
Процедура ЗаполнитьНаСервере()

//Получаем список справочников
НазвСпр = Метаданные.Справочники;

Для Каждого Спр Из НазвСпр Цикл
СтрТаб = Объект.Таб.Добавить();
СтрТаб.Справочник = Спр.Имя;

//Получаем кол-во элементов через запрос
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ КОЛИЧЕСТВО(*) КАК Количество ИЗ Справочник." + Спр.Имя;
СтрТаб.Элемент = Запрос.Выполнить().Выгрузить()[0].Количество;
КонецЦикла;

КонецПроцедуры

Второй вариант будет работать значительно быстрее, особенно на больших справочниках, так как использует SQL-запрос вместо перебора элементов в цикле.
Маргарита ПросвирноваЗнаток (255) 2 месяца назад
Боже, работает!!!!
Спасибо огромное. Чтобы мне Вашего уровня достичь
1 литр энеоавлдввлталчлвлы Гуру (4716) Маргарита Просвирнова, чат гпт
1 литр энеоавлдввлталчлвлы Гуру (4716) 2 месяца назад
Ваша задача заключается в том, чтобы получить названия справочников и количество элементов в каждом из них. Ошибка, с которой вы столкнулись, связана с тем, что метод `Выбрать()` не может быть вызван на объекте справочника, который вы получаете из метаданных. Вместо этого вам нужно использовать метод для создания выборки элементов справочника.
Вот исправленный код, который должен решить вашу задачу:


 &НаСервере  
Процедура ЗаполнитьНаСервере()

// Получаем список справочников
НазвСпр = Метаданные.Справочники;
СтрукНазвСпр = Новый Структура;

Для Каждого Спр Из НазвСпр Цикл
СтрТаб = Объект.Таб.Добавить();
СтрТаб.Справочник = Спр;

// Получаем количество элементов
КоличиствоЭлементов = 0;

// Создаем выборку для справочника
Выборка = Спр.Выбрать();

Пока Выборка.Следующий() Цикл
КоличиствоЭлементов = КоличиствоЭлементов + 1;
КонецЦикла;

СтрТаб.Элемент = КоличиствоЭлементов;
КонецЦикла;

КонецПроцедуры
В этом коде:
- Мы используем `Спр.Выбрать()`, чтобы создать выборку элементов из справочника.
- Далее, в цикле `Пока`, мы считаем количество элементов в этой выборке.
Теперь код должен работать без ошибок и правильно заполнять таблицу с названиями справочников и количеством их элементов.
Маргарита ПросвирноваЗнаток (255) 2 месяца назад
Спасибо!
Похожие вопросы