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

Как посмотреть остатки товаров

Автор dacool731, 27 ноя 2018, 21:51

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

dacool731

Здравствуйте.
Сразу скажу, что я новичок в 1С. Столкнулся со следующей проблемой:
Необходимо в документе ПродажаТоваров, при выборе определенного товара из справочника Номенклатура, выводить сообщение об его остаточном количестве. В клиенте я получаю название товара (переменная x) и отправляю его в функцию:

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

    Запрос.УстановитьПараметр("Наименование", x);
                                 
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Наименование + " - осталось " + Выборка.КоличествоОстаток + " шт.");
    КонецЦикла;
КонецФункции


В итоге в сообщении получаю Наименование и количество всех товаров (собственно из-за цикла). Как видно из УстановленногоПараметра я пытался сделать выборку интересуемого товара (название которого, как я и писал ранее, находится в переменной x), но ничего не вышло (как я и говорил я новичок в этом деле).
Помогите подсказкой, советом, а лучше примером. Заранее Благодарю!

dacool731

Не нашел ничего лучше банального условия внутри цикла:

Пока Выборка.Следующий() Цикл
    Если Строка(Выборка.Наименование) =  Строка(x) Тогда
        Сообщить(Выборка.Наименование + " - осталось " + Выборка.КоличествоОстаток + " шт.");
    КонецЕсли;
КонецЦикла;

Меня не покидает мысль, что можно было сам запрос составить та, чтобы выдавалось количество того товара, который указан в переменной x ...

oleg-x

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

    Запрос.УстановитьПараметр("Наименование", x); //Здесь устанавливаешь параметр, а в запросе где условие отбора?
                                 
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Наименование + " - осталось " + Выборка.КоличествоОстаток + " шт.");
    КонецЦикла;
КонецФункции
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

dacool731

Цитата: oleg-x от 27 ноя 2018, 23:28
&НаСервере
Функция ПолучитьКоличество(x)
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |   ЗакупкиИПродажиОстатки.КоличествоОстаток,
    |   ЗакупкиИПродажиОстатки.Наименование
    |ИЗ
    |   РегистрНакопления.ЗакупкиИПродажи.Остатки КАК ЗакупкиИПродажиОстатки";
    | ГДЕ
    |   ЗакупкиИПродажиОстатки.Наименование = &Наименование"; //Вот такой строчки не хватает у тебя в запросе.

    Запрос.УстановитьПараметр("Наименование", x); //Здесь устанавливаешь параметр, а в запросе где условие отбора?
                                 
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        Сообщить(Выборка.Наименование + " - осталось " + Выборка.КоличествоОстаток + " шт.");
    КонецЦикла;
КонецФункции


Спасибо вам большущее)

bsn-chita

Я бы условия в параметрах виртуальной таблицы поместил.

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

И если не возвращаете значений то и на процедуру переделать.

oleg-x

Цитата: bsn-chita от 28 ноя 2018, 02:21
Я бы условия в параметрах виртуальной таблицы поместил.
И если не возвращаете значений то и на процедуру переделать.
1) Для человека, который еще не разобрался в запросах это пока слишком. Освоится и там уже поймет что это такое.
2) А смысл переделывать на процедуру, от того что это функция или процедура ничего не изменится. И да,маленький нюанс, процедура не возвращает значение, только меняет, то есть надо передать переменную, что бы её изменить.
Единственное отличие функции, в том что в отличие от процедуры, функция возвращает одну переменную, если не задать это явно, то вернет "неопределено".
Помог, нажми спасибо. Не помог, нажми спасибо :-)
Если у Вас есть проблема, то её уже кто то решил @Yandex, @Google

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

Рейтинг@Mail.ru Rambler's Top100

Поиск