При настройке обмена данными между базами 1С с помощью конфигурации «Конвертация данных 2.0» (КД 2.0) часто возникает необходимость выгрузить не весь справочник целиком, а лишь небольшую его часть. Это особенно актуально на этапе тестирования правил, когда полная выгрузка справочника «Номенклатура» или «Контрагенты» (содержащих десятки тысяч записей) занимает слишком много времени. В этой статье мы подробно разберем несколько способов, как ограничить число выгружаемых объектов, проанализируем их плюсы и минусы, а также изучим конкретные примеры кода.
Это один из самых простых способов реализации, который не требует глубокого изменения логики правил выгрузки данных. Идея заключается в создании глобального параметра-счетчика, который будет увеличиваться при каждой выгрузке объекта.
Рассмотрим пошагово, как это реализовать:
КоличествоВыгруженных.ПередВыгрузкой.Проанализируем пример кода для этого метода:
// Увеличиваем значение счетчика в параметрах
Параметры.КоличествоВыгруженных = Параметры.КоличествоВыгруженных + 1;
// Проверяем, достигли ли мы лимита (например, 100 элементов)
Если Параметры.КоличествоВыгруженных > 100 Тогда
Отказ = Истина;
КонецЕсли;
Важное замечание: Этот метод прост, но имеет существенный недостаток в плане производительности. Система все равно будет перебирать все объекты в базе источнике. Для каждого объекта будет вызываться ПКО, и только потом срабатывать Отказ = Истина. Если в справочнике миллион записей, процесс «пропуска» лишних элементов может затянуться.
Этот способ считается наиболее правильным и эффективным. Вместо того чтобы позволять системе автоматически выбирать все данные, мы сами напишем запрос, который ограничит выборку еще на уровне базы данных СУБД. Это значительно ускорит процесс.
Разберем алгоритм действий в ПВД:
ПередОбработкой напишем запрос с конструкцией ВЫБРАТЬ ПЕРВЫЕ.Посмотрим на пример реализации такого алгоритма:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 100
| Номенклатура.Ссылка КАК Ссылка
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ПометкаУдаления";
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
// Выгружаем конкретный объект по правилу конвертации
ВыгрузитьПоПравилу(Выборка.Ссылка, , , , "Номенклатура");
КонецЦикла;
Используя данный метод, мы экономим ресурсы сервера, так как передаем в обработку только те 100 записей, которые нам действительно нужны. Обратите внимание на использование функции ВыгрузитьПоПравилу — она является ключевой при работе с произвольными алгоритмами выгрузки.
Выясним причину, по которой многие программисты забывают о самом простом методе — использовании возможностей стандартной обработки «Универсальный обмен данными в формате XML». Вам не обязательно менять сами правила (файл XML), если вам нужно разово ограничить выборку.
В самой обработке на стороне базы-источника есть вкладка «Построитель отчета» или «Настройка отборов» (в зависимости от версии). Здесь мы можем сделать следующее:
Ссылка, выбрав конкретную папку (родителя) справочника.Это позволяет гибко управлять объемом данных без необходимости заходить в конфигуратор КД 2.0 и переформировывать правила.
Если нам нужно протестировать разные типы данных, но при этом ограничить их объем, мы можем применить фильтрацию по первым символам кода или наименования. Это часто удобнее, чем просто «первые 100», так как позволяет захватить объекты из разных групп.
Например, в обработчике ПередВыгрузкой ПКО можно написать:
// Выгружаем только те объекты, код которых начинается на "001"
Если Лев(Источник.Код, 3) <> "001" Тогда
Отказ = Истина;
КонецЕсли;
Или, как советовали опытные участники обсуждения, можно использовать алфавитный подход: выгружать только товары, название которых начинается на букву «А».
Проанализируем ситуацию: вы ограничили выгрузку справочника Номенклатура сотней элементов. Однако после загрузки в приемник вы обнаруживаете, что данных гораздо больше, чем ожидалось. Почему так происходит?
Важно помнить о механизме «Выгрузки объектов по ссылкам». Если в ваших правилах для свойств (ПКС) справочника (например, «Ставка НДС», «Единица измерения», «Основной поставщик») не установлена галочка «Не выгружать объекты по ссылке», то система автоматически выгрузит все связанные объекты. Более того, если один справочник ссылается на другой, тот — на третий, по цепочке может выгрузиться значительный объем данных, несмотря на ваши ограничения в ПВД основного объекта.
Для максимально «чистого» и быстрого теста рекомендуем:
GUID, но без заполненных реквизитов, что достаточно для проверки алгоритмов поиска.Рассмотренные нами методы позволяют гибко подходить к задаче тестирования переноса данных. Для разовых быстрых проверок отлично подходит счетчик в ПКО или стандартный отбор в обработке. Для регулярных регламентных обменов с ограниченным объемом данных лучше всего использовать произвольный запрос в ПВД.