Имя: Пароль:
1C
1С v8
Конвертация данных - загрузка цен
,
0 d3N4eGG
 
18.09.13
16:06
Добрый день!

Делаю обмен между двумя одинаковыми конфигурациями "Управление торговлей" с помощью Конвертации данных.
Нужно внести кое-какие изменения при переносе и загрузить цены и остатки при помощи создания нужных документов.
Разобрался со всем, кроме цен.
Проблема в том, что есть даты установленные на будущие периоды.
То есть, мне вместо одного документа нужно создать, как минимум, один документ для цен прошлых периодов (срез последних на дату выгрузки), и потом столько документов, сколько различных дат в регистре на будущие периоды.


Сначала думал так сделать:
1) создал ПКО: источник - пустое поле, приемник - документ.УстановкаЦенНоменклатуры.
2) создал запрос, которые вытягивает цены.
3) создал ПВД: в нем описал структуру документа и
ВыгрузитьПоПравилу(ДанныеВыгрузки, , , ,"УстановкаЦенНоменклатуры");

думал здесь описать алгоритм:
узнать сколько нужно документов (сколько разных дат) и в цикле пройтись и создать нужное количество документов.


анныеВыгрузки = Новый Структура;
ДанныеВыгрузки.Вставить("Дата",                         ТекущаяДата());
ДанныеВыгрузки.Вставить("НеПроводитьНулевыеЗначения",     Истина);
ДанныеВыгрузки.Вставить("ТипДокумента",                    Перечисления.ТипыДокументов.УстановкаЦенНоменклатуры);  

Запросы.ТипыЦенНоменклатуры.УстановитьПараметр("НаДату",    ТекущаяДата());
ТипЦен = Запросы.ТипыЦенНоменклатуры.Выполнить().Выгрузить();
ДанныеВыгрузки.Вставить("ТипыЦен",                        ТипЦен);

Запросы.ЦеныНоменклатуры.УстановитьПараметр("НаДату",    ТекущаяДата());
Цены = Запросы.ЦеныНоменклатуры.Выполнить().Выгрузить();
ДанныеВыгрузки.Вставить("Товары",                        Цены);

Для п = 1 по 3 Цикл
    ДанныеВыгрузки.Вставить("Номер",                         "000000"+строка(п));
    ВыгрузитьПоПравилу(ДанныеВыгрузки, , , ,"УстановкаЦенНоменклатуры");
КонецЦикла;


как-то так. Тут хотел затестить и посмотреть создадутся ли 3 документа установка цен номенклатуры, но не удалось.

Хотел узнать как реализовать такое? Помогите, пожалуйста.
1 d3N4eGG
 
18.09.13
16:27
up. Ребят помогите, пожалуйста. Может непонятно объяснил проблему?
2 МойКодУныл
 
18.09.13
16:40
Можно и так. Формируешь структуру с нужным набором данных, потом передаеш из как ВходящиеДанные в ВыгрузитьПоПравилу - почитай справку. + Лучше создай отдельное ПКО Установкацен_ВходДанные, там у все свойств поставь галку "получить из входящих данных". Имена свойств и ключей структуры естественно совпадают.
3 МойКодУныл
 
18.09.13
16:41
Получать данные в ПВД луще запросом, а потом в цикле вызывать выгрузить по правилу, заполняя структуру данных из тек выборки.
4 d3N4eGG
 
18.09.13
17:10
я, если честно, не понял, что ты имеешь в виду.
может я непонятно объяснил, опишу еще раз в двух словах.

допустим, в правиле выгрузки данных я определил, что мне нужно создать 10 документов. В правиле конвертации объекта описана структура этого файла.
http://postimg.org/image/fs7w7qev1/388295c1/
есть правила выгрузки данных, где я заполняю реквизиты документа, сейчас это выглядит так.
http://postimg.org/image/aayfuw8mf/full/
создается только один документ. а у меня в регистре ЦеныНоменклатуры есть цены, которые установлены, к примеру, на  01.01.2014. Следовательно мне надо создать второй документ, и указать дату 01.01.2014.

я думал засунуть все правило выгрузки в цикл и выгружать по правилу столько раз сколько мне нужно, но после того, но срабатывает эта штука только один раз, то есть при первой итерации происходить выгрузка и обратно в правило выгрузки данных не заходит.
5 d3N4eGG
 
18.09.13
17:13
*В правиле конвертации объекта описана структура документа.
6 d3N4eGG
 
18.09.13
17:30
Люди добрые, отзовитесь! И не добрые тоже..
7 manti
 
18.09.13
17:44
тупой совет- если кнфигарации 2 и идентичные = можно воспользоваться специльной обработкой по переносу имежду 2 типовыми. НЕ?
8 d3N4eGG
 
18.09.13
17:48
не прокатит, мне нужно записи из регистра "ЦеныНоменклатуры" записать документом.
тоже сначала подумал над таким вариантом - просто регистр перегрузить, но он подчинен регистратору, собственно, надо все документы установки цен перегружать - не катит!
9 manti
 
18.09.13
17:51
(8) а ошибка какая при конвертации и на чьей стороне?
10 scanduta
 
18.09.13
17:54
(9) +1 говори где ошибка
11 d3N4eGG
 
18.09.13
18:00
нет ошибок.
http://postimg.org/image/pzi0ktpib/full/
вот такой код к примеру, хочу создать 3 документа установки цен номенклуры. а у меня создается только один, полагаю, что когда отрабатывается строка
ВыгрузитьПоПравилу(ДанныеВыгрузки, , , ,"УстановкаЦенНоменклатуры");
обратно в тело цикла уже не попадает.
12 manti
 
18.09.13
18:03
(11) через отладчик смотрите?
Я когда то брал данные из регистра и перемещал их в базу приемник. Вот скрины, может так прокатит
http://www.ximage.ru/index.php?id=1379512832

http://www.ximage.ru/index.php?id=1379512962

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

    Запрос.УстановитьПараметр("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента);
    Запрос.УстановитьПараметр("Объект", Источник);
    Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);

    Результат = Запрос.Выполнить().Выбрать();
    
    Пока Результат.Следующий() Цикл
    Значение = Результат.Представление;    
        
    КонецЦикла;
13 d3N4eGG
 
18.09.13
18:08
данные из регистра то получить можно. а вот мне нужно создавать неопределенное количество документов.
Если есть еще мысли, подскажите, пожалуйста.
я пока отладчиком гляну.
14 d3N4eGG
 
19.09.13
11:22
Ребят, до сих пор не получилось разобраться.
Сделал замер производительности в обработке переноса, но код написанный в правилах выгрузки не найти, в коде используется "Выполнить()".
что делать? как решить данную проблему? :(
15 manti
 
23.09.13
16:15
(14) возможно у Вас данные не перечитаны, раз в модуле обработки, куда Вы подключаетесь нет нужного кода.
Закон Брукера: Даже маленькая практика стоит большой теории.