Имя: Пароль:
1C
1С v8
Помогите разобраться с запросом в скд
,
0 maxim-sychov
 
09.11.16
12:55
Имеем:
Справочник - Дисконтные карты
Документ - продажа
Регистр - накопление по картам (если в док.продажа указана карта то делаем запись)


Нужно:
по каждой карте получить ОДИН ПОСЛЕДНИЙ документ выполнивший двидение по регистру.

выбрать ПЕРВЫЕ 1 (с упорядочиванием по дате) выбирает всего 1 документ. А нужно 1 по каждой карте!(если есть)


всю голову сломал (((
1 Живой Ископаемый
 
09.11.16
13:01
В СКД возможны пакеты.
2 DrShad
 
09.11.16
13:04
выбирай где дата максимум
3 maxim-sychov
 
09.11.16
13:04
Я знаю.

И что в эти пакеты пихать?

Я сделал 2 пакета. в первый все доки по которым были движения, а второй - все карточки и выбор первого 1 из пакета с доками.

результат - ОДИН документ. а не один по каждой карте...
4 Живой Ископаемый
 
09.11.16
13:24
Короче, я делал (в том числе) и так: Я готовил СКД программно, и по ходу, перед выполнением  запроса СКД выполнял еще и другой запрос, в результате которого я получал для последний документ для нужной мне группировки. Помещал в фиксированное соответствие.
В основной СКД имел вычисляемое поле, в функцию которого передавал или айди или ссылку - значение группировки, и возвращал из фиксированного соответствия последний документ.
Ну то есть такой себе кэш подготавливал.
5 НЕА123
 
09.11.16
13:30
6 maxim-sychov
 
09.11.16
13:40
(4) Мне тогда непонятна идея "Выбрать первые N"

Наверняка просто не правильно использую...
7 Потрошитель Запросов
 
09.11.16
13:42
Выбрать
Максимум(ДокументПродажи.Дата) КАК Дата,
ДокументПродажи.ДисконтнаяКарта
ПОМЕСТИТЬ ВТ
ИЗ
Документ.ДокументыПродажи КАК ДокументПродажи
ГДЕ
ДокументПродажи.Проведен
СГРУППИРОВАТЬ ПО
ДокументПродажи.ДисконтнаяКарта
;
////////////////
Выбрать
ДокументПродажи.Ссылка,
ВТ.ДисконтнаяКарта
ИЗ
ВТ КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДокументыПродажи КАК ДокументПродажи
ПО ВТ.Дата = ДокументПродажи.Дата
И ДокументПродажи.Проведен


Так?
8 Живой Ископаемый
 
09.11.16
13:55
2(6) да, он тут вообще не годится
9 maxim-sychov
 
09.11.16
14:25
(7) Похоже на правду. НО выбирает всеравно все документы

в результате:

карта1 - Док 3
карта1 - Док 2
карта1 - Док 1

карта2 - Док 1

карта3 - Док 1
10 maxim-sychov
 
09.11.16
14:27
Стоп...
11 maxim-sychov
 
09.11.16
15:19
(7)
В таком варианте работает...
Но запуская в копии с малым количеством доков  -все отображает мгновенно, а там где много документов.... зависает (
12 aleks_default
 
09.11.16
16:29
(7) бред
13 bootini
 
09.11.16
16:34
(12) почему же бред, вот в соседней теме жалуются на долгую работу аналогичной конструкции
Долгое открытие формы в клиент-серверном режиме
и там только цены номенклатуры, а тут дисконтные карты, которых может быть сотня тысяч, а уж продаж по ним у-у...
14 Windyhead
 
09.11.16
16:40
в (7) соединять надо не только по дате , но и по диск. карте, а то при совпадении дат у документов фигню получите
15 aleks_default
 
09.11.16
16:53
|Выбрать
|Док.Ссылка,
|Док.ДисконтнаяКарта
|ИЗ                
|Документ.ДокументыПродажи КАК Док
|ГДЕ Док.Дата в (Выбрать Максимум(Док1.Дата) ИЗ Документ.ДокументыПродажи КАК Док1 ГДЕ Док.ДисконтнаяКарта = Док1.ДисконтнаяКарта)
16 Потрошитель Запросов
 
10.11.16
05:35
(14) действительно, мой косяк
(15) разве вложенный в условие запрос отработает быстрее пакета?
17 DmVl76
 
10.11.16
06:12
</CODE>
ВЫБРАТЬ
    ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта,
    МАКСИМУМ(ПродажиПоДисконтнымКартамОбороты.Период) КАК Период
ПОМЕСТИТЬ втКартыСМаксПериодомПродажи
ИЗ
    РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(, , Регистратор, ) КАК ПродажиПоДисконтнымКартамОбороты

СГРУППИРОВАТЬ ПО
    ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    втКартыСМаксПериодомПродажи.ДисконтнаяКарта,
    ПродажиПоДисконтнымКартамОбороты.Регистратор
ИЗ
    втКартыСМаксПериодомПродажи КАК втКартыСМаксПериодомПродажи
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(, , Регистратор, ) КАК ПродажиПоДисконтнымКартамОбороты
        ПО втКартыСМаксПериодомПродажи.ДисконтнаяКарта = ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта
            И втКартыСМаксПериодомПродажи.Период = ПродажиПоДисконтнымКартамОбороты.Период
</CODE>
18 Windyhead
 
10.11.16
10:25
(15) временные таблицы для слабаков )))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший