Проверить, что запись по текущей номенклатуре есть в регистре сведений
У меня цикл по элементам выбранной группы справочника Номенклатура. Требуется определить что в регистре сведений МестаХраненияНоменклатуры есть запись. Я знаю что можно запросом, но говорят запрос в цикле плохо. Вот и спрашиваю как узнать если по текущей номенклатуре запись в регистре сведений МестаХраненияНоменклатуры
По теме из базы знаний
- Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2/3.0
- Регистры сведений 1С. Как это устроено.
- Версионирование справочников, документов и регистров сведений на SQL-сервере
- Характеристики номенклатуры. Выгрузка характеристик номенклатуры в бухгалтерию
- Доработка проведения в ERP 2.5. (Регистры накопления, Регистры сведений)
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Сделайте запрос к регистру, передав в качестве параметра выбранную группу номенклатуры. В запросе укажите отбор по родителю с учетом иерархии. После выполнения запроса в цикле по элементам группы делайте поиск по выборке (Выборка.Сбросить(); Выборка.НайтиСледующий(Отбор)) с отбором по текущему элементу. Если в выборке есть запись, значит в регистре так же есть запись.
(5) Написал:
Выборка = Справочники.Номенклатура.Выбрать(ГруппаНоменклатуры);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура,
| МестаХраненияНоменклатуры.МестоХранения
|ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
|ГДЕ
| МестаХраненияНоменклатуры.Номенклатура в иерархии (&ВыбГруппа)
| И МестаХраненияНоменклатуры.Номенклатура.ЭтоГруппа = ЛОЖЬ";
Запрос.УстановитьПараметр("ВыбГруппа", ГруппаНоменклатуры);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапр = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Товарчик = " + Выборка.Ссылка);
// Проверить есть ли текущая номенклатура в регистре
// сведений МестаХраненияНоменклатуры
КонецЦикла;
Выборка = Справочники.Номенклатура.Выбрать(ГруппаНоменклатуры);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура,
| МестаХраненияНоменклатуры.МестоХранения
|ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
|ГДЕ
| МестаХраненияНоменклатуры.Номенклатура в иерархии (&ВыбГруппа)
| И МестаХраненияНоменклатуры.Номенклатура.ЭтоГруппа = ЛОЖЬ";
Запрос.УстановитьПараметр("ВыбГруппа", ГруппаНоменклатуры);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапр = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
Сообщить("Товарчик = " + Выборка.Ссылка);
// Проверить есть ли текущая номенклатура в регистре
// сведений МестаХраненияНоменклатуры
КонецЦикла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот