Выборка элементов табличной части справочника #620233


#0 by HGW
Есть справочник "НормыВыдачиСпецодежды" в нем 2 реквизита Подразделение и Должность. Так же табличная часть содержащая колонки Спецодежда, Количество, Срок. Необходимо получить строки ТЧ справочника, поиск по реквизитам Подразделение и Должность. Эти строки вывести в таблицу на форме обработки. Делаю так: Запрос = Новый Запрос; Запрос срабатывает. в отладчике смотрел, в переменной Результат есть необходимые колонки. Но независимо от кол-ва строк ТЧ попадающих под условие, добавляет в таблицу одну пустую строку. Если условие убрать из запроса, то добавляет пустых строк столько сколько строк с основными реквизитами в справочнике. Не могу разобраться. Может как то по другому обход результата делать? Заранее спасибо за помощь.
#1 by Error pro
Спецодежда.Загрузить(Результат.Выгрузить). Только имена колонок должны совпадать
#2 by izekia
там не элементы
#3 by ЧашкаЧая
А если так? ВЫБРАТЬ    НормыВыдачиСпецодеждыСостав.Спецодежда КАК Спецодежда,    НормыВыдачиСпецодеждыСостав.Количество КАК Количество,    НормыВыдачиСпецодеждыСостав.Срок КАК Срок ИЗ
#4 by mirosh
зачем соединять-то, можно сразу ТЧ выбрать ;)
#5 by izekia
значит у тебя везде по пустой строке
#6 by mirosh
там запрос неправильный, надо как
#7 by HGW
с (Результат.Выгрузить) не работает.пробовал уже. Справочник заполнен.Условие срабатывает.Если вводить значения которых нет в справочнике то строка не добавляется. Сейчас попробую поменять запрос
#8 by izekia
о а что за бредовый запрос?
#9 by izekia
только сейчас прочитал
#10 by izekia
в правильно, можно еще с допразыменованием, скорее всего с тем же результатом
#11 by HGW
С таким запросом работает.Спасибо огромное!1с сам сижу изучаю,поэтому пока не успел хорошо подружиться) Еще раз спасибо.
#12 by mirosh
если будет время, потренируйся сразу в запросе из табличной части выбирать
#13 by mirosh
#15 by andrewks
какая наивность.   зачем так настойчиво давать вредные советы?
#16 by mirosh
нормально всё
#17 by izekia
в профайлере смотрел? я вот не знаю как 1С там соединит
#18 by andrewks
нифига не нормально. ты наивно полагаешь, что в твоём запросе нет соединения?
#19 by HGW
Была попытка сделать так. Только не было слова "Ссылка"
#20 by mirosh
есть, но он проще читается
#21 by mirosh
#22 by andrewks
надо делать не как удобнее программисту, а как эффективнее
#23 by HGW
Так тоже работает. Но я все таки почитаю про левое соединение
#24 by mirosh
во-первых, это утверждение по меньшей мере спорно, т.к. простота и скорость разработки часто перевешивают пользу от более эффективного решение. Причем неясно, эффективного в каком плане и что является критерием эффективности. Так что, часто этой эффективностью можно пожертвовать ради удобства поддержки и разработки. Во-вторых, в данном случае разницы в какой бы то ни было эффективности нет в данной случае. ну да, за одно и потренируйся
#25 by andrewks
"Во-вторых, в данном случае разницы в какой бы то ни было эффективности нет в данной случае. " ну, давай, за базар отвечай. тексты и результаты низкоуровневых запросов к БД для обоих вариантов для разных СУБД в студию
#26 by mirosh
нет, я уверен, что мой вариант работает не хуже твоего (как минимум). Более того, при очень большой таблице справочника он будет работать быстрее. Кроме того, ты первый усомнился в моей правоте, поэтому будь добр, САМ предоставь доказательства того, что твой вариант "эффективнее". А свои блатные замашки, типа "за базар отвечай" оставь кому-нибудь другому, уважаемый лайт-модератор, инженер знаний.
#27 by izekia
"Более того, при очень большой таблице справочника он будет работать быстрее" вот про это можно поподробнее?
#28 by andrewks
феерично. я не собираюсь тебе доказывать прописные истины при таких текстах. ибо, если ты мне докажешь, за счёт какого такого алгоритма неявное соединение (транслируемое в левое) даже гипотетически может работать быстрее явного (а явно можно использовать как то же самое левое, так и более быстрое внутреннее), ты перевернёшь моё мировоззрение
#29 by izekia
Первый вариант: ВЫБРАТЬ    ПользователиКонтактнаяИнформация.Представление,    ПользователиКонтактнаяИнформация.Тип ИЗ    Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация ВНУТРЕННЕЕ СОЕДИНЕНИЕ  Справочник.Пользователи КАК Пользователи ПО T1._Fld424, T1._Fld422RRef FROM _Reference49_VT420 T1 WITH(NOLOCK) INNER JOIN _Reference49 T2 WITH(NOLOCK) ON (T1._Reference49_IDRRef = T2._IDRRef) WHERE (T2._Description = ) AND (T2._IsMetadata = @P2)
#30 by izekia
кстати в не совсем правильно если нам тч нужна
#31 by izekia
второй: ВЫБРАТЬ    ПользователиКонтактнаяИнформация.Представление,    ПользователиКонтактнаяИнформация.Тип ИЗ    Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация T1._Fld424, T1._Fld422RRef FROM _Reference49_VT420 T1 WITH(NOLOCK) LEFT OUTER JOIN _Reference49 T2 WITH(NOLOCK) ON T1._Reference49_IDRRef = T2._IDRRef WHERE (T2._Description = ) AND (T2._IsMetadata = @P2)
#32 by ЧашкаЧая
> кстати в не совсем правильно если нам тч нужна То есть?
#33 by izekia
да нет, это я неправ ...по плану запроса если смотреть, то действительно ЛЕВОЕ СОЕДИНЕНИЕ надо мне SQL подтянуть похоже
#34 by izekia
в целом получается что без джойна компактнее
#35 by izekia
ну и внутреннее в использовать - это ошибка
#36 by m-serg74
но... не в конкретном случае ТСа, но иногда вне зависимости от содержания ТЧ, бывает нужно вывести некие данные из ЭлСправочника, поэтому через соединение все таки лучше, потому что если ТЧ пустая вообще нифига не выйдет
#37 by m-serg74
но соединение левое
#38 by izekia
о, стоп, правильно ли я понял, что если мы сделаем так:    ПользователиКонтактнаяИнформация.Ссылка.Наименование ИЗ    Справочник.Пользователи.КонтактнаяИнформация КАК ПользователиКонтактнаяИнформация то мы получим
#39 by m-serg74
думаю лажу, если в ТЧ нет ничего то ничего и не получим
#40 by izekia
в этом случае ок, надо попробовать ссылку на независимую таблицу
#41 by m-serg74
там не будет ни одной строки откуда можно б было взять .Ссылка
#42 by m-serg74
Справочник.Пользователи а к нему уж лев соед Справочник.Пользователи.КонтактнаяИнформация
#43 by izekia
да не все ок: SELECT T1._Fld424, T1._Fld422RRef, T2._Description FROM _Reference49_VT420 T1 WITH(NOLOCK) LEFT OUTER JOIN _Reference49 T2 WITH(NOLOCK) ON T1._Reference49_IDRRef = T2._IDRRef WHERE (T2._Description = ) AND (T2._IsMetadata = @P2)
#44 by m-serg74
проверь на эл. спр. где ТЧ пустая и получешь нулевой результат
#45 by izekia
а где лажа? так и должно быть
#46 by m-serg74
но... не в конкретном случае ТСа, но иногда вне зависимости от содержания ТЧ, бывает нужно вывести некие данные из ЭлСправочника
#47 by m-serg74
тогда
#48 by m-serg74
например в если конт. инф. у Васи не заполнена то нету и Васи, а он есть)
#49 by izekia
и что? я тут не про обоснованность запроса, а просто думал как можно сломать механизм формирования, если сделать все без джойнов и пока не вижу такого
#50 by m-serg74
ничего. и первые 6 слов...
#51 by m-serg74
и да: без джойнов это как если инфа в разных таблицах в БД лежит?
#52 by izekia
с почитай я про джойны именно в этом контексте
#53 by m-serg74
я с до конца читал и внимательно... а вот Вы наверное нет, я вроде все четко и ясно описал в каком случае и для чего...
#54 by izekia
мне стало интересно какой запрос получится если добавить дополнительные детали и может ли нарушится внутренняя логика, вот и все, про то что Вы писали я понял и не спорил
#55 by m-serg74
я понял...
#56 by mirosh
ну что, что быстрее работает, уже потестили? а то я задумал проверить
#57 by mirosh
итак, я провел тестирование на файловой базе при средних объемах данных и оказалось, что мой запрос работает на 0,5 секунды быстрее, чем . Подробности здесь:
#58 by izekia
ураа
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

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