|
СКД: обороты по регистру между документами | ☑ | ||
---|---|---|---|---|
0
Asmody
15.04.15
✎
19:23
|
Задачка на сообразительность: даны два документа Док1 и Док2 одного вида. Требуется на СКД получить обороты по некоторому регистру за период между этими документами. Без кода. Документы задаются как параметры СКД.
|
|||
1
Cyberhawk
15.04.15
✎
19:24
|
Сделать из них моменты времени через выражения СКД, не?
|
|||
2
Asmody
15.04.15
✎
19:26
|
(1) а ты попробуй
|
|||
3
Dmitry1c
15.04.15
✎
19:31
|
в смысле, без кода?
|
|||
4
DirecTwiX
15.04.15
✎
19:52
|
Сделать из них границы через выражения СКД
|
|||
5
DrShad
15.04.15
✎
19:55
|
Каково вознаграждение?
|
|||
6
Asmody
15.04.15
✎
19:56
|
(3) в смысле все внутри СКД
|
|||
7
DirecTwiX
15.04.15
✎
19:57
|
(4) Не, Границ она не знает. Думал, проблема в получении даты для момента.
|
|||
8
Asmody
15.04.15
✎
19:59
|
(7) вот-вот
|
|||
9
DarKySiK
15.04.15
✎
20:10
|
А чего мешает в параметры границы передавать по документам вместе с самими документами (если они еще где-то нужны)...
|
|||
10
Asmody
15.04.15
✎
20:18
|
(9) Куда передавать? Параметры определены в настройках, форма генерится автоматом. "Чистая" СКД, ни строчки другого кода.
|
|||
11
ДенисЧ
15.04.15
✎
20:20
|
"Асмоде?й (собственно Ашмедай, то есть искуситель) — злой, сластолюбивый демон"
Я всегда (уже over 4 года) говорил, что СКД от лукавого... |
|||
12
DarKySiK
15.04.15
✎
20:22
|
(10) печаль
|
|||
13
DirecTwiX
15.04.15
✎
20:29
|
Регистраторов у регистра несколько?
Время выполнения запроса важно? У тебя получилось?) |
|||
14
mehfk
15.04.15
✎
20:43
|
ВЫБРАТЬ
Продажи.МоментВремени ПОМЕСТИТЬ МВ_1 ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Регистратор = &Док1 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ Продажи.МоментВремени ПОМЕСТИТЬ МВ_2 ИЗ РегистрНакопления.Продажи КАК Продажи ГДЕ Продажи.Регистратор = &Док2 ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ Продажи.Период, Продажи.Регистратор, Продажи.НомерСтроки, Продажи.Активность, Продажи.Номенклатура, Продажи.ХарактеристикаНоменклатуры, Продажи.ЗаказПокупателя, Продажи.ДоговорКонтрагента, Продажи.ДокументПродажи, Продажи.Подразделение, Продажи.Проект, Продажи.Организация, Продажи.Контрагент, Продажи.Количество, Продажи.Стоимость, Продажи.СтоимостьБезСкидок, Продажи.НДС ИЗ РегистрНакопления.Продажи КАК Продажи ВНУТРЕННЕЕ СОЕДИНЕНИЕ МВ_1 КАК МВ_1 ПО Продажи.МоментВремени >= МВ_1.МоментВремени ВНУТРЕННЕЕ СОЕДИНЕНИЕ МВ_2 КАК МВ_2 ПО Продажи.МоментВремени <= МВ_2.МоментВремени |
|||
15
mehfk
15.04.15
✎
20:43
|
Примерно как-то так.
|
|||
16
PR
15.04.15
✎
20:52
|
(10) В модуле отчета
В СКД в параметрах Момент1 и Момент2 соответственно. |
|||
17
Asmody
15.04.15
✎
21:56
|
(14) Документы могут не являтся регистратором.
(16) Роман, без кода, на "чистом" СКД |
|||
18
Asmody
15.04.15
✎
22:00
|
(13)
> Регистраторов у регистра несколько? Не имеет значения > Время выполнения запроса важно? Время хочется разумное > У тебя получилось?) Несколько сегодняшних идей не дали результата. Есть еще несколько, буду пробовать завтра. |
|||
19
PR
15.04.15
✎
22:03
|
(17) Не уверен, что без кода получится.
А зачем без кода-то? |
|||
20
Asmody
15.04.15
✎
22:05
|
(19) Хочется
|
|||
21
Asmody
15.04.15
✎
22:05
|
Это же задачка :)
|
|||
22
PR
15.04.15
✎
22:06
|
(21) Нууу, думаю, что разве что если в выражение параметра воткнуть код, так ведь не втыкается же :))
|
|||
23
PR
15.04.15
✎
22:07
|
+(22) С учетом того, что делается двумя строчками кода и очень красиво без всяких созданий форм, я бы сделал и не парился :))
|
|||
24
Asmody
15.04.15
✎
22:09
|
(22) Я остановился на том, что можно через связь запросов перекинуть моменты времени в параметры виртуальной таблицы Обороты.
|
|||
25
Armando
15.04.15
✎
22:58
|
(17) >>Документы могут не являтся регистратором
Тогда непонятно чего ты хочешь. Когда в параметры виртуальной таблицы передаешь момент времени, ограничение именно на регистратор делается. |
|||
26
Armando
15.04.15
✎
23:00
|
Вот запрос который физически на SQL выполняется, когда в параметры суешь момент времени. Такой же можно самому сделать без использования виртуальной таблицы оборотов
SELECT T1.Fld18168RRef, T1.Fld18179Turnover_ FROM (SELECT T2._Fld18168RRef AS Fld18168RRef, CAST(SUM(T2._Fld18179) AS NUMERIC(26, 8)) AS Fld18179Turnover_ FROM dbo._AccumRg18167 T2 WHERE ((T2._Fld894 = ?)) AND ((T2._Period > ? OR T2._Period = ? AND (T2._RecorderTRef > 0x0000011B OR T2._RecorderTRef = 0x0000011B AND T2._RecorderRRef >= ?)) AND (T2._Period < ? OR T2._Period = ? AND (T2._RecorderTRef < 0x0000011B OR T2._RecorderTRef = 0x0000011B AND T2._RecorderRRef <= ?)) AND T2._Active = 0x01) GROUP BY T2._Fld18168RRef HAVING (CAST(SUM(T2._Fld18179) AS NUMERIC(26, 8))) <> ?) T1 |
|||
27
Asmody
15.04.15
✎
23:01
|
(25) Чего хочу - понятно: есть два документа. Любых. Хоть два События, неважно, они просто задают период. Хочу посчитать, какие, например, продажи были между первым и вторым документом.
|
|||
28
Armando
15.04.15
✎
23:03
|
(27) Вот по дате и сравнивай
|
|||
29
Asmody
15.04.15
✎
23:08
|
(28) По какой дате? Или ты предлагаешь самому городить аналог таблицы Остатки?
|
|||
30
Armando
15.04.15
✎
23:12
|
(29) По полю период. Давай представим, что есть оборотный регистр с одним измерением, пусть будет номенклатура, и ресурс сумма. Как бы ты выполнил свою задачу не на СКД? Хоть кодом, хоть как.
|
|||
31
Asmody
15.04.15
✎
23:37
|
(30) Взял бы моменты времени от документов. Собственно, в этом состоит суть задачки.
|
|||
32
Asmody
15.04.15
✎
23:37
|
(31)+ Даже не моменты времени, а границы.
|
|||
33
Armando
15.04.15
✎
23:45
|
(31) (32) граница это дата. момент времени в твоем случае тоже дата, т.к. ссылку с регистратором ты сравнивать не хочешь
|
|||
34
Asmody
15.04.15
✎
23:47
|
(33) Ты не понял суть проблемы.
|
|||
35
Asmody
15.04.15
✎
23:54
|
Задача сводится к тому, как из документа, заданного в параметре СКД, вытянуть МоментВремени (это просто) и подставить его в параметр виртуальной таблицы.
Или, если отойти от СКД к просто запросам, как, передав в запрос параметр типа ДокументСсылка и только его, подставить его момент времени в параметр виртуальной таблицы. |
|||
36
Armando
16.04.15
✎
00:00
|
(35) см (26) в 1С это был такой запрос:
выбрать измерение, ресурс из ОбротныйРегистр.Обороты(&МоментВремени1, &МоментВремени2) |
|||
37
Asmody
16.04.15
✎
00:01
|
Задача решается без использования виртуальной таблицы, надо просто городить ее аналог в запросе. Задача решается с виртуальной таблицей, но без параметров, сравнением периодов с дополнительными группировками.
На СКД я предполагаю, что ее можно сделать через передачу параметров в связях таблиц. На "голом" запросе, скорее всего, решения не будет. |
|||
38
Asmody
16.04.15
✎
00:01
|
(36) Нет параметра типа МоментВремени. Есть параметр типа Документ.
|
|||
39
Asmody
16.04.15
✎
00:02
|
ДокументСсылка
|
|||
40
Armando
16.04.15
✎
00:03
|
На СКД через связь наборов можно параметр передать
|
|||
41
Armando
16.04.15
✎
00:05
|
В одном наборе данных из документа вытаскиваешь момент времени и передаешь его параметром в другой набор данных
|
|||
42
Asmody
16.04.15
✎
00:13
|
(40) это ты у меня в (37) прочитал и догадался или в (24)?
|
|||
43
Armando
16.04.15
✎
00:22
|
если под связью таблиц и связью запросов подразумевалась связь наборов данных, то извините
|
|||
44
Armando
16.04.15
✎
00:25
|
Но я все равно не догоняю. С одной стороны ты хочешь в параметры передать момент времени, а с другой не хочешь сравнивать с регистратором. Даже не знаю что сказать.
|
|||
45
Asmody
16.04.15
✎
00:40
|
(44) Пишу большими жирными буквами: в параметры передается ДОКУМЕНТССЫЛКА, ни момент времени, ни дата, ничего иного. И что я должен сравнить с регистратором?
P.S. Наборы данных я называю "запросами" автоматически, поскольку ни разу ни у кого не встречал и сам не использовал "набор данных объект", а объединение суть тот же запрос. |
|||
46
Armando
16.04.15
✎
00:47
|
(45) ок выражусь точнее. В параметры компоновки ты передаешь ссылку, а в параметры виртуальной таблицы хочешь чтоб передался момент времени. Так?
|
|||
47
PR
16.04.15
✎
00:59
|
(46) Не момент времени, а граница на основании этого момента времени
|
|||
48
Armando
16.04.15
✎
01:31
|
(47) не важно.
Если передавать границу на основании момента времени, то условие все равно по регистратору делается. было передано две границы. одна исключающая, другая включающая. SELECT T1.Fld12442RRef, T1.Fld11029Turnover_ FROM (SELECT T2._Fld12442RRef AS Fld12442RRef, CAST(SUM(T2._Fld11029) AS NUMERIC(27, 8)) AS Fld11029Turnover_ FROM dbo._AccumRg11023 T2 WITH(NOLOCK) WHERE (T2._Period > ? OR T2._Period = ? AND T2._RecorderRRef > ?) AND (T2._Period < ? OR T2._Period = ? AND T2._RecorderRRef <= ?) AND T2._Active = 0x01 GROUP BY T2._Fld12442RRef HAVING (CAST(SUM(T2._Fld11029) AS NUMERIC(27, 8))) <> ?) T1 |
|||
49
Trance_1C
16.04.15
✎
05:22
|
Если типы документов-границ однозначны, то можно сначала получить их моменты времени, а потом сделать выборку оборотов за период между ними, не вижу проблемы сделать все это на голом СКД
|
|||
52
Classic
21.04.15
✎
17:56
|
Чет не доганяю, в чем проблема. Ну используй не Обороты(), а саму таблицу регистра
|
|||
53
Asmody
21.04.15
✎
18:01
|
(52) Ответ не верный.
|
|||
54
Asmody
21.04.15
✎
18:01
|
Я, кстати, сделал через связь наборов данных.
|
|||
55
Cyberhawk
21.04.15
✎
19:18
|
(54) передавал в подчиненный набор? (25) не прав?
|
|||
56
Зеленый пень
23.04.15
✎
12:22
|
В чем проблема?
Ссылки (регистраторы) сравниваются точно так же как и даты. Если в пределах одной секунды - сравниваем ссылки. |
|||
57
DirecTwiX
23.04.15
✎
13:28
|
(56) Ссылки сравниваются по-другому
|
|||
58
DirecTwiX
23.04.15
✎
13:29
|
(57) Они завязаны на номере таблицы документов.
|
|||
59
Зеленый пень
23.04.15
✎
15:13
|
(58) Чего? Какие номера?
|
|||
60
DirecTwiX
24.04.15
✎
11:09
|
(59) Того. Порядковые, таблиц.
Так, например, ссылки заказов покупателей всегда меньше ссылок требований-накладных. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |