![]() |
![]() |
![]() |
|
Опять КД, усложняем алгоритм | ☑ | ||
---|---|---|---|---|
0
Пришел в тапках
23.02.12
✎
16:50
|
Есть два документа, источник: переоцентка ТМЦ, приемник: установка цен в магазине. В источнике можно устанавливать цены для нескольких магазинов (список указан в табличной части), а в приемнике есть реквизит - магазин. Как для каждой строки магазинов в источнике создать такое же количество документов для каждого магазина. Подкиньте идей пожалуйста.
|
|||
1
ДенисЧ
23.02.12
✎
16:52
|
ВыгрузитьПоПравилу()
Всегда помогает. |
|||
2
Пришел в тапках
23.02.12
✎
16:53
|
Хорошо, помогите понять как правильно правила сопоставить. Их то я и делаю
|
|||
3
ДенисЧ
23.02.12
✎
16:54
|
Блин...
Делаешь правило выгрузки для одного магазина, потом в ПКО группируешь данные, как надо, и делаешь (1) |
|||
4
Пришел в тапках
23.02.12
✎
16:58
|
(3) И все же не совсем понятно. Делаю ПВД, делаю произвольный алгоритм, в обработчике (не понял еще в каком) делаю цикл подобному:
Для Каждого Магазин Из Объект.ТаблицаМагазинов Цикл ВыгрузитьПоПравилу(ПереоценкаТоваров); КонецЦикла; |
|||
5
Пришел в тапках
23.02.12
✎
16:59
|
(3) Удилите пожалуйста 5 минут своего времени, помогите в корне вопроса разобраться.
|
|||
6
ДенисЧ
23.02.12
✎
17:01
|
(3) В ПриВыгрузке. Для каждой точки формируешь ТЗ с нужными данными (шапочные данные - отдельными полями, табличные - список значений и в поле с именем ТЧ) и вызываешь.
|
|||
7
Пришел в тапках
23.02.12
✎
17:17
|
Итак не совсем силен в терминологии, поднимаю литературу и курю. Найду решение опишу подробно.
|
|||
8
Сияющий Асинхраль
23.02.12
✎
17:31
|
Можно вместо стандартной сделать произвольную выборку, тогда доки можно формировать какие угодно
|
|||
9
fisher
23.02.12
✎
17:53
|
(4) Все правильно. Алгоритм оставляешь стандартный. Дальше как в (6). Еще можно чтобы не заморачиваться с ТЗ просто передавать в ПКО номер выгружаемой строки, а источником ПКО оставить док источника.
|
|||
10
Пришел в тапках
23.02.12
✎
18:30
|
А если нужно сохранить ссылки на документ, то бишь если в источнике он один, то в приемнике их будет несколько и если в источнике они его пометят на удаление, чтобы в приемнике тоже пометились все. Подскажете алгоритм?
|
|||
11
fisher
23.02.12
✎
18:33
|
(10) Ну дык если пометку на удаление синхронизируешь, то при повторной выгрузке ты их выгрузишь с пометкой. В чем проблема? Или у тебя где-то ссылки на эти документы есть и ты хочешь чтобы по ссылкам корректно выгружалось?
|
|||
12
Пришел в тапках
23.02.12
✎
18:40
|
(11) Это как бы будет ежедневный обмен между сильно правленной УТП и стандартной Розницей.
|
|||
13
Пришел в тапках
23.02.12
✎
18:40
|
Вот нагуглил на инфостарте, вроде схожая проблема да и еще наоборот, но механизм похожий.
Пример выгрузки цен из конфигурации ТиС 9.2 в БП 2.0 Выгружаются все цены на дату, загрузка происходит в документы Установка цен номенклатуры. Документы эти - виртуальные, источника в ТиС не имеют. 1. Создать новое ПКО, Источник - пусто, Приемник - документ УстановкаЦенНоменклатуры 2. В таблице конвертации свойств добавить свойства ТипЦен, Дата, Комментарий включить у них признак Поиск. У каждого из этих ПКС источник будет пустым. Значение комментария можно задать непосредственно в правиле. 3. Там же добавить табличную часть "Товары", в которой есть 3 свойства - Номенклатура, Цена, Валюта. 4. Для справочников (Номенклатура, Валюта, ТипыЦен) нужно создать правила конвертации заранее. 5. В обработчик "Перед обработкой" табличной части "Товары" пишем код: КоллекцияОбъектов = СоздатьОбъект("ТаблицаЗначений"); КоллекцияОбъектов.НоваяКолонка("Номенклатура"); КоллекцияОбъектов.НоваяКолонка("Цена"); КоллекцияОбъектов.НоваяКолонка("Валюта"); ТекТип = Источник.Получить("ТипЦен"); Сообщить("выгружаются цены типа "+СокрЛП(ТекТип)); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Обрабатывать Все; |Спр = Справочник.Номенклатура.ТекущийЭлемент; |Группировка Спр без Групп; |"; Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Сообщить("Не удалось выполнить запрос по номенклатуре для выгрузки цен!"); Возврат 1;//это Отказ КонецЕсли; ТЗ = ""; Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроки(); Пока ТЗ.ПолучитьСтроку() = 1 Цикл Если ПустоеЗначение(ТЗ.Спр)=1 Тогда Продолжить; КонецЕсли; ЦенаЦены = 0; Рез = глВернутьЦену(ТЗ.Спр, ТекТип, ДатаОкончания, ЦенаЦены); Если Рез=0 Тогда Продолжить; КонецЕсли; КоллекцияОбъектов.НоваяСтрока(); КоллекцияОбъектов.Номенклатура = ТЗ.Спр; КоллекцияОбъектов.Цена = ЦенаЦены; КоллекцияОбъектов.Валюта = "643";//правило принимает строку с кодом валюты в качестве источника КонецЦикла; 6. Создать Правило выгрузки данных для этого Правила конвертации объектов, указать что выборка будет выполняться произвольным алгоритмом 7. В обработчике "Перед обработкой" правила выгрузки данных пишем код: ВыборкаДанных = СоздатьОбъект("СписокЗначений"); Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = " |Обрабатывать Все; |Спр = Справочник.ТипыЦен.ТекущийЭлемент; |Группировка Спр; |"; Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда Сообщить("Не удалось выполнить запрос по типам цен для выгрузки цен!"); Возврат 1;//это Отказ КонецЕсли; Пока Запрос.Группировка(1)=1 Цикл Объект = СоздатьОбъект("СписокЗначений"); Объект.ДобавитьЗначение(Запрос.Спр,"ТипЦен"); Объект.ДобавитьЗначение(СокрЛП(Запрос.Спр.Наименование),"Информация"); Объект.ДобавитьЗначение(ДатаОкончания,"Дата"); Объект.ДобавитьЗначение("Выгрузка всех цен","Комментарий"); ВыборкаДанных.ДобавитьЗначение(Объект,"Объект"); КонецЦикла; 8. Формируем правила, модуль для обработки выгрузки из 7.7, пользуемся. |
|||
14
fisher
23.02.12
✎
18:45
|
(10) Главное, чтобы у тебя в те же документы выгрузилось. Т.е. поиск при загрузке должен их однозначно находить. Тут уже все от критерия поиска зависит.
Сложнее всего, если ты хочешь корректно обрабатывать изменение табличных частей в источнике. Если, к примеру, удалили какую-то строчку в источнике и соответствующий документ надо прибить в приемнике. Надеюсь, тебе такое не надо? |
|||
15
Пришел в тапках
23.02.12
✎
18:50
|
(14) Да я думаю бухи этого делать не будут, поставлю им крест на лобе, сделали - пусть ничего не трогают если сделали )
|
|||
16
fisher
23.02.12
✎
18:53
|
(15) Ну, так какие тогда проблемы? Делаешь номер строки дока источника составляющей префикса номера дока в приемнике и ставишь поиск по нему.
В итоге конкретная строчка всегда будет выгружаться в один и тот же док. |
|||
17
fisher
23.02.12
✎
18:55
|
(16) + Тьфу не "составляющей префикса номера", а "составляющей номера"
|
|||
18
Пришел в тапках
23.02.12
✎
18:56
|
(16) Все так сложно понять с первого взгляда, щас соберу информацию в кучу и буду пробовать перенести хотя бы.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |