Имя: Пароль:
1C
1С v8
Конвертация, как сделать выгрузку по произвольному алгоритму
0 mxs089
 
24.01.15
16:56
хочу выгружать остатки номенклатуры, создаю ПВД, способ выборки "Произвольный алгоритм", объект выборки - пусто, правила загружаю в настройку обмена данными, при обмене вылетает ошибка

ОписаниеОшибки         =  Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер '1')

Вопрос, как сделать выгрузку данных по произвольному алгоритму?
1 ShoGUN
 
24.01.15
17:00
(0) В Правиле выгрузки данных в обработчике "Перед обработкой" вставить свой алгоритм и записать результат его работы в параметр "ВыборкаДанных":
ВыборкаДанных - Запрос, Результат запроса, Выборка из результата запроса или произвольная коллекция выгружаемых объектов. Используется, когда способ выгрузки данных - Произвольный алгоритм. Если определить данную переменную, то обход коллекции и выгрузка объектов будет осуществляться автоматически
2 mxs089
 
24.01.15
17:03
ошибка происходит перед выполнением этого события
3 mxs089
 
24.01.15
17:03
УТ 10.3.7.8
4 ShoGUN
 
24.01.15
17:07
(2) Поставь объект выборки. И исходя из (3) - чем выгружаешь - встроенной обработкой, или внешней из комплекта КД?
5 mxs089
 
24.01.15
17:25
(4) ставил, в качестве объекта выбрал справочник номенклатура, ошибки нет, но выгружено 0 объектов, план обмена без регистрации номенклатур. выгружаю встроенной обработкой, настройка обмена в справочнике настройки обмена данными
6 ShoGUN
 
24.01.15
17:28
(5) Не будет так работать, там же планы обмена используются. Либо лезть внутрь обработки выгрузки править место из (0), либо править выборку, передаваемую для выгрузки, либо регистрировать нужную номенклатуру в плане обмена(а алгоритм сделать в правилах регистрации).
7 Rie
 
24.01.15
17:30
(5) А если просто УниверсальнымОбменомXML?
Ну и правило выгрузки - в общих чертах показал бы.
А также - какое ПКО назначено?
8 mxs089
 
24.01.15
17:36
источник УТ , приемник УТ (добавлен регистр сведений, измерения 1. номенклатура, ресурсы 2. остаток).

есть ПКО НовыйРегистрСведений (источник - пусто), в ПВД запросом получаю остатки и в цикле обхода результат выгружаю по правилу

необходимо автоматизировать обмен, поэтому выбрал встроеную обработку
9 ShoGUN
 
24.01.15
17:41
(8) А чего бы тогда источником в ПВД регистр сведений не выбрать?
10 mxs089
 
24.01.15
17:44
(9) его нет в конфигурации источника
11 mxs089
 
24.01.15
17:47
вроде как получилось, ПВД оставил, событие ПередОбработкой = Отказ=Истина;

в глобальном событии "ПередПолучениемИзмененных"

Для каждого СтрокаДерева из ВременныйМассивПравилВыгрузкиДанных Цикл
    
    Если СтрокаДерева.Имя <> "Остатки" Тогда //имя ПВД
        Продолжить;
    КонецЕсли;
    
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |    ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура,
        |    ВЫБОР
        |        КОГДА ТоварыНаСкладахОстатки.КоличествоОстаток < 0
        |            ТОГДА 0
        |        ИНАЧЕ ТоварыНаСкладахОстатки.КоличествоОстаток
        |    КОНЕЦ КАК ОстатокОбщий
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах.Остатки(, " + ?(ЗначениеЗаполнено(Параметры.Склад), "Склад В ИЕРАРХИИ (&Склад)", "") + ") КАК ТоварыНаСкладахОстатки");
    Запрос.УстановитьПараметр("Склад", Параметры.Склад);

    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        
        ВыгрузитьПоПравилу(Выборка,,,, "_НОВЫЙ_РС_",,,,,,,, Ложь); //последний параметр (ЭтоВыгружаетсяОбъект = Неопределено) в Ложь, иначе осуществляется поиск свойства Ссылка
        
    КонецЦикла;
    
    Прервать;    
КонецЦикла;
12 Rie
 
24.01.15
17:49
(11) А зачем ВыгрузитьПоПравилу? Почему бы самому правилу выгрузки не назначить правило конвертации? Заодно можно было бы и от цикла избавиться.
13 mxs089
 
24.01.15
17:52
т.к. у меня нет объекта выборки для ПВД
14 Rie
 
24.01.15
17:57
Я имел в виду

ВыборкаДанных = Запрос.Выполнить().Выгрузить();

Цикл - убрать, в ПВД указать правило конвертации _НОВЫЙ_РС_
15 mxs089
 
24.01.15
18:48
(14) а нужно указывать объект выборки? если да, то что мне выбрать? такого регистра нет, если же нет, то происходит ошибка!
16 Rie
 
24.01.15
20:47
(15) Не нужно. Произвольный алгоритм - он на то и произвольный, что должен просто сформировать ВыборкаДанных, любым способом. А эта ВыборкаДанных "провернётся" через указанное правило конвертации, колонки (поля) выборки будут использоваться в соответствующих ПКС.