Имя: Пароль:
1C
1С v8
Запрос в динамическом списке документов УФ с количеством и левым соеденением
0 TrueF
 
08.04.16
16:08
Попробую объяснить всю трагикомедию))

Есть два документа ПредЗаказ и Заказ

В документе Заказ есть реквизит Основание со ссылкой на документ ПредЗаказ,
Документов Заказ с одинаковыми реквизитами Основание ПредЗаказ может быть множество.
Задача - в списке документов ПредЗаказ вывести количество документов Заказ где Предзаказ = Заказ.Основание
Сообразить не могу как количество документов Заказ посчитать в запросе.

Сам запрос:

ВЫБРАТЬ
    ДокументПредЗаказ.Ссылка,
    ДокументПредЗаказ.Номер,
    ДокументПредЗаказ.Дата,
    ДокументПредЗаказ.Контрагент,    
    Заказ.Ссылка Как ЗаказОсновной        
ИЗ
    Документ.ПредЗаказ КАК ДокументПредЗаказ
                                                                      
ЛЕВОЕ СОЕДИНЕНИЕ
      Документ.Заказ КАК Заказ
             ПО ДокументПредЗаказ.Ссылка = Заказ.Основание.Ссылка
1 Fragster
 
гуру
08.04.16
16:11
одним из правильных вариантов будет создать РС с измерением "предзаказ", ресурсом "заказ" и обновлением его по нужным правилам при записи заказа (например можно сделать два ресурса - количество проведенных и непроведенных заказов, а помеченные на удаление вообще не считать) и сделать левое соединение уже с ним.
2 TrueF
 
08.04.16
16:14
(1) лишняя таблица в базе. по другому наверно можно, просто запросом?
3 Fragster
 
гуру
08.04.16
16:18
(2) Она не лишняя. И её еще и обновлять при записи надо. Некоторые системы, вон, тоже остатки как обороты по всему периоду считают, а в 1с есть таблица итогов регистров. Это называется денормализация, и делается в определенных случаях и совершенно сознательно.
4 Игорь_МММ
 
08.04.16
16:31
Задача - в списке документов ПредЗаказ вывести количество документов Заказ где Предзаказ = Заказ.Основание
может так:
Задача - в списке документов ПредЗаказ вывести количество документов Заказ где  Заказ.Основание=Предзаказ?
5 TrueF
 
08.04.16
16:32
(3) Придется с РС видимо и с перепроведением базы. не хотелось конечно.

Хотел по быстрому запрос и все.
6 TrueF
 
08.04.16
16:32
(4) да верно
7 Cyberhawk
 
08.04.16
16:35
(4) А разница есть?
8 Fragster
 
гуру
08.04.16
16:35
(5) при чем тут перепроведение? сделай в менеджере РС экспортную функцию с  параметром - массивом пред заказов, перед записью заказа вызывай с массивом из предыдущего и текущего предзаказа.
а в обработке обновления (или руками) вызови с массивом со всеми предзаказами.

а запрос для ДС сделать можно, но он будет тупить.
9 Игорь_МММ
 
08.04.16
16:36
Выбрать
Заказ.Ссылка
Из Заказ
Где Заказ.Основание = &Основание

Количество = Запрос.выполнить.выгрузить.Количество()
ну а там в событии ПриАктивизацииСтроки присваивайте Количество чему нужно
10 Fragster
 
гуру
08.04.16
16:36
> массивом из предыдущего и текущего предзаказа.
Ссылка.Предзаказ и Предзаказ
11 Fragster
 
гуру
08.04.16
16:38
(6)это вывод просто в поле, а не в сам ДС. ну и выбирать все ссылки и считать их количество вместо получения нужного значения прямо в запросе - это странно.
12 Diman000
 
08.04.16
16:38
Количество Различные вроде, не?

Ну и РС вполне себе вариант. Для дин. списков часто производительность ключевой момент.
13 Игорь_МММ
 
08.04.16
16:45
Выбрать    
    Количество(Заказ.Ссылка) Как Количество
    &Основание Как Основание
Поместить Таблица
Из Заказ
Где Заказ.Основание = &Основание
Сгруппировать по Основание
;
Выбрать
    ПредЗаказ
    Количество
Из ДокументыПредзаказ
ЛевоеСоединение Таблица
    По Предзаказ.Ссылка = Таблица.Основание
14 Fragster
 
гуру
08.04.16
16:48
(13) а еще в ДС не работают пакетные запросы, как на зло (по крайней мере до 8.3.8, да и в ней они намного менее эффективны из-за того, что основная таблица ограничивается 25-50 строками, а "неосновные" запросы пакета гребут все данные)
15 Игорь_МММ
 
08.04.16
16:55
(14) да, был не прав
не шибко силен..
а нельзя что-то типа при создании формы заполнять эту колонку с количеством?
16 Fragster
 
гуру
08.04.16
16:56
(15) в управляемых формах в динамическом списке - нет
17 Игорь_МММ
 
08.04.16
16:57
... сделать реквизит на форме типа ТЗ - его заполнять запросом ?
18 Fragster
 
гуру
08.04.16
17:01
(17) тут тоже фигня - надо прописывать все возможности ДС - обновление данных и представлений, добавление/изменение/удаление данных, всякие вводы на основании и прочие глобальные команды...
19 TrueF
 
08.04.16
17:03
Спасибо всем, пошел РС ваять. Видимо это легче всего выйдет.
20 aleks_default
 
08.04.16
17:52
ВЫБРАТЬ
    ДокументПредЗаказ.Ссылка,
    ДокументПредЗаказ.Номер,
    ДокументПредЗаказ.Дата,
    ДокументПредЗаказ.Контрагент,    
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ Заказ.Ссылка) Как КоличествоЗаказов
ИЗ
    Документ.ПредЗаказ КАК ДокументПредЗаказ                      
ЛЕВОЕ СОЕДИНЕНИЕ
      Документ.Заказ КАК Заказ
             ПО ДокументПредЗаказ.Ссылка = Заказ.Основание
СГРУППИРОВАТЬ ПО
    ДокументПредЗаказ.Ссылка,
    ДокументПредЗаказ.Номер,
    ДокументПредЗаказ.Дата,
    ДокументПредЗаказ.Контрагент
21 Cyberhawk
 
08.04.16
17:55
(20) Ага, при каждом прокручивании... из года в год...
22 aleks_default
 
08.04.16
17:59
ну пусть попробует, чо
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс