powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Как запросом получить список всех родителей зад-го элемента
25 сообщений из 86, страница 2 из 4
Как запросом получить список всех родителей зад-го элемента
    #36598217
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну оно и к лучшему как по мне ...
я все равно , например , все ответы на профа нашел
причем когда сам ищешь ИМХО лучше
а иногда просто обсудить есть желание
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598224
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
Здесь не мелкие ошибки, а принципиально неверный подход.
Так не будет работать, потому что полный код не хранится в базе и к нему нельзя обратиться в запросе.

согласен, но список кодов родителей можно получить в текущем элементе
отправить на сервер и получить в запросе всех родителей
если это нужно
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598233
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTIDleaf
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Запрос=Новый Запрос;
Запрос.Параметр("Код","%"+Прав(Найти(справочникобъект.полныйкод()- 1 ,"/")+"%");
Запрос.Текст=
	"ВЫБРАТЬ
	|	Номенклатура.Ссылка
	|ИЗ
	|	Справочник.Номенклатура КАК Номенклатура
	|ГДЕ
	|	Номенклатура.Код ПОДОБНО &Код
	|	И Номенклатура.ЭтоГруппа";

в общем мелкие ошибки есть = ищите сами ибо мне лень
идея такая
хотели одним запросом? ну вот он ...
надеюсь код строковый?Здесь не мелкие ошибки, а принципиально неверный подход.
Так не будет работать, потому что полный код не хранится в базе и к нему нельзя обратиться в запросе.

Полный код в базе не храниться, грубо говоря в в трасе при выполнении функции ПолныйКод() формируется столько запросов, сколько уровней вложенности для каждого элемента справочника т.е. можно сказать что приблизительно повторяется метод приведенный Закиров Дамир, только без объеденений. Но в рамках текущей задачи применение данного метода оправданно, если нужно что более производительное, например массовое получение иерархии для нескольких элементов справочника то в этой теме ссылки на примеры уже были.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598267
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гы
ну ладно
а так?
Ном выбирается на форме ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Запрос=Новый Запрос;
МнСтр=СтрЗаменить(Ном.ПолныйКод(),"/",Символы.ПС);
Массив=Новый Массив;
Для н= 1  По СтрЧислоСтрок(МнСтр) Цикл
	Массив.Добавить(СтрПолучитьСтроку(МнСтр,н));
КонецЦикла;
Запрос.УстановитьПараметр("КК",Массив);
Запрос.Текст=
"ВЫБРАТЬ
|	Номенклатура.Ссылка,
|	Номенклатура.Наименование,
|	Номенклатура.Код
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	Номенклатура.Код В (&КК)
|	";

ТЗ=Запрос.Выполнить().Выгрузить();
ТЗ.ВыбратьСтроку();

где рекурсия?
запрос вроде один
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598285
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leafГы
ну ладно
а так?
Ном выбирается на форме ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Запрос=Новый Запрос;
МнСтр=СтрЗаменить(Ном.ПолныйКод(),"/",Символы.ПС);
Массив=Новый Массив;
Для н= 1  По СтрЧислоСтрок(МнСтр) Цикл
	Массив.Добавить(СтрПолучитьСтроку(МнСтр,н));
КонецЦикла;
Запрос.УстановитьПараметр("КК",Массив);
Запрос.Текст=
"ВЫБРАТЬ
|	Номенклатура.Ссылка,
|	Номенклатура.Наименование,
|	Номенклатура.Код
|ИЗ
|	Справочник.Номенклатура КАК Номенклатура
|ГДЕ
|	Номенклатура.Код В (&КК)
|	";

ТЗ=Запрос.Выполнить().Выгрузить();
ТЗ.ВыбратьСтроку();

где рекурсия?
запрос вроде один

При выполнении Ном.ПолныйКод() 1С SQL серверу будет отправлен ряд запросов для каждого уровня иерархии, но еще раз повторю, ваш пример достоин книги знаний на мисте, т.к. для получения иерархии для одного элемента справочника он почти идеален.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598303
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Действительно, если производительность не так важна, можно получить все коды родителей через ПолныйКод(),
а потом сделать запрос по массиву кодов. Если, опять же, счиать коды уникальными.
При таком подходе, как уже написал vitkhv , запрос в цикле скрывается внутри функции ПолныйКод().
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598312
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вообще то да
если подумать
но красиво однако
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598418
HoBTIDЗакиров ДамирПлатформа построена так, что один запрос по нескольким таблицам (или несколько обращений в одном запросе к одной таблице,
что в данном случае происходит) всегда отрабатывает быстрее, чем несколько запросов каждый по своей таблице.Вы это откуда узнали, смотрели планы выполнения запросов и счетчики Reads, Writes, CPU в SQL Server Profiler?
Или может быть Вам об этом всего лишь сказали на курсах/прочитали в книге?


Во-первых, об этом действительно написано в руководстве, изданном фирмой 1С. Во-вторых, я доверяю своим глазам, когда вижу, как в типовых конфигурациях строят запросы.


HoBTID
Закиров ДамирПлатформа на сервере преобразует запрос из формата 1С в формат SQL, попутно оптимизируя его.
Поэтому, когда Вы строите один большой запрос вместо нескольких маленьких,
Вы тем самым отдаете работу по оптимизации запроса в "руки" платформы.
Т.е., в данном примере, таблица справочника будет прочитана только один раз
(а не по количеству уровней иерархии в нем).

Другими словами, получение массива данных большим запросом вместо нескольких маленьких
(кстати, запрос в цикле является грубой ошибкой) оптимизирует работу с базой данных.


Вы видели резальтаты этой "ОПТИМИЗАЦИИ" в профайлере SQL?
Или же по каким-то причинам просто предполагаете, якобы платформа "оптимизирует" его.

P.S.
Запрос в цикле является грубой ошибкой для новичков,
которые не умеют мыслить в категориях наборов данных,
для профессионалов высокого класса, иногда грубая ошибка - запрос без цикла.


Я склонен доверять решениям от 1С. [irony] Хотя для профессионалов ВЫСОКОГО КЛАССА это не фэн-шуй??? [/irony]

За запрос в цикле при попытке решения задачи на сертификацию Вас моментально выставят из учебного центра. При решении абсолютного большинства задач это будет ошибкой. Есть конечно и исключения, но их очень мало.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598458
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закиров Дамир

Я склонен доверять решениям от 1С. [irony] Хотя для профессионалов ВЫСОКОГО КЛАССА это не фэн-шуй??? [/irony]



Не фэншуй года 1С в стандартном коде получает ссылку на номенклатуру, а затем в цикле по выборке получает код, артикул и т.д. генерируя еще столько же запросов к SQL серверу сколько итераций в цикле.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598547
vitkhvЗакиров Дамир

Я склонен доверять решениям от 1С. [irony] Хотя для профессионалов ВЫСОКОГО КЛАССА это не фэн-шуй??? [/irony]



Не фэншуй года 1С в стандартном коде получает ссылку на номенклатуру, а затем в цикле по выборке получает код, артикул и т.д. генерируя еще столько же запросов к SQL серверу сколько итераций в цикле.

Ничего не понял. Это в чей огород булыжник?
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598577
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закиров ДамирЯ склонен доверять решениям от 1С. [irony] Хотя для профессионалов ВЫСОКОГО КЛАССА это не фэн-шуй??? [/irony]

За запрос в цикле при попытке решения задачи на сертификацию Вас моментально выставят из учебного центра.
При решении абсолютного большинства задач это будет ошибкой.
Есть конечно и исключения, но их очень мало.Профессионалы высокого класса пользуются для оптимизации рекомендациями производителя СУБД,
в данном случае MS SQL Server, как более эффективными, чем рекомендации 1С.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598583
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закиров ДамирvitkhvЗакиров Дамир

Я склонен доверять решениям от 1С. [irony] Хотя для профессионалов ВЫСОКОГО КЛАССА это не фэн-шуй??? [/irony]



Не фэншуй года 1С в стандартном коде получает ссылку на номенклатуру, а затем в цикле по выборке получает код, артикул и т.д. генерируя еще столько же запросов к SQL серверу сколько итераций в цикле.

Ничего не понял. Это в чей огород булыжник?

В огород стандартных конф. от 1С и степени доверия к ним.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598659
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закиров Дамир,

Преведу простой пример не фэншуйности в типовых конфах от 1С.

ТекстЗапроса = "
|ВЫБРАТЬ Номенклатура,
| Количество,
| Коэффициент
|ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Документ
|";

Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Документ",ТекРеализация);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Если ИспользоватьАртикулВПечатныхФормах Тогда

ПечАртикул = Выборка.Номенклатура.Артикул;

КонецЕсли;

КонецЦикла;

Вот эта строчка: ПечАртикул = Выборка.Номенклатура.Артикул;
Выполняет в каждой итерации цикла запрос к Базе данных по элементу номенклатуры!
Что значительно снижает производительность, чем если б получение артикула было засунуто в основной запрос.
И код типовых 1С просто пестрит такими примерами.
А ты говориш выгнали бы в шею за запрос в цикле.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598697
Last1Cmen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не всегда те кто сертифицируется тот и разрабатывает
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598795
vitkhvЗакиров Дамир,

Преведу простой пример не фэншуйности в типовых конфах от 1С.

ТекстЗапроса = "
|ВЫБРАТЬ Номенклатура,
| Количество,
| Коэффициент
|ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
|ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Документ
|";

Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("Документ",ТекРеализация);

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл

Если ИспользоватьАртикулВПечатныхФормах Тогда

ПечАртикул = Выборка.Номенклатура.Артикул;

КонецЕсли;

КонецЦикла;

Вот эта строчка: ПечАртикул = Выборка.Номенклатура.Артикул;
Выполняет в каждой итерации цикла запрос к Базе данных по элементу номенклатуры!
Что значительно снижает производительность, чем если б получение артикула было засунуто в основной запрос.
И код типовых 1С просто пестрит такими примерами.
А ты говориш выгнали бы в шею за запрос в цикле.


Попробовал глобальный поиск в "Управление торговлей", редакция 10.3 (10.3.3.3), нет такого даже близко.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598821
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закиров Дамир,

Ну так я пример сам писал.
Попробуй глобальным поиском так пойщи: Выборка.Номенклатура.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598847
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
	Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
		ТоварКод = "Артикул";
	Иначе
		ТоварКод = "Код";
	КонецЕсли;

	Текст = " 
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ЛимитыОтпускаМатериалов.Подразделение.Представление 	КАК ПодразделениеПредставление,
	|	ЛимитыОтпускаМатериалов.Склад.Представление 			КАК СкладПредставление,
	|	ЛимитыОтпускаМатериалов.Номенклатура." + ТоварКод + "   КАК НоменклатурныйНомер,

УПП
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36598866
vitkhvЗакиров Дамир,

Ну так я пример сам писал.
Попробуй глобальным поиском так пойщи: Выборка.Номенклатура.

Нашел подобные бородавки в 7 местах УТ. Не "пестрит".
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36599063
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закиров ДамирvitkhvЗакиров Дамир,

Ну так я пример сам писал.
Попробуй глобальным поиском так пойщи: Выборка.Номенклатура.

Нашел подобные бородавки в 7 местах УТ. Не "пестрит".

Ну так теперь поищи другие бородавки в запросах, которых нет слова номенклатура. И поймешь что 7 можно смело умножать на 100, если не на 1000.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36599078
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leaf
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
	Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
		ТоварКод = "Артикул";
	Иначе
		ТоварКод = "Код";
	КонецЕсли;

	Текст = " 
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ЛимитыОтпускаМатериалов.Подразделение.Представление 	КАК ПодразделениеПредставление,
	|	ЛимитыОтпускаМатериалов.Склад.Представление 			КАК СкладПредставление,
	|	ЛимитыОтпускаМатериалов.Номенклатура." + ТоварКод + "   КАК НоменклатурныйНомер,

УПП

leaf, тебе также предлагаю пойскать только в УПП глобальным поиском Выборка.Номенклатура.
а потом еще проверить те запросы которые выгружаются в различные колекции, которые называются не выборка.
А с артикулом я сам пример писал, пожалуйста, абстрагируйся от слова артикул, и смотри в суть проблемы. Запросы в 1С в циклах, делает очень часто, намного чаще чем надо, видимо издержки универсальности ;)
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36599094
leaf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я согласен, что все плохо ,
но именно поиск по этой фразе дает на мой взгляд только рукотворный дописки
и плюс .ПолноеНаменование , ну у меня так почему то
хотя есть много мест где не аккуратно, но не тут
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36599110
Сисой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvА с артикулом я сам пример писал, пожалуйста, абстрагируйся от слова артикул, и смотри в суть проблемы. Запросы в 1С в циклах, делает очень часто, намного чаще чем надо, видимо издержки универсальности ;)

У меня в УПП 1.1 этих атавизмов дофига. Но вот в последующих версиях количество разыменований в цикле стремительно уменьшается. Ты точно говоришь о текущем уровне развития типовых, а не об уровне трехлетней давности?
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36599177
vitkhv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
СисойvitkhvА с артикулом я сам пример писал, пожалуйста, абстрагируйся от слова артикул, и смотри в суть проблемы. Запросы в 1С в циклах, делает очень часто, намного чаще чем надо, видимо издержки универсальности ;)

У меня в УПП 1.1 этих атавизмов дофига. Но вот в последующих версиях количество разыменований в цикле стремительно уменьшается. Ты точно говоришь о текущем уровне развития типовых, а не об уровне трехлетней давности?

Точно. Работаю с самой последней версией УПП, сегодня только обновился ;)

Я уж не говорю об ошибках типовых - которые кочуют из релиза в релиз.....

Хотя конечно УПП замечательный продукт и денег своих стоит на 1000%.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36599202
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTIDLogvinovSerjИдея правильная, для такой задачи нужно делать запрос в цикле.

Программист 1С, leaf.
А можно глупый вопрос, зачем решать задачу одним запросом?
Потому что так рекомендует 1С???Выгоняют с экзамена.
...
Рейтинг: 0 / 0
Как запросом получить список всех родителей зад-го элемента
    #36599208
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vitkhvСисойvitkhvА с артикулом я сам пример писал, пожалуйста, абстрагируйся от слова артикул, и смотри в суть проблемы. Запросы в 1С в циклах, делает очень часто, намного чаще чем надо, видимо издержки универсальности ;)

У меня в УПП 1.1 этих атавизмов дофига. Но вот в последующих версиях количество разыменований в цикле стремительно уменьшается. Ты точно говоришь о текущем уровне развития типовых, а не об уровне трехлетней давности?

Точно. Работаю с самой последней версией УПП, сегодня только обновился ;)

Я уж не говорю об ошибках типовых - которые кочуют из релиза в релиз.....

Хотя конечно УПП замечательный продукт и денег своих стоит на 1000%.Угу вот только область применения не такая уж и большая. Да и... ладно зато там пару идей хороших подчерпнул.
...
Рейтинг: 0 / 0
25 сообщений из 86, страница 2 из 4
Форумы / [игнор отключен] [закрыт для гостей] / Как запросом получить список всех родителей зад-го элемента
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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