Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Помогите разобраться с запросом в скд

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


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

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


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

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

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

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

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

Выбрать
ДокументПродажи.Ссылка,
ВТ.ДисконтнаяКарта
ИЗ
ВТ КАК ВТ
ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДокументыПродажи КАК ДокументПродажи
ПО ВТ.Дата = ДокументПродажи.Дата
И ДокументПродажи.Проведен


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

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

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

карта2 - Док 1

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

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

////////////////////////////////////////////////////////////////////////////////

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует