Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

КД: набор записей из отдельных объектов в xml файле

КД: набор записей из отдельных объектов в xml файле
Я
   Вуглускр1991
 
09.01.13 - 08:28
Привет!
Вчерась, нужно было прикрутить в БП 2 цены из ТиС 9. А в БП 2 цены - регистр сведений, подчиненный регистратору. Поплевав на руки, нарисовал документ "установка цен", дата - как надо, время ноль, внутренностей нет, а движений - сколько цен в справочнике.
Пользуюсь КД 2.
Но вот порядок выгрузки этих цен был такой, что записи в регистр сведений разбросаны по файлу, товар 1, потом одна запись скажем на дату 01.01.13, затем товар 2, и вторая запись на ту же дату.
Это такое содержимое файла xml. Не получалось у меня отдельные записи в набор записей сформировать. Для этого пришлось бы документ описывать более широко, и у всей номенклатуры, что попадает в выгрузку (это и выборка и по ссылкам) формировать эти цены отдельными документами. А кто знает наперед, какой набор товара будет выгружен...
И наткнулся я здесь на тему:
v8: Конвертация Регистр сведений подчинен регистратору
Девушка очень хотела объяснить словами все это, но слов подходящих просто не было тогда.
Если кто прорубился сквозь описание ситуации, вот решение:
В обработчике конвертации записи регистра сведений, помимо задекларированного контекста "объект" (Отказ там, ОбъектМодифицирован  к примеру) доступен также
НаборЗаписей
Надеюсь эту переменную не переименуют в последующих обновлениях.
Так вот, можно по регистратору читать текущий набор записей, анализировать, стоит ли его перезаписывать, и если стоит, то пользоваться этой переменной для загрузки нового набора.
Там по ходу алгоритма, стоит присваивание
Объект = НаборЗаписей;
в то время как Объект во всех обработка - это одна запись.
 
 
   Defender aka LINN
 
1 - 09.01.13 - 08:37
Ничего не понял, но на всякий случай: вы нифига не знаете КД
   Andy13
 
2 - 09.01.13 - 08:44
Афигеть.
Бедный микроскоп...
   Вуглускр1991
 
3 - 09.01.13 - 08:55
(2) Ничего, ничего! Вот создавать по одному документу на каждый элемент цен номенклатуры - вот это была бы жесть .. и я чуть не сделал такое.
   Defender aka LINN
 
4 - 09.01.13 - 08:58
(3) Ну, сделал ты один документ, хорошо. А при чем тут переменная "Объект", которая при этом еще и "НаборЗаписей"?
   Andy13
 
5 - 09.01.13 - 09:00
А зачем создал документ? Типового не хватило чтоль?
   Вуглускр1991
 
6 - 09.01.13 - 09:10
(4)Когда в xml файле объект - это одна запись регистра сведений, то набор записей всякий раз из неё и состоит и перезаписывается во время выгрузки. Таким образом по окончании выгрузки цены имеют лишь те товары, регистры записи которых были перезаписаны последними (в разрезе дат регистраторов).
В файле:
<Нпп = 5> ... описание цены товара1 на дату 01.01.13
...
<Нпп = 7> ... описание цены товара2 на дату 01.01.13
После выгрузки в документе "Установка цен" от 01.01.13 ,будет только последняя запись -  то есть цена будет у товара2
(5) Создал в смысле записал новый типовой документ.
   Defender aka LINN
 
7 - 09.01.13 - 09:14
(6) А какая религия мешает сделать один набор записей в XML-файле?
   Голубушка
 
8 - 09.01.13 - 09:15
почему отказались от заполнения табличной части дока ? .. это же проще ..
и зачем объект=наборзаписей .. жесть какая то
напиши правило выгрузки регистра сведений .. и ставь в правиле свой липовый регистратор
   Andy13
 
9 - 09.01.13 - 09:18
(6)
----
После выгрузки в документе "Установка цен" от 01.01.13 ,будет только последняя запись -  то есть цена будет у товара2
----

Галочку "Не запоминать выгруженные объекты" поставил в нужном месте?
   Andy13
 
10 - 09.01.13 - 09:19
(8) Вот и я удивляюсь...
 
 Рекламное место пустует
   Defender aka LINN
 
11 - 09.01.13 - 09:20
(8) Подозреваю, из-за даты
   Вуглускр1991
 
12 - 09.01.13 - 09:48
(8) Потому, что я заранее не знаю, какой товар будет выгружен в xml файл.
"объект=наборзаписей .. жесть какая то" - это классика, типовое решение, это не я писал.
(7) А для этого нужно знать список товаров которые будут выгружены и цены этих товаров сгруппировать по датам, и на основе этой группировки создавать документ "Установка цен" с заполненными табличными частями.
Я не вижу способа определить этот список. А разбивать его цены по датам - ну просто лень.
   Вуглускр1991
 
13 - 09.01.13 - 09:50
(9) И с галочкой и без галочки не работало, а сейчас работает галочки ведут себя корректно, если запись есть в наборе, набор не перезаписывается.
   Вуглускр1991
 
14 - 09.01.13 - 09:51
ОбъектИсточник это строка, ОбъектПриемник - это РегистрСведенийЗапись.ЦеныНоменклатуры Обработчик "После загрузки"
Вот кстати и код:
ВременныйНаборЗаписей = РегистрыСведений["ЦеныНоменклатуры"].СоздатьНаборЗаписей();

Для Каждого ЭлементОтбора Из ВременныйНаборЗаписей.Отбор Цикл
    ЭлементОтбора.Установить(Объект[ЭлементОтбора.Имя]);
КонецЦикла;

ВременныйНаборЗаписей.Прочитать();

Если ВременныйНаборЗаписей.Количество() > 0 Тогда
    
    ТаблицаСтарая = ВременныйНаборЗаписей.Выгрузить(); 
    НадоДобавлятьВТабло = Истина;
    
    Для Каждого СтрТС Из ТаблицаСтарая Цикл
        
        Если   (СтрТС.ТипЦен       = Объект.ТипЦен)
             И (СтрТС.Номенклатура = Объект.Номенклатура)
             И (СтрТС.Валюта       = Объект.Валюта)
             И (СтрТС.Цена           = Объект.Цена) Тогда
            Отказ = Истина;
            НадоДобавлятьВТабло = Ложь;
            Прервать;
        ИначеЕсли   (СтрТС.ТипЦен       = Объект.ТипЦен)
                  И (СтрТС.Номенклатура = Объект.Номенклатура) Тогда
            СтрТС.Валюта       = Объект.Валюта;
            СтрТС.Цена           = Объект.Цена;
            ИндаСтро = ТаблицаСтарая.Индекс(СтрТС);
            Если ИндаСтро > 0 Тогда
                ТаблицаСтарая.Сдвинуть(СтрТС, -ИндаСтро) 
            КонецЕсли;
            НадоДобавлятьВТабло = Ложь;
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если НадоДобавлятьВТабло Тогда
        
        СтрНов = ТаблицаСтарая.Вставить(0);
        ЗаполнитьЗначенияСвойств(СтрНов,Объект);
    КонецЕсли;
    
    Если Не Отказ Тогда
        НаборЗаписей.Загрузить(ТаблицаСтарая);
    КонецЕсли;
КонецЕсли;

ВременныйНаборЗаписей = 0;
   Defender aka LINN
 
15 - 09.01.13 - 09:53
(12) "для этого нужно знать список товаров" - а сейчас они как выгружаются в таком случае?
"это классика, типовое решение" - Строка кода может и из типовой. А вот "решение" из (0) - это чистейшей воды копрокод.
   Defender aka LINN
 
16 - 09.01.13 - 09:54
(14) Хосспади... Как это теперь развидеть?
   Вуглускр1991
 
17 - 09.01.13 - 09:58
(15) Сейчас они выгружаются по ссылкам из документов. Специальной выборки нет. Прогружать абсолютно все не нужно. Если ты ищешь способ обозвать это копрокодом - то ты уже нашел и сделал. Можешь расслабиться.
   Defender aka LINN
 
18 - 09.01.13 - 10:00
(17) И? Какая религия мешает собрать эти ссылки и выгрузить в один набор?
   Вуглускр1991
 
19 - 09.01.13 - 10:06
(18) Собрать из документов? Отследить какие виды документов отмечены галочками в форме в 7.7, какие выставлены отборы, за какой период, сделать серию запросов, выгрузить в ТЗ, свернуть ТЗ по номенклатуре, дополнить ценами, сгруппировать по датам. Так?
У нас вообще реквизиты формы можно использовать в обработчике согласно документации КД (я понимаю, что доступны физически и можно без проблем), но так ли это рекомендуют делать Разработчики? не много ли будет работы? Там ведь целые сервисные блоки написаны для отбора объектов в стандартную выгрузку.
   Defender aka LINN
 
20 - 09.01.13 - 10:22
"Отследить какие виды документов отмечены галочками в форме в 7.7, какие выставлены отборы, за какой период, сделать серию запросов, выгрузить в ТЗ, свернуть ТЗ по номенклатуре, дополнить ценами, сгруппировать по датам. Так?" - Ну, если нечего делать, то можно и так.
А я бы в правиле выгрузки номенклатуры отслеживал, какие позиции выгружены, передавал их в параметр и после выгрузки бы дополнительно вызывал выгрузку цен, которая создала бы один документ с одним набором записей.
   Вуглускр1991
 
21 - 09.01.13 - 10:38
(20) "передавал их в параметр" - глобальный объект? Параметр конвертации? "после выгрузки" - всего и вся в конце списка правил выгрузки произвольным алгоритмом из параметра по списку наформировать цены, сгруппировать по датам и правильный документ установки цен на каждую дату и типцены?
Да, это будет прямое решение и не надо бояться, что документ установки цен распроведут в БП.
У моего решения недостаток - постоянная перезапись набора записей регистра сведений, при чтении из XML очередной цены. тоже нормально.
   Defender aka LINN
 
22 - 09.01.13 - 10:41
(21) Или так, да.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует