#0
by Нуф-Нуф
при загрузке из сторонней ИБ последовательно получаются ИД документы и ИД номенклатуры. в 1с в базе приемнике у справочника Номенклатура есть индексируемый реквизит ИД. Сейчас поиск происходит через НайтиПоРеквизиту. (засунуть все ид из источника в тз и сделать в запросе соединение со справочником нет возможности). Замер производительности показал что НайтиПоРеквизиту - самый длительный по времени. Вопрос. Будет ли быстрее, если предварительно ссылки на номенклатуру и их ИД помесить в таблицу значений и в дальнейшем заместо НайтиПоРеквизиту использовать НайтиСтроку? Или допустим все поместить в соответствие (ИД - ключ) и так же получать из соответствия? поидее в случае с коллекциями - работа будет происходить с памятью, а не с многократными считыванием данных из ИБ? размер справочника примерно 50т. элементов оперативной памяти вагон.
#1
by SUA
может и быстрее... хотя если строк в загрузке немного то простая загрузка 50К элементов в ТЗ/соответствие займет больше времени чем поиск по реквизиту (засунуть все ид из источника в тз и сделать в запросе соединение со справочником нет возможности - почему? - даже если например дважды источник прочитать?)
#2
by pumbaEO
У меня в соответствии. В регистре соответствия ИБ приемника и ИБ источника хранится, первый раз идет поиск по регистру и потом в соответствие.
#6
by Fragster
в РС тупо меньше данных и индексировать его можно только по колонке ИД из дальней базы. да и делать доп реквизит в типовой я б не стал (кстати в типовых, ЕМНИП регистр и так есть). А искать лучше получив целиком ТЗ из той базы, а потом подцепив к ней левым соединением данные этой (не важно, в РС они или реквизитом в справочнике). НайтиПоеквизиту или по коллекции в цикле - не лучший вариант.
#7
by Нуф-Нуф
а как добавить в кэш? З.Ы. не факт что у меня товары по несколько раз считываются. вполне возможно что все ИД встречаются по одному разу за весь обмен... и тогда поидее этот вариант выхлопа не особо даст
#8
by Нуф-Нуф
да я понимаю что тз и соединение самое оптимальное, но идет считывание хмл, и предварительно я получить ТЗ не могу.
#9
by pumbaEO
кэш - это соответствие, если в соответствии не нашел, то ищи по реквизиту. Но если у тебя встречаются по одному разу, то без разницы.
#14
by Reset
Разумеется, поиск в соответствии самый быстрый. Вроде даже быстрее чем в индексированной таблице значений, не говоря уже об обращении к бд. Но тут долгий процесс как раз инициализация этого соотвествия
#16
by Fragster
к вопросу о кэше - в 8.2 можно сделать общий модуль, который будет автоматом кэшировать возвращаемые значения функций для набора параметров и если там поместить функцию, которая бы искала через НайтиПоРеквизиту или лучше через запрос в таком модуле - то поиск будет осуществляться 1 раз, а потом будет сразу отдаваться резуьлтат. Причем вполне возможно это будет быстрее, чем использование 1совских коллекций для кэширования
#18
by Нуф-Нуф
т.е. первый раз пробежаться по хмл и получить номенклатуру в ТЗ, а потом снова пробежать по хмл и выполнить уже стандартный механизм? аха, попробую затестить время инициализации соответствия. О! а ведь точно! Но опять же, это сработает если большая часть ИД будет повторяться. Если же они будут уникальны - то выхлопа не даст
#19
by SUA
переделал недавно поиск через соответствие... когда его размер достиг 200К элементов и все это дело надо было переезжать на клиента еще - документ в 10 строк грузился 5 минут
#20
by Fragster
ну, хочешь - помести справочник в индексированную ТЗ заранее. только это помещение будет сотни времени съедать. Правильнее сделать вообще без циклов, через
#21
by Fragster
.1 нет, загрузить весь XML в ТЗ или несколько (по количеству ТЧ документов + шапка) (грубо - то, что ты получить должен в итоге), потом эти ТЗ загрузить в запрос и в нем к ним массово прилепить данные из своей базы. Если что-то не нашлось - там да, надо будет подцепить отдельно. .3 будет не медленнее, чем просто поиск по реквизиту, но без начальной инициализации... Надо смотреть, насколько данные будут повторяться в любом случае
#22
by Нуф-Нуф
Аха, спасибо за подсказки. Сейчас попробую для начала запрос к справочнику с полями ИД и Ссылка выгрузить в ТЗ и проиндексировать, и уже в ней искать через Найти. следующий будет НайтиПоРеквизиту в хешируемом модуле
#23
by Serginio1
Даже не в тз а в масссив. И делай запрос на вхождение реквизита в этот массив. Запихивай в соответствие.
#24
by Лефмихалыч
я пробовал и так и эдак. Искал по коду, SQL2005, платформа была 8.1. Таблица значений дала прирост в овер 700%. Причем я даже так сделал: у меня был набор ТЗ, в которых хранились индексированные ссылки. Я сначала искал в ТЗ, если не находит уже делал НайтиПоКоду.
#25
by ДенисЧ
Лепил через соответствие. Ускорение было заметно даже на глаз. А Свин меня удвиляет... Это не флейта...
#27
by ДенисЧ
тем, что эта тема поднималась на форуме неоднократно. И мной в том числе. А поиск вроде как ещё работает.
#29
by H A D G E H O G s
Не понимаю, чем вас так удивил Вполне нормальный вопрос с ЕГО стороны. Ожидаемый.
#31
by Нуф-Нуф
аккумулировал ваши советы, реализовал так: в начале получаю таблицу, индексирую ее, потом при необходимости ищу в ней соответствие по ИД через хешируемый общий модуль :) буду тестить результат
#33
by H A D G E H O G s
Ищем в индексированной ТЗ Нашли - профит Не нашли - ищем в базе Дописываем в ТЗ Профит
#35
by Нуф-Нуф
тем более что инициализация соответствия выполняется за секунды. никакие запросы к иб в виде найтипореквизиту уже не требуются
#37
by H A D G E H O G s
Со справочником такое катит, а вот если у тебя План обмена ползает - куй. 1) Памяти не хватит 2) Фиг знаешь, что понадобится.
#40
by Нуф-Нуф
ну кто спорит, рубильник в руках - это такой маленький источник самоудовлетворения. в определенных условиях я бы сам от него не отказался
#43
by Нуф-Нуф
а ты ТЗ сразу инициализировал? или накапливал походу работы обработки через НайтиПоКоду?
#45
by Лефмихалыч
я гляжу у тебя серьезный опыт работы в службе поддержки - ты читаешь только первую строку. В написано, что ТЗ набиралась по ходу пьесы. При этом аналитика была почти без бублей
#47
by Нуф-Нуф
"у меня был набор ТЗ, в которых хранились индексированные ссылки", у меня как бы тоже набор в ТЗ :) только сразу
#48
by Лефмихалыч
пробовал сразу всасывать всё в ТЗ, на всасывание и индексирование чуть больше времени уходило в итоге, а памяти при этом уходило в разы больше - меня жаба задавила
#51
by Serginio1
Я вот сейчас сам озадачился переносом из семерки в восьмерку и решил сделать в 7 ке поле ref в каждом переносимом виде справочников и документов записывая в это поле УникальныйИдентификатор получая например по оле. И создав описание Схемы опять же через Оле записывать в объекты в XML файл. При этом подходе не нужно ничего искать когда в документах нужно прописывать ref справочников, документов
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- Что работает быстрее
- Поиск COM-объекта в таблице значений.
- По умолчанию при нажатии Ctrl-F поиск настроен на поиск по текущей колонке
- Что быстрее массив или список ?
- что быстрее найтистроки или менеджер запросов к таблице значений?
- Поиск в УФ как програмно отключить поиск?
- Поиск по числу или строке - что быстрее?
- 1С 8.3. Что быстрее - поиск по коду в справочнике или поиск в ТЗ
- 1С:Предприятие 8.1 УТ 10.3 Как Поиск по штрихкоду поменять на поиск по коду?
- Надо произвести поиск в таблице типа ДанныеФормыКоллекция
- Список значений в таблице значений
- Поиск по таблице значений в 1С 8.2
В этой группе 1С
- Обмен данными
- УТ 11 - Фактический адрес не показывается в товарной накладной
- КД2 Ошибка в стандартном модуле при загрузке
- v7: Не формируется акт сверки в комплексной
- Как сохранить настройки с неколькими схемами СКД?
- Открыть список документов в приложении на управляемых формах.
- После отключения электричества начала глючить 1С
- Расчетные строки в СКД
- Розница ред 2.0 .Печать этикеток и ценников
- Как получить ссылку на справочник по данным из SQL Binari(16)
- Эквайринговая система и УТ 10.3
- Как программно создать страницу на управляемой форме 8.2
- Как получить время из даты 1С?
- Получить данные строки табличного документа
- Макет СКД номер по порядку
- Именить штрихкод товара программно в УТ
- Как отработать пустую дату в отчете?
- Получить значение из регистра накопления
- Отбор в форме списка 8.1
- как поставить условие в запросе на составной тип поля?