Имя: Пароль:
1C
1С v8
УниверсальныйОбменДаннымиХМЛ. Программная установка отбора
0 Альбатрос
 
10.02.14
13:28
Есть необходимость проводить выгрузку программно из сабжевой обработки. Не могу понять как установить отбор, в частности мне нужен отбор номенклатуры по списку значений. Не знаю, как задать отбор программно. Помогите, плиз!

    Файлик = Новый ЧтениеТекста("D:\хз\share\Empty.txt");
    СЗ = Новый СписокЗначений;
    Строчка = Файлик.ПрочитатьСтроку();
    Пока Строчка <> неопределено цикл
        
        СЗ.Добавить(Справочники.Номенклатура.НайтиПоРеквизиту("Идентификатор", СокрЛП(Строчка)));
        Строчка = Файлик.ПрочитатьСтроку();
    КонецЦикла;
    
ОбработкаВыгрузка = Обработки.УниверсальныйОбменДаннымиXML;
Выгрузка = ОбработкаВыгрузка.Создать();
Выгрузка.ИмяФайлаПравилОбмена = "D:\хз\share\ПравилаОбменаДанными.xml";
Выгрузка.ИмяФайлаОбмена = "D:\хз\share\Товар.xml";
Выгрузка.ЗагрузитьПравилаОбмена();

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

Форма = Выгрузка.ПолучитьФорму();
Форма.Открыть();
1 Альбатрос
 
11.02.14
05:33
Вопрос еще актуален )))
2 Альбатрос
 
11.02.14
05:33
ВТП = Выгрузка.ТаблицаПравилВыгрузки.Скопировать();
ТекущееПВД = ВТП.Строки.Найти("Номенклатура",,Истина);
Построитель = Новый ПостроительОтчета;

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

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

    
Форма = Выгрузка.ПолучитьФорму();
Форма.Открыть();
3 Альбатрос
 
11.02.14
05:34
не работает ссука...
4 Альбатрос
 
11.02.14
05:39
вот так заработало:
ВТП = Выгрузка.ТаблицаПравилВыгрузки.Скопировать();
ТекущееПВД = ВТП.Строки.Найти("Номенклатура",,Истина);
Построитель = Новый ПостроительОтчета;

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

    Если Отбор.Найти("Справочник_Номенклатура") = Неопределено Тогда
        Отбор.Добавить("Справочник_Номенклатура");
    КонецЕсли;
Отбор["Справочник_Номенклатура"].Использование = Истина;
Отбор["Справочник_Номенклатура"].ВидСравнения = ВидСравнения.ВСписке;
Отбор["Справочник_Номенклатура"].Значение.ЗагрузитьЗначения(СЗ.ВыгрузитьЗначения());
    
     ДоступностьПостроителя = Истина;
     Если Построитель.Отбор.Количество() > 0 Тогда
         ТекущееПВД.НастройкиПостроителя = Построитель.ПолучитьНастройки();
         ТекущееПВД.ИспользоватьОтбор    = ИСТИНА;
     КонецЕсли;
    
Выгрузка.ТаблицаПравилВыгрузки = ВТП.Скопировать();
5 Альбатрос
 
11.02.14
05:41
Всем спасибо! )))
6 Wobland
 
11.02.14
06:00
вы прослушали утреннюю разминку для разума от Альбатрос
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.