Почему долго выгружаются ручные операции и проводки из 1С:Бухгалтерии 1.6 в 2.0 через универсальный обмен?

Программист 1С v8.3 (Управляемые формы) Бухгалтерский учет IT и автоматизация бизнеса
← На главную

При переходе с одной версии конфигурации 1С:Бухгалтерии на другую, например, с 1.6 на 2.0, часто возникает задача по переносу только ручных операций и связанных с ними проводок. Нередко пользователи сталкиваются с проблемой: процесс выгрузки данных через "Универсальный обмен данными в формате XML" и настроенные в "Конвертации данных" правила затягивается надолго или система вовсе кажется зависшей. В этой статье мы подробно рассмотрим, почему это происходит и как правильно настроить обмен, чтобы избежать подобных сложностей.

Основная причина медленной работы кроется в некорректной настройке правил конвертации данных (ПКД). Часто разработчики по ошибке создают отдельное правило выгрузки данных (ПВД) для всего регистра бухгалтерии, например, "Хозрасчетный". Это приводит к тому, что система пытается анализировать и выгружать огромный объем информации, включая все проводки за указанный период, а также все связанные с ними объекты (субконто, регистраторы и т.д.). Такой подход является крайне неэффективным и вызывает значительное замедление обмена.

Решение 1: Правильная настройка правил конвертации для выгрузки проводок вместе с документом

Для эффективного переноса ручных операций и их проводок мы должны изменить подход. Вместо того чтобы выгружать весь регистр бухгалтерии напрямую, мы сконцентрируемся на выгрузке самого документа-регистратора – "Операция (бухгалтерский и налоговый учет)". Проводки же мы будем выгружать "изнутри" этого документа, только те, которые к нему непосредственно относятся.

  1. Отказываемся от прямого ПВД для регистра бухгалтерии.

    Первым шагом мы удаляем или отключаем любое Правило Выгрузки Данных (ПВД), которое было создано специально для выгрузки всего регистра бухгалтерии "Хозрасчетный". В рамках нашего сценария этот регистр не должен быть основным источником данных для выгрузки. Если вы выгружаете только ручные операции, то ваш основной объект – это документ, который эти ручные операции формирует.

  2. Фокусируемся на документе "Операция (бухгалтерский и налоговый учет)".

    Основным объектом для выгрузки должен стать документ "Операция (бухгалтерский и налоговый учет)" (или "Операция (бух)" в сокращенном виде). Именно для него мы создаем основное Правило Конвертации Объектов (ПКО). В универсальном обмене мы указываем выгрузку данных этого типа документа за необходимый период.

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

    Теперь самое главное: выгрузку движений (проводок) документа мы будем производить в обработчике события "После выгрузки" для Правила Конвертации Объектов (ПКО) документа "Операция (бухгалтерский и налоговый учет)".

    В этом обработчике мы напишем скрипт, который будет выполнять следующие действия:

    1. Создание вспомогательного Правила Конвертации Объектов (ПКО) для набора записей регистра.

      Перед тем как писать код, мы должны создать отдельное ПКО, предназначенное специально для набора записей регистра бухгалтерии "Хозрасчетный". Назовем его, например, "НаборЗаписейХозрасчетный_ПКО". В этом ПКО мы настроим соответствие полей регистра из базы-источника полям регистра в базе-приемнике. Это ПКО будет использоваться для корректного преобразования каждой записи проводки.

    2. Формирование запроса к регистру бухгалтерии.

      Внутри обработчика "После выгрузки" для нашего документа мы создадим запрос к регистру бухгалтерии "Хозрасчетный". Ключевым моментом здесь является установка отбора по регистратору, где Регистратор равен ссылке на текущий выгружаемый документ. Таким образом, мы получаем только те проводки, которые были созданы данным конкретным документом "Операция (бух)".

      Посмотрим на примерный алгоритм в обработчике "После выгрузки":

      
      // В обработчике "После выгрузки" для правила конвертации документа
      // "Операция (бухгалтерский и налоговый учет)"
      
      // Источник - это текущий выгружаемый документ из базы-источника.
      // Получаем движения регистра бухгалтерии, сформированные этим документом.
      // Объект Источник.Движения.Хозрасчетный уже является НаборомЗаписей.
      
      // Предполагаем, что в Конвертации Данных уже создано ПКО
      // для набора записей регистра бухгалтерии с именем, например, "НаборЗаписейХозрасчетный_ПКО".
      // Если необходимо выгрузить все движения данного регистратора без дополнительной фильтрации
      Если Источник.Движения.Хозрасчетный.Количество() > 0 Тогда
          ВыгрузитьПоПравилу(Источник.Движения.Хозрасчетный, "НаборЗаписейХозрасчетный_ПКО");
      КонецЕсли;
      
      // Если же требуется более сложная логика отбора или модификации проводок
      // перед выгрузкой, можно использовать следующий подход:
      
      // 1. Создаем временный набор записей регистра.
      НаборЗаписейДляВыгрузки = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
      НаборЗаписейДляВыгрузки.Отбор.Регистратор.Установить(Источник.Ссылка);
      НаборЗаписейДляВыгрузки.Прочитать(); // Читаем все записи для данного регистратора
      
      // 2. Дополнительная фильтрация или модификация, если это необходимо.
      // Например, если нужно перенести только активные проводки
      Если НаборЗаписейДляВыгрузки.Количество() > 0 Тогда
          // Здесь мы выгружаем созданный и заполненный набор записей
          ВыгрузитьПоПравилу(НаборЗаписейДляВыгрузки, "НаборЗаписейХозрасчетный_ПКО");
      КонецЕсли;
      

      Таким образом, мы гарантируем, что в файл обмена попадут только те проводки, которые непосредственно относятся к выгружаемым ручным операциям, а не все проводки из базы данных за указанный период. Этот метод значительно сокращает объем выгружаемых данных и, как следствие, время обмена.

Решение 2: Оптимизация выгрузки связанных данных (Субконто)

Еще одной распространенной причиной медленного обмена является избыточная выгрузка связанных данных. Проводки в регистре бухгалтерии имеют измерения, называемые субконто, которые ссылаются на другие объекты базы данных (например, справочники: "Контрагенты", "Номенклатура", "Договоры" и т.д.). Неправильная настройка их переноса может привести к попытке выгрузить полные данные всех этих связанных объектов, что тоже значительно замедляет процесс.

  1. Точная настройка поиска объектов в базе-приемнике.

    Мы должны внимательно подойти к настройке Правил Конвертации Свойств (ПКС) для реквизитов, которые являются ссылками на справочники или другие документы (например, для субконто в проводках). Для каждого такого свойства в ПКСах необходимо правильно указать поля для поиска объектов в базе-приемнике. Например:

    • Для справочника "Контрагенты" мы можем настроить поиск по комбинации полей ИНН + КПП.
    • Для "Номенклатуры" — по Коду или Наименованию.
    • Для "Договоров" — по Номеру и Дате, а также по ссылке на владельца (Контрагента).

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

  2. Использование флага "Не выгружать объекты свойств по ссылке".

    В некоторых случаях мы можем быть уверены, что связанный объект (например, определенный элемент справочника, который является субконто) уже существует в базе-приемнике и его полные данные переносить не требуется. В таких Правилах Конвертации Свойств (ПКС) для соответствующих реквизитов мы можем установить флаг "Не выгружать объекты свойств по ссылке". При установке этого флага система выгрузит только ссылку на объект (его GUID), а сам объект (со всеми его реквизитами) не будет включаться в файл обмена. Это существенно снижает объем передаваемых данных. Однако будьте осторожны: если объекта нет в приемнике, возникнет ошибка при загрузке.

Решение 3: Общие технические рекомендации для ускорения обмена

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

  1. Выгрузка данных частями.

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

  2. Использование актуальной версии обработки "Универсальный обмен данными в формате XML".

    Мы всегда должны убеждаться, что используем самую свежую версию обработки "Универсальный обмен данными в формате XML". Разработчики 1С постоянно улучшают свои типовые решения, исправляют ошибки и оптимизируют производительность. Использование устаревшей версии обработки может быть причиной замедлений или ошибок.

  3. Выполнение обмена на сервере 1С.

    Если наша система 1С работает в клиент-серверном режиме, мы настоятельно рекомендуем запускать процедуру выгрузки данных на сервере "1С:Предприятия". Серверное оборудование, как правило, гораздо мощнее клиентских рабочих станций, имеет больше оперативной памяти и более быстрые дисковые системы. Это позволяет значительно ускорить процесс обработки и выгрузки данных, минимизируя время "зависаний".

  4. Предварительное архивирование и тестирование.

    Перед началом любого серьезного обмена данными, особенно при переносе больших объемов информации между конфигурациями, мы обязательно должны сделать резервные копии обеих баз данных – и базы-источника, и базы-приемника. Это позволит нам восстановить исходное состояние системы в случае возникновения непредвиденных ошибок. Кроме того, мы рекомендуем проводить тестовую выгрузку на небольшой, но репрезентативной выборке данных (например, за один день или одну неделю). Это поможет нам убедиться в корректности настроенных правил, оценить примерное время выполнения обмена и выявить потенциальные проблемы до начала полноценной выгрузки.

  5. Оценка количества проводок.

    Прежде чем приступать к выгрузке, полезно оценить объем данных, с которым мы будем работать. Мы можем выполнить простой запрос к регистру бухгалтерии "Хозрасчетный" в базе-источнике, чтобы узнать количество проводок за интересующий нас период. Например:

    
    ВЫБРАТЬ
        КОЛИЧЕСТВО(*)
    ИЗ
        РегистрБухгалтерии.Хозрасчетный
    ГДЕ
        Период МЕЖДУ &НачалоПериода И &КонецПериода
        И Регистратор ССЫЛКА Документ.ОперацияБух
    

    Эта оценка поможет нам спланировать стратегию выгрузки (например, разбить на части) и заранее понять, насколько долго может продлиться процесс. Если количество проводок исчисляется сотнями тысяч или миллионами, разбивка на более мелкие интервалы становится критически важной.

Применяя эти методы и рекомендации, мы сможем значительно оптимизировать процесс выгрузки ручных операций и проводок из 1С:Бухгалтерии 1.6 в 2.0, превратив долгое и проблемное "зависание" в быстрый и контролируемый обмен данными.

← На главную