gifts2017

Конвертация данных 2. Выгрузка виртуальных объектов (документ Установка цен номенклатуры)

Опубликовал nicolas eliseev (nicxxx) в раздел Обработки - Ценообразование, прайсы

Пример выгрузки цен из конфигурации ТиС 9.2 в БП 2.0
Выгружаются все цены на дату, загрузка происходит в документы Установка цен номенклатуры.
Документы эти - виртуальные, источника в ТиС не имеют.
  1. Создать новое ПКО, Источник - пусто, Приемник - документ УстановкаЦенНоменклатуры
  2. В таблице конвертации свойств добавить свойства ТипЦен, Дата, Комментарий  включить у них признак Поиск. У каждого из этих ПКС источник будет пустым. Значение комментария можно задать непосредственно в правиле.
  3. Там же добавить табличную часть "Товары", в которой есть 3 свойства - Номенклатура, Цена, Валюта.
  4. Для справочников (Номенклатура, Валюта, ТипыЦен) нужно создать правила конвертации заранее.
  5. В обработчик "Перед обработкой" табличной части "Товары" пишем код:
КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений");
КоллекцияОбъектов.НоваяКолонка("Номенклатура");
КоллекцияОбъектов.НоваяКолонка("Цена");
КоллекцияОбъектов.НоваяКолонка("Валюта");

ТекТип = Источник.Получить("ТипЦен");
Сообщить("выгружаются цены типа "+СокрЛП(ТекТип));

    Запрос = СоздатьОбъект("Запрос");
    ТекстЗапроса = "
    |Обрабатывать Все;
    |Спр   = Справочник.Номенклатура.ТекущийЭлемент;
    |Группировка Спр без Групп;
    |";

    Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
        Сообщить("Не удалось выполнить запрос по номенклатуре для выгрузки цен!");
        Возврат 1;//это Отказ
    КонецЕсли;

    ТЗ = "";
    Запрос.Выгрузить(ТЗ);

ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл

    Если ПустоеЗначение(ТЗ.Спр)=1 Тогда
        Продолжить;
    КонецЕсли;

    ЦенаЦены = 0;

    Рез = глВернутьЦену(ТЗ.Спр, ТекТип, ДатаОкончания, ЦенаЦены);

    Если Рез=0 Тогда
        Продолжить;
    КонецЕсли;

    КоллекцияОбъектов.НоваяСтрока();
    КоллекцияОбъектов.Номенклатура = ТЗ.Спр;
    КоллекцияОбъектов.Цена         = ЦенаЦены;
    КоллекцияОбъектов.Валюта       = "643";//правило принимает строку с кодом валюты в качестве источника

КонецЦикла;
  1. Создать Правило выгрузки данных для этого Правила конвертации объектов, указать что выборка будет выполняться произвольным алгоритмом
  2. В обработчике "Перед обработкой" правила выгрузки данных пишем код:
ВыборкаДанных = СоздатьОбъект("СписокЗначений");
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса = "
|Обрабатывать Все;
|Спр   = Справочник.ТипыЦен.ТекущийЭлемент;
|Группировка Спр;
|";

Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
    Сообщить("Не удалось выполнить запрос по типам цен для выгрузки цен!");
    Возврат 1;//это Отказ
КонецЕсли;

Пока Запрос.Группировка(1)=1 Цикл
    Объект = СоздатьОбъект("СписокЗначений");
    Объект.ДобавитьЗначение(Запрос.Спр,"ТипЦен");
    Объект.ДобавитьЗначение(СокрЛП(Запрос.Спр.Наименование),"Информация");
    Объект.ДобавитьЗначение(ДатаОкончания,"Дата");
    Объект.ДобавитьЗначение("Выгрузка всех цен","Комментарий");
    ВыборкаДанных.ДобавитьЗначение(Объект,"Объект");
КонецЦикла;
  1. Формируем правила, модуль для обработки выгрузки из 7.7, пользуемся.

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Николай Клементьев (Rusmus) 03.02.11 10:17
Полезно для начинающих.

Могу предложить дополнения:
1. Раз в ТЧ документа гарантировано нужно указывать известную заранее валюту, можно в обработчике ПослеЗагрузки правила конвертации документа находить её и подставлять в ТЧ. Тогда не понадобится правило конвертации валюты, свойство конвертации и строка 'КоллекцияОбъектов.Валюта = "643";'

2. В правиле выгрузки данных можно указать стандартную выгрузку из источника Справочник.ТипЦен и попавшие в выборку элементы сохранять в параметре (в обработчике ПриВыгрузки, дописав еще "Отказ=1;"). А в обработчике ПослеВыгрузки собирать данные и вызывать метод ВыгрузитьПоПравилу(..). Это даст пользоваться выгодами отбора по типу цен и соберет весь код в обработчиках одного объекта (правила выгрузки).


2. nicolas eliseev (nicxxx) 03.02.11 11:45
если в пустую базу грузишь, то это виртуальное правило для валюты сработает, а в ПослеЗагрузки - нет, потому что не найдет элемента справочника.
отбор по типу цен проще мне кажется сделать через реквизит на форме обработки выгрузки. (я просто пока не понял твою идею, голова к вечеру уже не соображает)
3. Андрей К. (Andzhej) 03.02.11 13:00
Код только для 7.7, а для 8.х нету :( . Заберите из описания "Документация для 1С: Предприятие 8.0; 1С: Предприятие 8.1; 1С: Предприятие 8.2".
4. Eugeneer (Eugeneer) 03.02.11 13:38
Слабо готовые правило выложить? зачем этот геммор?
Да и вообще зачем правила писать? куча разработок которые из экселя могут загрузить цены в любые конфигурации.
5. Николай Клементьев (Rusmus) 03.02.11 15:37
(2)
и в ПослеЗагрузки можно создать нужный элемент валюты, заодно прописав ему наименование, параметры прописи и т.д. Только это не нужно, ведь даже в новой базе при первом запуске записываются основные валюты, ведь так?
предложение по отбору - вообще не критично. это для удобства отладки, чтобы была возможность уменьшить число выгружаемых объектов. По хорошему, думаю, лучше, чтобы был отбор по номенклатуре.
6. nicolas eliseev (nicxxx) 04.02.11 03:41
(3) для 8.х кода не требуется
(4) не слабо, но зачем? эта статья - пример как выгрузить виртуальный документ (без источника). и дело не в ценах, можно таким образом и продажи сводно за день выгружать.
(5) все верно, создаются. а для отладки уже неохота доделывать, главное - что у меня заработало :)
7. Денис Уваров (youdeevee) 04.09.11 22:21
И все дружно встанет колом, когда перейдет на 100000-ю строку при загрузке ;)
8. Олег Крапивный (powerpc) 21.09.11 23:45
А можете подсказать как сделать выгрузку остатков из ТиС 9 (1с77) в УТ 10.3 (1с82) ? На выход 7.7 запросом сформировать остатки, а на входе документом Оприходование товаров принять их. Нужно для того чтобы не выгружать всю номенклатуру, а только ту по которой есть остатки текущие. Заранее спасибо за помощь
9. nicolas eliseev (nicxxx) 23.09.11 02:48
в пункте 5 надо сделать таблицу подобной таблице товаров документа Оприходование, сделать запрос к регистру остатков.
в пункте 7 - вместо справочника ТипЦен у тебя будет справочник Склады.
10. Alex Tomiilov (alextom81) 17.10.11 09:29
(8) powerpc,
1. Есть инструкция на диске ИТС по переходу
2. Сам недавно делал - перематерился.
3. Сам теперь буду делать следующим образом:

а. Стандартной обработкой по переходу с 7 на 8 переношу справочники (но только построчно). т.е., отметил галочкой один справочник, выгрузил в XML, загрузил, проверил.
б. Также поступил с остатками (тоже построчно - по-галочно)
в. Остатки ТМЦ - не трогаю !!!
г. Потом на дату переноса в EXCEL !!! Выгружаю остатки. Если номенклатуры много (у меня было порядка 50.000 наименований), остатки выгружаю по группам товаров
д. Есть у меня обработка специальная, которая из EXcel затягивает остатки, и в одном окне показывает все - сколько должно быть на определенную дату.
Если остатки в Excel и в 8 на определенную дату не соответствуют друг другу, то выводится табличное поле, в котором отражено - товар, остатки 77, остатки 8, разница. После того, как все проверили, запускаем перенос - создается документа "корректировка записей регистров", которая корректирует остатки.

Написал я эту обработку исключительно для того, чтобы скорректировать остатки по товарам на определенную дату (т.к. товар, остатки по которым соответствуют действительности, обработка не выводит), которые у меня поплыли немного после переноса, но, похоже, все остальные переходы с большим количеством номенклатуры буду делать через неё, потому что выверять остатки в трех источниках (77, Excel, 8 ), как-то надежнее.

С Уважением, Томилов Алексей
11. Олег Крапивный (powerpc) 17.10.11 10:43
(10) alextom81, вам спасибо за инструкцию. 1с спасибо, что без работы не остаемся ))).
12. Владимир Помелов (Scroudge) 17.01.12 16:22
"....5. В обработчик "Перед обработкой" табличной части "Товары" пишем код:.."

Это в смысле "Перед выгрузкой"?

Чего-то не прокатывает у меня..
Документы создаются, справочники номенкл, типы цен, валюты переносятся,
но документы УстановкаЦен с пустыми табличными частями..
хотя для каждого типа цен документ создался.

не догоняю, где копать?
13. nicolas eliseev (nicxxx) 18.01.12 03:15
14. Владимир Помелов (Scroudge) 18.01.12 09:14
Спасибо тебе, добрый человек!
Бояркина с Филатовым курил-курил..
Картинка больше помогла.. ;)
15. Сергей Щербаков (Hot_Serg) 03.04.12 19:03
Спасибо за классную вещь!!! картинка лучше помогла.
16. Женя Ткаченко (zhenyat) 10.07.12 17:56
Подскажите в чем может быть проблема
Отладила выгрузку номенклатуры из 7.7 с созданием единиц измерения и штрихкодов. ПВД и ПКО работают. Номенклатура выгружается, единицы и штрихкоды создаются.

Но когда происходит выгрузка этой номенклатуры в составе каких-либо документов - все единицы измерения пропадают!
Из-за чего это может быть?
17. nicolas eliseev (nicxxx) 11.07.12 00:10
Единицы пропадают из документов? передвиньте ПКС "Единица" ниже ПКС "Номенклатура" (не знаю, баг это или фича, но подчиненный справочник должен быть ниже в списке, чем владелец)
18. Женя Ткаченко (zhenyat) 11.07.12 11:53
Нет, единицы пропадают из номенклатуры!
ПКС Единицы и так находится ниже
Такое ощущение, что когда идет выгрузка номенклатуры списком - теряется владелец для создаваемых элементов единиц!
19. nicolas eliseev (nicxxx) 11.07.12 12:04
все правильно, из номенклатуры, надо в основном списке правил конвертаций объектов переместить единицы ниже номенклатуры
20. Николай (beard1) 27.02.13 15:44
Спасибо за полезную статью!
А как бы устанавливать цены только на ту номенклатуру, которая тянется по ссылке при выгрузке документа, например Реализации?
как то не охота тащить все 100500+ записей цен номенклатуры, когда нужна сотня другая... Что-то никак не разберусь как список номенклатуры забрать из ТЧ Реализации и передать в ПВД для отбора.
21. Алексей Шабанов (BTRVODKA) 15.09.13 04:23
Спасибо за подробную инструкцию!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа