Имя: Пароль:
1C
1С v8
Конвертация данных. Выгрузить по правилу
,
0 Валера Программист
 
26.01.16
13:21
Добрый день, коллеги! Воюю с Конвертацией. Правила обмена для идентичных Комплексных автоматизаций.
Необходимо, чтобы из одной в другую  автоматом грузились определенные типы документов только за сегодняшний день.

Меняю правила выгрузки (пробую на заказах Поставщику и Покупателю).

Вариант 1.
Объект выборки -  ДокументСсылка.ЗаказПоставщику
Способ выборки - Произвольный алгоритм
Правило конвертации  - ЗаказПоставщику

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


РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

Для Каждого Строка Из РезультатЗапроса.Строки Цикл
  ВыгрузитьПоПравилу(Строка.Ссылка, , , , "ЗаказПоставщику");
КонецЦикла;


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

Вариант 2:

Объект выборки -  (оставила пустым)
Способ выборки - Произвольный алгоритм
Правило конвертации  - ЗаказПоставщику

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


РезультатЗапроса = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам);

Для Каждого Строка Из РезультатЗапроса.Строки Цикл
  ВыгрузитьПоПравилу(Строка.Ссылка, , , , "ЗаказПоставщику");
КонецЦикла;

Итог: все падает с ошибкой
Ошибка при выгрузке данных для узла плана обмена
   ОписаниеОшибки         =  Ошибка при вызове метода контекста (НайтиПоТипу): Несоответствие типов (параметр номер '1')
   ПозицияМодуля          =  Обработка.ОбменДаннымиXML.МодульОбъекта(12187)
   КодСообщения           =  72
   УзелПланаОбмена        =  Комплексная автоматизация 1.1
Ошибка при загрузке объектов. Было загружено: 0
Произошла ошибка при выгрузке объектов. Было выгружено: 0
1 anatoly
 
26.01.16
13:23
выгрузка как делается?
если типовой обработкой обмена по ХМЛ в конфе - почему бы там период не задавать и не портить правила?
2 Godofsin
 
26.01.16
13:26
(0) Скажи мне, программист Валера, что возвращает функция День()?
3 GreatOne
 
26.01.16
13:33
Во всех обработчиках доступны глоб. переменные датанач и датакон(ну или датаначала и датаокончания, не помню уже), берутся из обработки выгрузки данных(стандартная).

Второе:

Важно:
Если для выборки данных ПВД используется произвольный алгоритм и в обработчике ПВД "Перед обработкой" инициируется параметр ВыборкаДанных, то для ПКО следует установить признак "Не запоминать выгруженные объекты".



Третье - используй переменную выборкаданных.

Четвертое - проверяй в глоб. обработчике ПередКовертациейОбъекта выгружаемые документы. Вместе с твоим документов могут тянутся документы из табличных частей, оснований и прочее, а дату могут иметь хоть 3 года назад.
4 GreatOne
 
26.01.16
13:35
У меня в ПередКонвератциейОбъекта такое стоит:


Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(Источник)) Тогда
    Если Источник.Дата < Параметры.МинимальныйПериодВыгрузки И ТолькоПолучитьУзелСсылки = Ложь Тогда
        ТолькоПолучитьУзелСсылки = Истина;
        Сообщить("Документ " + Источник + " оказался скользким типом и ""проскочил"" проверку на выгрузку данных!
        | Если вы видите это сообщение, пожалуйста, сообщите программисту!", СтатусСообщения.ОченьВажное);
    КонецЕсли;
КонецЕсли;



В моем случае беспрепятственно выгружаются только документы текущего квартала, что раньше - только ссылка, чтобы ничего не менялось в закрытых периодах.
5 GreatOne
 
26.01.16
13:37
И вот кстати ошибку нашел.
ТолькоПолучитьУзелСсылки нифига не работает, хоть и везде написана в справке. Отладчик показал, что вместо этой переменной стоит использовать "ВыгрузитьТолькоСсылку"
6 Валера Программист
 
26.01.16
13:39
(3) Спасибо за резонные комментарии. Сейчас попробую.

По поводу датанач и датакон. Не могли бы поподробней.

(2) Это дааа)) Надо переделать. Спасибо
7 Godofsin
 
26.01.16
13:42
(3) Чем обосновано?
Третье - используй переменную выборкаданных.
8 Godofsin
 
26.01.16
13:43
(6) Если для обмена юзаешь УниверсальныйОбмен или выгрузкаЗагрузкаХМЛ, то для выборки за период не нужно использовать произвольный алгоритм. Юзаешь стандартную выборку, а период указываешь в обработке.
9 Ma3eIIa
 
26.01.16
13:50
10 Ma3eIIa
 
26.01.16
13:50
(6) советую почитать http://v8.1c.ru/metod/books/book.jsp?id=436
11 GreatOne
 
26.01.16
14:19
(7) потому что он все остальное тоже будет грузить. Мы сделаем выгрузитьпоправилу() и далее будет стандартная выборка
12 GreatOne
 
26.01.16
14:19
либо после выгрузитьпоправилу()  отказ=истина;