Перенос данных из семерки по частям




При переносе баз из семерки в восьмерку, если база данных достаточно большая, может возникнуть ошибка «msxml3.dll: Недостаточно памяти для завершения операции». В этом случае советуют переносить данные по частям. Но возможности выгрузки по частям в стандартной обработке сильно ограничены: можно выгрузить отдельно справочники, остатки на начало года, обороты, документы. Обычно такая выгрузка по частям не исправляет ситуацию, т.к. основной объем данных сосредоточен обычно в одном справочнике, значит нужно выгружать отдельно этот справочник, мало того, может понадобиться его выгружать в несколько этапов. Попытаюсь описать метод решения, который использую в таких случаях.

Для примера использовал базу БП. В семерке в каталоге ExtForms находим файлы ACC_ACC8.ert (обработка для выгрузки данных)и ACC_ACC8.xml (правила обмена). Для других конфигураций они будут называться по другому, но смысл тот же. Если файлов нет, придётся найти инсталляционный комплект конфигурации, установить и забрать файлы оттуда.

Итак, задача номер раз – определить на каком справочнике вылетает. Почему на справочнике? Может я и не прав, но обычно документы не переносят – перенос осуществляется на конец года, а количество записей об остатках в принципе зависит от аналитики, которая обычно и есть справочник. Определить можно по ошибке, из-за которой все и завертелось. У меня «Ошибка исполнения обработчика:  ПВД_ПередОбработкойПравила_спр_Договоры
  — msxml3.dll: Недостаточно памяти для завершения операции.» Значит виноват справочник Договоры.

Теперь нам нужно выгрузить данные в два этапа:

 1) Отдельно все справочники, кроме справочника Договоры

2) Справочник Договоры.

Задача номер два – выгрузка одного справочника отдельно. Выгрузка осуществляется из пункта меню «Сервис-Переход  на 1С:Бухгалтерию 8». При этом запускается обработка ПомощникПереходаНа1CБухгалтерию8. Она вызывает функцию глобального модуля «ВыгрузкаВ1СБухгалтерию8», в которой есть установка параметров правил обмена «ACC_ACC8.xml». В том числе там есть строка

ТаблицаНастройкиПараметров.ДобавитьЗначение(Перечисление.Булево.Нет, «ВыгружатьКоды»);

Если поменять Нет на Да – коды справочников сохранятся (по умолчанию коды генерируются). Это иногда бывает полезно.

Загружаем правила обмена «ACC_ACC8.xml» в Конвертацию данных (Стартовый помошник-Загрузить правила обмена из файла). Саму конвертацию можно установить c сайта http://its.1c.ru. В конвертации в обработчике «Перед выгрузкой данных» находим, что в зависимости от параметров типа «П_ВыгружатьСправочники», устанавливаются пометки отключения для правил выгрузки данных. Значит нам нужно вручную установить пометки для тех справочников, которые нам не нужно выгружать, а код в обработчике закомментировать. Но, т.к. это семерка, то после исправления правил нам нужно выгружать код обработчиков и вставлять его в «ACC_ACC8.ert». Не зная, что в обработке «ACC_ACC8.ert» поправлено, а что взято из правил, считаю, что проще найти код в обработке и править там. Поэтому ищем функцию «Конвертация_ПередВыгрузкойДанных» и комментим

ПравилаВыгрузкиСписок.Пометка(Ном, Параметры.П_ВыгружатьСправочники);

Или весь блок, если это нужно. Итого получили два набора файлов «acc_acc8». В первом в правилах выгрузки одна галочка отключить на справочнике «спр_Договоры», во втором все кроме «спр_Договоры» , в обоих обработках закомментен блок установки пометок. Пробуем выгрузить.

Вполне возможна ситуация когда один справочник не выгружается. Тогда нужно выгрузить его по частям. Для этого ищем правило выгрузки справочника(в нашем случае «Договоры»). По имени обработчика находим процедуру в  «ACC_ACC8.ert» и правим ее так, чтобы выгружаласть часть справочника, например у меня в Функция ПВД_ПередОбработкойПравила_спр_Договоры вставлен код «Если ВыборкаВладельцев.Код>=»00006000″ Тогда…»

Успехов))

4 Comments

  1. bb1962

    Безграмотная статья. Во-первых, нет никакого смысла переносить отдельно справочник, хоть частями, хоть целиком. Ошибка вероятнее всего действительно возникнет при переносе остатков (при выгрузке, это важно понимать), когда справочник переносится по ссылкам. Следовательно

    правило выгрузки данных (справочника) здесь вообще не причем. Оно в этом случае не используется. Справочник при выгрузке остатков все равно будет выгружаться без ограничений. Тогда уж нужно изменять правило конвертации объекта (справочника). Но это тоже не решение конечно, поскольку остатки выгрузятся с пустыми ссылками, а тогда зачем они? Совет один — обращайтесь к профессионалам, а не к дилетантам.

    Reply
  2. 32ops

    Я описывал конкретный случай, остатки выгрузились нормально, в справочнике договоров было 122 000 записей и он не выгружался. Т.е. смысл выгрузки одного справочника в данном случае есть. И изменение ПВД тут оправдано. Коментарии насчет дилетанства как-то некрасиво смотрятся на фоне собственной рекламы, но я и не претендую, описал то чего не смог найти в интернете встретившись с задачей переноса.

    Reply
  3. OBEH

    А что за контора такая, где «в справочнике договоров было 122 000 «?

    Reply
  4. aves

    Поддержу (1).

    Статья из серии пробовали, почему то получилось.

    Есть способ выгружать из 77 неограниченные (погорячился конечно, но большие) объемы данных, формируя файлы до 6 ГБ в зависимости от правил и конфигураций источника-приемника.

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

    Reply

Leave a Comment

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