Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 16:59

Выборка из регистра накопления остатков

Автор getman, 02 мая 2016, 02:23

0 Пользователей и 1 гость просматривают эту тему.

getman

Здравствуйте. Я только учусь поэтому сильно не пинайте если вопросы глупые. Есть задание - в Документе заполнена колонка Номенклатура (справочник.ссылка.номенклатура) надо по нажатию кнопки в соседнюю колонку заполнить остатками по каждой позиции на складе. я пишу


  &НаСервере
Функция ПолучитьКоличество( ссылка, Склад )
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|   СвободныеОстатки.Номенклатура    КАК Номенклатура,
|   СвободныеОстатки.Склад           КАК Склад,
|   СвободныеОстатки.ВНаличииОстаток КАК ВНаличии,
|   СвободныеОстатки.Номенклатура.Ссылка,
|   СвободныеОстатки.Склад.ссылка
|ИЗ
|   РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстатки
|           ГДЕ
|   СвободныеОстатки.Номенклатура = &Ссылка И СвободныеОстатки.Склад = &Склад
|";
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Результат = Запрос.Выполнить().Выбрать();


Возврат Результат.Вналичии;
КонецФункции 




А на выходе ноль. запрос просто не работает.
Результат.ВНаличии - не определено.
Результат.Следующий() - ложь.
то есть ни одного совпадения? но если я делаю отчет с запросом через конструктор запросов то точно такой же текст мне выдает правильное количество. где косяк то?((

vitasw

Ссылка - это что? какой тип данных?
+ запрос построен некорректно. Отбор нужно устанавливать через параметры виртуальной таблицы
|ИЗ
|   РегистрНакопления.СвободныеОстатки.Остатки(,Номенклатура=&Номенклатура) КАК СвободныеОстатки

getman

Цитата: vitasw от 02 мая 2016, 08:17
Ссылка - это что? какой тип данных?
+ запрос построен некорректно. Отбор нужно устанавливать через параметры виртуальной таблицы
|ИЗ
|   РегистрНакопления.СвободныеОстатки.Остатки(,Номенклатура=&Номенклатура) КАК СвободныеОстатки

Ссылка - Справочник. ссылка. номенклатура

Hedinnk

Первая грубая ошибка, Вы выполняете запрос в цикле. Это неправильно. Вам необходимо получить остатки сразу для всей номенклатуры из табличной части и этими данными заполнить необходимую колонку
На форуме есть волшебная кнопка "Сказать СПАСИБО"

getman

В итоге все заработало когда заменил конец на
Результат = Запрос.Выполнить().Выбрать();
рез = 0;
пока Результат.Следующий() цикл
рез = рез + Результат.ВНаличии;
конеццикла;
Возврат рез;

выходит что запрос все таки формировался но просто не позиционировался на самом результате так что ли?
Добавлено: 02 мая 2016, 13:22


Цитата: Hedinnk от 02 мая 2016, 12:41
Первая грубая ошибка, Вы выполняете запрос в цикле. Это неправильно. Вам необходимо получить остатки сразу для всей номенклатуры из табличной части и этими данными заполнить необходимую колонку

А как это можно провернуть? ведь номенклатура может быть совершенно разная заполненная случайным образом. как ее отправить в запрос кроме цикла? и чем плох запрос в цикле?

vitasw

Цитата: getman от 02 мая 2016, 13:20и чем плох запрос в цикле?

всем. В первую очередь скоростью выполнения конечного кода.

getman

Цитата: vitasw от 02 мая 2016, 14:10
Цитата: getman от 02 мая 2016, 13:20и чем плох запрос в цикле?

всем. В первую очередь скоростью выполнения конечного кода.

И как в таком случае от цикла избавиться? :dfbsdfbsdf:

Hedinnk

Выгружаете колонку номенклатура в массив и подставляете его в качестве параметра виртуальной таблицы
На форуме есть волшебная кнопка "Сказать СПАСИБО"

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск