Как выгрузить базу 1С:Управление торговлей 11.5 с отбором по складу в отдельную чистую базу?

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

Задача выгрузки части данных из одной базы 1С в другую, особенно с отбором по конкретному критерию, такому как склад, является довольно частой, но при этом нетривиальной. Она требует глубокого понимания структуры данных конфигурации, принципов работы платформы 1С:Предприятие и тщательного анализа взаимосвязей между различными объектами. Рассмотрим подробно, как мы можем подойти к решению этой задачи, используя различные методы.

Наша цель — создать новую, "чистую" базу 1С:Управление торговлей 11.5, которая будет содержать только данные (закупки, продажи, остатки и все связанные справочники) по одному конкретному магазину (складу), полностью исключив информацию по всем остальным складам из исходной базы.

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

1. Использование механизма распределенных информационных баз (РИБ)

Механизм распределенных информационных баз (РИБ) является одним из наиболее подходящих и штатных инструментов 1С для решения подобных задач, особенно если в будущем планируется синхронизация данных или поддержание актуальности информации между центральной и периферийной базами. Давайте рассмотрим этот подход подробнее.

  1. Понимание принципа работы РИБ: РИБ предназначен для организации обмена данными между несколькими базами. Одна база считается центральной, остальные — периферийными. Обмен происходит по заданным правилам, которые определяют, какие данные и по каким условиям должны передаваться.
  2. Создание нового узла РИБ:
    • В исходной, "большой" базе 1С:Управление торговлей 11.5 перейдите в раздел Администрирование -> Настройка синхронизации данных -> Узлы распределенной информационной базы.
    • Создайте новый узел РИБ. Важно выбрать вариант создания узла с полным начальным образом, который будет содержать все данные, а затем настроить правила обмена.
    • При создании узла укажите способ подключения (например, через каталог или FTP).
  3. Настройка правил обмена по складу:

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

    • Идентифицировать объекты, связанные со складом: Это прежде всего документы (Поступление товаров и услуг, Реализация товаров и услуг, Перемещение товаров, Списание товаров, Оприходование товаров и т.д.), а также движения по регистрам накопления, относящиеся к товарам на складах (например, ТоварыНаСкладах, СебестоимостьТоваров) и финансовым регистрам.
    • Настроить отбор по складу для документов: Для каждого типа документа, связанного со складом, в правилах обмена необходимо установить отбор по реквизиту Склад, указав наш целевой магазин. Например, для документа Реализация товаров и услуг мы укажем отбор Склад = [НашЦелевойСклад].
    • Настроить отбор для движений регистров: Некоторые регистры могут иметь прямую связь со складом. Для них также потребуется установить отбор. Однако, чаще всего движения регистров выгружаются вместе с документами, которые их сформировали. Главное — убедиться, что отфильтрованные документы корректно формируют движения в новой базе.
    • Обеспечить выгрузку зависимых данных: Крайне важно, чтобы вместе с отфильтрованными документами выгружались все необходимые справочники, на которые эти документы ссылаются. Это такие объекты, как:
      • Номенклатура (вся номенклатура, которая участвовала в операциях выбранного склада).
      • Контрагенты (поставщики, покупатели, которые фигурировали в документах выбранного склада).
      • ДоговорыКонтрагентов, БанковскиеСчета, Организации и другие базовые справочники.
      • Склады (должен быть выгружен как минимум сам целевой склад).

      Правила обмена обычно автоматически подхватывают ссылочные данные, но их нужно тщательно проверить, чтобы не получить "битые ссылки" в периферийной базе.

    • Удаление лишних данных из начального образа: При создании узла РИБ обычно формируется полный начальный образ. После его создания и загрузки в новую базу, а также после первичной синхронизации, теоретически можно настроить правила обмена таким образом, чтобы данные по другим складам не передавались, или даже удалить их из периферийной базы (но это очень рискованный и нерекомендуемый путь). Более правильно — изначально настроить правила таким образом, чтобы в периферийную базу попадали только нужные данные. Для этого может потребоваться создание своих правил регистрации изменений или доработка типовых правил.
  4. Загрузка начального образа в новую базу:
    • Создайте пустую базу 1С:Управление торговлей 11.5 (той же версии конфигурации).
    • Загрузите в нее начальный образ, сформированный на предыдущем шаге.
    • После загрузки периферийная база будет содержать данные согласно настроенным правилам обмена.

Преимущества РИБ:

Недостатки РИБ:

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

Этот метод, упомянутый в обсуждении, является мощным и гибким инструментом для выгрузки и загрузки данных. Он используется универсальной обработкой УниверсальныйОбменДаннымиXML и основан на использовании правил конвертации данных (КД).

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

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

    • Определить источники и приемники: Укажите исходную конфигурацию (УТ 11.5) и целевую конфигурацию (также УТ 11.5).
    • Создать правила выгрузки данных (ПВД): Для каждого типа объекта, который мы хотим выгрузить (справочники, документы), создаем ПВД. Внутри каждого ПВД мы можем написать запросы или использовать язык выражений для установки отбора. Например, для документа Реализация товаров и услуг в ПВД мы укажем условие Склад = [НашЦелевойСклад].
    • Настроить правила конвертации объектов (ПКО): Определить, как данные из объектов-источников будут преобразовываться в объекты-приемники. Для большинства типовых объектов при обмене между одинаковыми конфигурациями это будет простое соответствие реквизитов, но важно учесть ссылочные типы.
    • Обеспечить выгрузку зависимых справочников: Как и в случае с РИБ, нам нужно гарантировать, что все справочники (Номенклатура, Контрагенты, Договоры и т.д.), на которые ссылаются отфильтрованные документы, также будут выгружены. В КД это реализуется путем настройки правил поиска и создания объектов, а также указания, что ссылочные объекты также должны быть выгружены.
    • Учесть регистры: Движения регистров выгружаются вместе с документами, которые их формируют. Убедитесь, что все необходимые регистры включены в правила обмена, и что их движения будут корректно сформированы в новой базе после загрузки документов.
  3. Выгрузка данных с помощью УниверсальныйОбменДаннымиXML:
    • Загрузите разработанные правила КД в обработку УниверсальныйОбменДаннымиXML в исходной базе.
    • Укажите период выгрузки и, при необходимости, дополнительные отборы, если они не были полностью реализованы в правилах КД.
    • Запустите выгрузку. В результате будет сформирован XML-файл с данными.
  4. Загрузка данных в чистую базу:
    • Создайте новую, пустую базу 1С:Управление торговлей 11.5.
    • Загрузите те же правила КД в обработку УниверсальныйОбменДаннымиXML в новой базе.
    • Запустите загрузку данных из сформированного XML-файла.
  5. Использование готовых обработок: В сообщении 2 упоминается обработка "Выгрузка загрузка данных ХМЛ с отбором" с Инфостарта. Если такая обработка существует и подходит для УТ 11.5, она может существенно упростить процесс, предоставляя готовый интерфейс для установки отборов без необходимости писать правила КД вручную. Мы можем проверить ее функциональность, но всегда следует быть готовыми к тому, что универсальные решения могут не учесть все нюансы конкретной конфигурации.

Преимущества универсального обмена XML:

Недостатки универсального обмена XML:

3. Разработка собственного инструмента для выгрузки/загрузки данных

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

  1. Анализ структуры данных:
    • Изучите Метаданные конфигурации УТ 11.5, чтобы понять структуру всех необходимых справочников, документов и регистров.
    • Определите все возможные связи между объектами, которые имеют отношение к складу (например, Документ.РеализацияТоваровУслуг ссылается на Справочник.Контрагенты, Справочник.Номенклатура, Справочник.Склады, а также формирует движения по регистрам ТоварыНаСкладах, ВзаиморасчетыСКонтрагентами и т.д.).
  2. Определение последовательности выгрузки:

    Критически важно соблюдать правильный порядок выгрузки данных, чтобы избежать ошибок ссылочной целостности:

    • Сначала выгружаем базовые справочники, не имеющие ссылок на другие объекты (например, Валюты, ЕдиницыИзмерения, Склады).
    • Затем справочники, ссылающиеся только на уже выгруженные (например, Номенклатура, Контрагенты, ДоговорыКонтрагентов).
    • В конце выгружаем документы и записи регистров. Документы должны быть выгружены в хронологическом порядке для корректного проведения и формирования остатков.
  3. Реализация выгрузки (в исходной базе):

    Создайте внешнюю обработку, которая будет:

    • Использовать Запросы для выборки данных. Например, для выборки документов реализации по конкретному складу:
      
      Запрос = Новый Запрос;
      Запрос.Текст = 
      "ВЫБРАТЬ
      |    РеализацияТоваровУслуг.Ссылка
      |ИЗ
      |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
      |ГДЕ
      |    РеализацияТоваровУслуг.Склад = &Склад";
      Запрос.УстановитьПараметр("Склад", СсылкаНаНашЦелевойСклад);
      ВыборкаДокументов = Запрос.Выполнить().Выбрать();
      
    • Для каждого выбранного документа (или элемента справочника) собирать все необходимые реквизиты и их значения.
    • Сохранять данные в удобном для последующей загрузки формате (например, в файл XML, JSON или в табличный документ). Важно сериализовать не только сами объекты, но и их ссылочные реквизиты, чтобы потом можно было восстановить связи.
    • При выгрузке объектов автоматически выгружать все объекты, на которые они ссылаются, если эти объекты еще не были выгружены (рекурсивный обход ссылок).
  4. Реализация загрузки (в чистой базе):

    Создайте вторую внешнюю обработку (или дополните первую), которая будет:

    • Считывать данные из подготовленного файла.
    • Создавать новые объекты в целевой базе, используя менеджеры объектов (например, Справочники.Номенклатура.СоздатьЭлемент(), Документы.РеализацияТоваровУслуг.СоздатьДокумент()).
    • Заполнять реквизиты новых объектов значениями из файла. Особое внимание уделите ссылочным реквизитам: необходимо найти соответствующие объекты в целевой базе или создать их, если они отсутствуют, и затем установить ссылку. Можно использовать карту соответствия старых и новых УИД объектов.
    • После создания документов, их необходимо Записать() и Провести() (в зависимости от сценария) для формирования движений по регистрам. Проводить документы важно в хронологическом порядке.
  5. Критические аспекты:
    • Обработка ссылок: Это самая сложная часть. Каждому объекту из исходной базы в целевой должен соответствовать новый объект. Необходимо разработать механизм сопоставления (например, по наименованию + коду, или по уникальным идентификаторам, если они сохраняются).
    • Производительность: Для больших объемов данных необходимо оптимизировать запросы и операции записи.
    • Обработка ошибок: Предусмотреть логирование ошибок и возможность их исправления.
    • Транзакции: Использование транзакций для групповых операций записи может улучшить стабильность и целостность данных.

Преимущества разработки собственного инструмента:

Недостатки разработки собственного инструмента:

4. Копирование базы и последующая очистка (с большой осторожностью)

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

  1. Создание полной копии базы:

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

  2. Разработка специализированной обработки для удаления:

    Ни в коем случае не удаляйте документы и справочники вручную через интерфейс 1С, если их много и они формируют движения! Это может привести к некорректным остаткам, нарушению ссылочной целостности и другим серьезным проблемам. Необходимо создать обработку, которая будет программно удалять данные, соблюдая строгие правила.

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

      Но такой подход требует глубокого понимания всех связей и может нарушить целостность.

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

Преимущества метода копирования и очистки:

Недостатки метода копирования и очистки:

Общие рекомендации и критически важные аспекты для всех методов

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

  1. Тщательный анализ зависимостей документов и справочников:

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

    Мы также должны учесть все справочники, на которые ссылаются эти документы и регистры: Номенклатура, ХарактеристикиНоменклатуры, СерииНоменклатуры, Контрагенты, ДоговорыКонтрагентов, Организации, БанковскиеСчета, ВидыЦен, Подразделения, ФизическиеЛица (для менеджеров), и, конечно, сам Справочник.Склады, включая наш целевой склад.

  2. Обеспечение целостности данных:

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

    • Все необходимые ссылочные справочники перенесены.
    • Все перенесенные документы имеют корректные ссылки на перенесенные справочники.
    • Регистры накопления и другие регистры после проведения документов формируют правильную картину по остаткам и оборотам.
    • В случае переноса начальных остатков, они сформированы корректно и соответствуют выбранному складу.
  3. Тщательное тестирование на тестовой копии базы:

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

    • Проверку целостности: Запустите стандартные проверки базы данных (Тестирование и исправление).
    • Проверку данных: Сформируйте различные отчеты (Ведомость по товарам на складах, Отчет по продажам, Анализ доступности товаров, Ведомость по взаиморасчетам и т.д.) в новой базе и сравните их с отчетами, сформированными по целевому складу в исходной базе.
    • Проверку работоспособности: Попробуйте создать и провести новые документы в новой базе, чтобы убедиться, что все механизмы работают корректно.
    • Обработку ошибок: Внимательно изучите все сообщения об ошибках, которые могут возникнуть в процессе выгрузки/загрузки или последующей работы.
  4. Резервное копирование:

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

Выбор конкретного метода зависит от многих факторов: сложности структуры данных в вашей УТ 11.5, объема данных, квалификации исполнителей, наличия готовых решений и требований к дальнейшей синхронизации. Механизм РИБ является предпочтительным для долгосрочных решений, включающих синхронизацию. Универсальный обмен XML дает большую гибкость для одноразовой миграции при наличии специалиста по КД. Разработка собственного инструмента — это крайняя мера для самых сложных и уникальных случаев. Метод копирования и очистки является наименее рекомендуемым из-за высоких рисков и сложности.

← На главную