Генератор начального образа узла РИБ 1С: 8.1

Обработка позволяет создать начальный образ узла РИБ без монопольного доступа к базе.
При этом можно заранее задать, какие объекты выгружать, что ускорит формирование образа, поэтому может работать даже быстрее штатной выгрузки.

Обработка проверена многократно на практике.

При выгрузке фильтры по именам объектов задаются через точку с запятой, без пробелов! Используются полные названия объектов.

Пример отбора ссылочных данных:

Если

МД <> Метаданные.Справочники.ФизическиеЛица

И МД <> Метаданные.Справочники.Склады

Тогда

Если МД.Реквизиты.Найти(«Магазин») <> Неопределено Тогда

              Условие = «Магазин В (&Магазины)»;

              Параметры.Вставить(«Магазины», Узел.Магазины.Выгрузить(,»Магазин»));

КонецЕсли;

КонецЕсли;

Пример инициализации объекта плана обмена:

Объект.ДополнительныеСвойства.Вставить(«ВыгружатьВсеБонусы», истина);

 

Перед выгрузкой очищайте всю регистрацию изменений по узлу, т.к. туда перейдут все объекты.

30 Comments

  1. fixin

    Обработка позволяет создать начальный образ узла РИБ без монопольного доступа к базе.

    При этом можно заранее задать, какие объекты выгружать, что ускорит формирование образа, поэтому может работать даже быстрее штатной выгрузки.

    Перейти к публикации

    Reply
  2. Kochevnic

    Спасибо! Возьмём на вооружение

    Reply
  3. fixin

    (1) берите, берите. 😉

    Reply
  4. Angeros

    У меня база 300гб. Насколько быстро при помощи этого средства получится создать новый образ риб?

    Reply
  5. fixin

    (3) а сколько в этой базе узлов? У меня база 45 Гб (40 узлов), дочка размером 1,5 Гб формируется 6-7 часов. Штатная выгрузка длится примерно столько же, но монопольно. Тут рядом на ИС еще есть методика удаления лишних объектов из копии базы, если для вас мой метод не подходит, можете юзать этот.

    Reply
  6. Angeros

    (4)Количество узлов по-моему в этом случае не влияет на время выгрузки. Увы но когда нужно сделать еще один узел приходится копировать всю базу целиком. Это до 2 ух часов. Дальше подключение к обмену. Единственный момент вырубка лишних данных, но эту работу можно проводить в иное время, когда база уже работает. Ваш метод очень хорош для открытия нового магаза.

    Reply
  7. fixin

    (5) не совсем так. справочники, возможно копируются и целиком, но документы отбираются предварительными фильтрами по метаданным, написанными на языке 1С. Короче, этот процесс можно ускорить.

    Согласен, если у вас выгрузка длится 12 часов, то, возможно имеет смысл скопировать за 2 часа, а потом прочистить базу от лишнего.

    Но, т.к. у меня она идет 6 часов, мне проще создать пустую базу и выгружать туда, чем делать полное копирование базы, во время которого опять же, никто не может работать. 😉

    Кстати, можно попробовать выгружать базу в три параллельных потока через 3 ком-соединения — справочники, документы, регистры. Не знаю, будет ли это быстрее и получится ли из-за транзакционных конфликтов.

    Reply
  8. jko

    Ок. Будем посмотреть.

    Reply
  9. slavich

    Как раз в тему обработка, спс…

    Reply
  10. fixin

    (8) Вот ради таких душевных спасибо и делюсь

    Reply
  11. krv2k

    (9) Наивный… это они такими комментариями себе стартмани зарабатывают

    Reply
  12. elenavoz

    Да интересно… как раз сейчас актуально

    Reply
  13. alsky-2003

    ну подскажите лопуху, пожалуйста, — почему обработка выдает у меня ошибку «{ВнешняяОбработка.ГенерацияУзлаРИБ.МодульОбъекта(6)}: Ошибка при вызове конструктора (COMОбъект)

    V8 = Новый COMОбъект(«V81.COMConnector»);

    по причине:

    Недопустимая строка с указанием класса»

    где я тупанул? com-соединение я не настраиваю

    Reply
  14. fixin

    (12) видимо, у вас стоит 82, а не 81, надо будет поправить код, чтобы генерировался 81 объект, а потом 82, если 81 нет.

    Reply
  15. alsky-2003

    Извините уж, что дергаю. Вот что мы сделали в коде:

    Функция Установить1СCOMСоединение(BaseConnectionString, Base1sUser, Base1sPassword) Экспорт

    //Устанавливаем быстрое COM-соединение с 1С8

    //V8 = Новый COMОбъект(«V81.COMConnector»);

    V8 = Новый COMОбъект(«V82.Application»);

    Попытка

    //ConnectionString = ‘File=»‘ + Base1sPath + ‘»;Usr=»‘ + Base1sUser + ‘»;Pwd=»‘ + Base1sPassword + ‘»‘;

    ConnectionString =BaseConnectionString + ?(Прав(СокрЛП(BaseConnectionString),1) = «;», «», «;») +» Usr=»»» + Base1sUser + «»»;Pwd=»»» + Base1sPassword + «»»»;

    Base1s = V8.Connect(ConnectionString);

    Исключение

    Предупреждение(«Не удалось создать com-соединение! » + ОписаниеОшибки() + »
    » + BaseConnectionString);

    Возврат Неопределено;

    КонецПопытки;

    return Base1s;

    КонецФункции

    Все равно ругается на неверные параметры соединения с базой

    Reply
  16. fixin

    (14) а с чего вы ком-коннектор заменили на аппликатион?

    я не уверен, что вы правильно парсите строку соединения. Попробуйте в явном виде прописать имя зверя и пароль, каталог и т.п.

    Reply
  17. ViksVik

    Я так понял, что эта обработка для 1с81. А на 1с82 не заработает?

    Reply
  18. Mastekor

    Что-то не выходит, затыкается на справочнике банков.

    {ВнешняяОбработка.ГенерацияУзлаРИБ(58)}: Ошибка при проверке необходимости отправки объекта КОНКУРСНЫЙ УПРАВЛЯЮЩИЙ АКБ «ЭЛЕКТРОБАНК» в узел: {ВнешняяОбработка.ГенерацияУзлаРИБ(56)}: Метод объекта не обнаружен (ПриОтправкеДанныхПодчиненному)

    ВызватьИсключение «Ошибка при проверке необходимости отправки объекта » + Объект + » в узел: » + ОписаниеОшибки();
    Reply
  19. fixin

    (17) Mastekor, в плане обмена заведи обработчик события ПриОтправкеДанныхПодчиненному или не ставь галку, что нужно вызывать функции плана обмена.

    Reply
  20. fixin

    Добавил версию обработки для 8.2, умеет выгружать в формате для универсальной выгрузки-загрузки.», которая умеет работать без COM, просто выгружает данные в файл, откуда их можно считать или универсальной обработкой загрузки-выгрузки от 1С или моей обработкой «Чтение XML-выгрузки».

    Понадобилось как-то, когда базу недовыгрузили и отправили в таком виде на точку. Чтобы заново не выгружать, довыгрузил регистры в файл и там загрузил, быстро работает.

    Можно использовать для повторной выгрузки регистра, например, быстрее чем через РИБ.

    Reply
  21. isn

    (4) Здравствуйте! У меня вопрос к комменту «а сколько в этой базе узлов? У меня база 45 Гб (40 узлов), дочка размером 1,5 Гб формируется 6-7 часов. Штатная выгрузка длится примерно столько же, но монопольно. Тут рядом на ИС еще есть методика удаления лишних объектов из копии базы, если для вас мой метод не подходит, можете юзать этот.»

    У меня база 70 гигов, 80 узлов. Штатная выгрузка просто физически не выгружает. В комменте есть ссылка «Тут рядом на ИС еще есть методика удаления лишних объектов из копии базы, если для вас мой метод не подходит, можете юзать этот» дайте плиз ссылку. буду проверять оба метода.

    Reply
  22. fixin

    (20) не, ну сами поищите. Это же банально.

    Reply
  23. isn

    (21) В какой тип файла выгружается, xml, dt, 1cd?

    Reply
  24. isn

    К сожалению, данный вариант формирования узла УРИБ у меня не сработал. Узел с 0, как таковой не создался и судя по коду обработки и не мог создаться.

    Reply
  25. isn

    Зря качал файл. Обработка оказалась бесполезна.

    Reply
  26. fixin

    (22) он обменивается по COM

    (23) А что именно у Вас не получилось?

    Reply
  27. amiralnar

    Сергей, здравствуйте! Спасибо за очень полезную обработку!

    Чувствую себя в замешательстве…

    В вопросах РИБ очень полезны ваши публикации, пользуюсь второй раз уже.

    Reply
  28. NikolaST

    Обработка очень полезная. Небольшое замечание — константы необходимо выгружать так:

    вместо

    Соединение.Константы[ИмяОбъекта].Установить(Соединение.ЗначениеИзСтрокиВнутр(ЗначениеУпакованное));

    нужно писать через менеджера:

    МенКонст = Соединение.Константы[ИмяОбъекта].СоздатьМенеджерЗначения();
    МенКонст.Значение = Соединение.ЗначениеИзСтрокиВнутр(ЗначениеУпакованное);
    МенКонст.ОбменДанными.Загрузка = Истина;
    МенКонст.Записать();

    а то в конфигурациях с БСП не прокатывало.

    Reply
  29. user611677_evgenych76

    Добрый день. Попробовал воспользоваться обработкой, т.к. штатная перестала работать (останавливается с сообщением о нехватке памяти).

    Выдает вот такую ошибку:

    {ВнешняяОбработка.ГенерацияУзлаРИБ.МодульОбъекта(589)}: Ошибка при вызове метода контекста (ПрочитатьXML)

    Возврат Соединение.ПрочитатьXML(ЧтениеXML);

    по причине:

    Произошла исключительная ситуация (1C:Enterprise 8.2.19.130): Значения данного типа не могут быть представлены в XML

    База Розница версии 1. Платформа 8.2.19.130

    Падает на справочнике дисконтных карт.

    Reply
  30. fixin

    (29) не могу сказать, почему. Вы ж программист, разберитесь. 😉

    судя по ошибке, ловит несериализуемое значение, может Хранилище, хотя должна его нормально распиливать.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *