powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Запрос и табличные части (1С 8.2)
17 сообщений из 17, страница 1 из 1
Запрос и табличные части (1С 8.2)
    #37605183
g_r_e_e_n
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос такой. Нужно выбрать элементы справочника, у которых в табличной части отсутствует определенное значение?

Надеюсь на помощь.
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37605184
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g_r_e_e_n,

выбрать ссылка из Справочник.МойСправочник.ИмяТабЧасти как тч
где тч.ИмяРеквизитаТЧ = &ЗначениеПараметра
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37605186
pail
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
g_r_e_e_n,

извиняюсь = прочитал "присутствует определенное значение"
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37605393
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем запрос не устраивает?
Соединяем левым соединением в соединении указываем 2 связи
1 элемент справочника и его табличную часть по ссылке
2 значение реквизита таб части = значению которое должно отсутвоватью
в условии где загоняем условие реквизита таб части Есть NULL
По идее должно выбрать то что Вам нужно.
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37607986
LexaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rigus,
исходя из всего выше сказанного получается такой запрос

Запрос = Новый Запрос
Запрос.Текст = "
|Выбрать различные
| Спр.Ссылка
|Поместить Таб
|из
| Справочник.МойСправочник.ТабличнаяЧасть КАК Спр
|где
| Спр.Реквизит = &Реквизит
|;
|Выбрать
| Спр.Ссылка
|из
| Справочник.МойСправочник КАК Спр
|левое соединение Таб
| по Спр.Ссылка = Таб.Ссылка
|где
| Таб.Ссылка Есть NULL
|Упорядочить по Спр.Ссылка Автоупорядочивание
|;
|
|Уничтожить Таб;
|
|";

Запрос.УстановитьПараметр("Реквизит", Реквизит);
Результат = Запрос.Выполнить().Выбрать();
и т.д.
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37608617
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я имел ввиду следующее
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
"ВЫБРАТЬ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|		ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|			И МойСправочникТабличнаяЧасть.МойРеквизит=&Реквизит
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL 
	|
	|СГРУППИРОВАТЬ ПО
	|	МойСправочник.Ссылка"
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37619248
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigusЯ имел ввиду следующее
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
"ВЫБРАТЬ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|		ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|			И МойСправочникТабличнаяЧасть.МойРеквизит=&Реквизит
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL 
	|
	|СГРУППИРОВАТЬ ПО
	|	МойСправочник.Ссылка"



Лишнее соединение, да и группировка никчему вот так и пишут неоптимальные запросы

Код: sql
1.
2.
3.
4.
5.
6.
7.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	МойСправочникТабличнаяЧасть.Ссылка
	|ИЗ
	|	Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит=&Реквизит
	|	И МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL"
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37619629
shurikvz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaM,
твой запрос работать не будет. Как одновременно может выполняться условие:
Код: sql
1.
2.
3.
|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит=&Реквизит
	|	И МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL"


?
1) МойРеквизит одновременно не может равняться какому-то значению и быть при этом NULL.
2) При выборке из ТЧ напрямую (Справочник.МойСправочник.ТабличнаяЧасть.МойРеквизит) а не через соединение, он вообще никогда не будет NULL, будет либо ПустаяСсылка, либо НЕОПРЕДЕЛЕНО.
В общем, условие всегда будет возвращать ЛОЖЬ.
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621408
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rigusЯ имел ввиду следующее
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
"ВЫБРАТЬ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|		ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|			И МойСправочникТабличнаяЧасть.МойРеквизит=&Реквизит
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL 
	|
	|СГРУППИРОВАТЬ ПО
	|	МойСправочник.Ссылка"



Составляя запрос не вник. Тогда так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|			ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL"
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621467
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMrigusЯ имел ввиду следующее
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
"ВЫБРАТЬ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|		ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|			И МойСправочникТабличнаяЧасть.МойРеквизит=&Реквизит
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL 
	|
	|СГРУППИРОВАТЬ ПО
	|	МойСправочник.Ссылка"



Составляя запрос не вник. Тогда так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|			ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL"



И даже не так, т.к. просят "отсутствует определенное значение"

g_r_e_e_nВопрос такой. Нужно выбрать элементы справочника, у которых в табличной части отсутствует определенное значение?

Надеюсь на помощь.

по этому

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|			ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит <> &РеквизитЗначение"

[/quot]

А если заполнение табличной части обязательно то:

Код: sql
1.
2.
3.
4.
5.
6.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	МойСправочникТабличнаяЧасть.Ссылка
	|ИЗ
	|	Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит <> &Реквизит"



Как то так
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621479
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMСоставляя запрос не вник. Тогда так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|			ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит ЕСТЬ NULL"


И всеравно неправильно :-) У Вас нет в соединении проверки реквизита на тот которого не должно быть.

Выбрать различные или сгруппировать по элементу дадут на стороне ms sql одинаковый план выполнения - соответсвенно что использовать зависит от предпочтений человека. Мне например нравится группировать, а Вам выбирать различные
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621485
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это работать не будет
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
"ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	МойСправочник.Ссылка
	|ИЗ
	|	Справочник.МойСправочник КАК МойСправочник
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.МойСправочник.ТабличнаяЧасть КАК МойСправочникТабличнаяЧасть
	|			ПО МойСправочник.Ссылка = МойСправочникТабличнаяЧасть.Ссылка
	|ГДЕ
	|	МойСправочникТабличнаяЧасть.МойРеквизит <> &РеквизитЗначение"


из за того что вы в условии где поместили проверку а не в соединении - из-за этого Ваше левое соединение превратится во внутреннее.
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621497
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да я добрался до 1С и проверил будет работать так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ВЫБРАТЬ РАЗЛИЧНЫЕ
		Контрагенты.Ссылка
	ИЗ
		Справочник.Контрагенты КАК Контрагенты
		
		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.ВидыДеятельности КАК МойСправочникТабличнаяЧасть
			ПО МойСправочникТабличнаяЧасть.Ссылка = Контрагенты.Ссылка 
			И МойСправочникТабличнаяЧасть.ВидДеятельности = &ВидДеятельности
	ГДЕ
		МойСправочникТабличнаяЧасть.ВидДеятельности ЕСТЬ Null



Либо если заполнение табличной части обязательно

Код: sql
1.
2.
3.
4.
5.
6.
ВЫБРАТЬ РАЗЛИЧНЫЕ
		МойСправочникТабличнаяЧасть.Ссылка
	ИЗ
		Справочник.Контрагенты.ВидыДеятельности КАК МойСправочникТабличнаяЧасть
ГДЕ
	МойСправочникТабличнаяЧасть.ВидДеятельности <> &ВидДеятельности
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621511
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to SashaM
теперь правильно.
Думаю теперь Вы согласитесь что Ваше утверждение
SashaMЛишнее соединение, да и группировка никчему вот так и пишут неоптимальные запросы
было поспешным и ошибочным. :-)
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621519
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я признаю свою ошибку, это было действительно поспешным выводом, но не про группировку т.к. distinct работает по другому принципу и как мне кажется в данном случае быстрее, хотя это блохи.
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621539
rigus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaM distinct работает по другому принципу и как мне кажется в данном случае быстрее.
В данном случае нет. Для этого достаточно запустить профайл получить реальные sql запросы для обох случаев (с различным и группировкой)
далее получить по ним в студии планы запросов - они выдут одинаковыми :-)
...
Рейтинг: 0 / 0
Запрос и табличные части (1С 8.2)
    #37621552
SashaM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможно, т.к. группировка в данном случае скорее всего сведётся к distinct в парсере
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / [игнор отключен] [закрыт для гостей] / Запрос и табличные части (1С 8.2)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]