Имя: Пароль:
1C
1С v8
запрос с выводом количества в заказепокупателю по заданной номенклатуре
0 MrZLO
 
17.10.12
12:09
Здрасте! Сделал запрос, чтобы по заданной номенклатуре можно было вывести все нужные заказы покупателей... Теперь хочу, чтобы среди этих данных было количество в этом же документе по выбранной номенклатуры... он мне выводит общее кол-во, помогите!!!



ВЫБРАТЬ
       |    ЗаказПокупателя.Номер,
       |    ЗаказПокупателя.Ссылка,
       |    ЗаказПокупателя.Дата,
       |    ЗаказПокупателя.Контрагент.Наименование КАК Контрагент,
       |    СУММА(ЗаказПокупателяТовары.Количество) КАК Количество
       |ИЗ
       |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
       |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
       |        ПО ЗаказПокупателяТовары.Ссылка = ЗаказПокупателя.Ссылка
       |ГДЕ
       |    ЗаказПокупателя.Товары.Номенклатура.Ссылка = &Номенклатура
       |    И ЗаказПокупателя.Проведен = ИСТИНА
       |
       |СГРУППИРОВАТЬ ПО
       |    ЗаказПокупателя.Номер,
       |    ЗаказПокупателя.Ссылка,
       |    ЗаказПокупателя.Дата,
       |    ЗаказПокупателя.Контрагент.Наименование
1 Heckfy
 
17.10.12
12:11
КАК КоличествоРазличных - если я правильно понял...
2 MrZLO
 
17.10.12
12:12
ну как бы да, но мне надо только у того товара, который ЗаказПокупателя.Товары.Номенклатура.Ссылка = &Номенклатура
3 Zmich
 
17.10.12
12:12
(0). А где у тебя в тексте запроса Номенклатура?
4 kimarle
 
17.10.12
12:12
Добавь в выборку и сгруппируй по номенклатуре
5 GLazNik
 
17.10.12
12:13
Мдя ну и запрос....
условие ЗаказПокупателя.Товары.Номенклатура.Ссылка = &Номенклатура порадовало
замени на ЗаказПокупателяТовары.Номенклатура = &Номенклатура и будет тебе счастье
6 1Страх
 
17.10.12
12:14
соединение тут нах не впало
7 GLazNik
 
17.10.12
12:14
+(5) и запрос по документам как-то не по феншую
8 MrZLO
 
17.10.12
12:17
(3) вот такая штука странно, но работает

       Запрос.Текст =
       "ВЫБРАТЬ
       |    ЗаказПокупателя.Номер,
       |    ЗаказПокупателя.Ссылка,
       |    ЗаказПокупателя.Дата,
       |    ЗаказПокупателя.Контрагент.Наименование КАК Контрагент,
       |    ЗаказПокупателяТовары.Количество
       |ИЗ
       |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
       |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК ЗаказПокупателя
       |        ПО ЗаказПокупателяТовары.Ссылка = ЗаказПокупателя.Ссылка
       |ГДЕ
       |    ЗаказПокупателя.Товары.Номенклатура.Ссылка = &Номенклатура
       |    И ЗаказПокупателя.Проведен = ИСТИНА
       |    И ЗаказПокупателяТовары.Номенклатура.Ссылка = &Номенклатура
       |
       |СГРУППИРОВАТЬ ПО
       |    ЗаказПокупателя.Номер,
       |    ЗаказПокупателя.Ссылка,
       |    ЗаказПокупателя.Дата,
       |    ЗаказПокупателя.Контрагент.Наименование,
       |    ЗаказПокупателяТовары.Количество";
9 GLazNik
 
17.10.12
12:19
(8) ничего странного, но запрос - УГ... лучше его никому не показывай
10 MrZLO
 
17.10.12
12:23
(9) а не УГ это что-то вроде такого?

"ВЫБРАТЬ
       |    ЗаказПокупателя.Номер,
       |    ЗаказПокупателя.Ссылка,
       |    ЗаказПокупателя.Дата,
       |    ЗаказПокупателя.Контрагент.Наименование КАК Контрагент,
       |    NULL КАК Количество
       |ИЗ Документ.ЗаказПокупателя КАК ЗаказПокупателя
       |ГДЕ
       |    ЗаказПокупателя.Проведен = ИСТИНА
       |    И ЗаказПокупателяТовары.Номенклатура = &Номенклатура
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |...
11 hhhh
 
17.10.12
12:25
(10) ну еще заказы надо как-то ограничить. А то допустим, за пару лет в базе накопится 10000 заказов с твоей номенклатурой и твой запрос их все выведет на 150 листов. Там одним фингалом под глазом ты не отделаешься.
12 GLazNik
 
17.10.12
12:26
+(9) очень много лишнего. можно без сгруппировать, если в документах номенклатура встречается только раз. можно действительно без соединений, но я бы лучше оставил
(10) это тож УГ
Вот так оно лучше будет:

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

но при условии что номенклатура в документе в единственным экземпляре, иначе нужно добавить группировку.
13 GLazNik
 
17.10.12
12:27
(11) если на то пошло, то запрос надо делать не по документам, а по регистрам.
14 1Страх
 
17.10.12
12:27
(12) это тоже УГ
15 Zmich
 
17.10.12
12:28
Запрос.Текст =
       "ВЫБРАТЬ
       |    ЗаказПокупателяТовары.Ссылка.Номер,
       |    ЗаказПокупателяТовары.Ссылка,
       |    ЗаказПокупателяТовары.Ссылка.Дата,
       |    ЗаказПокупателяТовары.Ссылка.Контрагент.Наименование КАК Контрагент,
       |    ЗаказПокупателяТовары.Количество
       |ИЗ
       |    Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
       |    
       |ГДЕ
       |    ЗаказПокупателяТовары.Номенклатура = &Номенклатура
       |    И ЗаказПокупателя.Ссылка.Проведен = ИСТИНА";
16 GLazNik
 
17.10.12
12:29
(15) копипаст подвел тебя:) ошибка в последней строке.
17 Эльфийка
 
17.10.12
12:29
А вообще, как меня учили опытные программисты, данные лучше брать не из Документов, а из Регистров (политика 1с), например можно получить данные из РегистрНакопления ЗаказыПокупателей. Тогда и на проведение не надо проверять
18 Zmich
 
17.10.12
12:30
(16) Угу)
19 GLazNik
 
17.10.12
12:30
(14) любой запрос по документу будет УГ, но интересен твой вариант
20 1Страх
 
17.10.12
12:33
(19) УГ тут по случаю явного соединения
21 MrZLO
 
17.10.12
12:34
(15) шустрее работает явно, но по ссылке к свойству Проведен вроде не работает такое
22 MrZLO
 
17.10.12
12:34
ЗаказПокупателяТовары.Ссылка.Проведен = ИСТИНА
вроде так надо
23 Zmich
 
17.10.12
12:37
(21), (22). Да, см. (16) и (18).
24 GLazNik
 
17.10.12
12:37
(19) а с каких это пор соединение стало УГ? Я как-то приучен работать непосредственно с таблицами. а то ж оно иллюзия как бы создается. вроде указана одна таблица, а запрос таки дергает 3.
25 Эльфийка
 
17.10.12
12:38
а такой вариант не нравится?
ВЫБРАТЬ
   ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя.Номер,
   ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя.Ссылка,
   ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя.Дата,
   ЗаказыПокупателейОстаткиИОбороты.ЗаказПокупателя.Контрагент,
   ЗаказыПокупателейОстаткиИОбороты.КоличествоПриход КАК Количество
ИЗ
   РегистрНакопления.ЗаказыПокупателей.ОстаткиИОбороты(, , Регистратор, , ) КАК ЗаказыПокупателейОстаткиИОбороты
ГДЕ
   ЗаказыПокупателейОстаткиИОбороты.Номенклатура = &Номенклатура
26 GLazNik
 
17.10.12
12:38
(24) к (20)
27 GLazNik
 
17.10.12
12:39
(25) а зачем тут остатки?
28 GLazNik
 
17.10.12
12:40
+(27) ну и условие по номенклатуре таки лучше сунуть в условие виртуальной таблицы. да и кто сказал, что в (0) есть регистр ЗаказыПокупателей?
29 kimarle
 
17.10.12
12:42
(28) В типовых у Заказов регистр есть.