|
Помогите разобраться с запросом в скд | ☑ | ||
---|---|---|---|---|
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) временные таблицы для слабаков )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |