#0
by Lepochkin
Всем доброго времени суток. Есть задача по переносу данных из 1с в sql. Причем в качестве объектов передавать не их человеко читабельные представления в виде кода или наименования а ГУИД объекта. Если последовательно перебирать выборку и на каждом объекте применять метод XML строка, то получается безумно долго. Докопался до метода с сериализацией таблицы значений вот таким способом Работает в разы быстрее, но опытным путем установлено, что там нормально работает только на таблицах, в которых содержится 1000 строк или меньше. Потому приходится обходить выборку и формировать маленькие таблички по 1000 строк. Этот метод все равно быстрее, чем первый примерно в 8 раз. В минуту грузим 10000 записей. Замер производительность показывает, что 60 времени уходить на операцию заполнения значений строки таблицы значений Хотелось бы еще ускорить процесс но уже не знаю куда копнуть. Подскажите какие еще могут быть варианты быстрого получения ГУИДов или какой-нибудь хитрый способ разбиения результатов запроса на несколько маленьких табличек. Вариант выгрузить в таблицу значений все, потом пронумеровать и делать выборку из нее по частям исходя из номера пробовал. Выходит дольше. Хочу скорости )) Предложите плиз какие-нибудь варианты
#1
by Ёпрст
а чего, взять гуид объекта сразу с таблички в скуле и переписать куда надо, не вариант ?
#9
by Lepochkin
мне нужно ваот так - 00072dd6-f326-11e4-8936-e4115be3c6a9 а в скуле вот так - 0x0000FE44C60311E3964FE4115BE3C6A9
#13
by Lepochkin
Я понимаю, что преобразован. И даже знаю как из одного другой получить, только для этого выборку обходит надо будет опять. И по скорости проигрышь будет
#16
by Lepochkin
Хранимка штука конечно интересная, но боюсь моем случае не подойтет. Мне нужно с разных конфигураций данные собирать, причем где-то в чистом виде, где-то результаты запросов для отчетов... И под каждую базу еще и преобразования делать... Тяжеловато будет
#18
by Lepochkin
Если "ехать" - то при добавлении любого объекта мне потрудиться не кисло надо будет... Если "шашечки" - то я отдал инструмент и забыл... Мы ж ленивые люди... Но хочется что бы побыстрее было ))
#19
by Ёпрст
Что именно вкладывается в понятие "потрудится" ? Ты же имена таблиц и полей, не руками будешь добавлять в запрос.
#20
by Lepochkin
Что-то плохо у меня картинка складывается... Мне получается надо будет запрос 1ски конвертнуть в скулевый. Его там исполнить. Обойти результаты скулевого, преобразовать уид и записать в другую базу...
#22
by Lepochkin
сейчас это выглядит вот так. и для пользователя, хоть он и программис хочется что бы так же и оставалось
#25
by Lepochkin
СКД не прокатит... Рассматривал этот вариант. Нужен универсальный механизм, что бы им дергать из любой базы 1с. А им я получу com объект
#26
by Tateossian
Смотри, перечисляю все доступные методы решения этой задачи: Вариант2 - используя функцию Новый БуферДвоичныхДанных и сложение по модулю И Вариант3 = VBScript.RegExp Вариант4 = самодельный парсер строк. Выбирай любой)))
#27
by Lepochkin
Вариант4 - это наверное то, что я уже изобразил... 1 и 3 вряд ли будут универсальны. а вот 2 кажется интересным. завтра посмотрю в его сторону
#28
by Tateossian
Вариант 4 ужасный колхоз. Пример с вариантом (3 и 2) смотри ниже (он универсален), так как guid формируется по RFC4122 Как оказалось, платформа не может в сдвиг. Пришлось немного подшаманить. В итоге получилось вот так (тут сразу с замером производительности. Сей код (10000 итераций) на толстяке выполняется 1400 мс. Что касается твоего замечания насчет "Работает в разы быстрее, но опытным путем установлено, что там нормально работает только на таблицах, в которых содержится 1000 строк или меньше" то тут все просто - сериализатор использует DOM-анализатор, а это значит, что весь XML загружается в оперативную память, а, учитывая то, что у тебя код написан с утечками памяти (хотя бы то, что ты не закрываешь xml-дескрипторы), получаешь обозначенные ограничения. В любом случае, в твоем конкретном примере использование XPath будет куда более эффективнее.
#29
by Lepochkin
Не очень понял как этот код применим для меня. Объясните на пальцах плиз. Есть выборка из базы 1с, к которой я подключен com соединениям. Выборка следующая Выборка.Ссылка - com объект (здесь должен быть ГУИД) Выборка.Наименование - строка Выборка.Код - Число Данные по этой выборке я должен вставить в sql базу.
#31
by Lepochkin
Изначальная задача. Есть N баз 1с, нужно создать универсальный инструмент по выгрузке данных из них в базу SQL. Далее я описывал свое решение в поисках его оптимизации
#35
by Tateossian
Вот это ты к чему написал? «мне нужно ваот так - 00072dd6-f326-11e4-8936-e4115be3c6a9 а в скуле вот так - 0x0000FE44C60311E3964FE4115BE3C6A Напиши, пример guida и его xml-представления 1С любого справочника.
#36
by Вафель
Тут вопрос: как из языка 1с перевести в язык скл? свой парсер писать. Слишком сложная задача
#37
by Lepochkin
Это была часть обсуждения. Задачу я уже озвучил. Схему раками пособирать - неплохая идея... Попробую
#43
by Ёпрст
не понимаю, в чем у тебя сложность сразу вытащить sql запросом данные из 1с и инсёртить их в твою табличку. Так же, динамически собираешь текст запроса и привет
#44
by Lepochkin
У меня помимо баз 1с есть еще и wms система, откуда тоже данные тащить надо, а ключами по той же номенклатуре являются строковые ГУИДы... Потому вот такая и заморочка
#45
by Lepochkin
Под ГУИДом я понимаю уникальный идентификатор вот такого вида 00072dd6-f326-11e4-8936-e4115be3c6a9
#47
by Tateossian
Я бы рассказал про представления (VIEW) и синонимы (SYNONIM). Но порекомендую почитать книжки по MS SQL или не трогать сервер.
#49
by FIXXXL
сделать общий реквизит "ГУИД" и один раз его заполнить по всем базам? плюс подписка на новые ссылочные элементы ПриЗаписи
#50
by Lepochkin
Думал над этим вариантом, но тогда придется вносить изменения в конфигурации, а хочется сделать без этого
#51
by Tateossian
Разумеется, еще и разобраться. Задумайся: почему в 1С ссылки хранятся как binary в 1С, а в вашей там какой-то WMS (?) системе как строки. Они, поди, хоть в индексе? Если бы ты знал, что такое view, то знал бы, что в sql можно сделать хоть сколько угодно view, а в 1С это подключить как внешний источник. А еще тот код, что я тебе написал выше, прекрасно работает в sql и поместится в одну строчку как скалярный оператор - надо его только правильно переписать.
#52
by Lepochkin
Ты не поверишь, но вьюхи использую в полный рост. И как внешние источники и в отчетах. Причем вьюхи на скулевые и орокловые. Так что сильно не выделвайся. И почему ключи не строковые тоже все студенты знают. Строковый ГУИД используется при интеграции и от него мне не убежать. Вот и думаю как все сделать оптимально
#54
by Lepochkin
Подтупливаю что-то в пятницу вечером. Вот это выражение Тип("НаборДанныхЗапросСхемыКомпоновкиДанных") через com как получить?
#55
by Lepochkin
Схему легко... СхемаКомпановки = мБаза.NewObject("СхемаКомпоновкиДанных"); А тип что-то туплю...
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- ЗУП 3.1 Отпуск по уходу и резерв отпусков
- Большой размер индекса регистра накоплений
- 8.2 Получить элемент после записи на форме
- Перетаскивание строк в дереве (как поменять поведение элементов)
- Программная установка формы начальной страницы
- ЗУП 3.1.3: Привилегированный режим из внешней обработки или ДвоичныеДанныеФайлов
- УНФ Номенклатура контрагентов/поставщиков
- Разрыв текста запроса в СКД в зависимости от параметра
- Онлайн кассы Штрих версия формата 1.0.5 пробитие кредита, как?
- ХранилищеЗначения Несоответствие типов при выводе картинки на элемент формы
- Атол 30Ф: Учет наличного денежного ящика без фискализации кассы
- Проверка на NULL в запросе
- БП 3.0 пояснения к бухгалтерскому балансу.
- ДанныеРасшифровки - "неразрешимая проблема"!
- Как в 1С задать печать страниц в обратном порядке?
- В учетной политике организации нет вида тарифа "Организации, уплачивающие ЕНВД"
- Ошибка при работе с файлом при запуске клиента 1с 8.3
- Данные из Табеля
- Статистика отчетность Бухгалтерия 3.0
- Установка 64-х разрядного сервера 1с