|
СКД: Содинение наборов данных, поле связи XYNULL = X, Y, Null | ☑ | ||
---|---|---|---|---|
0
К_Дач
09.11.12
✎
12:25
|
1 набор данных ХозрасчетныйОбороты:
поля - ВалютаОперации - ДатаОперации ВалютаОперации определена как: ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Валютный ТОГДА ХозрасчетныйОбороты.Валюта КОГДА ХозрасчетныйОбороты.КорСчет.Валютный ТОГДА ХозрасчетныйОбороты.ВалютаКор ИНАЧЕ &Рубль КОНЕЦ КАК ВалютаОперации ДатаОперации определена как: НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ДЕНЬ) КАК ДатаОперации 2 наборданных КурсыВалютСрезПоследних: запрос: ВЫБРАТЬ КурсыВалютСрезПоследних.Период КАК ДатаКурса, КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Курс КАК Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта = &ТекВалюта) КАК КурсыВалютСрезПоследних Соединяю наборы: 1. Источник ДатаОперации Приемник ДатаКурса Параметр ----> ДатаСреза 2. Источник ВалютаОперации Приемник Валюта Параметр ----> ТекВалюта Так вот. Соединение по дате отлично работает. По валюте работает во всех случаях, если валюта не рубли. То есть получает курсы валют, все кроме рублей. Есть мнение, что получение данных в наборе производится ДО передачи в них параметров, которые не являются критичными (все, кроме параметров виртуальных таблиц). Параметр &Рубль, он определяет заполнение поля и критичным для связи не является. То есть, как я думаю происходит так: 1. Получение данных в наборе. 2. Связывание с другим набором. 3. Заполнение полей в наборах, определенных передачей параметров. Если определить поле ВалютаОперации = &Рубль и связывать по нему - работать не будет... Вопрос: Есть поле XYNULL, могущее принимать значения X, Y, Null. Как "подменить" Null, чтобы потом по полю организовать связь? Прокомментируйте, плз... |
|||
1
acsent
09.11.12
✎
12:27
|
Как "подменить" Null,
ЕСТЬNULL |
|||
2
К_Дач
09.11.12
✎
12:30
|
(1)
Ты не понял... Null не на уровне получения данных в запросе. То есть параметр еще для подмены Null еще не передан, но фактически вместо параметра там Null |
|||
3
GLazNik
09.11.12
✎
12:33
|
(0) ОФФ XYN.... ну и поля...
|
|||
4
samozvanec
09.11.12
✎
12:33
|
isnull(&Рубль,&Рубль)
|
|||
5
К_Дач
09.11.12
✎
12:35
|
(3) я просто обобщил свой пример.... причем тут название поля то. Какая разница, какие наборы связывать, вопрос то не в этом же.
|
|||
6
samozvanec
09.11.12
✎
12:35
|
на всякий случай даже так
isnull(isnull(&Рубль, &Рубль), &Рубль) |
|||
7
К_Дач
09.11.12
✎
12:38
|
(6) Прочитай внимательно, плз:
То есть, как я думаю происходит так: 1. Получение данных в наборе. 2. Связывание с другим набором. 3. Заполнение полей в наборах, определенных передачей параметров. isnull(&Рубль,&Рубль) - не работает |
|||
8
К_Дач
09.11.12
✎
12:39
|
на момент соединения параметр еще не передан, другими словами
|
|||
9
GLazNik
09.11.12
✎
12:39
|
(5) для начала бы более понятно сформировать вопрос. я в ваши "подменах" запутался. В запросе можно использовать ЕСТЬNULL и ЕСТЬ NULL
(6) isnull(isnull(isnull(&Рубль, &Рубль), &Рубль), &Рубль) так надежнее будет |
|||
10
shuhard
09.11.12
✎
12:39
|
(2)[Null не на уровне получения данных в запросе.]
передавать NULL в запрос да мсье прост эсперт в извращениях |
|||
11
К_Дач
09.11.12
✎
12:42
|
(10) да привязались вы к этому Null, это всего лишь мое предположение.
Упрощу вопрос: по полю ВалютаОперации = &Рубль связь наборов данных в СКД не работает |
|||
12
GLazNik
09.11.12
✎
12:42
|
(8) вот убей, но фразы "на момент соединения параметр еще не передан, другими словами" не понимаю. запрос просто не выполнится без переданных параметров
|
|||
13
shuhard
09.11.12
✎
12:43
|
(11) [Упрощу вопрос: ]
ню ню |
|||
14
К_Дач
09.11.12
✎
12:45
|
(12)
Все верно ты говоришь, это и без слов понятно... В запросе первого набора есть поле, как написано в (11) Соединияя со вторым набором, запрос которого: ВЫБРАТЬ КурсыВалютСрезПоследних.Период КАК ДатаКурса, КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Курс КАК Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта = &ТекВалюта) КАК КурсыВалютСрезПоследних с помощью связи: Источник ВалютаОперации Приемник Валюта Параметр ----> ТекВалюта ничего не получаем. я не знаю, как еще понятнее объяснить, ну могу оба запроса тут привести или СКД сохранить в файл и куда-нить залить |
|||
15
GLazNik
09.11.12
✎
12:46
|
(11) наверное вам нужно что-то типа такого условия: (ВалютаОперации ЕСТЬ NULL) ИЛИ (ВалютаОперации = &Рубль)
|
|||
16
shuhard
09.11.12
✎
12:48
|
(15) не а,
надо передать в правый набор валюту и вернуть её для связи ссылка на сайт СКД выкладывалась на мисту 100500 раз |
|||
17
К_Дач
09.11.12
✎
12:51
|
(16) именно, передать в правый набор для связи (то есть в параметр второго набора) но как передать, если он в первом наборе то еще не заполнен...
ткни носом в этот сайт, если нетрудно |
|||
18
shuhard
09.11.12
✎
12:53
|
(17) блеать
ну на куя на форуме поиск, если я должен тратить на это время http://1cskd.ru/2010/10/srez-poslednix-na-kazhduyu-datu-v-skd/ |
|||
19
К_Дач
09.11.12
✎
12:56
|
(18)
спасибо, конечно... но ответа на мой вопрос там нет... |
|||
20
shuhard
09.11.12
✎
12:57
|
(19) форум так не думает
|
|||
21
ProDeveloper
09.11.12
✎
12:57
|
(18) может ты подскажешь?
v8: Вопрос знатокам КД, ПКС ПометкаУдаления |
|||
22
shuhard
09.11.12
✎
12:58
|
(21) не флюди
|
|||
23
GLazNik
09.11.12
✎
12:58
|
(19) а приведи весь запрос...
|
|||
24
К_Дач
09.11.12
✎
12:59
|
В примере по ссылке из (18) соединяют наборы по ЗАПОЛНЕННЫМ полям.
А у меня поле в момент связи еще не заполнено... Я не просто так написал (7) |
|||
25
К_Дач
09.11.12
✎
13:01
|
||||
26
GLazNik
09.11.12
✎
13:03
|
"А у меня поле в момент связи еще не заполнено..." Это как??? взрыв мозга
|
|||
27
GLazNik
09.11.12
✎
13:03
|
(25) да ну нафиг... текст давай
|
|||
28
К_Дач
09.11.12
✎
13:06
|
____________________________________________________________
ВЫБРАТЬ НАЧАЛОПЕРИОДА(ХозрасчетныйОбороты.Период, ДЕНЬ) КАК ДатаОперации, ВЫБОР КОГДА ХозрасчетныйОбороты.Счет.Валютный ТОГДА ХозрасчетныйОбороты.Валюта КОГДА ХозрасчетныйОбороты.КорСчет.Валютный ТОГДА ХозрасчетныйОбороты.ВалютаКор ИНАЧЕ &Рубль КОНЕЦ КАК ВалютаОперации ИЗ РегистрБухгалтерии.Хозрасчетный.Обороты(, , Регистратор, Счет В (&СписокСчетов), , , НЕ КорСчет В (&СписокСчетов), ) КАК ХозрасчетныйОбороты ____________________________________________________________ ВЫБРАТЬ КурсыВалютСрезПоследних.Период КАК ДатаКурса, КурсыВалютСрезПоследних.Валюта КАК Валюта, КурсыВалютСрезПоследних.Курс КАК Курс ИЗ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаСреза, Валюта = &ТекВалюта) КАК КурсыВалютСрезПоследних ____________________________________________________________ 2 связи на закладки "связи наборов": ДатаОперации - ДатаКурса - Параметр ДатаСреза ВалютаОперации - Валюта - Параметр ТекВалюта |
|||
29
К_Дач
09.11.12
✎
13:07
|
(26) а вот так))) ради интереса, скачай схему, встрой в отчет и сформируй - дело 5 секунд
|
|||
30
ProDeveloper
09.11.12
✎
13:14
|
Далай все в запросе
Пользуйся) |
|||
31
ProDeveloper
09.11.12
✎
13:15
|
И покури ещё раз ссылку по (18)
|
|||
32
К_Дач
09.11.12
✎
13:19
|
(30)
Спасибо)) Только я пишу отчет для тонкого клиента, СКД мне нужна, чтобы вытащить на форму настройки отборов и сортировок и еще всякие плюшки... я бы не стал тему создавать, если б удовлетворился решением с помощью запроса.... сначала сам всю голову сломал |
|||
33
ProDeveloper
09.11.12
✎
13:21
|
(32) И? Для тонкого и что? В СКД делай все в 1 наборе, срез последних на каждую дату получай в запросе как я тебе написал и будет тебе счастье
|
|||
34
К_Дач
09.11.12
✎
13:23
|
(31)
все, что написано по ссылке - у меня настроено. честное пионерское. (33) ну как вариант... по-видимому, так и придется поступить |
|||
35
shuhard
09.11.12
✎
13:52
|
(33) зря это, многие функции связи наборов повторить запросом не удастся
|
|||
36
ProDeveloper
09.11.12
✎
14:11
|
(35) каждый случай индивидуален, по личному опыту скажу что СКД далеко не идеальна и баги в ней есть, почитай хотя бы эту ветку v8: СКД Глюк платформы ? Параметры виртуальных таблиц в СКД и ОТБОР
|
|||
37
shuhard
09.11.12
✎
14:24
|
(36)[СКД далеко не идеальна и баги в ней есть,]
речь не о багах, а о том, что многие задачи не имеют иных решений, кроме связи наборов |
|||
38
К_Дач
09.11.12
✎
14:28
|
(38)
Вобщем, если выборку валюты из ХозрасчетныйОборот убрать во вложенный запрос - работает... вот |
|||
39
ProDeveloper
09.11.12
✎
14:29
|
(37) попробуй сделать то, что пишет ТС, в результате в таком случае получается не совсем корректный срез последних на каждую дату для валюты когда она определена в 1 наборе как
через СКД связыванием 2х наборов данных через параметр связи |
|||
40
ProDeveloper
09.11.12
✎
14:32
|
Помочь может кстати, если в 1 наборе все поместить во временную таблицу, а потом просто ещё раз все из неё выбрать. И делать через 2 связанных набора СКД по параметрам связи
|
|||
41
К_Дач
09.11.12
✎
14:34
|
(40) угу, ты прав
|
|||
42
ProDeveloper
09.11.12
✎
14:38
|
(40) + это все равно будет работать медленнее по производительности, нежели 1 набор и получения среза последних на каждую дату в запросе.
"В итоге делаем вывод что oldschool style вывозит, срез последних на каждую дату в запросе производительнее, чем финт ушами СКД через 2 набора и связи между ними через параметр связи" |
|||
43
К_Дач
09.11.12
✎
14:50
|
(42) спорно, потому что фактически набор-запрос - после выполнения компоновки - это тот же самый запрос...
спасибо всем отписавшимся за внимание |
|||
44
ProDeveloper
09.11.12
✎
14:59
|
(43) проверено по производительности консолью отчетов СКД
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |