СКД: Содинение наборов данных, поле связи XYNULL = X, Y, Null #638512


#0 by К_Дач
1 набор данных ХозрасчетныйОбороты: поля ВалютаОперации определена как: ВЫБОР ДатаОперации определена как: 2 наборданных КурсыВалютСрезПоследних: запрос: ВЫБРАТЬ    КурсыВалютСрезПоследних.Период КАК ДатаКурса,    КурсыВалютСрезПоследних.Курс КАК Курс 1. Источник ДатаОперации Приемник ДатаКурса Параметр ----> ДатаСреза 2. Источник ВалютаОперации Приемник Валюта Параметр ----> ТекВалюта Так вот. Соединение по дате отлично работает. По валюте работает во всех случаях, если валюта не рубли. То есть получает курсы валют, все кроме рублей. Есть мнение, что получение данных в наборе производится ДО передачи в них параметров, которые не являются критичными (все, кроме параметров виртуальных таблиц). Параметр &Рубль, он определяет заполнение поля и критичным для связи не является. То есть, как я думаю происходит так: 1. Получение данных в наборе. 2. Связывание с другим набором. 3. Заполнение полей в наборах, определенных передачей параметров. Если определить поле ВалютаОперации = &Рубль и связывать по нему - работать не будет... Вопрос: Есть поле XYNULL, могущее принимать значения X, Y, Null. Как "подменить" Null, чтобы потом по полю организовать связь? Прокомментируйте, плз...
#1 by acsent
ЕСТЬNULL
#2 by К_Дач
Ты не понял... Null не на уровне получения данных в запросе. То есть параметр еще для подмены Null еще не передан, но фактически вместо параметра там Null
#3 by GLazNik
ОФФ XYN.... ну и поля...
#4 by samozvanec
isnull(&Рубль,&Рубль)
#5 by К_Дач
я просто обобщил свой пример.... причем тут название поля то. Какая разница, какие наборы связывать, вопрос то не в этом же.
#6 by samozvanec
на всякий случай даже так isnull(isnull(&Рубль, &Рубль), &Рубль)
#7 by К_Дач
Прочитай внимательно, плз: То есть, как я думаю происходит так: 1. Получение данных в наборе. 2. Связывание с другим набором. 3. Заполнение полей в наборах, определенных передачей параметров.
#8 by К_Дач
на момент соединения параметр еще не передан, другими словами
#9 by GLazNik
для начала бы более понятно сформировать вопрос. я в ваши "подменах" запутался. В запросе можно использовать ЕСТЬNULL и ЕСТЬ NULL isnull(isnull(isnull(&Рубль, &Рубль), &Рубль), &Рубль) так надежнее будет
#10 by shuhard
[Null не на уровне получения данных в запросе.] передавать NULL в запрос да мсье прост эсперт в извращениях
#11 by К_Дач
да привязались вы к этому Null, это всего лишь мое предположение. Упрощу вопрос: по полю ВалютаОперации = &Рубль связь наборов данных в СКД не работает
#12 by GLazNik
вот убей, но фразы "на момент соединения параметр еще не передан, другими словами" не понимаю. запрос просто не выполнится без переданных параметров
#13 by shuhard
[Упрощу вопрос: ] ню ню
#14 by К_Дач
Все верно ты говоришь, это и без слов понятно... В запросе первого набора есть поле, как написано в Соединияя со вторым набором, запрос которого:    КурсыВалютСрезПоследних.Курс КАК Курс с помощью связи: Источник ВалютаОперации Приемник Валюта Параметр ----> ТекВалюта ничего не получаем. я не знаю, как еще понятнее объяснить, ну могу оба запроса тут привести или СКД сохранить в файл и куда-нить залить
#15 by GLazNik
наверное вам нужно что-то типа такого условия: (ВалютаОперации ЕСТЬ NULL) ИЛИ (ВалютаОперации = &Рубль)
#16 by shuhard
не а, надо передать в правый набор валюту и вернуть её для связи ссылка на сайт СКД выкладывалась на мисту 100500 раз
#17 by К_Дач
именно, передать в правый набор для связи (то есть в параметр второго набора) но как передать, если он в первом наборе то еще не заполнен... ткни носом в этот сайт, если нетрудно
#18 by shuhard
блеать ну на куя на форуме поиск, если я должен тратить на это время
#19 by К_Дач
спасибо, конечно... но ответа на мой вопрос там нет...
#20 by shuhard
форум так не думает
#21 by ProDeveloper
может ты подскажешь?
#22 by shuhard
не флюди
#23 by GLazNik
а приведи весь запрос...
#24 by К_Дач
В примере по ссылке из соединяют наборы по ЗАПОЛНЕННЫМ полям. А у меня поле в момент связи еще не заполнено... Я не просто так написал
#25 by К_Дач
вот ссылка на схему компоновки
#26 by GLazNik
"А у меня поле в момент связи еще не заполнено..." Это как??? взрыв мозга
#27 by GLazNik
да ну нафиг... текст давай
#28 by К_Дач
____________________________________________________________ ____________________________________________________________ ВЫБРАТЬ    КурсыВалютСрезПоследних.Курс КАК Курс 2 связи на закладки "связи наборов": ДатаОперации - ДатаКурса - Параметр ДатаСреза ВалютаОперации - Валюта - Параметр ТекВалюта
#29 by К_Дач
а вот так))) ради интереса, скачай схему, встрой в отчет и сформируй - дело 5 секунд
#30 by ProDeveloper
Далай все в запросе Пользуйся)
#31 by ProDeveloper
И покури ещё раз ссылку по
#32 by К_Дач
Спасибо)) Только я пишу отчет для тонкого клиента, СКД мне нужна, чтобы вытащить на форму настройки отборов и сортировок и еще всякие плюшки... я бы не стал тему создавать, если б удовлетворился решением с помощью запроса.... сначала сам всю голову сломал
#33 by ProDeveloper
И? Для тонкого и что? В СКД делай все в 1 наборе, срез последних на каждую дату получай в запросе как я тебе написал и будет тебе счастье
#34 by К_Дач
все, что написано по ссылке - у меня настроено. честное пионерское. ну как вариант... по-видимому, так и придется поступить
#35 by shuhard
зря это, многие функции связи наборов повторить запросом не удастся
#36 by ProDeveloper
каждый случай индивидуален, по личному опыту скажу что СКД далеко не идеальна и баги в ней есть, почитай хотя бы эту ветку
#37 by shuhard
[СКД далеко не идеальна и баги в ней есть,] речь не о багах, а о том, что многие задачи не имеют иных решений, кроме связи наборов
#38 by К_Дач
Вобщем, если выборку валюты из ХозрасчетныйОборот убрать во вложенный запрос - работает... вот
#39 by ProDeveloper
попробуй сделать то, что пишет ТС, в результате в таком случае получается не совсем корректный срез последних на каждую дату для валюты когда она определена в 1 наборе как через СКД связыванием 2х наборов данных через параметр связи
#40 by ProDeveloper
Помочь может кстати, если в 1 наборе все поместить во временную таблицу, а потом просто ещё раз все из неё выбрать. И делать через 2 связанных набора СКД по параметрам связи
#41 by К_Дач
угу, ты прав
#42 by ProDeveloper
+ это все равно будет работать медленнее по производительности, нежели 1 набор и получения среза последних на каждую дату в запросе. "В итоге делаем вывод что oldschool style вывозит, срез последних на каждую дату в запросе производительнее, чем финт ушами СКД через 2 набора и связи между ними через параметр связи"
#43 by К_Дач
спорно, потому что фактически набор-запрос - после выполнения компоновки - это тот же самый запрос... спасибо всем отписавшимся за внимание
#44 by ProDeveloper
проверено по производительности консолью отчетов СКД
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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