Имя: Пароль:
1C
1С v8
Списание по партиям: можно ли в запросе определить чтобы в выборке участвовали..
0 PQT
 
27.08.11
10:14
Решился переписать базу с 7.7 на 8.2, ну почему бы не начать с партионного учета, только вот знакомство с запросами несколько меня втупляет)) ну самую малость)  хелп плиз..
С 8кой тока познакомился, поэтому вероятно иррационально:

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

Трабл в том, что он пропускает те товары, которых нет в остатках, как мне в запросе принудить обход всех строк документа? точнее чтобы выборка включала все товары из табл.части документа.
Вопрос 2: Есть подозрение что в запросе цеплять таблицу документа иррационально. Может мне лучше в параметре кинуть список товаров? а потом перебирать таблицу документа и позиционироваться по выборке.
1 ДенисЧ
 
27.08.11
10:15
1. левое соединение с таблицей документа
2. подозрение необоснованно
2 catena
 
27.08.11
10:20
(0)По идее должна включать все товары из табДока.
А типы Документ.Реализация.Товары.Товар.Учетный и РегистрНакопления.ОстаткиТоваров.Номенклатура точно совпадают?
3 PQT
 
27.08.11
10:23
(1) 1. не затруднит описать понятней?
(2) совпадают
4 ДенисЧ
 
27.08.11
10:26
(3) что именно опИсать?
5 zak555
 
27.08.11
10:26
|ГДЕ
                  |    Остатки.Склад = &Склад
                  |    ТабДока.Количество > 0
6 PQT
 
27.08.11
10:27
"1. левое соединение с таблицей документа"?
7 catena
 
27.08.11
10:31
ААА, итить, условие на Склад в виртуальную таблицу засунь.
8 catena
 
27.08.11
10:31
В тех строках, по которым остатка нет, склад у тебя = null
9 PQT
 
27.08.11
10:32
(5) попробовал, но он все равно пропускает то чего нет на остатках и эти строки документа не списываются
10 catena
 
27.08.11
10:33
Или склад сделай ЕСТЬNULL(Остатки.Склад,ТабДока.Склад)
11 ptiz
 
27.08.11
10:35
Условие Остатки.Склад = &Склад убрать из ГДЕ и перенести в параметры регистра: Склад = &Склад
12 PQT
 
27.08.11
10:39
да, дело в складе, убрал всё про склад, заработало,
(11) - ща попробую
13 PQT
 
27.08.11
11:01
теперь в выборку выдает весь склад.
хочу дружить с запросами)
                  |ИЗ
                  |    ТабДока КАК ТабДока
                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
                  |                &Дата,
                  |                Номенклатура В
                  |                    (ВЫБРАТЬ
                  |                        ТабДока.Товар
                  |                    ИЗ
                  |                        ТабДока КАК ТабДока) {(Склад = &Склад) КАК Поле2}) КАК Остатки
                  |        ПО ТабДока.Товар = Остатки.Номенклатура
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Остатки.Партия.Дата
14 PQT
 
27.08.11
11:35
Всем спасибо!
15 PQT
 
27.08.11
11:36
вот так работает:
   Запрос.Текст = "ВЫБРАТЬ
                  |    Товары.Товар.Учетный КАК Товар,
                  |    СУММА(Товары.Количество) КАК Количество,
                  |    СУММА(Товары.Всего) КАК Всего
                  |ПОМЕСТИТЬ ТабДока
                  |ИЗ
                  |    Документ.Реализация.Товары КАК Товары
                  |ГДЕ
                  |    Товары.Ссылка = &Ссылка
                  |
                  |СГРУППИРОВАТЬ ПО
                  |    Товары.Товар.Учетный
                  |;
                  |
                  |////////////////////////////////////////////////////////////////////////////////
                  |ВЫБРАТЬ
                  |    ТабДока.Количество КАК Количество,
                  |    ТабДока.Всего КАК Всего,
                  |    Остатки.Склад КАК Склад,
                  |    Остатки.Партия,
                  |    ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток,
                  |    ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК Сумма,
                  |    ЕСТЬNULL(Остатки.РасходыОстаток, 0) КАК Расходы,
                  |    ЕСТЬNULL(Остатки.СуммаРОстаток, 0) КАК СуммаР,
                  |    ТабДока.Товар КАК Товар
                  |ИЗ
                  |    ТабДока КАК ТабДока
                  |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
                  |                &Дата,
                  |                Номенклатура В
                  |                    (ВЫБРАТЬ
                  |                        ТабДока.Товар
                  |                    ИЗ
                  |                        ТабДока КАК ТабДока) {(Склад = &Склад) КАК Поле2}) КАК Остатки
                  |        ПО ТабДока.Товар = Остатки.Номенклатура
                  |
                  |УПОРЯДОЧИТЬ ПО
                  |    Остатки.Партия.Дата
                  |ИТОГИ
                  |    МАКСИМУМ(Количество),
                  |    МАКСИМУМ(Всего),
                  |    СУММА(Остаток)
                  |ПО
                  |    Товар";
16 PQT
 
27.08.11
16:52
плохой из меня бетатестер) все было пучком пока я не добавил остатков на прочие склады, в этом коде он просто все склады выводит((
покрутил-повертел, и ларчик оказывается легко открывался:
как написал (10):
                  |    ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток,
и плюс условие:
                  |ГДЕ
                  |    ЕСТЬNULL(Остатки.Склад, &Склад) = &Склад

только при таком раскладе он мне начал фильтровать по складу, не удаляя позиции документа, которых нет на складе.
всем пасиб!
17 PQT
 
27.08.11
16:53
ой, не ту строку вставил))

                  |    ЕСТЬNULL(Остатки.Склад, &Склад) КАК Склад,
18 catena
 
27.08.11
17:02
(16)написалА...
А так - молодец :)
А выводил остатки по всем складам, потому что в фильтре виртуальной таблице склад зачем-то {} выделен. Енто ж построитель. Надо без скобок и через запятую. Я ж надеюсь, он измерение?
19 PQT
 
28.08.11
05:35
(18) аха
теперь протестил основательно, сомнения остались в оптимальности запроса...
Функция глОстаткиПоДокументу(К) Экспорт
   Запрос=Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ
   |    Товары.Товар.Учетный КАК Товар,
   |    СУММА(Товары.Количество) КАК Количество,
   |    СУММА(Товары.Всего) КАК Всего
   |ПОМЕСТИТЬ ТабДока
   |ИЗ
   |    Документ."+К.Метаданные().Имя+".Товары КАК Товары
   |ГДЕ
   |    Товары.Ссылка = &Ссылка
   |
   |СГРУППИРОВАТЬ ПО
   |    Товары.Товар.Учетный
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |    ТабДока.Количество КАК Количество,
   |    ТабДока.Всего КАК Всего,
   |    ЕСТЬNULL(Остатки.Склад, &Склад) КАК Склад,
   |    Остатки.Партия,
   |    ЕСТЬNULL(Остатки.ОстатокОстаток, 0) КАК Остаток,
   |    ЕСТЬNULL(Остатки.СуммаОстаток, 0) КАК Сумма,
   |    ЕСТЬNULL(Остатки.РасходыОстаток, 0) КАК Расходы,
   |    ТабДока.Товар КАК Товар
   |ИЗ
   |    ТабДока КАК ТабДока
   |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(
   |                &Дата,
   |                Номенклатура В
   |                    (ВЫБРАТЬ
   |                        ТабДока.Товар
   |                    ИЗ
   |                        ТабДока КАК ТабДока)) КАК Остатки
   |        ПО ТабДока.Товар = Остатки.Номенклатура
   |ГДЕ
   |    ЕСТЬNULL(Остатки.Склад, &Склад) = &Склад
   |
   |УПОРЯДОЧИТЬ ПО
   |    Остатки.Партия.Дата
   |
   |ИТОГИ
   |    МАКСИМУМ(Количество),
   |    МАКСИМУМ(Всего),
   |    СУММА(Остаток)
   |ПО
   |    Товар";
   Запрос.УстановитьПараметр("Ссылка", К.Ссылка);
   Запрос.УстановитьПараметр("Склад", К.Склад);
   Запрос.УстановитьПараметр("Дата", К.МоментВремени());
   Возврат Запрос.Выполнить();
КонецФункции
20 NcSteel
 
28.08.11
10:00
Если речь о 8.2 , то методика ошибочна
21 zak555
 
28.08.11
10:21
(20) почему ?
22 NcSteel
 
28.08.11
10:30
Сначало записываем , потом смотрим остатки
23 PQT
 
28.08.11
10:42
(22) эт как?
24 zak555
 
28.08.11
10:45
(23) как в радченко : открой главу кажись 14
25 zak555
 
28.08.11
10:45
(22) кстати, почему такая методика должна быть ?
26 ДенисЧ
 
28.08.11
10:47
(25) с слишком быстро стала работать и пользователи уже не хотят покупать новые компьютры...
27 zak555
 
28.08.11
10:48
подСтолом
28 PQT
 
28.08.11
10:50
(24) не знаком, ща поищу
29 NcSteel
 
28.08.11
10:54
(25) Блокировок меньше , скорость больше . Незначительно , но все же
30 zak555
 
28.08.11
11:01
(29) так он в радченко написано, как этими блокировками "управлять"
она одна назначается после временной таблицы из тч дока

и где тут прирост ?

почему сразу не написать запрос один с учётом остатков ?