|
1C Конвертация данных: обмен между двумя идентичными УПП, спр.Номенклатура, ПВД | ☑ | ||
---|---|---|---|---|
0
Kleo
15.08.14
✎
06:57
|
Здравствуйте!
Подскажите по настройке ПВД для спр.Номенклатура. Задача выгрузить все элементы справочника из одной УПП в другую УПП, кроме одной папки. Разово я сделала с помощью КД и Универсальный обмен данными в формате XML, где можно задать отбор. все просто. но в дальнейшем нужно будет постоянно делать такой обмен в автоматическом режиме. нужно дописать это условие в КД, чтобы выгружались все элементы справочника Номенклатуры, кроме одной папки. Так вот сделала так: настроила правила обмена данными для спр.номенклатура и всех сопутствующих справочников. далее создала ПВД, где Способ выборки - Произвольный. и в обработчике событий Перед обработкой написала алгоритм: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КатегорииОбъектов.Ссылка |ПОМЕСТИТЬ ВТ_КатегорияСинхронизация |ИЗ | Справочник.КатегорииОбъектов КАК КатегорииОбъектов |ГДЕ | КатегорииОбъектов.Код = ""СинхУПП"" |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | КатегорииОбъектов.Объект КАК Номенклатура |ПОМЕСТИТЬ ВТ_КатегорииОбъектов |ИЗ | РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов |ГДЕ | КатегорииОбъектов.Категория В | (ВЫБРАТЬ | ВТ_КатегорияСинхронизация.Ссылка | ИЗ | ВТ_КатегорияСинхронизация КАК ВТ_КатегорияСинхронизация) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Номенклатура.Код, | Номенклатура.Наименование, | Номенклатура.Ссылка, | Номенклатура.ПометкаУдаления, | Номенклатура.Родитель, | Номенклатура.ЭтоГруппа, | Номенклатура.Артикул, | Номенклатура.НаименованиеПолное, | Номенклатура.Весовой, | Номенклатура.ВесовойКоэффициентВхождения, | Номенклатура.ВестиВнутрискладскойУчетПродукции, | Номенклатура.ВестиОперативныйУчетОстатковНЗП, | Номенклатура.ВестиПартионныйУчетПоСериям, | Номенклатура.ВестиУчетПоСериям, | Номенклатура.ВестиУчетПоСериямВНЗП, | Номенклатура.ВестиУчетПоХарактеристикам, | Номенклатура.ВидВоспроизводства, | Номенклатура.ВидНоменклатуры, | Номенклатура.ЕдиницаДляОтчетов, | Номенклатура.ЕдиницаХраненияОстатков, | Номенклатура.БазоваяЕдиницаИзмерения, | Номенклатура.Набор, | Номенклатура.НазначениеИспользования, | Номенклатура.СтавкаНДС, | Номенклатура.Комментарий, | Номенклатура.НоменклатурнаяГруппаЗатрат, | Номенклатура.Услуга, | Номенклатура.ОсновноеИзображение, | Номенклатура.ОсновнойПоставщик, | Номенклатура.НоменклатурнаяГруппа, | Номенклатура.СтранаПроисхождения, | Номенклатура.НомерГТД, | Номенклатура.ТребуетсяВнешняяСертификация, | Номенклатура.ТребуетсяВнутренняяСертификация, | Номенклатура.СтатьяЗатрат, | Номенклатура.ВестиСерийныеНомера, | Номенклатура.Комплект, | Номенклатура.ПорядокПрисвоенияСерийногоНомера, | Номенклатура.ЦеноваяГруппа, | Номенклатура.ОКП, | Номенклатура.ЕдиницаИзмеренияМест, | Номенклатура.ДополнительноеОписаниеНоменклатуры, | Номенклатура.Производитель, | Номенклатура.Импортер, | Номенклатура.ДополнительноеОписаниеНоменклатурыВФорматеHTML |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | НЕ Номенклатура.Ссылка В ИЕРАРХИИ | (ВЫБРАТЬ | ВТ_КатегорииОбъектов.Номенклатура | ИЗ | ВТ_КатегорииОбъектов КАК ВТ_КатегорииОбъектов)"; ВыборкаДанных = Запрос.Выполнить(); и все. указала правило конвертации объекта Номенклатура. алгоритм работает, но выгружается только один элемент, первый из запроса. что не так? нужно перебирать выборка детальных записей запроса? и если использовать ВыгрузитьПоПравилу, то что отправить в ИсходящиеДанные? или что-то нужно еще прописать в ПКО? |
|||
1
VladZ
15.08.14
✎
07:01
|
(0) Привет! Давненько тебя здесь не было...
Я делаю так: РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для каждого аСтрока из результатЗапроса Цикл ВыгрузитьПоПравилу(аСтрока.Объект); КонецЦикла; |
|||
2
Godofsin
15.08.14
✎
07:06
|
(0) Выгрузка нужна автоматическая? можно условия отбора прописать в обработке и скриптом ее запускать
|
|||
3
VladZ
15.08.14
✎
07:12
|
+1 Зачем в последнем запросе выбирать все реквизиты? Хватит и
ВЫБРАТЬ Номенклатура.Ссылка как Объект из.... А выгружаемые реквизиты задавай в ПКО. |
|||
4
Kleo
15.08.14
✎
07:27
|
(2) неа. так точно не подойдет. а как скриптом?
РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для каждого аСтрока из результатЗапроса Цикл ВыгрузитьПоПравилу(аСтрока.Объект); КонецЦикла; (1) Привет! аСтрока.Объект - нет такого в запросе - это вообще здесь Источник описывается (3) перебирать нужно все, т.к. иначе он потом из ПКО не берет эти значения и выгрузка вообще не происходит - выходит ошибка, что не обнаружено такое ПКС |
|||
5
Kleo
15.08.14
✎
07:30
|
есть такой параметр "ВыборкаДанных" в обработчике событий "Перед обработкой" в ПВД. и в него должны все строки ПВД попадать. а попадает только первая строка запроса. почему???
|
|||
6
Defender aka LINN
15.08.14
✎
07:31
|
(5) "Не запоминать выгруженные".
|
|||
7
VladZ
15.08.14
✎
07:33
|
(4) Конечно нет. :)
Согласно твоему запросу должно быть: РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для каждого аСтрока из результатЗапроса Цикл ВыгрузитьПоПравилу(аСтрока.Ссылка); //!!!!!! КонецЦикла; |
|||
8
Godofsin
15.08.14
✎
07:38
|
(4) ДатаПоследнейВыгрузки = ХранилищеСистемныхНастроек.Загрузить("ДатаПоследнейВыгрузкиВК100","ДатаПоследнейВыгрузкиВК100","Робот");
Если ДатаПоследнейВыгрузки = Неопределено тогда ДатаПоследнейВыгрузки = ТекущаяДата(); КонецЕсли; ТС = СПравочники.ТорговыеСети.НайтиПоНаименованию("К 100"); Обработка = Обработки.УниверсальныйОбменДаннымиXML.Создать(); Обработка.РежимОбмена = "Выгрузка"; Обработка.ВыводВОкноСообщенийИнформационныхСообщений = Ложь; Если НачалоДня(ТекущаяДата()) = НачалоДня(ДатаПоследнейВыгрузки) тогда ДатаПоследнейВыгрузки = ДатаПоследнейВыгрузки - 86400; КонецЕсли; Обработка.ДатаНачала = НачалоДня(ДатаПоследнейВыгрузки); Обработка.ДатаОкончания = КонецДня(ТекущаяДата() - 86400); Обработка.ИмяФайлаПравилОбмена = "\\Programmist\share\ОбменТО.xml"; Обработка.ЗагрузитьПравилаОбмена(); Обработка.Параметры.Вставить("ТорговаяСеть", ТС); ПараметрСеть = Обработка.ТаблицаНастройкиПараметров.Найти("ТорговаяСеть"); Если ПараметрСеть = Неопределено тогда Сообщить("Ошибка определения параметра!"); Возврат; Иначе ПараметрСеть.Значение = ТС; КонецЕсли; //*****************Выгружаем продажи*******************// Обработка.ИмяФайлаОбмена = "D:\1C.Base\Kastor\Trade\1С8_ТО\ExtForms\ВыгрузкаТО_РТУ.xml"; ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать(); Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл Наименование = СтрокаУровня2.Имя; Если Наименование <> "РеализацияТоваровУслуг" Тогда СтрокаУровня2.Включить = 0; Иначе СтрокаУровня2.Включить = 1; КонецЕсли; КонецЦикла; Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать(); Сообщить("***** Выгрузка продаж с "+Обработка.ДатаНачала + " по " +Обработка.ДатаОкончания); Обработка.ВыполнитьВыгрузку(); //****************Выгружаем Возвраты******************// Обработка.ИмяФайлаОбмена = "D:\1C.Base\Kastor\Trade\1С8_ТО\ExtForms\ВыгрузкаТО_Возвраты.xml"; ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать(); Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл Наименование = СтрокаУровня2.Имя; Если Наименование <> "ВозвратТоваровОтПокупателя" Тогда СтрокаУровня2.Включить = 0; Иначе СтрокаУровня2.Включить = 1; КонецЕсли; КонецЦикла; Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать(); Сообщить("***** Выгрузка возвратов с "+Обработка.ДатаНачала + " по " +Обработка.ДатаОкончания); Обработка.ВыполнитьВыгрузку(); //****************Выгружаем ПКО******************// Обработка.ДатаНачала = НачалоДня(ДатаПоследнейВыгрузки-(10*86400)); Обработка.ДатаОкончания = КонецДня(ТекущаяДата() - 86400); Обработка.ИмяФайлаОбмена = "D:\1C.Base\Kastor\Trade\1С8_ТО\ExtForms\ВыгрузкаТО_ПКО.xml"; ВременнаяТаблицаПравил = Обработка.ТаблицаПравилВыгрузки.Скопировать(); Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил.Строки[0].Строки Цикл Наименование = СтрокаУровня2.Имя; Если Наименование <> "ПриходныйКассовыйОрдер" Тогда СтрокаУровня2.Включить = 0; Иначе СтрокаУровня2.Включить = 1; КонецЕсли; КонецЦикла; Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать(); Сообщить("***** Выгрузка ПКО с "+Обработка.ДатаНачала + " по " +Обработка.ДатаОкончания); Обработка.ВыполнитьВыгрузку(); ХранилищеСистемныхНастроек.Сохранить("ДатаПоследнейВыгрузкиВК100", "ДатаПоследнейВыгрузкиВК100", ТекущаяДата(),,"Робот"); ЗапускБазыК100(); |
|||
9
Godofsin
15.08.14
✎
07:39
|
(8) а, стоп. Здесь без отбора.
|
|||
10
Godofsin
15.08.14
✎
07:41
|
Вообщем вот тут все доходчиво объяснено:
http://infostart.ru/public/86109/ |
|||
11
VladZ
15.08.14
✎
07:46
|
(4) а в ПКО у тебя что является источником? Номенклатура?
|
|||
12
VladZ
15.08.14
✎
07:51
|
(0) Аську твою потерял. Не справишься сама - стучись.
|
|||
13
Kleo
15.08.14
✎
08:02
|
(10) ок, спасибо.
(12) я сделала по-другому. но мне интересно, почему этот способ не работает, как это описано в книге по конвертации данных |
|||
14
Kleo
15.08.14
✎
08:04
|
я в самой Конвертации в Обработчик событий "Перед выгрузкой данных" описываю этот запрос, его выгружаю в ТЗ, а ТЗ передаю в параметр. далее уже в ПКО Номенклатура Перед выгрузкой делаю проверку:
ТаблицаОбязательнаяСинхронизация = Параметры.ТаблицаОбязательнаяСинхронизация; ПараметрыОтбора = Новый Структура("Ссылка", Источник); НайденныеСтроки = ТаблицаОбязательнаяСинхронизация.НайтиСтроки(ПараметрыОтбора); Если НайденныеСтроки.Количество() > 0 Тогда НеЗамещатьОбъектПриЗагрузке = Истина; Иначе Отказ = истина; КонецЕсли; |
|||
15
VladZ
15.08.14
✎
08:13
|
(14) Тоже вариант. А (7) не взлетело?
|
|||
16
Defender aka LINN
15.08.14
✎
08:34
|
(13) Потому что (6), @#$
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |