|
КД. Выгрузка выбранных элементов справочника. | ☑ | ||
---|---|---|---|---|
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 делает именно так, но не факт, что справочники будут первыми, сначала могут быть, например, "Документы". Более того, иерархии может вообще не быть, в таком случае можно анализировать поле, ЕМНИП, "ОбъектОтбора" |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |