#0
by Tronen
Привет всем! В одной конфигурации при синхронизации со сторонней БД SQL приходится записывать в регистр сведений (независимый, что очень важно) большие объемы данных (за один присест 3-6 тыщ записей). После чего эти записи определенным образом перерабатываются и записываются данные в другой регистр (тоже независимый), правда объемом раза в 2 поменьше... При работе с движениями документа, можно создавать ТЗ с колонками, соответствующими ресурсам и измерениям регистра, с последующей загрузкой путем Движения.БлаБла.Загрузить(ТЗ); С независимым регистром сведений такая тема не проходит. Можно СоздатьНаборЗаписей и потом Загрузить, но при этом переписывается весь регистр... Глядя на Замер производительности, больше всего времени занимает строчка Рег.Записать(истина) (порядка 85%), это при том, что помимо тупого копирования данных из ODBC-запроса необходимо много чего просчитать. В общем надо это дело ускорить... Желательно существенно... Машинка там бодрая конечно (2 движка по 4 цилиндра на 2 куба, САСовские винты, полностью буфферизированная четырехканальная память), но процесс последовательный (т.е. разветвить не получится на несколько потоков) и в итоге эта процедура более 5% от процессорных мощностей не занимает (при том что один процесс может занимать до 13%). Обидно блин... В связи с чем вопрос - можно ли каким-то путем всетаки собрать ТЗ (хренсним - большую) и пошустрому ее прямо из памяти затолкать в регистр? Может, конечно, глупый вопрос - есть ли у запросов 1cv8 умение не только выбирать, но и ИНПУТИТЬ или АПДЕЙТИТЬ? Есть еще мысля - минуя 1С напрямую заталкивать данные в SQL-таблицу... Как к этому отнесутся знающие люди? Заранее благодарю за советы.
#3
by H A D G E H O G s
1)СоздатьНаборЗаписей 2) Установить на него отбор 3) Загрузить из ТЗ 4) Записать 5) Попробовать использовать Транзакции 6) Отказаться от 2-ой записи в 2 регистра
#4
by Tronen
СоздатьНаборЗаписей и последующая загрузка из ТЗ - заменяет ВСЕ уже имеющиеся записи... 5) Попробовать использовать Транзакции 6) Отказаться от 2-ой записи в 2 регистра </quot> Не дошло...
#6
by Tronen
Вот... Уже теплее, как мне кажется... Учитывая, что регистр сведений периодический (в пределах секунды), необходимо, чтобы перезаписывались только записи с периодом больше установленного (все остальное идет как попало, поэтому по остальным полям отбор устанавливать бесполезно)... Отбор может устанавливаться только на равенство... Дальше как?
#7
by H A D G E H O G s
Ладно. Только на равенство... Угу..Согласен. Тогда Менеджер Записи НачатьТранзакцию; МенеджерЗаписи сам все отфильтрует и перезапишет только то что надо. Проблема тогда в том, что читаться/писаться будет циклично, ну да ладно, лучше циклично писать то, что нужно, чем всем скопом толпой ненужное.
#8
by H A D G E H O G s
Ну или тот же менеджернабора записей циклично использовать.. Но там выборка уже побольше будет..
#9
by Tronen
Чета до меня не совсем дошло... В принципе - у меня сейчас происходит почти тоже самое. Если переписать названия из примера выше, то получится следующее: Для Каждого МоиДанные ИЗ ТаблицаДанных Цикл [/code] Разница заключается в следующем: 1) В моем случае при каждой итерации создается новый менеджер; 2) Не используются транзации; В Вашем случае: менеджер создается один, записывается при каждой итерации и используется механизм транзакций, которым я, впрочем, незнаком СОВСЕМ. Не могли бы Вы пояснить следующее: 1) В чем приемущество в быстродействии? 2) Для чего используется счетчик? 3) В Вашем коде отстутвует оператор "КонецЦикла". Где этот конец должен находиться? Заранее спасибо.
#12
by H A D G E H O G s
Транзакция позволяет писать в памяти, а не вносить изменения в базу. Счетчик для того, чтобы скидывать из памяти в базу каждую тысячу объектов.
#17
by H A D G E H O G s
P.S. 1000 ОБЪЕКТОВ я взял наугад.. Подбирается число эмпирически.. Юзайте ЗамерПроизводительности
#18
by Tronen
Спасибо большое, очень полезная информация... Завтра обязательно попробую на объекте...
#19
by Tronen
Офигеть... За 5 минут 1,5 месяца обработать (около 75000 записей)!!! Раньше уходило пол-дня... Всем рекомендую с транзакциями работать!!!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Версия платформы которой был сделан *.dt?
- Почему после удаления реквизита он не исчезает из формы?
- Программно изменить свойства формы.
- Установить дату актуальности последовательности без перепроведения
- Отказ от ввода на основании
- как проверить, подключен ли принтер к компу в данный момент?
- v7: Должна ли НДС с аванса попадать в книгу покупок,если этот аванс зачислен?
- УПП. сч. 69.01 зачет между значениями субконто "Налог (взносы)" и "Расходы
- Свертка для 1С: Бхгалтерия (УСН) . ЕСТЬ или НЕТ
- Помогите с реализацией - комментарии к товарам
- v7: Не могу зарегистрировать AddInExtd.dll
- Выплата дивидендов
- v7: Помощник перехода на 1С Бухгалтерия 8
- Распечатка титульного листа кассовой книги в УПП
- v7: Собрать несколько баз по ЗУП в одну. Какой метод использовать?
- Вывод ресурсов в колонки по периоду в системе компоновки
- Чтение html из 1с
- Задваиваются суммы при списании амортизации ОС. Может физич повреждение?
- Несколько стадий обработки детали в УПП
- Синтаксис процедуры ВЫгрузитьПоПравилу()