Задача выгрузки части данных из одной базы 1С в другую, особенно с отбором по конкретному критерию, такому как склад, является довольно частой, но при этом нетривиальной. Она требует глубокого понимания структуры данных конфигурации, принципов работы платформы 1С:Предприятие и тщательного анализа взаимосвязей между различными объектами. Рассмотрим подробно, как мы можем подойти к решению этой задачи, используя различные методы.
Наша цель — создать новую, "чистую" базу 1С:Управление торговлей 11.5, которая будет содержать только данные (закупки, продажи, остатки и все связанные справочники) по одному конкретному магазину (складу), полностью исключив информацию по всем остальным складам из исходной базы.
Для решения этой задачи существуют несколько основных подходов, каждый из которых имеет свои особенности, преимущества и недостатки. Мы разберем каждый из них по шагам.
Механизм распределенных информационных баз (РИБ) является одним из наиболее подходящих и штатных инструментов 1С для решения подобных задач, особенно если в будущем планируется синхронизация данных или поддержание актуальности информации между центральной и периферийной базами. Давайте рассмотрим этот подход подробнее.
Администрирование -> Настройка синхронизации данных -> Узлы распределенной информационной базы.Это самый ответственный шаг. Стандартный механизм РИБ позволяет тонко настраивать правила обмена, применяя отборы к выгружаемым данным. Для нашей задачи мы должны:
Поступление товаров и услуг, Реализация товаров и услуг, Перемещение товаров, Списание товаров, Оприходование товаров и т.д.), а также движения по регистрам накопления, относящиеся к товарам на складах (например, ТоварыНаСкладах, СебестоимостьТоваров) и финансовым регистрам.Склад, указав наш целевой магазин. Например, для документа Реализация товаров и услуг мы укажем отбор Склад = [НашЦелевойСклад].Номенклатура (вся номенклатура, которая участвовала в операциях выбранного склада).Контрагенты (поставщики, покупатели, которые фигурировали в документах выбранного склада).ДоговорыКонтрагентов, БанковскиеСчета, Организации и другие базовые справочники.Склады (должен быть выгружен как минимум сам целевой склад).Правила обмена обычно автоматически подхватывают ссылочные данные, но их нужно тщательно проверить, чтобы не получить "битые ссылки" в периферийной базе.
Преимущества РИБ:
Недостатки РИБ:
Этот метод, упомянутый в обсуждении, является мощным и гибким инструментом для выгрузки и загрузки данных. Он используется универсальной обработкой УниверсальныйОбменДаннымиXML и основан на использовании правил конвертации данных (КД).
Это ключевой и самый сложный этап. Для создания правил КД используется конфигурация Конвертация данных. Нам потребуется:
Реализация товаров и услуг в ПВД мы укажем условие Склад = [НашЦелевойСклад].Номенклатура, Контрагенты, Договоры и т.д.), на которые ссылаются отфильтрованные документы, также будут выгружены. В КД это реализуется путем настройки правил поиска и создания объектов, а также указания, что ссылочные объекты также должны быть выгружены.УниверсальныйОбменДаннымиXML:
УниверсальныйОбменДаннымиXML в исходной базе.УниверсальныйОбменДаннымиXML в новой базе.Преимущества универсального обмена XML:
Недостатки универсального обмена XML:
Конвертация данных.Если стандартные механизмы (РИБ) или типовые обработки универсального обмена не обеспечивают необходимую гибкость или не справляются со сложными зависимостями, мы можем разработать собственную внешнюю обработку или даже специализированную конфигурацию для выгрузки и загрузки данных. Этот метод предоставляет максимальный контроль над процессом.
Метаданные конфигурации УТ 11.5, чтобы понять структуру всех необходимых справочников, документов и регистров.Документ.РеализацияТоваровУслуг ссылается на Справочник.Контрагенты, Справочник.Номенклатура, Справочник.Склады, а также формирует движения по регистрам ТоварыНаСкладах, ВзаиморасчетыСКонтрагентами и т.д.).Критически важно соблюдать правильный порядок выгрузки данных, чтобы избежать ошибок ссылочной целостности:
Валюты, ЕдиницыИзмерения, Склады).Номенклатура, Контрагенты, ДоговорыКонтрагентов).Создайте внешнюю обработку, которая будет:
Запросы для выборки данных. Например, для выборки документов реализации по конкретному складу:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Склад = &Склад";
Запрос.УстановитьПараметр("Склад", СсылкаНаНашЦелевойСклад);
ВыборкаДокументов = Запрос.Выполнить().Выбрать();
Создайте вторую внешнюю обработку (или дополните первую), которая будет:
Справочники.Номенклатура.СоздатьЭлемент(), Документы.РеализацияТоваровУслуг.СоздатьДокумент()).Записать() и Провести() (в зависимости от сценария) для формирования движений по регистрам. Проводить документы важно в хронологическом порядке.Преимущества разработки собственного инструмента:
Недостатки разработки собственного инструмента:
Этот метод, предложенный в сообщении 3, кажется простым на первый взгляд: создать копию базы и удалить "ненужное". Однако на практике это один из самых рискованных и сложных подходов для решения такой задачи в 1С, особенно если база большая и содержит множество взаимосвязанных документов и регистров.
Первым шагом является создание полной и актуальной резервной копии исходной базы. Работаем только с копией!
Ни в коем случае не удаляйте документы и справочники вручную через интерфейс 1С, если их много и они формируют движения! Это может привести к некорректным остаткам, нарушению ссылочной целостности и другим серьезным проблемам. Необходимо создать обработку, которая будет программно удалять данные, соблюдая строгие правила.
Чеков ККМ: Как справедливо замечено в сообщении 3, Чеки ККМ являются особо сложными для удаления. Они формируют движения по множеству регистров (ТоварыНаСкладах, ДенежныеСредства, Взаиморасчеты, фискальные регистры и т.д.) и часто имеют специфические механизмы удаления или сторнирования (например, ЧекККМВозврат). Простое удаление объекта может не очистить все связанные движения или оставить "дыры" в кассовой ленте. Возможно, потребуется не удалять их, а создавать сторнирующие документы, или же разработать крайне сложную логику, которая будет находить и программно удалять все движения, сформированные чеком, что практически невозможно без серьезной дестабилизации базы. Мы настоятельно не рекомендуем удалять Чеки ККМ.
Движения = РегистрыНакопления.ТоварыНаСкладах.СоздатьНаборЗаписей();
Движения.Отбор.Регистратор.Установить(СсылкаНаДокументКоторыйУдаляем); // Если это движения документа
// Или для записей напрямую по складу
// Движения.Отбор.Склад.Установить(СсылкаНаСкладКоторыйУдаляем);
Движения.Прочитать();
Если Движения.Количество() > 0 Тогда
Движения.Очистить();
Движения.Записать();
КонецЕсли;
Но такой подход требует глубокого понимания всех связей и может нарушить целостность.
Контрагенты, Номенклатура), которые больше не используются нашим целевым складом. Их можно пометить на удаление и затем удалить с помощью стандартной обработки УдалениеПомеченныхОбъектов.Преимущества метода копирования и очистки:
Недостатки метода копирования и очистки:
Чеков ККМ.Независимо от выбранного метода, существуют универсальные принципы, которые мы обязательно должны соблюдать, чтобы обеспечить успешное решение нашей задачи.
Прежде чем приступать к выгрузке или удалению, мы должны составить максимально полную карту всех объектов, которые связаны с целевым складом. Это не только прямые документы Поступление товаров и услуг, Реализация товаров и услуг, Перемещение товаров, Списание товаров, Оприходование товаров, Заказ клиента, Заказ поставщику, но и регистры накопления, которые формируются этими документами (например, ТоварыНаСкладах, СебестоимостьТоваров, ПартииТоваровНаСкладах, ВзаиморасчетыСКонтрагентами, ДенежныеСредстваКПоступлению, ДенежныеСредстваКВыплате). Не забываем о взаимосвязях между документами, например, когда Реализация товаров и услуг ссылается на Заказ клиента.
Мы также должны учесть все справочники, на которые ссылаются эти документы и регистры: Номенклатура, ХарактеристикиНоменклатуры, СерииНоменклатуры, Контрагенты, ДоговорыКонтрагентов, Организации, БанковскиеСчета, ВидыЦен, Подразделения, ФизическиеЛица (для менеджеров), и, конечно, сам Справочник.Склады, включая наш целевой склад.
Крайне важно, чтобы в новой базе все перенесенные данные были целостными. Это означает, что не должно быть "битых ссылок" (когда объект ссылается на несуществующий объект), не должно быть неверных остатков, а все документы должны корректно проводиться (если это необходимо) и формировать правильные движения. Для этого при любом методе мы должны удостовериться, что:
Этот пункт критически важен. Прежде чем применять выбранный метод на реальной рабочей базе, мы должны провести его полную отладку и тестирование на копии. Процесс тестирования должен включать:
Ведомость по товарам на складах, Отчет по продажам, Анализ доступности товаров, Ведомость по взаиморасчетам и т.д.) в новой базе и сравните их с отчетами, сформированными по целевому складу в исходной базе.Перед началом любых операций по выгрузке, загрузке или модификации данных в рабочей базе, мы обязательно должны сделать полную резервную копию базы данных. Это наша "страховка" на случай непредвиденных проблем.
Выбор конкретного метода зависит от многих факторов: сложности структуры данных в вашей УТ 11.5, объема данных, квалификации исполнителей, наличия готовых решений и требований к дальнейшей синхронизации. Механизм РИБ является предпочтительным для долгосрочных решений, включающих синхронизацию. Универсальный обмен XML дает большую гибкость для одноразовой миграции при наличии специалиста по КД. Разработка собственного инструмента — это крайняя мера для самых сложных и уникальных случаев. Метод копирования и очистки является наименее рекомендуемым из-за высоких рисков и сложности.