1. artms 155 13.05.19 09:55 Сейчас в теме

Запрос - с подзапросом в поле. Это работает. Но правильно ли такое включать в поставку?

Конфигурация "УБУ" для Белоруссии (УФ) .
В динамическом списке журнала документов "Банк" требуется вывести флаг наличия подчиненных документов.
Итогом стал запрос:
ВЫБРАТЬ
 	ЖурналДокументовБанк.Ссылка,
 	ВЫБОР
 		КОГДА ЖурналДокументовБанк.Ссылка В
 				(ВЫБРАТЬ
 					ОказаниеУслуг.ДокументОснование
 				ИЗ
 					Документ.ОказаниеУслуг КАК ОказаниеУслуг
 	
 				ОБЪЕДИНИТЬ ВСЕ
 	
 				ВЫБРАТЬ
 					ПриходныйКассовыйОрдерВалюта.ДокументОснование
 				ИЗ
 					Документ.ПриходныйКассовыйОрдерВалюта КАК ПриходныйКассовыйОрдерВалюта)
 			ТОГДА ИСТИНА
 		ИНАЧЕ ЛОЖЬ
 	КОНЕЦ КАК ЕстьПодчиненные,
 	ЖурналДокументовБанк.Дата,
 	ЖурналДокументовБанк.Проведен,
 	ЖурналДокументовБанк.БанковскийСчет
ИЗ
 	ЖурналДокументов.Банк КАК ЖурналДокументовБанк
Показать


Подозреваю использование не документированной возможности (под запрос в поле) может привести к проблемам. Прошу совета.
Ответы
Избранное Подписка Сортировка: Древо
15. spacecraft 13.05.19 10:43 Сейчас в теме
(1) по сути эта возможность напрямую проецируется на sql. Там это точно поддерживается напрямую.
По сути сначала выполнится вложенный запрос, который получит таблицу условно-постоянных данных.
Основной запрос получит всю выборку из основной таблицы, а нужное поле будет сравниваться с результатом подзапроса. Если результат подзапроса не очень большой, то и производительность не пострадает.
16. artms 155 13.05.19 10:45 Сейчас в теме
(15) Здесь вопрос в том что: 1с не закроет ли завтра эту возможность, если нигде она не используется?
17. spacecraft 13.05.19 10:47 Сейчас в теме
(16) нигде это БСП? Тогда это не показатель всех возможностей.
И какой смысл закрывать вполне поддерживаемую конструкцию T-SQL?
18. artms 155 13.05.19 10:52 Сейчас в теме
(17) 1. Хорошо может в типовой где то есть пример? 2. Согласен, но иногда логику 1с сложно понять.
21. spacecraft 13.05.19 10:54 Сейчас в теме
(18) да никогда не искал в типовых такого.
20. spacecraft 13.05.19 10:53 Сейчас в теме
(16) только учтите, что полученный результат подзапроса будет не индексирован. Соответственно поиск по нему будет полным перебором. На больших данных это будет проблема производительности.
Так что возможность есть, но использовать ее не всегда выгодно
alex-l19041; EVKash; +2 Ответить
19. dhurricane 13.05.19 10:52 Сейчас в теме
(1) Прямого запрета на использование подобной конструкции в документации к платформе нет. Стало быть так делать можно.

Вот здесь можно почитать, как работает оператор "В". Не смотря на то, что все примеры используются в секции "ГДЕ", нет причин полагать, что они не справедливы и для секции "ВЫБРАТЬ".

А вот здесь можно почитать анализ использования такой конструкции в динамических списках. Автор публикации аргументированно настаивает, что такой подход в ряде случаев даже лучше, чем левое соединение.
artms; acanta; +2 Ответить
22. artms 155 13.05.19 10:56 Сейчас в теме
2. alex-l19041 9 13.05.19 10:16 Сейчас в теме
на какой платформе работает ? может протестировать на других релизах платформы ? если не возникнет ошибки, то отлично
4. artms 155 13.05.19 10:20 Сейчас в теме
(2) тестировал в файловой 8.2, серверной 8.2, 8.3 последние релизы
6. alex-l19041 9 13.05.19 10:23 Сейчас в теме
(4) кто-то использует 8.3.8, кто-то 8.3.9.......
7. artms 155 13.05.19 10:24 Сейчас в теме
(6) В рамках сопровождения мы обновляем релизы у клиентов.
8. alex-l19041 9 13.05.19 10:26 Сейчас в теме
(7) если у всех клиентов одинаковый релиз платформы (на котором работает), то не вижу проблемы
9. artms 155 13.05.19 10:28 Сейчас в теме
(8) Возможно воспользовался не документированной возможностью, поэтому возможно шанс, что завтра он не будет работать.
3. Oldsad 13.05.19 10:16 Сейчас в теме
возможно не самое эффективное решение, согласен
но в каком месте это не документированная возможность?
обычный вложенный запрос в условии
5. artms 155 13.05.19 10:22 Сейчас в теме
(3) Никогда такого не встречал поэтому решил обсудить. Было бы здорово увидеть примеры на ИТС, БСП или в типовых.
10. Oldsad 13.05.19 10:33 Сейчас в теме
(5)
можешь переписать запрос так:
ВЫБРАТЬ
     ЖурналДокументовБанк.Ссылка,
     ИСТИНА КАК ЕстьПодчиненные,
     ЖурналДокументовБанк.Дата,
     ЖурналДокументовБанк.Проведен,
     ЖурналДокументовБанк.БанковскийСчет
ИЗ
     ЖурналДокументов.Банк КАК ЖурналДокументовБанк
ГДЕ
   	ЖурналДокументовБанк.Ссылка В
                 (ВЫБРАТЬ
                     ОказаниеУслуг.ДокументОснование
                 ИЗ
                     Документ.ОказаниеУслуг КАК ОказаниеУслуг
     
                 ОБЪЕДИНИТЬ ВСЕ
     
                 ВЫБРАТЬ
                     ПриходныйКассовыйОрдерВалюта.ДокументОснование
                 ИЗ
                     Документ.ПриходныйКассовыйОрдерВалюта КАК ПриходныйКассовыйОрдерВалюта)
					 
ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
     ЖурналДокументовБанк.Ссылка,
     ЛОЖЬ,
     ЖурналДокументовБанк.Дата,
     ЖурналДокументовБанк.Проведен,
     ЖурналДокументовБанк.БанковскийСчет
ИЗ
     ЖурналДокументов.Банк КАК ЖурналДокументовБанк
ГДЕ
   	НЕ ЖурналДокументовБанк.Ссылка В
                 (ВЫБРАТЬ
                     ОказаниеУслуг.ДокументОснование
                 ИЗ
                     Документ.ОказаниеУслуг КАК ОказаниеУслуг
     
                 ОБЪЕДИНИТЬ ВСЕ
     
                 ВЫБРАТЬ
                     ПриходныйКассовыйОрдерВалюта.ДокументОснование
                 ИЗ
                     Документ.ПриходныйКассовыйОрдерВалюта КАК ПриходныйКассовыйОрдерВалюта)
Показать
11. Oldsad 13.05.19 10:35 Сейчас в теме
(10)
читаемость снижается, но зато нет запроса в поле
12. SlavaKron 13.05.19 10:36 Сейчас в теме
(10) По-моему, это ещё хуже. Может просто сделать 2 левых соединения к таблицам Документ.ОказаниеУслуг и Документ.ПриходныйКассовыйОрдерВалюта — если по обеим связям NULL, тогда Ложь, иначе Истина?
14. artms 155 13.05.19 10:39 Сейчас в теме
(12) В динамическом списке приведет к возможной ошибке. Когда ссылка дублируется, тогда вообще ничего не выводится.
13. artms 155 13.05.19 10:37 Сейчас в теме
23. EVKash 3 13.05.19 11:05 Сейчас в теме
А что если подчиненных документов будет становиться больше?
Не лучше ли создать вспомогательный РС, куда писать при проведении подчиненных?
24. artms 155 13.05.19 11:11 Сейчас в теме
(23) Тестировал на справочнике 25000 записей искал ссылку в нем же самом, работает очень быстро.
25. SlavaKron 13.05.19 11:21 Сейчас в теме
В ОбщийМодуль.ЗарплатаКадрыВызовСервера (БП 3.0.70.33) есть такое
ВЫБРАТЬ
	ВЫБОР
		КОГДА 1 В
				(ВЫБРАТЬ ПЕРВЫЕ 1
					1
				ИЗ
					ВТСотрудникиОрганизации КАК ОтобранныеСотрудники
						ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК Сотрудники
						ПО
							Сотрудники.Ссылка = ОтобранныеСотрудники.Сотрудник
				ГДЕ
					Сотрудники.ТекущийПроцентСевернойНадбавки > 0
					И НЕ &ПрименятьСевернуюНадбавку)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ОбработатьСН,
	ВЫБОР
		КОГДА 1 В
				(ВЫБРАТЬ ПЕРВЫЕ 1
					1
				ИЗ
					Справочник.ПодразделенияОрганизаций КАК Подразделения
				ГДЕ
					Подразделения.Владелец = Организации.Ссылка
					И Подразделения.РайонныйКоэффициент <> 1
					И НЕ &ПрименятьРайонныйКоэффициент)
			ТОГДА ИСТИНА
		ИНАЧЕ ЛОЖЬ
	КОНЕЦ КАК ОбработатьРК
ИЗ
	Справочник.Организации КАК Организации
ГДЕ
	Организации.Ссылка = &Ссылка
	И (Организации.ПрименятьСевернуюНадбавку <> &ПрименятьСевернуюНадбавку
			ИЛИ Организации.ПрименятьРайонныйКоэффициент <> &ПрименятьРайонныйКоэффициент)
Показать
26. artms 155 13.05.19 12:50 Сейчас в теме
27. Ditron 78 13.05.19 16:21 Сейчас в теме
По утверждениям самой 1С (хотя могу убедительно согласится т. к. сталкивался) такая конструкция (с вложенными запросами) тем более с конструкцией ВЫБОР КОГДА и выражением "В", работает медленней чем левое соединение, есть даже рекомендации... а в дин. списке вообще будет конкретный тормоз )
28. artms 155 14.05.19 14:26 Сейчас в теме
29. artms 155 16.05.19 08:47 Сейчас в теме
(27) Был не прав. замедление в 20 раз. В случае большого объема данных.
30. Ditron 78 16.05.19 11:26 Сейчас в теме
(29) отож, сразу не ответил, знал что проверишь ))
Оставьте свое сообщение
Новые вопросы с вознаграждением
Автор темы объявил вознаграждение за найденный ответ, его получит тот, кто первый поможет автору.

Вакансии

Руководитель отдела внедрения 1С
Новосибирск
зарплата от 60 000 руб. до 160 000 руб.
Полный день

Ведущий программист 1С
Москва
зарплата от 120 000 руб. до 150 000 руб.
Полный день

Программист 1С
Самара
зарплата от 50 000 руб. до 100 000 руб.
По совместительству


Ведущий программист 1С
Сочи
зарплата от 82 500 руб. до 99 000 руб.
Полный день