Проверить, что запись по текущей номенклатуре есть в регистре сведений

1. sidalexsandr 3 30.07.18 16:21 Сейчас в теме
У меня цикл по элементам выбранной группы справочника Номенклатура. Требуется определить что в регистре сведений МестаХраненияНоменклатуры есть запись. Я знаю что можно запросом, но говорят запрос в цикле плохо. Вот и спрашиваю как узнать если по текущей номенклатуре запись в регистре сведений МестаХраненияНоменклатуры
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. DarkUser 30.07.18 16:30 Сейчас в теме
Сделайте запрос к регистру, передав в качестве параметра выбранную группу номенклатуры. В запросе укажите отбор по родителю с учетом иерархии. После выполнения запроса в цикле по элементам группы делайте поиск по выборке (Выборка.Сбросить(); Выборка.НайтиСледующий(Отбор)) с отбором по текущему элементу. Если в выборке есть запись, значит в регистре так же есть запись.
3. sidalexsandr 3 30.07.18 16:53 Сейчас в теме
(2) Как проверить что в выборке есть запись?
5. Isonic 243 30.07.18 17:03 Сейчас в теме
(3) 1. собери все элементы номенклатуры в массив
2. делаешь запрос по регистру сведений, с условием по номенклатуре
3. Далее как тебе уже советовали, обходишь список номенклатуры циклом и смотришь что есть в выборке
6. sidalexsandr 3 30.07.18 17:09 Сейчас в теме
(5) Написал:
Выборка = Справочники.Номенклатура.Выбрать(ГруппаНоменклатуры);

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| МестаХраненияНоменклатуры.Номенклатура,
| МестаХраненияНоменклатуры.МестоХранения
|ИЗ
| РегистрСведений.МестаХраненияНоменклатуры КАК МестаХраненияНоменклатуры
|ГДЕ
| МестаХраненияНоменклатуры.Номенклатура в иерархии (&ВыбГруппа)
| И МестаХраненияНоменклатуры.Номенклатура.ЭтоГруппа = ЛОЖЬ";

Запрос.УстановитьПараметр("ВыбГруппа", ГруппаНоменклатуры);

РезультатЗапроса = Запрос.Выполнить();
ВыборкаЗапр = РезультатЗапроса.Выбрать();

Пока Выборка.Следующий() Цикл

Сообщить("Товарчик = " + Выборка.Ссылка);


// Проверить есть ли текущая номенклатура в регистре
// сведений МестаХраненияНоменклатуры

КонецЦикла;
7. sidalexsandr 3 30.07.18 17:10 Сейчас в теме
(5) Как в цикле проверить что МестоХранения не пусто?
9. enschede 30.07.18 17:17 Сейчас в теме
(7) Как-то так:
ВыборкаЗапр .Сбросить();
Отбор = Новый Структура(Выборка.Ссылка);
Если ВыборкаЗапр .НайтиСледующий(Отбор) Тогда
//Сделать что нужно
Иначе
Продолжить;
КонецЕсли;
10. sidalexsandr 3 30.07.18 17:22 Сейчас в теме
4. enschede 30.07.18 17:01 Сейчас в теме
Если Выборка.НайтиСледующий(Отбор) Тогда
КонецЕсли;
НайтиСледующий возвращает значения типа Булево.
8. sidalexsandr 3 30.07.18 17:13 Сейчас в теме
Или как
1) дописать запрос, чтобы в запрос попадала только Номенклатура у которой заполнено МестоХранения
2) проверить в цикле что по текущей Номенклатуре результат запроса не пустой?
11. dchumak 42 31.07.18 04:16 Сейчас в теме
(8)
1. Он уже написан в сообщении 6. Запрос по регистру - а там только номенклатура, по которой есть записи в регистре.
2. Уже написали выше. Делаете запрос, потом проверяете перебором по выгрузке.
12. JohnGalt 58 01.08.18 11:09 Сейчас в теме
В запросе лучше тогда связать левым соединением группу номенклатуры с регистром, и потом цикл по результату запроса делать или выборки. Получим для каждой номенклатуры из группы информацию о наличии записи в регистре.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот