Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Конвертация (ТиС -> УТ) с идентификаторами через OLE

Конвертация (ТиС -> УТ) с идентификаторами через OLE
Я
   Вуглускр1991
 
22.09.16 - 20:02
Привет!

Запустил в работу.

Изначальная идея: преобразовывать идентификатор ссылки в 7.7 в идентификатор ссылки в 8.х и за счет этого уменьшать объемы выгрузки данных. Но не просто уменьшать объемы выгрузки, ещё и не хранить соответствия идентификаторов в регистрах сведений и не запрашивать это соответствие каждый раз (забегая вперед скажу, что это реализовать невозможно, из-за разных методик учета сущностей в УТ и в ТиС, удалось же, однако, хранить сопоставления не для всех подряд объектов).

Вторая идея (исторически первая): из-за отсутствия УРБД для 7.7 среди купленных продуктов в качестве источника информации об измененных объектах использовать MLG файл.

Сегодня регламентное задание всасывает через OLE данные из ТиС в УТ, соединяя в одну восьмерку несколько разных 7-чных баз данных созданных для различных юридических лиц и находящихся в разных подразделениях.

До сего момента в архитектуре построенного решения не нашлось изъянов, которые бы провоцировали внедренца создание на костылей. Хотя, без некоторой удачи здесь не обошлось: если мы берем изначальную идею переноса ссылок из 7.7 в 8.х взаимооднозначно, то тут же теряем разность между ТиС и УТ. В конечном результате вышло так, что некоторые ссылки из 7.7 при переносе в УТ должны были быть объединены в одну ссылку 8.х, а некоторые (например договора контрагентов, по которым были сделаны и поступления и реализации) должны были наоборот быть разделены исходя из контекста использования (в примере с договорами одна и та же ссылка должна была быть представлена в УТ либо договором с покупателем, либо договором с поставщиком).

Почему не КД: я уже написал достаточно много разнообразных конвертаций и из 7.7 тоже, чтобы понимать насколько сложно выбирать и подсовывать необходимые данные, и как потом тормозно работает поиск ссылок по реквизитам, промежуточные файлы и необходимость отслеживания номеров пакетов меня также не радовала.

Однако КД: разработка взяла из КД много. Вот например правила конвертации данных:
    // Справочник Проекты

    
    РегистрыСведений.ОписанияОбъектовОбмена77.УстановитьПравилоОбменаДанными77("B/796", ТекущаяБаза, "СтрМенеджерОбъекта", "Справочник.Проекты");
    РегистрыСведений.ОписанияОбъектовОбмена77.УстановитьПравилоОбменаДанными77("B/796", ТекущаяБаза, "ОписаниеРеквизитов", "B/796/Реквизиты");
    
    РегистрыСведений.ОписанияОбъектовОбмена77.УстановитьПравилоОбменаДанными77("B/796/Реквизиты", ТекущаяБаза, "Родитель", "Скрипт~ОбменСИП77СкриптыПостобработка~ЗаписатьДляНовых~Ссылка.Родитель~ТолькоДляНовых");
    РегистрыСведений.ОписанияОбъектовОбмена77.УстановитьПравилоОбменаДанными77("B/796/Реквизиты", ТекущаяБаза, "ТипГруппы", "Ссылка.ТипГруппы");
    РегистрыСведений.ОписанияОбъектовОбмена77.УстановитьПравилоОбменаДанными77("B/796/Реквизиты", ТекущаяБаза, "Телефон", "Ссылка.Телефон");
    РегистрыСведений.ОписанияОбъектовОбмена77.УстановитьПравилоОбменаДанными77("B/796/Реквизиты", ТекущаяБаза, "КодПартнера", "Ссылка.КодПартнера");

Зачем это нужно:
Чтобы не внедрять 8-ку сразу и везде, а осуществить аккуратный поэтапный переход, не нарушая уже отлаженную работу ни в голове ни в удаленных подразделениях.

Спасибо.
С уважением!
 
 
   Garykom
 
1 - 22.09.16 - 20:20
>В конечном результате вышло так, что некоторые ссылки из 7.7 при переносе в УТ должны были быть объединены в одну ссылку 8.х

лисапеда... заводим в УТ справочник "базы77" и другой справочник "СинхронизацияОбъектов" куда пишем (ОбъектУТ|База77|ИдентификаторОбъекта77).

Сохраняем обратную возможность выгрузки/синхронизации назад в 77 и не плодим дубли в УТ.
   Garykom
 
2 - 22.09.16 - 20:21
(1)+ Хотя 8-ка же поэтому не справочник а РС
   Garykom
 
3 - 22.09.16 - 20:22
И самое главное... науя OLE когда оно необходимо только для онлайна? Не проще было онлайновый на XML/JSON или еще не смогли освоить эти "текстовые файлы"?
   Garykom
 
4 - 22.09.16 - 20:22
(3) *оффлайновый
   Вуглускр1991
 
5 - 22.09.16 - 20:26
(1) Ну так и сделано, только не для всех объектов, бывает так, что преобразования идентификатора достаточно для получения ссылки.
   Вуглускр1991
 
6 - 22.09.16 - 20:31
(3) Сперва я писал JSON сериализации объектов, но потом увидел, что от каждого чиха объект разрушался. После чего я стал писать напрямую в объект, а уже заполненный чем надо стал сериализовать - дело пошло и быстрее и стабильнее.
И у меня онлайн! Люди в 7.7 делают документы, через интервал времени в несколько секунд документы появляются в 8 и проводятся.
   Garykom
 
7 - 22.09.16 - 20:34
(6)+ Вероятно про экранирование символов (в XML/JSON) не дочитали вот и разрушалось от \" или \{ или \} и т.д.
   Вуглускр1991
 
8 - 22.09.16 - 20:39
(7) Нет, символы экранировал, с этим все впорядке, Объект разрушался из-за порядка следования полей, пустых таблиц, значений неопределенного типа ... Попробуйте вместо объекта заполнить структуру, из структуры создать сериализованный JSON объект и загрузить его в прикладной объект. Окажется, что структура сортирует свойства по ключу по алфавиту, а в объекте свойства идут в произвольном порядке и при работе с конфигурацией этот порядок изменяется легко, а сериализованный объект будет разрушен.
   Garykom
 
9 - 22.09.16 - 21:03
(8) Неправильная сериализация была значит, не понимаю какая разница в каком порядке реквизиты объекта читать/записывать по именам их.
   Cyberhawk
 
10 - 22.09.16 - 21:06
Это что - подсистема (конфигурация) или внешняя база? На какой платформе, в каком интерфейсе, в каком режиме совместимости?
 
 Рекламное место пустует
   Garykom
 
11 - 22.09.16 - 21:10
(10) Это просто лисапед, всех преимуществ что самодельный (устройство известно ТС в деталях) и ездит.
   Garykom
 
12 - 22.09.16 - 21:13
(11)+ Хотя еще огромный + что ТС терь зная камешки ваяния подобного обмена и изучив КД влегкую на правилах КД (исключая обратную загрузку данных из 8 в 77) наваяет аналог, причем в 10 раз примерно быстрее.
   Вуглускр1991
 
13 - 22.09.16 - 21:14
(10) Это подсистема, с тремя привилегированными серверными модулями, будет работать для обычного и управляемого режимов, для файлового и клиент-серверного режимов. Не будет работать в линуксе из-за OLE и в тех операционных системах, которые настроены так, что не позволяют запуск 1С 7.7.
   Злопчинский
 
14 - 22.09.16 - 21:15
(0)  использовать млг файл очень нехорошо, там решится автоматом только интерактивное
   Вуглускр1991
 
15 - 22.09.16 - 21:18
Первый серверный модуль является общим для работы механизмов конвертации и не содержит специфики конвертируемых решений, только самое общее: из 7.7 в 8.х пр помощи OLE.
Второй серверный модуль содержит скрипты и алгоритмы позднего связывания данных внутри объектов,
тут как раз первую скрипку играют алгоритмы учета методики прикладных решений в моем случае это УТ 10.3. Он кстати называется "ОбменСИП77СкриптыПостобработка", что можно увидеть в примере правил.
   Garykom
 
16 - 22.09.16 - 21:19
(14) угу, мне пришлось в модули проведения засовывать свой код или даже о "контрольный код" делать для справочников/документов, чтобы изменения отслеживать когда то

Прикольно вышло для всех реквизитов объекта считается CRC32 или другой хеш и определяем изменено или нет.
Минимизация заодно объема передаваемых данных но вычислительная нагрузка на компы.
   Cyberhawk
 
17 - 22.09.16 - 21:19
(13) Это все _только_ для баз-источников на платформе 7.7?
   Вуглускр1991
 
18 - 22.09.16 - 21:20
(14) Не знаю, почему, но если мне надо загрузить много документов, я обработкой UCHOICE из набора с ИТС изменяю ... например ставку НП в реализациях и в MLG все записывается. Причем записывается и название обработки, которая изменила реквизиты.
   Вуглускр1991
 
19 - 22.09.16 - 21:21
(17) Да. Для 8-ки есть узлы обменов РИБ и КД.
   Вуглускр1991
 
20 - 22.09.16 - 21:24
Третий серверный модуль выполняет функции стандартизации реквизитов контрагентов из базы ЕГРЮЛ / ЕГРИП, стандартизацию и геокодирование адресов посредством ФИАС и dadata.ru. Стандартизацию ОКСМ, единиц измерений, банков ... на входе иногда мусор попадается, типа валюта руб с кодом 1.
   Garykom
 
21 - 22.09.16 - 21:24
(18) ЗаписьЖурналаРегистрации
   Вуглускр1991
 
22 - 22.09.16 - 21:27
(21) Возможно, я не смотрел. Не споткнулся - не упал и не поднялся. Опыт с контрольным кодом из (16) интересный, но я пока не вижу в нашем случае ситуации, в которой он бы стал необходим.
   Это_mike
 
23 - 23.09.16 - 08:01
(16) а если поднять УРБД, и смотреть VerStamp ? не проще?
   Garykom
 
24 - 23.09.16 - 09:21
(23) 1. УРБД не бесплатная
2. Не совсем штатная работа, не средствами чисто 1С (dbf|sql разные базы)
   Garykom
 
25 - 23.09.16 - 09:22
(24)+ Но и с УРБД в 77 когда то приходилось извращаться в разных видах ))
   Вуглускр1991
 
26 - 23.09.16 - 14:29
(12) Я сейчас думаю о том, как сделать некоторую унивесализацию из этого проекта: поскольку он построен на ТиС и УТ 10 он мог бы иметь спрос, если бы волна переходов с 7 на 8 не ушла в прошлое.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует