Выгрузка и загрузка данных XML адаптивная с гибкими отборами 2024
Разработка - Инструментарий разработчика
Файлы
ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.
Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний
Оформите подписку на компанию для решения рабочих задач
Оформить подписку и скачать решение со скидкойВы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».
- 0% комиссии — оплата напрямую исполнителю;
- Исполнители любого масштаба — от отдельных специалистов до команд под проект;
- Прямой обмен контактами между заказчиком и исполнителем;
- Безопасная сделка — при необходимости;
- Рейтинги, кейсы и прозрачная система откликов.
Возможности данного решения:
- Возможность загрузки в не полностью идентичную конфигурацию
- Настраиваемые отборы
- Фоновая выгрузка и загрузка с индикатором прогресса
- Выгрузка дополнительных сведений и ключей аналитики
Часто происходит ситуация, когда пользователь сообщает о проблеме в рабочей базе, и нужно ее воспроизвести на копии, которая отстает от рабочей базы на n-дней или месяцев, и нужных документов и справочников в ней просто нет. |
Можно взять типовую обработку "Выгрузка загрузка данных в формате XML" и перенести нужные объекты.
Но не тут-то было. Конфигурации в рабочей базе и копии немного отличаются. Например, какому-нибудь объекту добавили новый реквизит, и теперь загрузка в копии выдает сообщения об ошибке в файле XML.

-Алло, Вава, ты сейчас упадешь! -Опять???
В таких случаях можно привести теги XML-файла в нужный вид или обновлять копию базы, на что раньше приходилось тратить много времени.
Теперь все проще, загрузка обходит все подводные камни разногласий и успешно, где может, заполняет объекты.
Оптимизация загрузки
Поэлементная загрузка позволила проверять, был ли изменен объект базы данных. Возможность не записывать объекты, если они не изменены, значительно ускоряет процесс загрузки.
Можно отключить регистрацию в планах обмена и отключить запись версий объекта - в копии они обычно ни к чему, а без них запись происходит гораздо быстрее.
Есть загрузка и выгрузка в фоне с индикатором прогресса.

Произвольный отбор по выгружаемым объектам.
Для удобства его заполнения добавлена кнопка "Пометить к выгрузке объект из навигационной ссылки".

Защита от случайной загрузки.
Для предотвращения случайной загрузки в базу продакшн была добавлена защита.


Защита срабатывает только на базах, у которых включен обмен с внешними источниками. У копий он обычно отключен.
Выгрузка дополнительных сведений и ключей аналитики
При выгрузке движений документов также необходимо выгружать ключи аналитики. Они есть в каждой современной конфигурации и выгрузка движений документов по многим регистрам без них не имеет смысла.

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

Протестировано на платформе 8.3.23
Upd. 10.04.2026:
Добавлена возможность запуска в 8.5. Исправление для режима работы как внешней подключенной обработки (БСП)
Upd. 12.02.2025:
Исправлен критический баг на платформе 8.3.23 и выше
В связи с появлением новых платформенных свойств XDTO, перестали выгружаться подчиненные ссылочные свойства объектов с типом ЛюбаяСсылка. В случае, если режим совместимости 8.3.22 и ниже, то проблема не проявляется, даже если версия платформы 8.3.23+. В любом случае настоятельно рекомендуется обновить обработку!
Пример: после загрузки и обновления существующего Договора контрагента поле Владелец стало незаполненным, хотя в источнике оно указано.
Upd. 07.03.2024:
Добавлена выгрузка ключей аналитики и дополнительных сведений объектов.
Upd. 28.10.2024
Добавлены настройки выгрузки "Не выгружать движения документов из движений", "Максимальный уровень вложенности ссылок".
Upd. 15.12.2024
Исправлена выгрузка объектов по произвольному запросу.
Upd. 06.01.2024
Исправлена ошибка при выгрузке Преобразование значения к типу Булево не может быть выполнено.
Исправлена ошибка выгрузки для счетов бухгалтерии без корреспондеции. Ошибка была и в типовой выгрузке.
Upd. 21.01.2024
Исправлена ошибка в начале выгрузки "Файл обработки не найден" когда клиент и сервер на разных компьютерах.
Другие мои публикации:
Конструктор параметров командной строки
Менеджер внешних обработок и отчетов
Изменение заголовков окон 1С8 в режиме конфигуратора и предприятие
Проверено на следующих конфигурациях и релизах:
- 1С:ERP Управление предприятием 2, релизы 2.5.17.143
Вступайте в нашу телеграмм-группу Инфостарт
Выгрузка загрузка данных XML адаптивная загрузка идентичные конфигурации разные конфигурации обмен данными
См. также
Разработка Инструментарий разработчика Групповая разработка (Git, хранилище) Разработчик Платные (руб)
Практический курс по работе с AI-агентами для разработчиков 1С уровня middle и senior, а также тимлидов команд: от постановки задач и передачи контекста до создания расширений, интеграций, MCP-инструментов, тестов и проверки готового решения.
50000 руб.
10.09.2026 13643 124 0
Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Разработчик Руководитель проекта 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)
Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы, интерфейс 8.5. Может выполнять свертку одновременно в несколько потоков, а также без непосредственного участия пользователя. Решение в Реестре отечественного ПО.
24900 руб.
20.08.2024 83317 432 171
Инструментарий разработчика Роли и права Запросы СКД Разработчик Руководитель проекта 1С:Предприятие 8 Платные (руб)
Инструменты для разработчиков 1С 8.3 и 8.5: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.
16500 руб.
02.09.2020 285814 1608 423
Перенос данных 1C Разработчик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)
Перенос документов, начальных остатков и справочной информации из УПП 1.3 в ERP 2 | из УПП 1.3 в УТ 11 | из УПП в КА 2 | Правила конвертации (КД 2) | Более 360 предприятий выполнили переход с использованием этого продукта! | Сэкономьте время - используйте готовое решение для перехода! | Позволяет перенести из УПП 1.3 в ERP / УТ 11 / КА 2 всю возможную информацию | В переносе есть фильтр по организации и множество других опциональных параметров выгрузки | Есть несколько алгоритмов выгрузки остатков на выбор
58000 руб.
04.08.2015 194857 479 310
Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)
Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!
50050 руб.
25.02.2015 192594 384 296
Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)
Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам.
50200 руб.
24.04.2015 211486 186 254
SALE! 10%
Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 Бухгалтерский учет Управленческий учет Платные (руб)
Переносите справочную информацию, остатки и документы из УПП 1.3 в ERP 2.6 и КА 2.6 с помощью готовых правил. Переносится более 60 видов документов. Простой интерфейс и понятные настройки.
42000
37800 руб.
24.06.2020 73216 108 35
SALE! 10%
Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)
Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.
42000
37800 руб.
15.12.2021 37156 269 68
После выхода платформы 8.3.23 в обработке "Выгрузка загрузка в формате XML адаптивная 2024" появился критический баг, который приводит к очистке некоторых ссылочных подчиненных реквизитов объектов при загрузке. Не проявляет себя, если режим совместимости 8.3.22 или ниже.
Тем, кто скачал ранние версии, необходимо обновить обработку до версии 2025.2!
Стандартная обработка теперь часто падает, если в составе выгружаемых данных есть какая-нибудь маркированная продукция или прочая "дрянь", где используются недопустимые символы XML.
Здесь как-то учтены этим моменты?
Скачал и попробовал сделать выгрузку через эту обработку.
Что понравилось:
- блокировка в рабочей базе функционала загрузки. Дополнительная защита от "дурака" не повредит.
- выполнение в фоне и прогресс выполнения
- возможность выставлять отборы
Что не понравилось:
- перестал работать функционал "Дополнительные объекты для выгрузки". Чего бы я там не указывал - обработка пишет, что файл выгрузки пустой.
- какие-то странные и непонятные глюки с объектами, загруженными по ссылке.
Поясню: в исходном документе (реализация) заполнен реквизит "Счет" - ссылка на документ счет, которого также нет в тестовой базе. После загрузки в тестовую в форме реализации на месте счета стоит <Объект не найден..>, хотя если посмотреть, то ссылка вроде как есть, но при выборе начинает писать "объект нельзя выбрать, потому что он был удален", потом через пару попыток перестает писать. Подумал просто у меня глюк, но на Номенклатуре это повторилось. Т.е. это уже закономерность.
Попробовал стандартную обработку - там таких приколов нет. Все загрузилось, все работает как надо.
Обработка годная - но есть нюансы.
Попробуйте пока поставить дополнительно пометку на какой-нибудь константе. Исправлю при обновлении
Такое может быть, если в дереве метаданных не проставлены пометки в колонке "Выгружать при необходимости". Если пометки стоят, попробуйте в консоли кода выполнить "ОбновитьПовторноИспользуемыеЗначения()" - поможет или нет.
Было бы вообще замечательно, если ваши изменения также были бы влиты в опенсорсный проект
Или хотя бы дайте своё разрешение на перенос ваших изменений.
Возникает ошибка при выгрузке полей неограниченной длины (может их как-то можно исключить?). Пыталась выгрузить РС.ФискальныеОперации в кофигурации УТ11. Ошибка во вложении.
Попробую через отбор повыгружать, но если есть возможность посмотреть и эту ошибку и еще одна не удобная деталь добавление через дополнительные объекты для выгрузки, что бы добавить нужно каждый документ открывать и выбирать, в стандартной можно было нажать добавить появилась строка вставил номер, и далее можно было добавлять.
Платформа: 1С:Предприятие 8.3 (8.3.22.2175)
Конфигурация: Бухгалтерия государственного учреждения, редакция 2.0 (2.0.95.29)
Пробовал профиль доступа выгрузить, по итогу задублировались элементы "СправочникСсылка.ИдентификаторыОбъектовМетаданных", так как был поиск по ГУИД.
Но возможно это уже за рамками этой простой обработки
Посмотрите платное решение (не мое). Может подойдет под ваши задачи.
Скорее всего вам нужно модифицировать готовые правила обмена или создавать новые через Конвертацию данных 2. Лучше поручить это человеку с опытом, разобраться самому - для разовой задачи понадобится слишком много времени.
Но вот проявился косяк обнаружен на последних релизах БП 3.0 справочник "Договоры", Контрагент пустой проставляется, затирает контрагента и в существующих договорах. Выгружать при необходимости стоит. Выгружал по всякому и вместе со справочником "Контрагенты"
Укажите номер релиза БП 3.0 или, еще лучше, скиньте в ЛС dt от демо-базы релиза
Выявил такой момент (кстати, и во многих других выгрузках-загрузках). Выгружаю, например, Заказ поставщику. Все прекрасно, но состояние заказа не перенеслось. Еще бы! - а с чего ему перенестись, если это независимый регистр сведений. Но в данном случае очень нужный. Затем достаточно провести документ и все норм.
Это касается всех заказов в ЕРП, Этапов и так далее со всеми аналогичными РС.
Может быть, подскажете как быть?
то выдает ошибку:
Операции сравнения на больше-меньше допустимы только для значений совпадающих примитивных типов (Булево, Число, Строка, Дата)
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.МодульОбъекта(1400)}:Если Уровень > МаксимальныйУровеньВложенности И МаксимальныйУровеньВложенности > 0 Тогда
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.МодульОбъекта(1352)}:ОбработкаРезультатаЗапроса(РезультатЗапроса, ЗаписьXML, Истина, ЗапросВерхнегоУровня,
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.МодульОбъекта(642)}:ЗапросИЗапись(РезультатЗапроса, ЗаписьXML, Истина, ОбъектыВыгруженныеСОшибками, ТолькоПроверкаНедопустимыхСимволов, Уровень, Ложь);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.МодульОбъекта(737)}:ВыгрузитьДанныеМассиваСсылок(ТекущийМассивСсылок, ТекущееИмяЗапроса, ЗаписьXML, ТолькоПроверкаНедопустимыхСимволов, ОбъектыВыгруженныеСОшибками);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.МодульОбъекта(135)}:ВыгрузкаДанных(ЗаписьXML);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(764)}:ОбъектНаСервере.ВыполнитьВыгрузку(СтруктураПараметров);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(487)}:ВыгрузитьДанныеНаСервере(АдресФайлаВоВременномХранилище);
выдает сообщение:
"Не задан состав выгрузки"
"Нет файла выгрузки для записи"
При нажатии на кнопку "Выбрать результат" ничего не происходит.
Окно с запросом закрывается, а результат запроса не переносится в "Дополнительные объекты для выгрузки"
Конфигурация баз источника и приемника одинаковая
Несколько вопросов:
1. Обработка справится с выгрузкой контрагентов и с номенклатурой (видами, доп. реквизитами, доп. сведениями) из УТ 11.5 в чистую УТ 11.5?
2. Обработка справится с выгрузкой всех данных за прошедший месяц из УТ 11.5 в копию этой же базы месячной давности?
3. Обработка справится с полной выгрузкой всех данных из УТ 11.5 в чистую базу УТ 11.5?
Контрагентов и номенклатуру с допами выгружать умеет.
2. По поводу всех данных за месяц - тоже есть такой функционал.
3. Полную выгрузку всех данных нужно делать через dt-файл из конфигуратора. Размер и длительность выгрузки-загрузки через обработку зависят от количества данных и могут быть большими.
После выхода платформы 8.3.23 в обработке "Выгрузка загрузка в формате XML адаптивная 2024" появился критический баг, который приводит к очистке некоторых ссылочных подчиненных реквизитов объектов при загрузке. Не проявляет себя, если режим совместимости 8.3.22 или ниже.
Тем, кто скачал ранние версии, необходимо обновить обработку до версии 2025.2!
Адапт_ДанныеМассиваСсылокПодсчетВыгружаемых();
//Anthon -< 28.05.2025
Возврат ?(мПодсчитанныеОбъекты.Количество() + ТекущийМассивСсылок.Количество() = 0, 1, мПодсчитанныеОбъекты.Количество() + ТекущийМассивСсылок.Количество());
//Anthon ->
Возврат мПодсчитанныеОбъекты.Количество();
А еще фоновый режим выгрузки перестал работать. Потому что на сервере нет файла
"c:\EPF\Выгрузка и загрузка данных XML АДАПТИВНАЯ.epf"
Пришлось откатить обратно код
ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаОбработки);
АдресВХОбработки = ПоместитьВоВременноеХранилище(ДвоичныеДанные, УникальныйИдентификатор);
//АдресВХОбработки = Адапт_ФайлОбработкиАдресВХ(ИмяФайлаОбработки, УникальныйИдентификатор);
Для случая как у вас, нужно создавать правила обмена через Конвертацию данных 2.
Вместе с ФизЛицом я смогу выгрузить с отбором независимый регистр сведений, например "Документы физических лиц" ?
Ошибка при вызове конструктора (ДвоичныеДанные)
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(912)}:ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаОбработки);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(885)}:АдресВХОбработки = Адапт_ФайлОбработкиАдресВХ(ИмяФайлаОбработки, УникальныйИдентификатор);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(479)}:Адапт_ВыгрузитьДанныеВФоновомРежиме();
[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]
по причине:
Каталог не обнаружен 'C:\Users\mart\Downloads\PUBID_1964833-PUBID_1964833-ВыгрузкаЗагрузкаДанныхXML83 ОТБОР АДАПТИВНАЯ.epf'
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(912)}:ДвоичныеДанные = Новый ДвоичныеДанные(ИмяФайлаОбработки);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(885)}:АдресВХОбработки = Адапт_ФайлОбработкиАдресВХ(ИмяФайлаОбработки, УникальныйИдентификатор);
{ВнешняяОбработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.Форма.Форма(479)}:Адапт_ВыгрузитьДанныеВФоновомРежиме();
[ОшибкаВоВремяВыполненияВстроенногоЯзыка, ОшибкаИспользованияВстроенногоЯзыка]
по причине:
Файл не обнаружен 'C:/PUBID_1964833-PUBID_1964833-ВыгрузкаЗагрузкаДанныхXML83 ОТБОР АДАПТИВНАЯ.epf'
Клиент и сервер на разных компьютерах
Посмотрю
// =====================================
// Служебные процедуры (оставлены без изменений)
// =====================================
&НаКлиенте
Процедура ЗаполнитьОтборИзЗапроса(Команда)
ТекущаяСтрока = Элементы.ДеревоМетаданных.ТекущиеДанные;
Если ТекущаяСтрока = Неопределено Тогда
СообщитьПользователю("Выберите узел метаданных");
Возврат;
КонецЕсли;
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("РежимЗаполнения", "Отбор");
ПараметрыФормы.Вставить("ИмяУзла", ТекущаяСтрока.ПолноеИмяМетаданных);
ПараметрыФормы.Вставить("КлючУникальности", Новый УникальныйИдентификатор);
ОткрытьФорму(
"Обработка.ВыгрузкаЗагрузкаДанныхXMLАдаптивная.Форма.ВыборИзЗапроса",
ПараметрыФормы,
ЭтаФорма,
, , ,
Новый ОписаниеОповещения(
"ПослеВыбораОтбора",
ЭтаФорма,
Новый Структура("ИмяУзла", ТекущаяСтрока.ПолноеИмяМетаданных)
)
);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораОтбора(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Сообщить("ПослеВыбораОтбора: результат не получен");
Возврат;
КонецЕсли;
ИмяУзла = ДополнительныеПараметры.ИмяУзла;
Сообщить("=== ДИАГНОСТИКА ПослеВыбораОтбора ===");
Сообщить("Тип результата: " + ТипЗнч(Результат));
Сообщить("Имя узла: " + ИмяУзла);
УстановитьОтборНаСервере(Результат, ИмяУзла);
Элементы.ДеревоМетаданных.Обновить();
КонецПроцедуры
&НаСервере
Процедура УстановитьОтборНаСервере(АдресТаблицы, ИмяУзла)
Сообщить("=== УстановитьОтборНаСервере ===");
Сообщить("Тип входящих данных: " + ТипЗнч(АдресТаблицы));
// 1. Получаем таблицу значений
Данные = АдресТаблицы;
Если ТипЗнч(Данные) = Тип("Строка") Тогда
Данные = ПолучитьИзВременногоХранилища(Данные);
КонецЕсли;
Если ТипЗнч(Данные) = Тип("ДанныеФормыКоллекция") Тогда
Таблица = ДанныеФормыВЗначение(Данные, Тип("ТаблицаЗначений"));
Иначе
Таблица = Данные;
КонецЕсли;
Если Таблица = Неопределено Или ТипЗнч(Таблица) <> Тип("ТаблицаЗначений") Тогда
Сообщить("Не удалось получить таблицу значений");
Возврат;
КонецЕсли;
Если Таблица.Колонки.Найти("Ссылка") = Неопределено Тогда
Сообщить("В таблице отсутствует колонка 'Ссылка'");
Возврат;
КонецЕсли;
// 2. Формируем список значений
СписокЗначений = Новый СписокЗначений;
Для Каждого СтрокаТЗ Из Таблица Цикл
Если ЗначениеЗаполнено(СтрокаТЗ.Ссылка) Тогда
СписокЗначений.Добавить(СтрокаТЗ.Ссылка);
КонецЕсли;
КонецЦикла;
Если СписокЗначений.Количество() = 0 Тогда
Сообщить("Нет значений для заполнения отбора");
Возврат;
КонецЕсли;
Сообщить("Сформирован список значений из " + СписокЗначений.Количество() + " элементов");
// 3. Находим узел в дереве
Дерево = Объект.ДеревоМетаданных;
Если Дерево = Неопределено Тогда
Сообщить("Дерево не инициализировано");
Возврат;
КонецЕсли;
Узел = НайтиУзелВЭлементах(Дерево.ПолучитьЭлементы(), ИмяУзла);
Если Узел = Неопределено Тогда
Сообщить("Узел не найден: " + ИмяУзла);
Возврат;
КонецЕсли;
Сообщить("Узел найден: " + ИмяУзла);
// 4. Заполняем отбор узла
Если Узел.Отбор = Неопределено Тогда
Узел.Отбор = Новый ОтборКомпоновкиДанных;
КонецЕсли;
Узел.Отбор.Элементы.Очистить();
ЭлементОтбора = Узел.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.Использование = Истина;
// ИСПРАВЛЕНО: возвращаем правильное имя поля
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ШтрихкодУпаковки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = СписокЗначений;
Сообщить("Отбор узла '" + ИмяУзла + "' заполнен " + СписокЗначений.Количество() + " значениями по полю 'ШтрихкодУпаковки'");
КонецПроцедуры
&НаСервере
Функция НайтиУзелПоИмени(Дерево, ИмяУзла)
// Для ДанныеФормыДерево используем метод ПолучитьЭлементы()
Возврат НайтиУзелВЭлементах(Дерево.ПолучитьЭлементы(), ИмяУзла);
КонецФункции
&НаСервере
Функция НайтиУзелВЭлементах(Элементы, ИмяУзла)
Для Каждого Элемент Из Элементы Цикл
// Проверяем текущий элемент
Если Элемент.ПолноеИмяМетаданных = ИмяУзла Тогда
Возврат Элемент;
КонецЕсли;
// Рекурсивно обходим подчинённые элементы
Если Элемент.ПолучитьЭлементы().Количество() > 0 Тогда
Найденный = НайтиУзелВЭлементах(Элемент.ПолучитьЭлементы(), ИмяУзла);
Если Найденный <> Неопределено Тогда
Возврат Найденный;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаСервере
Процедура ОбновитьОтборУзлаПоСтрокам(Дерево, ИмяУзла, ФильтрЗначений)
Попытка
// Для ДанныеФормыДерево корневые строки доступны через свойство Строки
ОбходСтрокДерева(Дерево.Строки, ИмяУзла, ФильтрЗначений);
Исключение
Сообщить("Ошибка доступа к строкам дерева: " + ОписаниеОшибки());
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ОбходСтрокДерева(Строки, ИмяУзла, ФильтрЗначений)
Для Каждого Строка Из Строки Цикл
Если Строка.ПолноеИмяМетаданных = ИмяУзла Тогда
// Создаём отбор, если его нет
Если Строка.Отбор = Неопределено Тогда
Строка.Отбор = Новый ОтборКомпоновкиДанных;
КонецЕсли;
// Очищаем старые условия
Строка.Отбор.Элементы.Очистить();
// Преобразуем соответствие в массив
МассивЗначений = Новый Массив;
Для Каждого Ключ Из ФильтрЗначений Цикл
МассивЗначений.Добавить(Ключ.Ключ);
КонецЦикла;
// Добавляем новый элемент отбора
ЭлементОтбора = Строка.Отбор.Элементы.Добавить();
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЭлементОтбора.ПравоеЗначение = МассивЗначений;
Сообщить("Отбор установлен для узла " + ИмяУзла + ", значений: " + МассивЗначений.Количество());
Возврат;
КонецЕсли;
// Рекурсивно обходим подчинённые строки
Если Строка.Строки.Количество() > 0 Тогда
ОбходСтрокДерева(Строка.Строки, ИмяУзла, ФильтрЗначений);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ОбработкаВыбораНаСервере(ВыбранныеЗначения)
Сообщить("=== ОбработкаВыбораНаСервере ===");
Сообщить("Тип входящих данных: " + ТипЗнч(ВыбранныеЗначения));
Если ТипЗнч(ВыбранныеЗначения) = Тип("Структура") Тогда
Если ВыбранныеЗначения.Свойство("ЗаполнитьОтбор")
И ВыбранныеЗначения.Свойство("ДанныеВыбора")
И ВыбранныеЗначения.Свойство("ИмяУзла") Тогда
УстановитьОтборНаСервере(
ВыбранныеЗначения.ДанныеВыбора,
ВыбранныеЗначения.ИмяУзла
);
Возврат;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(ВыбранныеЗначения) = Тип("ДанныеФормыКоллекция") Тогда
Сообщить("Получена ДанныеФормыКоллекция без имени узла — пропускаем");
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьВРезультатВыгрузки(Команда)
Если Элементы.Найти("РезультатЗапроса") = Неопределено Тогда
Возврат;
КонецЕсли;
ТаблицаРезультата = ЭтотОбъект.РезультатЗапроса;
Если ТаблицаРезультата = Неопределено Или ТаблицаРезультата.Количество() = 0 Тогда
Сообщить("Нет данных для переноса");
Возврат;
КонецЕсли;
Результат = Новый Структура;
Результат.Вставить("ДанныеВыбора", ТаблицаРезультата);
Если Параметры.Свойство("ИмяУзла") Тогда
Результат.Вставить("ИмяУзла", Параметры.ИмяУзла);
КонецЕсли;
Результат.Вставить("ЗаполнитьОтбор", Истина);
ОповеститьОВыборе(Результат);
КонецПроцедуры
ПоказатьВ форме "ВыборИзЗапроса" надо заменить процедуру:
&НаКлиенте
Процедура ДобавитьВРезультатВыгрузки(Команда)
Если Элементы.Найти("РезультатЗапроса") = Неопределено Тогда
Возврат;
КонецЕсли;
// Получаем таблицу результата
ТаблицаРезультата = ЭтотОбъект.РезультатЗапроса;
Если ТаблицаРезультата = Неопределено Или ТаблицаРезультата.Количество() = 0 Тогда
Сообщить("Нет данных для переноса");
Возврат;
КонецЕсли;
// ГЛАВНОЕ: передаем структуру, а не прямую таблицу
Результат = Новый Структура;
Результат.Вставить("ДанныеВыбора", ПоместитьВоВременноеХранилище(ТаблицаРезультата, Новый УникальныйИдентификатор));
// Если в параметрах вызвана передача в отбор
Если Параметры.Свойство("РежимЗаполнения") И Параметры.РежимЗаполнения = "Отбор" Тогда
Результат.Вставить("ЗаполнитьОтбор", Истина);
Если Параметры.Свойство("ИмяУзла") Тогда
Результат.Вставить("ИмяУзла", Параметры.ИмяУзла);
КонецЕсли;
КонецЕсли;
ОповеститьОВыборе(Результат);
КонецПроцедуры ПоказатьГде: Внешняя обработка «Выгрузка и загрузка данных XML Адаптивная», функция
Адапт_ЗаполнитьОтборXDTOСимптом ошибки:
Ошибка заполнения отбора набора записей: РегистрыСведений.XXX
Загружено объектов: 0 из N
Причина:
При загрузке регистров сведений, содержащих пустые измерения (
xsi:nil="true"Проблема в первоисточнике (две ошибки):
Ошибка 1 — некорректная проверка на nil
В оригинальном коде использовался неверный способ доступа к атрибуту XML, из-за чего пустые значения не опознавались и загрузка падала.
Ошибка 2 — фатальная остановка при неопределённом типе
Если тип значения не удавалось определить, обработка возвращала
ЛожьЧто было изменено:
Изменение 1 — исправление проверки на nil:
- Было:
Если ПравоеЗначение.Атрибуты.Получить("nil") <> Неопределено Тогда- Стало:
Если ПравоеЗначение.ПолучитьАтрибут("xsi:nil") = "true" Тогда ПродолжитьИзменение 2 — замена фатальной ошибки на пропуск элемента:
- Было:
Если Тип = Неопределено Тогда ... Возврат Ложь- Стало:
Если Тип = Неопределено Тогда ПродолжитьИсправленный код:
// ОШИБКА 1 ИСПРАВЛЕНА: проверка на пустое значение (xsi:nil="true")
Если ПравоеЗначение.ПолучитьАтрибут("xsi:nil") = "true" Тогда
Продолжить; // Пропускаем пустые значения
КонецЕсли;
Тип = Адапт_ОпределитьТипПоАтрибуту(ПравоеЗначение);
// ОШИБКА 2 ИСПРАВЛЕНА: если тип не определён — пропускаем, а не прерываем загрузку
Если Тип = Неопределено Тогда
Продолжить;
КонецЕсли;
ПоказатьРезультат:
✔ Загрузка регистров с пустыми измерениями более не прерывается
✔ Некорректные элементы отбора игнорируются, остальные обрабатываются штатно
✔ Выгрузка не требует изменений (XML-файлы остаются корректными)
✔ Все данные сохраняются, существующие записи не теряются
Проверено на:
- Регистр сведений:
ПулКодовМаркировкиСУЗ- Пустые измерения:
ДокументОснованиеЗаказНаЭмиссию- Результат загрузки:
Загружено объектов: 1 из 1Для переноса данных между Бухгалтерией и УТ нужно создавать правила обмена на Конвертация данных 2.1. Или модифицировать приложенные к конфигурации.
Вы можете заказать платную консультацию или разработку у автора. Будет создан приватный заказ на «Бирже заказов» для автора.
№ 1964833
Создание 29.01.24 18:00
Обновление 10.04.26 02:29
Просмотры 25523
Загрузки 791
Рейтинг
91
Комментарии 79
Код открыт Да
Рубрики Инструментарий разработчика Перенос данных 1C
Кому Разработчик
Тип файла Внешняя обработка (ert,epf)
Платформа 1С 8.3
Конфигурация Универсальные
Операционная система Windows
Страна Не имеет значения
Отрасль Не имеет значения
Налоги Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)