Имя: Пароль:
1C
1С v8
КД. Выгрузка выбранных элементов справочника.
0 sound
 
19.03.14
12:35
Вопрос по конфе "Конвертация Данных". Есть правила обмена, нужно пользователям предоставить возможность самостоятельно выгружать вновь созданные элементы некоторых справочников, то есть выбрал например 1 элемент Номенклатуры, указал файл для выгрузки, нажал кнопку "Выгрузить" и выгрузился этот 1 элемент. Думаю как это сделать с помощью обработки УниверсальныйОбменДаннымиXML. Как-то это делается через правила выгрузки данных произвольным алгоритмом или можно как то самой обработке "скормить" только нужные объекты?
1 13_Mult
 
19.03.14
12:49
В правилах ни чего делать не надо. В самой обработке есть отборы.
2 sound
 
19.03.14
12:53
(1) Хочется не пользоваться непосредственно самой обработкой "УниверсальныйОбменДаннымиXML", а обратиться к ней программно, чтобы не пугать пользователей, что то типа:

    мУниверсальнаяВыгрузкаДанных = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    мУниверсальнаяВыгрузкаДанных.ИмяФайлаПравилОбмена = ИмяВременногоФайлаПравилОбмена;
    мУниверсальнаяВыгрузкаДанных.ИмяФайлаОбмена    = ПутьКФайлу;
    мУниверсальнаяВыгрузкаДанных.РежимОбмена = "Выгрузка";
    мУниверсальнаяВыгрузкаДанных.ВерсияПлатформыИнформационнойБазыДляПодключения = "V82";
мУниверсальнаяВыгрузкаДанных.ЗагрузитьПравилаОбмена();


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

мУниверсальнаяВыгрузкаДанных.ВыполнитьВыгрузку();
3 13_Mult
 
19.03.14
12:56
Универсальную под себя перепили и все. Убери с форм что не надо.
4 13_Mult
 
19.03.14
12:57
Или новый обмен настрой и подсунь правила в макет
5 МойКодУныл
 
19.03.14
12:57
(0) А вы не пытаетесь подменить стандартный механизм регистрации изменений в планах обмена.? Откуда возьмуться нужные данные?
Можно просто в плане поставить регистрацию для этого справочника и прикрутить правила(если в типовой, то вообще программировать не надо).
6 sound
 
19.03.14
13:00
(5) Не, не, как раз с планами обмена все понятно, с ними я уже работал, пусть и не очень красиво, но тем не менее, а вот такой задачи просто пока не было. Там все сложно, поэтому не ищу других решений, а знаю что оно существует именно в таком виде, просто пока не понял как это сделать.
7 Рэйв
 
19.03.14
13:01
(6)В универсальном обмене есть прекрасные отборы при вегрузки. Сто лет ими пользуюсь. Чего велосипед изобретать?
8 sound
 
19.03.14
13:02
Как только что "режиссер подсказал в наушник" надо попробовать так:

мУниверсальнаяВыгрузкаДанных.ПостроительОтчета.Отбор = Структура
и в структуре будет Отбор.

Правильно?
9 13_Mult
 
19.03.14
13:06
Я бы не доверил пользователям этой процедурой заниматься, все равно это контролить придется.
10 sound
 
19.03.14
13:10
(9) Это уже другой вопрос :)
11 sound
 
19.03.14
15:33
(7) Есть пример какой-нибудь?
12 mehfk
 
19.03.14
15:37
(11) Пример здесь http://infostart.ru/public/86109/
13 sound
 
19.03.14
15:46
(12) Спасибо! Буду курить дальше!
14 sound
 
19.03.14
16:56
В общем сделал примерно как и по ссылке в (12), на форме есть реквизит "ОбъектДляВыгрузки", юзер его выбирает и потом:

    мУниверсальнаяВыгрузкаДанных = Обработки.УниверсальныйОбменДаннымиXML.Создать();
    мУниверсальнаяВыгрузкаДанных.ИмяФайлаПравилОбмена = ИмяВременногоФайлаПравилОбмена;
    мУниверсальнаяВыгрузкаДанных.ИмяФайлаОбмена    = ПутьКФайлу;
    мУниверсальнаяВыгрузкаДанных.РежимОбмена = "Выгрузка";
    мУниверсальнаяВыгрузкаДанных.ВерсияПлатформыИнформационнойБазыДляПодключения = "V82";
    мУниверсальнаяВыгрузкаДанных.ИспользоватьОтборПоДатеДляВсехОбъектов = Ложь;
    мУниверсальнаяВыгрузкаДанных.ВыполнитьОбменДаннымиВОптимизированномФормате = Истина;
    мУниверсальнаяВыгрузкаДанных.ЭтоИнтерактивныйРежим = Истина;
    мУниверсальнаяВыгрузкаДанных.ЗагрузитьПравилаОбмена();
    ТаблицаПравилВыгрузки = мУниверсальнаяВыгрузкаДанных.ТаблицаПравилВыгрузки;
        Для каждого СтрокаДерева Из ТаблицаПравилВыгрузки.Строки[0].Строки Цикл
            Если СтрокаДерева.Имя = ИмяСправочника Тогда
                СтрокаДерева.Включить = Истина;
                Построитель = Новый ПостроительОтчета;
                Если СтрокаДерева.ИмяОбъектаДляЗапроса <> Неопределено Тогда
                    Построитель.Текст =
                    "ВЫБРАТЬ Разрешенные _.* ИЗ " + СтрокаДерева.ИмяОбъектаДляЗапроса + " КАК _
                    |{ГДЕ _.Ссылка.* КАК " + СтрЗаменить(СтрокаДерева.ИмяОбъектаДляЗапроса, ".", "_") + "}";
                КонецЕсли;
                Отбор = Построитель.Отбор;
                Если Отбор.Найти("Справочник_" + ИмяСправочника) = Неопределено Тогда
                    Отбор.Добавить("Справочник_" + ИмяСправочника);
                КонецЕсли;
                Массив = Новый Массив;
                Массив.Добавить(Тип("СправочникСсылка." + ИмяСправочника));
                ОписаниеТиповС = Новый ОписаниеТипов(Массив, , );
                Отбор["Справочник_" + ИмяСправочника].Использование = Истина;
                Отбор["Справочник_" + ИмяСправочника].Значение = ОбъектДляВыгрузки;
                Отбор["Справочник_" + ИмяСправочника].ВидСравнения = ВидСравнения.Равно;
                ДоступностьПостроителя = Истина;
                Если Построитель.Отбор.Количество() > 0 Тогда
                    СтрокаДерева.НастройкиПостроителя = Построитель.ПолучитьНастройки();
                    СтрокаДерева.ИспользоватьОтбор    = ИСТИНА;
                КонецЕсли;                
            КонецЕсли;
        КонецЦикла;
мУниверсальнаяВыгрузкаДанных.ВыполнитьВыгрузку();
15 sound
 
19.03.14
16:56
Всем спасибо!
16 sound
 
19.03.14
16:57
Строчку перед циклом пропустил:

ИмяСправочника = ОбъектДляВыгрузки.Метаданные().Имя;

Вот, теперь все :)
17 mehfk
 
19.03.14
18:15
(14) Я бы вместо
ТаблицаПравилВыгрузки.Строки[0]
сделал бы сначала поиск (я в общем-то его и сделал :) ) строки дерева с наименованием "Справочники" , т.к. по-умолчанию КД2.0 делает именно так, но не факт, что справочники будут первыми, сначала могут быть, например, "Документы".

Более того, иерархии может вообще не быть, в таком случае можно анализировать поле, ЕМНИП, "ОбъектОтбора"