Автоматизация обмена между базами используя обработку "Универсальный обмен данными в формате XML"

30.06.11

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Вариант статьи для скачивания
.doc 44,00Kb
305
305 Скачать (1 SM) Купить за 1 850 руб.

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

Итак, собственно сама ВЫГРУЗКА: 

 Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
 
Обработка.РежимОбмена = "Выгрузка";
 
Обработка.ВыводВОкноСообщенийИнформационныхСообщений = Истина;

При необходимости можно задать период выгрузки (как пример):

 Обработка.ДатаНачала  = ТекущаяДата();
 
Обработка.ДатаОкончания   = ТекущаяДата();

 
Обработка.ИмяФайлаПравилОбмена = "D:\ПравилаОбменаДанными.xml";

 Источник = ЭтотОбъект.Ссылка;
 ИмяФайла = Строка(ТипЗнч(Источник)) + " " + Строка(Источник.Номер);
 
Обработка.ИмяФайлаОбмена = "D:\E\"+ Источник +".xml";
 

 Обработка.ЗагрузитьПравилаОбмена(); 

Основные параметры мы определили, теперь надо настроить отбор. Если в этом нет необходимости, то просто запускаете выгрузку:

Обработка.ВыполнитьВыгрузку();

Настройка ОТБОРА:
Тут надо обратить внимание на массив "ВременнаяТаблицаПравил.Строки[1]" и в частности на индекс массива строк,
1 - это ветка "Справочники". Ну и так далее по аналогии              

ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать();
 Для Каждого
СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[1].Строки Цикл
    
Наименование = СтрокаУровня2.Имя;
     Если
Наименование <> "ПеремещениеТоваров00001" Тогда
        
СтрокаУровня2.Включить = 0;
     КонецЕсли;
 КонецЦикла;
 Для Каждого
СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[2].Строки Цикл
    
Наименование = СтрокаУровня2.Имя;
     Если
Наименование <> "ПеремещениеТоваров00001" Тогда
        
СтрокаУровня2.Включить = 0;
     КонецЕсли;
 КонецЦикла;

Здесь вы определяете искомое правило выгрузки, которое нужно оставить включенным на определенной ветке (сами можете варьировать чего и сколько):

 Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
   
Наименование = СтрокаУровня2.Имя;
    Если
Наименование = "ПеремещениеТоваров00001" Тогда
       
СтрокаУровня2.Включить = 1;
    Иначе
       
СтрокаУровня2.Включить = 0;
    КонецЕсли;
 КонецЦикла;
 
Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();

Теперь настраиваем ОТБОР, смысл которого в том, чтобы передать в нашу выгрузку ссылку на документ(ты) который(е) хотим выгрузить:

Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
 
Наименование = СтрокаУровня2.Имя;
  Если
Наименование = "ПеремещениеТоваров00001" Тогда
 
ТекущееПВД = СтрокаУровня2;

    
Построитель = Новый ПостроительОтчета;
     Если
ТекущееПВД.ИмяОбъектаДляЗапроса <> Неопределено Тогда

        
Построитель.Текст =
        
"ВЫБРАТЬ Разрешенные _.* ИЗ " + ТекущееПВД.ИмяОбъектаДляЗапроса + " КАК _
          |
          |
          |{ГДЕ _.Ссылка.* КАК "
+ СтрЗаменить(ТекущееПВД.ИмяОбъектаДляЗапроса, ".", "_") + "}";
     КонецЕсли;

    
Отбор = Построитель.Отбор;

     Если
Отбор.Найти("Документ_ПеремещениеТоваров") = Неопределено Тогда
       
Отбор.Добавить("Документ_ПеремещениеТоваров");
     КонецЕсли;

    
Массив = Новый Массив;
    
Массив.Добавить(Тип("ДокументСсылка.ПеремещениеТоваров"));
    
ОписаниеТиповС = Новый ОписаниеТипов(Массив, , );

    
Отбор["Документ_ПеремещениеТоваров"].Использование = Истина;
    
Отбор["Документ_ПеремещениеТоваров"].Значение = ЭтотОбъект.Ссылка;
    
Отбор["Документ_ПеремещениеТоваров"].ВидСравнения = ВидСравнения.Равно;

    
ДоступностьПостроителя = Истина;
     Если
Построитель.Отбор.Количество() > 0 Тогда
         
ТекущееПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
        
ТекущееПВД.ИспользоватьОтбор    = ИСТИНА;
     КонецЕсли;
  КонецЕсли;
КонецЦикла;

Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();

Ну и, собственно, запускаем саму выгрузку и получаем файл для загрузки:

  Обработка.АрхивироватьФайл = Истина;
  Обработка.ВыполнитьВыгрузку();

Далее процесс загрузки:
Он довольно прост

МассивФайлов = НайтиФайлы("D:\E\", "*.zip");
Для Каждого
Стм Из МассивФайлов Цикл
ТекстВопроса = "Загрузить - " + Стм.ПолноеИмя;
Ответ = Вопрос(ТекстВопроса, РежимДиалогаВопрос.ДаНет,, КодВозвратаДиалога.Да);
    Если
Ответ = КодВозвратаДиалога.Да Тогда
       
Обработка  = Обработки.УниверсальныйОбменДаннымиXML.Создать();
       
Обработка.ИмяФайлаОбмена = Стм.ПолноеИмя;
       
Обработка.РежимОбмена    = "Загрузка";
       
Обработка.ЗаписыватьРегистрыНаборамиЗаписей = Истина;
       
Обработка.ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина;
       
Обработка.ЗагружатьДанныеВРежимеОбмена = Истина;
       
Обработка.ВыполнитьЗагрузку();
       
УдалитьФайлы(Стм.ПолноеИмя);
    КонецЕсли;
КонецЦикла;

Расширение .zip для файлов обмена пусть вас не смущает, обработка самостоятельно упакует .xml файл в архив:

 Обработка.АрхивироватьФайл = Истина;

И также самостоятельно уже без дополнительных указаний распакует и загрузит. Это существенно уменьшает размеры файла обмена.

Вот примерно так можно поступить.

Продолжение темы :

//infostart.ru/public/87057/

См. также

SALE! 10%

Перенос данных 1C Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

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

55778 50200 руб.

04.08.2015    166959    336    278    

376

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 руб.

12.06.2017    142003    802    297    

422

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

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.236.x) и БП 3.0 (3.0.164.x). Правила подходят для версии ПРОФ и КОРП.

35000 руб.

15.12.2021    24264    171    51    

130

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 руб.

23.07.2020    51770    229    70    

187

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 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" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171372    304    257    

379

SALE! 10%

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

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

53111 47800 руб.

03.12.2020    36794    95    66    

92

Перенос данных 1C Программист Бухгалтер Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет НДФЛ ФОМС, ЕФС Платные (руб)

Обработки для быстрого перехода с конфигураций «КАМИН:Расчет заработной платы 3.0», «КАМИН:Зарплата для бизнеса 4.0» и «КАМИН:Зарплата 5.0» на конфигурацию «Зарплата и управление персоналом» версии 3.1.

12000 руб.

25.09.2016    80945    315    250    

267

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

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 руб.

18.02.2016    187108    591    509    

528
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. samamoiloff 861 12.06.11 19:23 Сейчас в теме
Отбор["Документ_ПеремещениеТоваров"].Значение = ЭтотОбъект.Ссылка;

Пример выгрузки из документа получается?
2. wiranata 286 13.06.11 20:31 Сейчас в теме
Завтра выложу пример (обработку).

(1)Не совсем понял в чем вопрос, если вы имеете ввиду вигрузку только табличной части документа (скажем товары) в другой документ либо такой же но с обработкой этих данных - то это надо описывать в обработчиках событий в Конвертации данных (когда будите писать правила обмена). Я только показал как сделать некий регламент обмена а не запрограммировать его логику (это отдельная тема).
4. plevakin 20.06.11 16:32 Сейчас в теме
(1)Не совсем понял в чем вопрос

Насколько я понял данный пример в отборе отбирает только один документ, что на практике бывает редко. Попробовал изменить строки на
Отбор["Документ_РеализацияТоваровУслуг"].ВидСравнения = ВидСравнения.ВСписке;
Отбор["Документ_РеализацияТоваровУслуг"].Значение = Массив;

где Массив это мой программно создаваемый список значений заполненный ссылками на документ. Ничего не получилось.
Завтра выложу пример (обработку).

Можно в качестве примера указать выгрузку списка документов. Думаю формирование списка каждый может сделать под себя, и по дате и по контрагенту и по чему угодно.
5. ARL 316 24.06.11 13:38 Сейчас в теме
(4) Отбор["Документ_РеализацияТоваровУслуг"].Значение = Массив.Скопировать();
где Массив имеет тип СписокЗначений.
3. ARL 316 16.06.11 18:06 Сейчас в теме
Информация удобная, автору благодарность.
Мне потребовалось выгружать по плану обмена. Поэтому немного добавлю:
НашУзел = ПланыОбмена.ХХХХ.НайтиПоКоду("2");
УстановитьУзелОбменаУСтрокДерева(Обработка.ТаблицаПравилВыгрузки.Строки, НашУзел);
Процедуру УстановитьУзелОбменаУСтрокДерева просто копируем из формы обработки.
DimaP; LeXXeR; DenDSMG; user611975_na__svyazi; AlexeyK1; antonio_i; tatarenko.an; +7 Ответить
6. plevakin 24.06.11 13:53 Сейчас в теме
 Отбор = Построитель.Отбор;

     Если Отбор.Найти("Документ_РеализацияТоваровУслуг") = Неопределено Тогда
        Отбор.Добавить("Документ_РеализацияТоваровУслуг");
     КонецЕсли;

     Массив = Новый СписокЗначений;
     Выборка = Документы.РеализацияТоваровУслуг.Выбрать(начПериода,КонПериода);
	 Пока Выборка.Следующий() Цикл
		Массив.Добавить(Выборка.Ссылка);	 
	 КонецЦикла;
	 
     Отбор["Документ_РеализацияТоваровУслуг"].Использование = Истина;
     Отбор["Документ_РеализацияТоваровУслуг"].ВидСравнения = ВидСравнения.ВСписке;
     Отбор["Документ_РеализацияТоваровУслуг"].Значение = Массив.Скопировать();
     
Показать

После этих строк смотрю в отладчике отбор и вижу



Выгружено объектов 0.
rabid_otter; +1 Ответить
7. wiranata 286 24.06.11 18:47 Сейчас в теме
(6) Как я понял проблема настроить отбор в варианте "ВСписке" программно... обработку не буду ради это писать... но где то так:

Структура = Новый СписокЗначений;

Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ
| ПеремещениеТоваров.Ссылка,
| ПеремещениеТоваров.Дата
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ГДЕ
| ПеремещениеТоваров.Дата МЕЖДУ &датаНачала И &датаКонца";

Запрос.УстановитьПараметр("ДатаНачала", НачалоМесяца(ТекущаяДата()));
Запрос.УстановитьПараметр("ДатаКонца", ТекущаяДата());
Структура = Запрос.Выполнить().Выгрузить();


Отбор["Документ_ПеремещениеТоваров"].Использование = Истина;
Отбор["Документ_ПеремещениеТоваров"].ВидСравнения = ВидСравнения.ВСписке;//Равно;
Отбор["Документ_ПеремещениеТоваров"].Значение.ЗагрузитьЗначения(Структура.ВыгрузитьКолонку("Ссылка"));//Источник;


Вот так список значений заполняется, я детально не встраивал в обработку но вызвав форму обработки видел что список значений заполнился ссылками, по ошибке ничего не вывалилось.
AlexeyK1; esenins; +2 Ответить
31. rabid_otter 134 13.07.16 15:32 Сейчас в теме
(7) еще дело может быть в отсутствии галочки у корневых разделов ПВД (Справочники, Документы), при установленной галке в строках этих разделов.
8. mirkomp 22.12.11 00:26 Сейчас в теме
Данная методика будет работать с выгрузкой из базы в которой две организации (ИП и ООО)? конф УТ ред 11 (управляемое приложение)
10. wiranata 286 23.12.11 22:02 Сейчас в теме
(8) Данная методика будет работать не зависимо от форм отганизационно-правовой формы. Но на версии УТ 11 я ее не тестировал за неимением (Конфигурации где будет работать написаны в заголовке).
9. xaker1C 22.12.11 04:51 Сейчас в теме
спасибо очень помогло правда пришлось с легка модифицировать
11. Paul_Nevada 05.01.12 23:41 Сейчас в теме
Привет! Спасибо за тему - очень актуальная для меня оказалась. Такой вопрос - можно ли этот "кусок" развить до полуавтоматического общения двух идентичных БД via e-mail?
12. wiranata 286 07.01.12 13:39 Сейчас в теме
(11) Привет! количества вариантов (автоматического, например как у меня по регламенту... много, надо будет дописать схему реализации) ограниченно лишь функционалом самой 1С. Там есть возможность авто пересылки сообщений и их автоматического приема и обработки НО! данная обработка "вытаскивает" весь объект вместе с подчиненными ссылками и в итоге мы получаем файл где то на 60 метров (и это в архиве!).
Можно правилами обмена пробовать ограничивать объем выгрузки но тогда не факт что мы в пакете обмена будем иметь весь объем необходимой инфы.
По этому почта возможна но... как неполноценный по эффективности вариант когда имеет дело с файлом сформированным описанной обработкой... но попытка не пытка, это лишь мое мнение.
13. Maks888 1 01.02.12 09:42 Сейчас в теме
Хочу поблагодарить автора! Очень и очень замечательную вещь выложили! Буквально меня спасли =) очень сократил время на разработку! + 10 !!!
14. пользователь 23.03.12 11:40
Сообщение было скрыто модератором.
...
15. пользователь 23.03.12 11:40
Сообщение было скрыто модератором.
...
16. нинас 03.04.12 09:22 Сейчас в теме
17. binex 279 28.05.12 15:24 Сейчас в теме
Я не пойму зачем нужно копировать ТаблицуПравилВыгрузки? Почему бы сразу в неё изменения не вносить?
18. wiranata 286 29.05.12 10:32 Сейчас в теме
(17) Публикация не подвергалась оптимизации если вам так удобнее то почему нет.. тут лишь изложена одна из идей обмена а не обработки данных в процессе этого обмена.
19. binex 279 29.05.12 10:36 Сейчас в теме
Спасибо! Статья помогла.
20. galyausik1 3 11.07.12 16:22 Сейчас в теме
Спасибо! Очень полезная статейка
21. alon 171 31.07.12 17:08 Сейчас в теме

Обработка.ВыполнитьЗагрузку();
УдалитьФайлы(Стм.ПолноеИмя);


У вас не возникает ошибки совместного доступа к файлу в последней строке?
22. wiranata 286 31.07.12 20:33 Сейчас в теме
(21)Нет не возникает, а должно?
23. uri1978 138 16.10.13 12:27 Сейчас в теме
Спасибо за статью. Подтолкнули на мысль, использовал в работе. Очень пригодилось.
24. Al777 04.12.14 10:22 Сейчас в теме
Спасибо за статью! Как раз возникла необходимость постоянной перегрузки документов из одной базы в другую через универсальный отчет.
25. dyak84 04.01.15 09:55 Сейчас в теме
Спасибо буду пробовать, интересная статья
26. Steelvan 306 05.02.15 12:53 Сейчас в теме
...применим если вы не можите...

*можЕте
27. orfos 218 14.02.15 15:47 Сейчас в теме
А как настроить отбор только по справочникам (у)??
28. lion11 144 24.08.15 16:36 Сейчас в теме
Можете подсказать, как сделать то же самое, но только в УФ? Есть внешняя обработка на УФ с кнопкой выгрузить, по нажатию на которую нужно выгрузить по правилу обмена используя обработку УниверсальныйОбменДаннымиXML на УФ, например, в БП3.
Не актуально, разобрался.
29. nef744 02.09.15 18:54 Сейчас в теме
Спасибо! Очень помогло!
30. Гость 02.03.16 14:38
Всё работает, но возникает проблема с добавлением отбора на регистр сведений, у кого нибудь есть пример кода?
32. AlekSo 15 07.10.16 10:46 Сейчас в теме
(30) Гость,
Вряд ли кто нибудь теперь уже ответит.
Тоже бьюсь над этим - как отобрать независимые регистры сведений?
В частности нужно отобрать по периоду или по дате ключевого документа.
33. AlekSo 15 11.10.16 08:37 Сейчас в теме
Если кому ещё интересно.

В самой обработке универсального обмена в модуле формы есть процедура НастроитьПостроитель().
Оттуда можно выдернуть нужные строки.

коротко вот пример для независимого периодического регистра сведений:

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

	Построитель.Текст = "ВЫБРАТЬ Разрешенные
	 |   *,
	 |	NULL КАК Активность,
	 |	NULL КАК Регистратор,
	 |  NULL КАК НомерСтроки       
	 |
	 |ИЗ "+ИмяПВД;
	 
	Построитель.ЗаполнитьНастройки();
	
	ЭлемОтбора = Построитель.Отбор.Добавить("Период");
	Если ЭлемОтбора = Неопределено Тогда
		Сообщить("Не удалось настроить ОТбор по документам");
	КонецЕсли;
	
	ЭлемОтбора.ВидСравнения  = ВидСравнения.ИнтервалВключаяГраницы;
	ЭлемОтбора.ЗначениеС     = НачПериода;
	ЭлемОтбора.ЗначениеПо    = КонПериода;
	ЭлемОтбора.Использование = Истина;
	
	СтрокаПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
	СтрокаПВД.ИспользоватьОтбор    = ИСТИНА;
	
	Возврат Истина;
КонецФункции
Показать

Здесь важно брать именно ИмяОбъектаДляЗапросаРегистра.
36. Butuff 15.04.17 12:45 Сейчас в теме
(33) а есть пример выгрузки только измененных записей регистра сведений? (не периодического и без регистратора)
34. wau8824ru 23 26.03.17 20:54 Сейчас в теме
Для Каждого СтрокаУровня1 Из ТаблицаПравилВыгрузки.Строки Цикл
	Для Каждого СтрокаУровня2 Из ТаблицаПравилВыгрузки.Строки[0].Строки Цикл
		Наименование = 	СтрокаУровня2.Имя;
		Если Наименование = "ВозвратТоваровОтПокупателя" Тогда
			Построитель = Новый ПостроительОтчета;
			Если СтрокаУровня2.ИмяОбъектаДляЗапроса <> Неопределено Тогда
			Построитель.Текст =
			"ВЫБРАТЬ Разрешенные _.* ИЗ " + СтрокаУровня2.ИмяОбъектаДляЗапроса + " КАК _
			|{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(СтрокаУровня2.ИмяОбъектаДляЗапроса, ".", "_") + "}";
			КонецЕсли;
			Отбор = Построитель.Отбор;
			Если Отбор.Найти("Документ_ВозвратТоваровОтПокупателя") = Неопределено Тогда
				Отбор.Добавить("Документ_ВозвратТоваровОтПокупателя");
			КонецЕсли;
			СписокДокументов = Новый СписокЗначений;
			Отбор["Документ_ВозвратТоваровОтПокупателя"].Использование	= Истина;
			Отбор["Документ_ВозвратТоваровОтПокупателя"].ВидСравнения	= ВидСравнения.ВСписке;
			Отбор["Документ_ВозвратТоваровОтПокупателя"].Значение		= СписокДокументов;
			ДоступностьПостроителя = Истина;
			Если Построитель.Отбор.Количество() > 0 Тогда
				СтрокаУровня2.НастройкиПостроителя = Построитель.ПолучитьНастройки();
				СтрокаУровня2.ИспользоватьОтбор    = Ложь;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
КонецЦикла;
Показать

Работает, Спасибо! А нет возможности добавить реквизит в отбор?
Примерно следущее?
Отбор["Документ_ВозвратТоваровОтПокупателя.Организация"].Использование	= Истина;
Отбор["Документ_ВозвратТоваровОтПокупателя.Организация"].ВидСравнения	= ВидСравнения.ВСписке;
Отбор["Документ_ВозвратТоваровОтПокупателя.Организация"].Значение		= ПланыОбмена.ОбменУправлениеТорговлейБухгалтерияКОРП.НайтиПоКоду("002").Организации.ВыгрузитьКолонку("Организация");
35. wau8824ru 23 27.03.17 07:57 Сейчас в теме
Если Отбор.Найти("Документ_ВозвратТоваровОтПокупателя.Организация") = Неопределено Тогда
   Отбор.Добавить("Документ_ВозвратТоваровОтПокупателя.Организация");
КонецЕсли;

Отбор добавляется но при
Отбор["Документ_ВозвратТоваровОтПокупателя.Организация"].Использование    = Истина;

выводится ошибка
37. wau8824ru 23 24.10.17 08:58 Сейчас в теме
Для Каждого СтрокаУровня1 Из ТаблицаПравилВыгрузки.Строки Цикл
		Для Каждого СтрокаУровня2 Из ТаблицаПравилВыгрузки.Строки[0].Строки Цикл
			Наименование = 	СтрокаУровня2.Имя;
			Если Наименование = "ВозвратТоваровОтПокупателя" Тогда
				Построитель = Новый ПостроительОтчета;
				Если СтрокаУровня2.ИмяОбъектаДляЗапроса <> Неопределено Тогда
					Построитель.Текст =
					"ВЫБРАТЬ Разрешенные _.* ИЗ " + СтрокаУровня2.ИмяОбъектаДляЗапроса + " КАК _
					|{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(СтрокаУровня2.ИмяОбъектаДляЗапроса, ".", "_") + "}";
				КонецЕсли;
				Отбор = Построитель.Отбор;
				Если Отбор.Найти("Документ_ВозвратТоваровОтПокупателя") = Неопределено Тогда
					Отбор.Добавить("Документ_ВозвратТоваровОтПокупателя");
					Отбор.Добавить("Документ_ВозвратТоваровОтПокупателя.Организация", "ОсновнаяОрганизация");
				КонецЕсли;
				СписокДокументов = Новый СписокЗначений;
				Отбор["Документ_ВозвратТоваровОтПокупателя"].Использование	= Истина;
				Отбор["Документ_ВозвратТоваровОтПокупателя"].ВидСравнения	= ВидСравнения.ВСписке;
				Отбор["Документ_ВозвратТоваровОтПокупателя"].Значение		= СписокДокументов;
				ОсновнаяОрганизация = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ПараметрыСеанса.ТекущийПользователь, "ОсновнаяОрганизация");;
				Отбор["ОсновнаяОрганизация"].Использование	= Истина;
				Отбор["ОсновнаяОрганизация"].ВидСравнения	= ВидСравнения.Равно;
				Отбор["ОсновнаяОрганизация"].Значение		= РеглОрганизация;
				ДоступностьПостроителя = Истина;
				Если Построитель.Отбор.Количество() > 0 Тогда
					СтрокаУровня2.НастройкиПостроителя = Построитель.ПолучитьНастройки();
					СтрокаУровня2.ИспользоватьОтбор    = Истина;
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
Показать

Вот так работает, мож пригодится кому...
43. softmaker 41 26.01.21 17:04 Сейчас в теме
(37) Главное, чтобы СписокДокументов состоял из ссылочных типов, а не из типов ЭлементСпискаЗначений.
38. PhoenixAOD 62 14.06.18 10:21 Сейчас в теме
Доброго времени суток. Спасибо за статью, но у меня возникла проблема.
Если Отбор.Найти("Документ_РеализацияТоваровУслуг") = Неопределено Тогда
				Отбор.Добавить("Документ_РеализацияТоваровУслуг");
			КонецЕсли;
			
			Структура = Новый СписокЗначений; 

			Запрос = Новый Запрос;	
			Запрос.Текст = 
			"ВЫБРАТЬ
			|	РеализацияТоваровУслугИзменения.Ссылка КАК Ссылка
			|ИЗ
			|	Документ.РеализацияТоваровУслуг.Изменения КАК РеализацияТоваровУслугИзменения
			|ГДЕ
			|	РеализацияТоваровУслугИзменения.Узел = &Узел
			|	И РеализацияТоваровУслугИзменения.Ссылка.Менеджер В(&СпАвтор)
			|	И РеализацияТоваровУслугИзменения.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";


			Запрос.УстановитьПараметр("Узел", ПланыОбмена.ОбменСКА2.НайтиПоКоду("77777")); 
			Запрос.УстановитьПараметр("СпАвтор", СпАвтор);
			Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Объект.ДатаНачала));
			Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Объект.ДатаОкончания));
			Структура = Запрос.Выполнить().Выгрузить(); 


			Отбор["Документ_РеализацияТоваровУслуг"].Использование = Истина;	
			Отбор["Документ_РеализацияТоваровУслуг"].ВидСравнения = ВидСравнения.ВСписке; 
			Отбор["Документ_РеализацияТоваровУслуг"].Значение.ЗагрузитьЗначения(Структура.ВыгрузитьКолонку("Ссылка"));
Показать

Сделал вот так, но почему то попадют все документы "СпАвтор" почему то не отрабатывается условие. Не подскажете в чем дело?
39. user639784_kuz_val87 14.06.18 15:34 Сейчас в теме
Добрый день! может кто-нибудь выложить код полностью рабочей обработки? у меня почему-то только справочники выгружаются, документы никак не могу выгрузить, как ни пытался... буду очень благодарен)
40. user639784_kuz_val87 14.06.18 15:38 Сейчас в теме
#Если Сервер Тогда
Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
Обработка.РежимОбмена = "Выгрузка";
Обработка.ВыводВОкноСообщенийИнформационныхСообщений = Ложь;
Обработка.ИмяФайлаПравилОбмена = "\\192.168.16.137\shared\ПравилаОбменаДанными4.xml";
Обработка.ДатаНачала = ТекущаяДата()- 60*60*24*5 ;
Обработка.ДатаОкончания = КонецДня(ТекущаяДата());
Обработка.ЗагрузитьПравилаОбмена();

ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать();
Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл
	Наименование = СтрокаУровня2.Имя;
	Сообщить(Наименование);
	Если Наименование = "Номенклатура" Тогда
		СтрокаУровня2.Включить = 0;
		Сообщить(СтрокаУровня2.Включить);
	ИначеЕсли Наименование = "Контрагенты" Тогда
		СтрокаУровня2.Включить = 1;
		Сообщить(СтрокаУровня2.Включить);
	Иначе
		СтрокаУровня2.Включить = 0;
		Сообщить(СтрокаУровня2.Включить);
	КонецЕсли;
КонецЦикла;
Сообщить("Цикл2");
 Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[1].Строки Цикл
     Наименование = СтрокаУровня2.Имя;
     Сообщить(Наименование);
     Если Наименование = "ПоступлениеТоваровУслуг" Тогда
         СтрокаУровня2.Включить = 1;
    	 Сообщить(СтрокаУровня2.Включить);
     Иначе
    	СтрокаУровня2.Включить = 0;
    	Сообщить(СтрокаУровня2.Включить);
     КонецЕсли;
 КонецЦикла;
 
 Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[1].Строки Цикл
  Наименование = СтрокаУровня2.Имя;
  Если Наименование = "ПоступлениеТоваровУслуг" Тогда
	  ТекущееПВД = СтрокаУровня2;

     Построитель = Новый ПостроительОтчета;
     Если ТекущееПВД.ИмяОбъектаДляЗапроса <> Неопределено Тогда

         Построитель.Текст =
         "ВЫБРАТЬ Разрешенные _.* ИЗ " + ТекущееПВД.ИмяОбъектаДляЗапроса + " КАК _
          |
          |
          |{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(ТекущееПВД.ИмяОбъектаДляЗапроса, ".", "_") + "}";
     КонецЕсли;

     Отбор = Построитель.Отбор;

     Если Отбор.Найти("Документ_ПоступлениеТоваровУслуг") = Неопределено Тогда
        Отбор.Добавить("Документ_ПоступлениеТоваровУслуг");
     КонецЕсли;
	 Структура = Новый СписокЗначений; 

            Запрос = Новый Запрос;    
            Запрос.Текст = 
            "ВЫБРАТЬ
            |ПоступлениеТоваровУслуг.Ссылка КАК Ссылка
            |ИЗ
            |Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг
            |ГДЕ
            |    ПоступлениеТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания";


            Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(Обработка.ДатаНачала));
            Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Обработка.ДатаОкончания));
            Структура = Запрос.Выполнить().Выгрузить(); 


            Отбор["Документ_ПоступлениеТоваровУслуг"].Использование = Истина;    
            Отбор["Документ_ПоступлениеТоваровУслуг"].ВидСравнения = ВидСравнения.ВСписке; 
            Отбор["Документ_ПоступлениеТоваровУслуг"].Значение.ЗагрузитьЗначения(Структура.ВыгрузитьКолонку("Ссылка"));

	 ДоступностьПостроителя = Истина;
	 Если Построитель.Отбор.Количество() > 0 Тогда
	     ТекущееПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
	     ТекущееПВД.ИспользоватьОтбор    = ИСТИНА;
	 КонецЕсли;
  КонецЕсли;
КонецЦикла;

Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
Обработка.ИмяФайлаОбмена = "\\192.168.16.137\shared\ВыгрузкаДА.xml"; 

Обработка.ВыполнитьВыгрузку();
#КонецЕсли
Показать


что у меня не так?
41. arz 23.07.18 11:37 Сейчас в теме
Доброго дня. В серверном варианте на линуксе ( скорее всего на виндоус так же будет) загрузка файла блокировала файл обмена. Помогло удаление файла, причем только функцией из самой обработки.

Обработка.ВыполнитьЗагрузку();
Обработка.УдалитьВременныеФайлы(Путь +"выгрузка.xml");
42. чингачгук 24 29.09.20 10:14 Сейчас в теме
Может что-то за это время поменялось в универсальной выгрузке, но ни как не взлетало, пока не поменял следующие параметры:
Правила я вытащил из обрабоки в следующей публикации Обмен БП-УНФ (до этого руками запускал, сейчас решил в регламент засунуть)
А так статья шикарная, спасибо!



Процедура ВыполнитьКоманду(ИдентификаторКоманды, ПараметрыВыполненияКоманды) Экспорт	
	    
	Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать();
	Обработка.РежимОбмена = "Выгрузка";
	Обработка.ВыводВОкноСообщенийИнформационныхСообщений = Истина;
	
	Обработка.ДатаНачала  = НачалоДня(ТекущаяДата()-60*60*24*4);
	Обработка.ДатаОкончания   = КонецДня(ТекущаяДата());
	
	Обработка.ИмяФайлаПравилОбмена = "C:\install\PR_BP_UNF202009.xml";
	Обработка.ВыводВПротоколИнформационныхСообщений = Истина;
	Обработка.ИмяФайлаПротоколаОбмена = "c:\install\LOG.txt";
	ИмяФайла = "C:\install\tt.xml";
	Обработка.ИмяФайлаОбмена = "C:\install\tt.xml"; 
	
	Обработка.ЗагрузитьПравилаОбмена(); 
	
	Обработка.ИнициализироватьПервоначальныеЗначенияПараметров();
	ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать();
	
	Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки Цикл
		Наименование = СтрокаУровня2.Имя;
		Если Наименование = "Документы" Тогда
			СтрокаУровня2.Включить = 1;
		ИначеЕсли Наименование = "СчетНаОплатуПокупателю" Тогда
			СтрокаУровня2.Включить = 1;
		ИначеЕсли Наименование = "Счет на оплату" Тогда
			СтрокаУровня2.Включить = 1;
		Иначе
			СтрокаУровня2.Включить = 0;
		КонецЕсли;
		Для Каждого СтрокаУровня1 Из СтрокаУровня2.Строки Цикл
			Наименование = СтрокаУровня1.Имя;
			Если Наименование = "Документы" Тогда
				СтрокаУровня1.Включить = 1;
			ИначеЕсли Наименование = "СчетНаОплатуПокупателю" Тогда
				СтрокаУровня1.Включить = 1;
			ИначеЕсли Наименование = "Счет на оплату" Тогда
				СтрокаУровня1.Включить = 1;
			Иначе
				СтрокаУровня1.Включить = 0;
			КонецЕсли;
		КонецЦикла;
	КонецЦикла;
	
	Обработка.Параметры.ДатаНачала 		= НачалоДня(Обработка.ДатаНачала);
	Обработка.Параметры.ДатаОкончания 	= КонецДня(Обработка.ДатаОкончания);   	
	Обработка.Параметры.ВыгружатьПомеченныеНаУдалениеДокументы = Истина;
	
	ИзменитьДеревоПравилВыгрузки(Обработка.ТаблицаПравилВыгрузки.Строки, ВременнаяТаблицаПравил.Строки);
	Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
	Попытка
		Обработка.ВыполнитьВыгрузку();
	Исключение
	КонецПопытки;
	
	
КонецПроцедуры	



&НаСервере     
Процедура ИзменитьДеревоПравилВыгрузки(СтрокиИсходногоДерева, СтрокиЗаменяемогоДерева)
	
	КолонкаВключить = СтрокиЗаменяемогоДерева.ВыгрузитьКолонку("Включить");
	СтрокиИсходногоДерева.ЗагрузитьКолонку(КолонкаВключить, "Включить");
	
	Для Каждого СтрокаИсходногоДерева Из СтрокиИсходногоДерева Цикл
		
		ИндексСтроки = СтрокиИсходногоДерева.Индекс(СтрокаИсходногоДерева);
		СтрокаИзменяемогоДерева = СтрокиЗаменяемогоДерева.Получить(ИндексСтроки);
		
		ИзменитьДеревоПравилВыгрузки(СтрокаИсходногоДерева.Строки, СтрокаИзменяемогоДерева.Строки);
		
	КонецЦикла;
	
КонецПроцедуры
Показать




Загрузка кстати заработала сразу без проблем
Отборы из статьи тоже нормально прикручиваются.
Еще добавил регистр, в который пишу изменения по нужным объектам, и уже из этого регистра по типу объектов делаю выборку для выгрузки. Работает быстро.
44. 1cv7 24.03.21 17:59 Сейчас в теме
Добрый день! Спасибо за статью!
А никто не пытался выгружать регистр сведений с фильтрами по измерениям? Никак синтаксис не могу подобрать в части запроса и отбора...

Вот здесь тщетные потуги:

Если СтрокаУровня2.ИмяОбъектаДляЗапросаРегистра <> Неопределено Тогда
	Построитель.Текст =
	//"ВЫБРАТЬ Разрешенные _.* ИЗ " + СтрокаУровня2.ИмяОбъектаДляЗапросаРегистра + " КАК _
	//|{ГДЕ _.Запись.* КАК " + СтрЗаменить(СтрокаУровня2.ИмяОбъектаДляЗапросаРегистра, ".", "_") + "}";
	"ВЫБРАТЬ Разрешенные .* ИЗ РегистрСведений.ДвоичныеДанныеФайлов КАК РегистрСведений_ДвоичныеДанныеФайлов";
	
        //здесь пытался передрать верхний код, потом просто запрос написал, но не пашет ничего...

КонецЕсли;
			
Отбор = Построитель.Отбор;
Отбор.Добавить("РегистрСведений_ДвоичныеДанныеФайлов.Файл.ВладелецФайла", "ЗаданиеНаРаботу");
Показать


//Здесь ругается на параметр 1. Не хочет брать этот фильтр. И даже сокращенный. Похоже, другие здесь ссылки.
45. user1004898 27 22.06.21 18:03 Сейчас в теме
То есть если у меня в правилах несколько документов, то нужно для каждого дословно описать полное наименование моего правила по этому документу?
Отбор["МоеПравило_МойДокумент1"].Использование = Истина;    
Отбор["МоеПравило_МойДокумент1"].ВидСравнения = ВидСравнения.ВСписке; 
Отбор["МоеПравило_МойДокумент1"].Значение.ЗагрузитьЗначения(Структура.ВыгрузитьКолонку("Ссылка"));
.......

Отбор["МоеПравило_МойДокумент2"].Использование = Истина;    
Отбор["МоеПравило_МойДокумент2"].ВидСравнения = ВидСравнения.ВСписке; 
Отбор["МоеПравило_МойДокумент2"].Значение.ЗагрузитьЗначения(Структура.ВыгрузитьКолонку("Ссылка"));
......
Показать


Никто не пробовал сделать универсально, чтобы имя правила само считывалось и подставлось в отбор?
Ведь наверное не единичные случаи, когда правила обмена дорабатываются в КД2.0. добавляются новые правила по новым документам, и тогда придется опять модуль дописывать.
46. klel@list.ru 16.05.22 14:00 Сейчас в теме
Спасибо за статью =) Помогла.
Оставьте свое сообщение