Имя: Пароль:
1C
1С v8
Запрос для списания товара со склада по партиям.
0 PQT
 
20.03.12
16:06
Запрос для списания товара со склада по партиям.
Проблемма в следущем: если товар отсутствует на всех складах, или присутствует на складе, с которого списываем, то все ОК,
но если товар есть в наличии на другом складе, то он не попадает в таблицу вообще
(я 7шник, в 8ке начинаю)

   Запрос=Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    Товары.Товар.Учетный КАК Товар,
   |    СУММА(Товары.Количество) КАК Количество,
   |    СУММА(Товары.Всего) КАК Всего
   |ПОМЕСТИТЬ ТабДока
   |ИЗ
   |    Документ."+К.Метаданные().Имя+".Товары КАК Товары
   |ГДЕ
   |    Товары.Ссылка = &Ссылка
   |
   |СГРУППИРОВАТЬ ПО
   |    Товары.Товар.Учетный
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    ТабДока.Количество КАК Количество,
   |    ТабДока.Всего КАК Всего,
   |    ЕСТЬNULL(Остатки.Склад, &Склад) КАК Склад,
   |    Остатки.Партия,
   |    ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток,
   |    ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК Сумма,
   |    ЕСТЬNULL(Остатки.РасходыОстаток, 0) КАК Расходы,
   |    ТабДока.Товар КАК Товар
   |ИЗ
   |    ТабДока КАК ТабДока
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
   |                &Дата,
   |                Товар В
   |                    (ВЫБРАТЬ
   |                        ТабДока.Товар
   |                    ИЗ
   |                        ТабДока КАК ТабДока)) КАК Остатки
   |        ПО ТабДока.Товар = Остатки.Товар
   |ГДЕ
   |    ЕСТЬNULL(Остатки.Склад, &Склад) = &Склад
   |
   |УПОРЯДОЧИТЬ ПО
   |    Остатки.Партия.Дата
   |
   |ИТОГИ
   |    МАКСИМУМ(Количество),
   |    МАКСИМУМ(Всего),
   |    СУММА(Остаток)
   |ПО
   |    Товар";
   Запрос.УстановитьПараметр("Ссылка", К.Ссылка);
   Запрос.УстановитьПараметр("Склад", К.Склад);
   Запрос.УстановитьПараметр("Дата", К.МоментВремени());
1 Господин ПЖ
 
20.03.12
16:07
ГДЕ
   |    ЕСТЬNULL(Остатки.Склад, &Склад) = &Склад

какой затейник...
2 zak555
 
20.03.12
16:09
проверяй после списания нули
3 PQT
 
20.03.12
16:11
пройтись по движениям чтоли?
4 FIXXXL
 
20.03.12
16:17
склад засунь в параметры виртуальной таблицы
и нафига соединение нужно вообще?
5 ptiz
 
20.03.12
16:23
(0) А сколько товара спишется, если в остатках 2 разных партии?
(я уж молчу про случай двух строк одного товара в накладной)
6 PQT
 
21.03.12
03:57
убедили... переработаю
7 PQT
 
21.03.12
04:04
а мож кто порекомендует оптимальный способ?
С вашего позволения :) ставлю второй вопрос:
каким методом лучше списывать партии по регистру?
Как в 7.7: Запрос остатков с отбором по складу и группировкой по товарам и партиям.
или используя возможности запросов 8ки: через левое соединение документа с остатками по условиям?
или что еще порекомендуете?
8 PQT
 
21.03.12
04:11
:) Комментну не по существу: за 12 лет с нуля накатал эффективную конфу на 7.7, все в ней нас устраивает, эффективность достаточная... но чтото слюна секретируется глядя на 8ку... решился таки между делом переписать свою конфу (ничего не меняя).. вот теперь весь в сомнениях - стоит ли игра свеч))
9 ptiz
 
21.03.12
09:27
(7) Лично я - за перебор таблицы документа (ну не самой ТЧ конечно, а выборки запроса по ней) и поиск в ТЗ остатков. При мало-мальски сложных алгоритмах списания (с учетом резервов, страховых запасов и пр.) это здорово облегчает отладку.
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.