Выгрузка и загрузка данных XML: сохранить выбранные элементы дерева значений

03.02.26

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Вставка в код обработки добавляет кнопки для выгрузки/загрузки отмеченных элементов дерева значений со списком Метаданных.

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

Вставляем в модуль формы, в моей версии обработки ВыгрузкаЗагрузкаДанныхXML (2.1.8) нет события ПриОткрытии, поэтому я добавил это событие и связал с формой. Кнопки на форму добавляются программно.

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	СоздатьКоманды();
КонецПроцедуры

&НаСервере
Функция СоздатьКоманды()  Экспорт
	НоваяКоманда = ЭтаФорма.Команды.Добавить("СохранитьСписокОтмеченных");
	НоваяКоманда.Действие= "СохранитьСписокОтмеченных";
	НоваяКоманда.Заголовок= "Сохранить отмеченные в файл";
	НоваяКоманда.Отображение=ОтображениеКнопки.Картинка;
	НоваяКоманда.Подсказка= "Сохраняет отмеченные значения в файл, для последующей возможно загрузки";

	РодительскаяГруппа=Элементы.ДеревоМетаданных.КоманднаяПанель;
	НоваяКнопка=ЭтаФорма.Элементы.Добавить("СохранитьСписокОтмеченных",Тип("КнопкаФормы"),РодительскаяГруппа);
	НоваяКнопка.вид=ВидКнопкиФормы.КнопкаКоманднойПанели;
	НоваяКнопка.ИмяКоманды="СохранитьСписокОтмеченных";
	НоваяКнопка.ПоложениеВКоманднойПанели=ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанели;
	
	НоваяКоманда = ЭтаФорма.Команды.Добавить("ЗагрузитьСписокОтмеченныхИзФайла");
	НоваяКоманда.Действие= "ЗагрузитьСписокОтмеченныхИзФайла";
	НоваяКоманда.Заголовок= "Загрузить отмеченные из файла";
	НоваяКоманда.Отображение=ОтображениеКнопки.Картинка;
	НоваяКоманда.Подсказка= "Загружает отмеченные значения из файла (отмечает по списку)";

	РодительскаяГруппа=Элементы.ДеревоМетаданных.КоманднаяПанель;
	НоваяКнопка=ЭтаФорма.Элементы.Добавить("ЗагрузитьСписокОтмеченныхИзФайла",Тип("КнопкаФормы"),РодительскаяГруппа);
	НоваяКнопка.вид=ВидКнопкиФормы.КнопкаКоманднойПанели;
	НоваяКнопка.ИмяКоманды="ЗагрузитьСписокОтмеченныхИзФайла";
	НоваяКнопка.ПоложениеВКоманднойПанели=ПоложениеКнопкиВКоманднойПанели.ВКоманднойПанели;
КонецФункции  

&НаСервере
Функция ЗначениеВИзСтрока(ЗначениеСтр)
	Если ТипЗнч(ЗначениеСтр)=Тип("Строка") Тогда
		вЗначениеСтр=ЗначениеИзСтрокиВнутр(ЗначениеСтр);
	Иначе
		вЗначениеСтр=ЗначениеВСтрокуВнутр(ЗначениеСтр);	
	КонецЕсли;
	Возврат(вЗначениеСтр)
КонецФункции

&НаКлиенте
Процедура ОбработатьРекурсивноДЗ(Узел, СоответствиеМетаданных, Выгрузить=Истина) 
	Для каждого ЭлементУзла Из Узел Цикл
		Если Выгрузить Тогда
			Если ЭлементУзла.Выгружать>0 ИЛИ ЭлементУзла.ВыгружатьПриНеобходимости>0 Тогда
				ПолноеИмяМетаданных=ЭлементУзла.ПолноеИмяМетаданных;
				Выгружать=ЭлементУзла.Выгружать;                                    
				ВыгружатьПриНеобходимости=ЭлементУзла.ВыгружатьПриНеобходимости;
				
				СоответствиеМетаданных.Вставить(ПолноеИмяМетаданных,
				 	Новый Структура("Выгружать,ВыгружатьПриНеобходимости",Выгружать,ВыгружатьПриНеобходимости)); 
					
				СтрСообщение=СтрШаблон("	%1 (Выгружать - %2, ВыгружатьПриНеобходимости - %3)",
										ПолноеИмяМетаданных,Выгружать,ВыгружатьПриНеобходимости);
				Сообщить(СтрСообщение);
			КонецЕсли; 
		Иначе
			ПолноеИмяМетаданных=ЭлементУзла.ПолноеИмяМетаданных;
			СохраненныеЗначения=СоответствиеМетаданных.Получить(ПолноеИмяМетаданных);
			Если НЕ СохраненныеЗначения=Неопределено Тогда                  
				Выгружать=СохраненныеЗначения.Выгружать;
				ВыгружатьПриНеобходимости=СохраненныеЗначения.ВыгружатьПриНеобходимости;
				ЭлементУзла.Выгружать=Выгружать;
				ЭлементУзла.ВыгружатьПриНеобходимости=ВыгружатьПриНеобходимости;
				СтрСообщение=СтрШаблон("	%1 (Выгружать - %2, ВыгружатьПриНеобходимости - %3)",
										ПолноеИмяМетаданных,Выгружать,ВыгружатьПриНеобходимости);
				Сообщить(СтрСообщение);							
				СоответствиеМетаданных.Удалить(ПолноеИмяМетаданных);
			Иначе
				ЭлементУзла.Выгружать=0;
				ЭлементУзла.ВыгружатьПриНеобходимости=0;	
			КонецЕсли;			
		КонецЕсли;
		ОбработатьРекурсивноДЗ(ЭлементУзла.ПолучитьЭлементы(), СоответствиеМетаданных, Выгрузить);
	КонецЦикла;
КонецПроцедуры

&НаКлиенте
Процедура СохранитьСписокОтмеченных() 
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	ОповещениеЗавершения = Новый ОписаниеОповещения("СохранитьСписокОтмеченныхВФайл", ЭтотОбъект);
	Диалог.МножественныйВыбор = Ложь;
    Диалог.Фильтр = "Текстовый документ (*.txt)|*.txt";
	Диалог.Показать(ОповещениеЗавершения);
КонецПроцедуры 

&НаКлиенте
Процедура СохранитьСписокОтмеченныхВФайл(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт 
	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;
	Файл=Новый ТекстовыйДокумент; 
	СоответствиеМетаданных=Новый Соответствие;
	Сообщить("Выгружаем отмеченные элементы:");
	ОбработатьРекурсивноДЗ(Объект.ДеревоМетаданных.ПолучитьЭлементы(),СоответствиеМетаданных,Истина);
	Если СоответствиеМетаданных.Количество()=0 Тогда
		Сообщить("Нет отмеченных элементов");
		Возврат
	КонецЕсли;
	СоответствиеМетаданныхСтрока=ЗначениеВИзСтрока(СоответствиеМетаданных);
	Файл.УстановитьТекст(СоответствиеМетаданныхСтрока);
	Файл.Записать(ВыбранныеФайлы[0]); 
	Сообщить(СтрШаблон("Выгружено %1 отметок",СоответствиеМетаданных.Количество()));
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьСписокОтмеченныхИзФайла()
	Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	ОповещениеЗавершения = Новый ОписаниеОповещения("ЗагрузитьСписокОтмеченных", ЭтотОбъект);
	Диалог.МножественныйВыбор = Ложь;
    Диалог.Фильтр = "Текстовый документ (*.txt)|*.txt";
	Диалог.Показать(ОповещениеЗавершения);
КонецПроцедуры   
&НаКлиенте
Процедура ЗагрузитьСписокОтмеченных(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт 
	Если ВыбранныеФайлы = Неопределено Тогда
		Возврат;
	КонецЕсли;                      
	Файл=Новый ТекстовыйДокумент;
	Файл.Прочитать(ВыбранныеФайлы[0]);
	СоответствиеМетаданныхСтрока=Файл.ПолучитьТекст();
	СоответствиеМетаданных=ЗначениеВИзСтрока(СоответствиеМетаданныхСтрока);
	Если НЕ ТипЗнч(СоответствиеМетаданных)=Тип("Соответствие") Тогда
		Сообщить("Не получено соответствие из файла!");
		Возврат
	КонецЕсли;                 
	КоличествоМетаданных=СоответствиеМетаданных.Количество();
	Если КоличествоМетаданных<2 Тогда
		Сообщить("Подозрительно мало элементов коллекции, может тут ничего нет?");
		Возврат
	КонецЕсли;
    Сообщить("Загружаем отмеченные элементы:");
	ОбработатьРекурсивноДЗ(Объект.ДеревоМетаданных.ПолучитьЭлементы(),СоответствиеМетаданных,Ложь);	
	
	КолвоОставшиесяЭлементы=СоответствиеМетаданных.Количество();
	Если КолвоОставшиесяЭлементы>0 Тогда
		Сообщить("Не все Метаданные найдены в текущем дереве:");
		Для Каждого ЭлементСоответствия Из СоответствиеМетаданных Цикл 
			СтрСообщение=СтрШаблон("		%1 (Выгружать - %2, ВыгружатьПриНеобходимости - %3)", 
											ЭлементСоответствия.Ключ,
											ЭлементСоответствия.Значение.Выгружать,
											ЭлементСоответствия.Значение.ВыгружатьПриНеобходимости);
			Сообщить(СтрСообщение);	 
		КонецЦикла;
	КонецЕсли;
	
	Сообщить(СтрШаблон("Отмечено %1 из %2 элементов", КоличествоМетаданных-КолвоОставшиесяЭлементы,КоличествоМетаданных));
		
КонецПроцедуры

 

Тестировалось на 1С: БП (базовая) 3.0 (3.0.190.11), платформа 8.3.27.1688.

На той же платформе проверил загрузку из БПБ в БП, только один элемент не загрузился - корень, так как он отличается БухгалтерияПредприятияБазовая против БухгалтерияПредприятия. О таких случаях оповещается. Лишние Сообщить() можно закомментировать.

Вступайте в нашу телеграмм-группу Инфостарт

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Перенос данных 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    191648    376    295    

432

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27633 руб.

12.06.2017    164041    997    329    

488

Перенос данных 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    210231    182    253    

300

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

58000 руб.

15.04.2019    86867    233    182    

169

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

55200 руб.

03.12.2020    46688    134    83    

123

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Разработчик 1С:Предприятие 8 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Переносите справочную информацию, остатки и документы из УПП 1.3 в Бухгалтерию 3.0 с помощью готовых правил. Переносится более 50 видов документов. Простой интерфейс и понятные настройки.

42000 37800 руб.

15.12.2021    36334    265    68    

202

Операции по ВЭД Файловый обмен (TXT, XML, DBF), FTP Разработчик Бухгалтер 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Платные (руб)

Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:". Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные) Обработка актуализирована на начало 2026 года (ставка НДС 22%)

24400 руб.

09.08.2016    97049    376    379    

121

Файловый обмен (TXT, XML, DBF), FTP Перенос данных 1C Системный администратор Разработчик Бухгалтер 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Платные (руб)

Обработка не только формирует начальные остатки по всем счетам на нужную дату (экономя время на свёртке базы БП 3), но и полностью переносит справочные данные и документы за заданный период. Гибкая настройка включает фильтр по организациям и множество параметров выгрузки. Работайте в удобном формате: выполните однократный полный переход или настройте регулярную догрузку только новых документов из БП 3 в БП 3.0. Интеграция правил конвертации в план обмена гарантирует точную выгрузку исключительно зарегистрированных объектов.

70760 руб.

10.04.2026    1286    3    8    

2
Для отправки сообщения требуется регистрация/авторизация