Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Запрос остатков номеклатуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
Fabri
Прошу помочь с запросом. Необходимо выводить в табличное поле остатки номенклатуры, остаток которой меньше-равно 1.
Сформировал запрос, прописал в запросе
ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток

а выводятся записи только с остатком 1 и минусовые - номенклатура с остатком ноль - не выводится.
А меня как-раз больше всего интересует номенклатура с отстатком ноль. Подскажите что в запросе не так? Спасибо.

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";

Запрос.УстановитьПараметр("Склад", ЭтотОбъект.Склад);
//Запрос.УстановитьПараметр("КоличествоОстаток", ЭтотОбъект.ОстатокМеньше);

Результат = Запрос.Выполнить();
    
ЭтотОбъект.Товары.Загрузить(Результат.Выгрузить());
Vofka
|ВЫБРАТЬ
|    СпрНоменклатура.Ссылка КАК Номенклатура,
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
|ИЗ
|    Справочник.Номенклатура КАК СпрНоменклатура
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|        ПО (ТоварыНаСкладахОстатки.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура.Ссылка)
|ГДЕ
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) = 0
Fabri
Vofka увы, Ваш вариант вообще ничего не выводит. upset.gif

Vofka
Ну надо ж хотя бы смотреть на те буковки, которые вам показывают. Опечатка там. Надо так:

|ВЫБРАТЬ
|    СпрНоменклатура.Ссылка КАК Номенклатура,
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
|ИЗ
|    Справочник.Номенклатура КАК СпрНоменклатура
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|        ПО (ТоварыНаСкладахОстатки.Номенклатура = СпрНоменклатура.Ссылка)
|ГДЕ
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) = 0
Fabri
Цитата(Vofka @ 29.03.13, 13:49) необходимо зарегистрироваться для просмотра ссылки
Ну надо ж хотя бы смотреть на те буковки, которые вам показывают. Опечатка там. Надо так:

|ВЫБРАТЬ
|    СпрНоменклатура.Ссылка КАК Номенклатура,
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
|ИЗ
|    Справочник.Номенклатура КАК СпрНоменклатура
|        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад) КАК ТоварыНаСкладахОстатки
|        ПО (ТоварыНаСкладахОстатки.Номенклатура = СпрНоменклатура.Ссылка)
|ГДЕ
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) = 0


Дело не в буковках. И данный запрос не дает нужный результат, выводит 8300 элементов номеклатуры, поле остаток - пустое. Хотя по запросу все как-бы правильно. Буду пробовать дальше, результат сообщу.

Если открыть регистр накопления ТоварыНаСкладах, то там нет записей с количеством 0. Т.е. впечетление что при реализации 1 шт. товара остаток которго 1 шт., он тупо удаляется из регистра, а не меняется его ресурс Количество как по логике должно быть.

Хотя нет, это я туплю, в регистре накопления остаток рассчитывается разицой между записями приход и расход.
logist
Цитата(Fabri @ 29.03.13, 12:38) необходимо зарегистрироваться для просмотра ссылки
остаток которой меньше-равно 1.

Цитата(Fabri @ 29.03.13, 14:21) необходимо зарегистрироваться для просмотра ссылки
|ГДЕ
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) = 0

так:
|ГДЕ
|    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) <= 1
Ardi
в музей.
Fabri
logist Не в этом суть. Результата нет.

Почему из регистра накопления ТоварыНаСкладах не выводятся записи с количеством 0. Левое соединение и т.д. это уже лишнее, тем более что у меня к примеру 2 склада, на одном из них небыло и 5 части всей номенклатуры. Тут правильней выводить только то что поступало и продавалось из конкретного склада, эта инфа в регистре накопления ТоварыНаСкладах, а он ..... не выводит номенклатуру с нулевым остатком... faceoff.gif
Vofka
Цитата(Fabri @ 29.03.13, 12:38) необходимо зарегистрироваться для просмотра ссылки
А меня как-раз больше всего интересует номенклатура с отстатком ноль.

Цитата(Fabri @ 29.03.13, 14:21) необходимо зарегистрироваться для просмотра ссылки
И данный запрос не дает нужный результат, выводит 8300 элементов номеклатуры, поле остаток - пустое.

Пустое - это 0, если что. Короче, я пойду отсюда, т.к. вижу, что разговор как-то не клеится.

Цитата(Ardi @ 29.03.13, 14:33) необходимо зарегистрироваться для просмотра ссылки
в музей.

В корзину, скорее.
Fabri
И данный запрос не дает нужный результат, выводит 8300 элементов номеклатуры, поле остаток - пустое.
Пустое - это 0, если что. Короче, я пойду отсюда, т.к. вижу, что разговор как-то не клеится.

Тут правильней выводить только то что поступало и продавалось из конкретного склада, эта инфа в регистре накопления ТоварыНаСкладах, а он ..... не выводит номенклатуру с нулевым остатком...

Склад неделю назад создался. Оприходованно около 2500 товаров. Как может быть 8300? Зачем мне весь справочник номенклатура в запросе?
Vofka
Цитата(Fabri @ 29.03.13, 14:51) необходимо зарегистрироваться для просмотра ссылки
Зачем мне весь справочник номенклатура в запросе?

А зачем писать
Цитата(Fabri @ 29.03.13, 12:38) необходимо зарегистрироваться для просмотра ссылки
Необходимо выводить в табличное поле остатки номенклатуры, остаток которой меньше-равно 1.

и
Цитата(Fabri @ 29.03.13, 12:38) необходимо зарегистрироваться для просмотра ссылки
меня как-раз больше всего интересует номенклатура с отстатком ноль

?
Покажите из этих 8300 позиций хоть одну, остаток по которой больше 0. А то что к 10 посту мы находимся на пол пути к разгадке задания - так лично мне уже не интересно телепатировать.
Petre
Вы определитесь с условиями задачи. Если все ресурсы нулевые - остатки не выводятся.
Здесь необходимо соединять остатки с номенклатурой оборотов по регистру.

Вернее объединять...
Fabri
Ок, начнем сначала, может я неправильно все разьяснил.
Расскажу подробней. В нашем предприятии есть склад и магазин.
Для кажого в 1С есть свой склад. Необходимо чтобы при запуске 1С в магазине выскакивало окошко с номенклатурой остаток которой = 0.
Потом там же создам кнопочку для передачи этого списка в документ Внутренний заказ, тем самым облегчив контроль остатков товаров в магазине.
Выводить нужо только ту номенклатуру, которая поступала на склад магазина. Написал запрос, но он не выводит номенклатуру с остатком 0, все остальные выводятся. Прошу помочь, спасибо.

Запрос = Новый Запрос;
Запрос.Текст =
    "ВЫБРАТЬ
    |    ТоварыНаСкладахОстатки.Номенклатура,
    |    ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
    |ИЗ
    |    РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки";

Запрос.УстановитьПараметр("Склад", ЭтотОбъект.Склад);
//Запрос.УстановитьПараметр("КоличествоОстаток", ЭтотОбъект.ОстатокМеньше);

Результат = Запрос.Выполнить();
    
ЭтотОбъект.Товары.Загрузить(Результат.Выгрузить());
Petre
В таблицу остатков РН не попадают записи с нулевыми ресурсами.
По этому вижу два варианта:
1. выборку из таблицы оборотов РН объединить с выборкой из таблицы остатков РН.
2. выборку из таблицы оборотов РН слева соединить в выборкой из таблицы остатков РН.
Для этой задачи необходимо формализировать Ваше условие "только ту номенклатуру, которая поступала на склад магазина" для выборки из таблицы оборотов.
pablo
ВЫБРАТЬ Различные
        ТоварыНаСкладах.Номенклатура
поместить ТоварыМагазина
    ИЗ
        РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
    Где РегистрНакопления.ТоварыНаСкладах.Склад=&Склад;
ВЫБРАТЬ
        ТоварыНаСкладахОстатки.Номенклатура,
        ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) КАК Остаток
    ИЗ
        РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
где
   ЕСТЬNULL(ТоварыНаСкладахОстатки.КоличествоОстаток, 0) = 0 И
  ТоварыНаСкладахОстатки.Номенклатура в (Выбрать Номенклатура из ТоварыМагазина)



Но в Вашей постановке задачи заложена серьёзная логическая ошибка. И выльется это в кучу неприятностей через годик-другой...
Fabri
Цитата(pablo @ 29.03.13, 15:33) необходимо зарегистрироваться для просмотра ссылки
Но в Вашей постановке задачи заложена серьёзная логическая ошибка. И выльется это в кучу неприятностей через годик-другой...


Вы про то что через годик уже 30-40% номенклатуры уже не будет покупатся, но в список она будет попадать? Тут тоже планируется сделать отбор товаров, поступивших на склад с даты, которую будут устанавливать работники магазина.
sava1
Цитата(Petre @ 29.03.13, 15:27) необходимо зарегистрироваться для просмотра ссылки
выборку из таблицы оборотов РН объединить с выборкой из таблицы остатков РН.


И что получиться?

1. Выбираем из таблицы ОстаткиОбороты все, что имеет остаток 0 и приход Не равный 0 - и все

ВЫБРАТЬ
    ТоварыНаСкладахОстаткиИОбороты.Номенклатура
ИЗ
    РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&Дата1, &Дата2, Период, ДвиженияИГраницыПериода, Склад = &Склад) КАК ТоварыНаСкладахОстаткиИОбороты
ГДЕ
    ТоварыНаСкладахОстаткиИОбороты.КоличествоПриход <> 0
    И ТоварыНаСкладахОстаткиИОбороты.КоличествоКонечныйОстаток = 0
Petre
Если дата остатков совпадает с конечной датой периода анализа поступлений - можно и так. Но я предполагаю кучу вариантов, т. к. условия не исчерпывающие...
sava1
т.е. мы заказываем товар, которого у нас нет, но мы получали его в августе прошлого года?
Vofka
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.