СКД: обороты по регистру между документами #740186


#0 by Asmody
Задачка на сообразительность: даны два документа Док1 и Док2 одного вида. Требуется на СКД получить обороты по некоторому регистру за период между этими документами. Без кода. Документы задаются как параметры СКД.
#1 by Cyberhawk
Сделать из них моменты времени через выражения СКД, не?
#2 by Asmody
а ты попробуй
#3 by Dmitry1c
в смысле, без кода?
#4 by DirecTwiX
Сделать из них границы через выражения СКД
#5 by DrShad
Каково вознаграждение?
#6 by Asmody
в смысле все внутри СКД
#7 by DirecTwiX
Не, Границ она не знает. Думал, проблема в получении даты для момента.
#8 by Asmody
вот-вот
#9 by DarKySiK
А чего мешает в параметры границы передавать по документам вместе с самими документами (если они еще где-то нужны)...
#10 by Asmody
Куда передавать? Параметры определены в настройках, форма генерится автоматом. "Чистая" СКД, ни строчки другого кода.
#11 by ДенисЧ
"Асмоде?й (собственно Ашмедай, то есть искуситель) — злой, сластолюбивый демон" Я всегда (уже over 4 года) говорил, что СКД от лукавого...
#12 by DarKySiK
печаль
#13 by DirecTwiX
Регистраторов у регистра несколько? Время выполнения запроса важно? У тебя получилось?)
#14 by mehfk
ВЫБРАТЬ
#15 by mehfk
Примерно как-то так.
#16 by PR
В модуле отчета В СКД в параметрах Момент1 и Момент2 соответственно.
#17 by Asmody
Документы могут не являтся регистратором. Роман,
#18 by Asmody
> Регистраторов у регистра несколько? Не имеет значения > Время выполнения запроса важно? Время хочется разумное > У тебя получилось?) Несколько сегодняшних идей не дали результата. Есть еще несколько, буду пробовать завтра.
#19 by PR
Не уверен, что без кода получится. А зачем без кода-то?
#20 by Asmody
Хочется
#21 by Asmody
Это же задачка :)
#22 by PR
Нууу, думаю, что разве что если в выражение параметра воткнуть код, так ведь не втыкается же :))
#23 by PR
+ С учетом того, что делается двумя строчками кода и очень красиво без всяких созданий форм, я бы сделал и не парился :))
#24 by Asmody
Я остановился на том, что можно через связь запросов перекинуть моменты времени в параметры виртуальной таблицы Обороты.
#25 by Armando
>>Документы могут не являтся регистратором Тогда непонятно чего ты хочешь. Когда в параметры виртуальной таблицы передаешь момент времени, ограничение именно на регистратор делается.
#26 by Armando
Вот запрос который физически на 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 by Asmody
Чего хочу - понятно: есть два документа. Любых. Хоть два События, неважно, они просто задают период. Хочу посчитать, какие, например, продажи были между первым и вторым документом.
#28 by Armando
Вот по дате и сравнивай
#29 by Asmody
По какой дате? Или ты предлагаешь самому городить аналог таблицы Остатки?
#30 by Armando
По полю период. Давай представим, что есть оборотный регистр с одним измерением, пусть будет номенклатура, и ресурс сумма. Как бы ты выполнил свою задачу не на СКД? Хоть кодом, хоть как.
#31 by Asmody
Взял бы моменты времени от документов. Собственно, в этом состоит суть задачки.
#32 by Asmody
+ Даже не моменты времени, а границы.
#33 by Armando
граница это дата. момент времени в твоем случае тоже дата, т.к. ссылку с регистратором ты сравнивать не хочешь
#34 by Asmody
Ты не понял суть проблемы.
#35 by Asmody
Задача сводится к тому, как из документа, заданного в параметре СКД, вытянуть МоментВремени (это просто) и подставить его в параметр виртуальной таблицы. Или, если отойти от СКД к просто запросам, как, передав в запрос параметр типа ДокументСсылка и , подставить его момент времени в параметр виртуальной таблицы.
#36 by Armando
см в 1С это был такой запрос: выбрать измерение, ресурс из ОбротныйРегистр.Обороты(&МоментВремени1, &МоментВремени2)
#37 by Asmody
Задача решается без использования виртуальной таблицы, надо просто городить ее аналог в запросе. Задача решается с виртуальной таблицей, но без параметров, сравнением периодов с дополнительными группировками. На СКД я предполагаю, что ее можно сделать через передачу параметров в связях таблиц. На "голом" запросе, скорее всего, решения не будет.
#38 by Asmody
Нет параметра типа МоментВремени. Есть параметр типа Документ.
#39 by Asmody
ДокументСсылка
#40 by Armando
На СКД через связь наборов можно параметр передать
#41 by Armando
В одном наборе данных из документа вытаскиваешь момент времени и передаешь его параметром в другой набор данных
#42 by Asmody
это ты у меня в прочитал и догадался или в ?
#43 by Armando
если под связью таблиц и связью запросов подразумевалась связь наборов данных, то извините
#44 by Armando
Но я все равно не догоняю. С одной стороны ты хочешь в параметры передать момент времени, а с другой не хочешь сравнивать с регистратором. Даже не знаю что сказать.
#45 by Asmody
Пишу большими жирными буквами: в параметры передается , ни момент времени, ни дата, ничего иного. И что я должен сравнить с регистратором? P.S. Наборы данных я называю "запросами" автоматически, поскольку ни разу ни у кого не встречал и сам не использовал "набор данных объект", а объединение суть тот же запрос.
#46 by Armando
ок выражусь точнее. В параметры компоновки ты передаешь ссылку, а в параметры виртуальной таблицы хочешь чтоб передался момент времени. Так?
#47 by PR
Не момент времени, а граница на основании этого момента времени
#48 by Armando
не важно. Если передавать границу на основании момента времени, то условие все равно по регистратору делается. было передано две границы. одна исключающая, другая включающая. 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 by Trance_1C
Если типы документов-границ однозначны, то можно сначала получить их моменты времени, а потом сделать выборку оборотов за период между ними, не вижу проблемы сделать все это на голом СКД
#52 by Classic
Чет не доганяю, в чем проблема. Ну используй не Обороты, а саму таблицу регистра
#53 by Asmody
Ответ не верный.
#54 by Asmody
Я, кстати, сделал через связь наборов данных.
#55 by Cyberhawk
передавал в подчиненный набор? не прав?
#56 by Зеленый пень
В чем проблема? Ссылки (регистраторы) сравниваются точно так же как и даты. Если в пределах одной секунды - сравниваем ссылки.
#57 by DirecTwiX
Ссылки сравниваются по-другому
#58 by DirecTwiX
Они завязаны на номере таблицы документов.
#59 by Зеленый пень
Чего? Какие номера?
#60 by DirecTwiX
Того. Порядковые, таблиц. Так, например, ссылки заказов покупателей всегда меньше ссылок требований-накладных.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С