|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
Всем привет. 1С 7.7, база на SQL 2008R2 есть специальный алгоритм в котором по виду объекта выполняются разные действия. Алгоритм работает на огромном объеме данных. В результате приходится около 2-х млн. раз получать вид переданного объекта. Замеры показали что данная операция весьма ресурсоемкая, поэтому сейчас пытаюсь найти альтернативу. Думал, что функция вид() берет данные из базы, поэтому повесил профайлер, но оказалось что запрос не выполняется к базе, а это значит эти данные берутся из метаданных. Собственно вопрос: Как получить вид объекта альтернативным путем? Например прямым запросом. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 04:40 |
|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
i_Frog, в 7ке - из файла 1cv7.dds. Там соответствие физической структуры данных (БД) и логической (метаданные) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 06:33 |
|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
pail, я боюсь что этот вариант мне не очень подойдет так как функция объект.вид() выполниться гораздо быстрее чем я буду брать данные из dds. функция DocID=СокрЛП(ЗначениеВСтрокуВнутр(ДокументПроводки)); возвращает {"B","0","0","46","0","0"," 24860VLD"} где "46" это как раз имя таблицы нужного справочника, по этому номеру можно однозначно сопоставить вид справочника, но что бы разложить строку нужно потратить время. Может есть более простой вариант о котором я еще не знаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 07:10 |
|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
Функция ПолучитьВидОбъекта1(Объект) ObjectID=ЗначениеВСтрокуВнутр(Объект); СписокРазложений.ИзСтрокиСРазделителями(ObjectID); Возврат СписокРазложений.ПолучитьЗначение(4); КонецФункции Функция ПолучитьВидОбъекта2(Объект) ObjectID=ЗначениеВСтроку(Объект); СписокРазложений.ИзСтрокиСРазделителями(ObjectID); Возврат СписокРазложений.ПолучитьЗначение(2); КонецФункции Штатная функция вид: 0.85575 всего записей: 98495 Моя функция 1 вид: 0.92965 всего записей: 98495 Моя функция 2 вид: 2.1403 всего записей: 98495 Пока я проигрываю:) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 07:51 |
|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
алгоритм с чем работает? если с таблицей значений = в процессе ее заполнения пихайте туда "вид" в общем попытаться отсортировать по видам нужно ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 08:32 |
|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
А что за отчет то делаете? Может можно другим условием обойтись? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 10:14 |
|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
Универсальный алгоритм формирования проводок IFRS по проводкам RAS на основе введенных шаблонов. чуть больше 2000 строк кода, при этом приктически нет дубляжа кода, все сгурппированно по функциям в функциях только циклы никактх повторений. Алгоритм универсальный и очень сложный, большинство вещей работает по шаблонам типа: Шаблон("[Присвоить(ЗначениеПроводка, ТзКорЧасти.Субконто"+НомерСубконто +")]"); в алгоритме используются как индексированные таблицы, так и обычные, но от индексированных стараемся уйти, так как на больших объемах они жрут кучу памяти и становяться очень медленными, но не всегда это возможно так как без индексов в большинстве случаях не обойтись. На сколько возможно уже оптимизировали уйдя от дубликатов получения вида. Приходиться балансировать м/д универсальностью и производительностью. Работаю больше 12 лет с 1С, поэтому все что можно было сделать штатно уже сделали. Сейчас алгоритм на документе с 10 тысячами проводок работает 20 мин, хотелось бы добиться более высокого результата. Все что можно было перевести на прямые запросы уже перевели, дошли до системных процедур и функций. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 11:04 |
|
Как получить вид справочника не через Вид()
|
|||
---|---|---|---|
#18+
i_FrogФункция ПолучитьВидОбъекта1(Объект) ObjectID=ЗначениеВСтрокуВнутр(Объект); СписокРазложений.ИзСтрокиСРазделителями(ObjectID); Возврат СписокРазложений.ПолучитьЗначение(4); КонецФункции Функция ПолучитьВидОбъекта2(Объект) ObjectID=ЗначениеВСтроку(Объект); СписокРазложений.ИзСтрокиСРазделителями(ObjectID); Возврат СписокРазложений.ПолучитьЗначение(2); КонецФункции Штатная функция вид: 0.85575 всего записей: 98495 Моя функция 1 вид: 0.92965 всего записей: 98495 Моя функция 2 вид: 2.1403 всего записей: 98495 Пока я проигрываю:) Если у вас всегда такое представление - то лучше использовать подстроку. А если реквизит может быть произвольным справочником, то тип будет перед ID элемента... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.09.2013, 11:33 |
|
|
start [/forum/topic.php?fid=28&fpage=41&tid=1519682]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 307ms |
total: | 423ms |
0 / 0 |