|
Как получить справочник из запроса не указывая его имя? | ☑ | ||
---|---|---|---|---|
0
dart909
03.08.15
✎
11:45
|
Есть Обработка, которая в строке заменяет значение подстроки на введенное. Код:
&НаКлиенте Процедура Заполнить(Команда) ЗаполнитьДанными() КонецПроцедуры &НаСервере Процедура ЗаполнитьДанными() ПроверяемыйТип = Тип("Строка"); Для каждого Справочник Из Метаданные.Справочники Цикл Для каждого Реквизит Из Справочник.Реквизиты Цикл Если Реквизит.Тип.СодержитТип(ПроверяемыйТип) тогда ВыборкаСправочника = Справочники[Справочник.Имя].Выбрать(); Пока ВыборкаСправочника.Следующий() Цикл ОбВыборки = ВыборкаСправочника.Ссылка.ПолучитьОбъект(); //ОбВыборки.РазмерПункта = Объект.НовоеЗначениеРеквизитов ; ОбВыборки.РазмерПункта = СтрЗаменить(ОбВыборки.РазмерПункта,Объект.СтароеЗначениеРеквизитов,Объект.НовоеЗначениеРеквизитов); ОбВыборки.Записать(); КонецЦикла КонецЕсли КонецЦикла КонецЦикла КонецПроцедуры Вопрос такой как пожно это переделать в запрос? Чтобы не пробегатсья в цикле по всем. А например сразу получить справочники со строковыми реквизитами? |
|||
1
1Сергей
03.08.15
✎
11:46
|
можно к тексту запроса применить СтрЗаменить
|
|||
2
бомболюк
03.08.15
✎
11:46
|
(0) извините, но тут без цикла никак.
|
|||
3
dart909
03.08.15
✎
11:51
|
(2) А вообще в запросе можно получить интересующий справочник конкретно не указывая его имени?
|
|||
4
Fish
03.08.15
✎
11:52
|
(3) Конечно можно.
|
|||
5
gigi789
03.08.15
✎
11:53
|
(3) Звучит как дайте мне то сам не знаю что
|
|||
6
gigi789
03.08.15
✎
11:55
|
(5) Можно что бы текст запроса динамически строился, а вот возможности чтоб 1с определяла какой тебе справочник нужен нет.
|
|||
7
1Сергей
03.08.15
✎
11:55
|
чёто, я теперь вообще ничего не понял. Чего надо? Куда надо?
|
|||
8
Господин ПЖ
03.08.15
✎
11:56
|
в последних платформах "динамические запросы" можно конструктором собирать
|
|||
9
Господин ПЖ
03.08.15
✎
11:56
|
но там опять циклы
|
|||
10
dart909
03.08.15
✎
11:59
|
(6) я имею ввиду, что в приведенном коде я перебираю справочники из метаданных Для каждого Справочник Из Метаданные.Справочники Цикл
А обращаюсь к справочнику не указывая его имени через Справочники[Справочник.Имя] Меня интересует можно ли это сделать в запросе, но без перебора справочников, а вывести те справочники где тип реквизита строка. |
|||
11
ДенисЧ
03.08.15
✎
12:00
|
(10) нельзя
|
|||
12
dart909
03.08.15
✎
12:01
|
(7) Нужно в запросе получить справочники, у которых реквизит имеет тип строка.
|
|||
13
gigi789
03.08.15
✎
12:02
|
(11) Почему нет Создай справочник метаданные запихай в него реквизиты и их типы и отбирай на здоровье
|
|||
14
1Сергей
03.08.15
✎
12:04
|
(13) для этого нужно перебрать метаданные. А аутор этого боится
|
|||
15
gigi789
03.08.15
✎
12:08
|
(14) так 1 раз перебрать, а не каждый раз переберать хотя если автору реально нужно ускорится то подход не верен
|
|||
16
бомболюк
03.08.15
✎
12:09
|
может это такой модный новый тренд - циклы не использовать?
|
|||
17
dart909
03.08.15
✎
12:09
|
(14) Нет просто смысл в том, что если у меня будет 100 справочников и только у одного будет строковый реквизит. и мне придется все 100 проверять. А так я хочу сразу запросом получить этот справочник, у которого строковый реквизит.
|
|||
18
gigi789
03.08.15
✎
12:10
|
(16) реал нужно использовать рекурсию
|
|||
19
gigi789
03.08.15
✎
12:10
|
(17) чем не катит 13
|
|||
20
1Сергей
03.08.15
✎
12:11
|
(19) Внесли изменения в конфу - перезаполняй справочник? :)
|
|||
21
gigi789
03.08.15
✎
12:12
|
(20) так что страшного то
|
|||
22
Fish
03.08.15
✎
12:13
|
(20) А ты разве не видел в типовых справочника ИдентификаторыОбъектовМетаданных? :))
|
|||
23
gigi789
03.08.15
✎
12:13
|
(17) а что каждый справочник имеет строковое наименование и через раз строковый код
|
|||
24
1Сергей
03.08.15
✎
12:14
|
(17) Кароче, не парься. Код в (0) весьма оптимальный. Этот цикл пролетит за доли секунды
|
|||
25
dart909
03.08.15
✎
12:14
|
(24) Да я верю)) Мне это в запрос переделать надо))
|
|||
26
dart909
03.08.15
✎
12:15
|
(24) Задание такое
|
|||
27
gigi789
03.08.15
✎
12:15
|
(24) ага только не когда у тебя 20 справочников и в каждом по 1000 элементов
|
|||
28
dart909
03.08.15
✎
12:15
|
(23) нет не каждый.
|
|||
29
gigi789
03.08.15
✎
12:17
|
(28) Удиви конфой в которой 20 справочников у которых Длина наименования 0 представление кода числовое
|
|||
30
dart909
03.08.15
✎
12:19
|
(29) Поправлю, эта обработка для стандартных реквизитов не работает.
|
|||
31
gigi789
03.08.15
✎
12:20
|
Для реального ускорения нужно вот эту часть
Пока ВыборкаСправочника.Следующий() Цикл ОбВыборки = ВыборкаСправочника.Ссылка.ПолучитьОбъект(); //ОбВыборки.РазмерПункта = Объект.НовоеЗначениеРеквизитов ; ОбВыборки.РазмерПункта = СтрЗаменить(ОбВыборки.РазмерПункта,Объект.СтароеЗначениеРеквизитов,Объект.НовоеЗначениеРеквизитов); ОбВыборки.Записать(); КонецЦикла В фоне делать А лучше еще разбивать на пакеты чтоб ускорится |
|||
32
Рэйв
03.08.15
✎
12:20
|
Не устаю поражаться желаниям неофитов УФ.....
|
|||
33
1Сергей
03.08.15
✎
12:22
|
Всё-равно не пойму зачем тут запрос. К метаданным в запросе ты всё-равно не обратишься. Можно, разве что, отобрать элементы где в реквизите встречается СтароеЗначениеРеквизитов. Но, опять же придётся для каждого справочника выполнять свой запрос. Так себе оптимизация
|
|||
34
gigi789
03.08.15
✎
12:30
|
(33) Либо динамически строить запрос с унион но все равно обход метаданных получится. Единственный способ это создать либо справочник, либо регистр, либо на худой конец сформировать тз и выгружать в файл. Тогда реально обход метаданных будет проходить 1 раз Для формирования а потом можно и в сторону запроса смотреть.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |