|
КД: Перенос одного документа в несколько документов | ☑ | ||
---|---|---|---|---|
0
Reclaim
17.02.16
✎
06:28
|
Здравствуйте! Суть вопроса: Есть документ в УПП, есть две табличные части, на 3 реквизитах которых базируется перенос. Переносим этот документ в УТ, у которого эти три реквизита находятся в реквизитах документа, а не табличной части. Проблема: Т.к. в УПП реквизиты находятся в табличных частях, то соответственно строк с этими реквизитами может быть много. И в зависимости от того, сколько этих реквизитах в строках ТЧ, нужно создать столько же документов в УТ (т.е. может быть нужно создать как 1 документ, так и 8 и более).
Кто-нибудь такое реализовал? Поделитесь опытом |
|||
1
ИсчадиеADO
17.02.16
✎
06:33
|
В пвд выбирай тч и передавай в качестве входящих данных реквизит
|
|||
2
ИсчадиеADO
17.02.16
✎
06:45
|
Соответственно у тебя 2 проблемы: распределить суммы и что подставлять при конвертации по ссылке
|
|||
3
Reclaim
17.02.16
✎
06:48
|
А можно немного подробнее? И если можно с каким-нибудь примером кода.
Не совсем понял как это будет происходить на деле... Нужно сделать что-то в это роде? ВходящиеДанные = Новый Структура("Номенклатура"); ВходящиеДанные.Номенклатура = Новый ТаблицаЗначений; ВходящиеДанные.Номенклатура.Колонки.Добавить("Номенклатура"); ВходящиеДанные.Номенклатура.Колонки.Добавить("Процент"); И таким образом занесутся реквизиты в таблицу значений, из которой я смогу вытащить нужные мне данные? А вот как и что подставлять при конвертации по ссылке пока не понял. Если можно и тут разжевать |
|||
4
ИсчадиеADO
17.02.16
✎
07:26
|
(3) поиска по ссылке не будет. Что и как переносить при конвертации по ссылке ты должен решить сам тк никто не знает твоих вводных. Подробнее не могу, сорри, с телефона
|
|||
5
Reclaim
17.02.16
✎
07:38
|
Если будет сегодня возможность расписать подробнее, то буду очень благодарен. Но и за наводку большое спасибо!
|
|||
6
sonne666
17.02.16
✎
11:59
|
(3) В ПВД к цикле заполняешь структуру ВходящиеДанные и выгружаешь по правилу:
ВыгрузитьПоПравилу(,, ВходящиеДанные,, <ИмяПКО>); Поля этой структуры должны совпадать со свойствами приемника из ПКО этого объекта (у них должен стоять флаг "Получить из входящих данных"). Непонятно, в каких случаях эти доки будешь переносить по ссылке. Если из одного документа создаешь 8, то какой укажешь вместо ссылки? |
|||
7
Reclaim
19.02.16
✎
07:55
|
(6) А вот это очень хороший вопрос... Пока точно не решил как это лучше сделать
|
|||
8
Reclaim
19.02.16
✎
08:11
|
(6) Пишу вот такой код в ПВД, чтобы получить реквизит и ТЧ из входящих данных (Ставлю галки "Получить из входящих данных" у ПГКС и у реквизитов этой ТЧ):
ВходящиеДанные = Новый Структура("Номенклатура, ФорматТТ"); ВходящиеДанные.Номенклатура = Новый ТаблицаЗначений; ВходящиеДанные.Номенклатура.Колонки.Добавить("Номенклатура"); ВходящиеДанные.Номенклатура.Колонки.Добавить("Процент"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПланированиеАктивностей.Ссылка, | ПланированиеАктивностей.Грузополучатели.ФорматТТ КАК ФорматТТ, | ПланированиеАктивностей.Акции.Номенклатура КАК Номенклатура, | ПланированиеАктивностей.Акции.Скидка КАК Процент |ИЗ | Документ.АП_ПланированиеАктивностей КАК ПланированиеАктивностей"; ВыборкаДанных = Запрос.Выполнить().Выбрать(); Пока ВыборкаДанных.СледующийПоЗначениюПоля("ФорматТТ") Цикл ВходящиеДанные.ФорматТТ = ВыборкаДанных.ФорматТТ; Пока ВыборкаДанных.Следующий() Цикл СтрокаТЗ = ВходящиеДанные.Номенклатура.Добавить(); СтрокаТЗ.Номенклатура = ВыборкаДанных.Номенклатура; СтрокаТЗ.Процент = ВыборкаДанных.Процент; КонецЦикла; ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ПланированиеАктивностей"); КонецЦикла; 1С ругается на реквизит: Ошибка получения свойства подчиненного объекта из входящих данных ПКО = ПланированиеАктивностей (Документ: (АП) Планирование активностей) ПКС = 6 ( --> Процент) Объект = (Не определено) СвойствоПриемника = Процент (Число) ОписаниеОшибки = Поле объекта не обнаружено (Процент) ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(8323) КодСообщения = 67 Не пойму почему не находится поле у объекта... И ПВД я выгружаю "стандартной выборкой" или "произвольным алгоритмом"? |
|||
9
Reclaim
19.02.16
✎
09:30
|
(6) ПВД немного подправил, получилось вот так:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ПланированиеАктивностей.Ссылка, | ПланированиеАктивностей.Грузополучатели.ФорматТТ КАК ФорматТТ, | ПланированиеАктивностей.Акции.Номенклатура КАК Номенклатура, | ПланированиеАктивностей.Акции.Скидка КАК Процент |ИЗ | Документ.АП_ПланированиеАктивностей КАК ПланированиеАктивностей |ГДЕ | ПланированиеАктивностей.Грузополучатели.ФорматТТ <> Значение(Справочник.АП_ФорматыТорговыхТочек.ПустаяСсылка) | И ПланированиеАктивностей.Акции.Номенклатура <> Значение(Справочник.АП_ФорматыТорговыхТочек.ПустаяСсылка) | И ПланированиеАктивностей.Акции.Скидка ЕСТЬ NULL"; ВыборкаДанных = Запрос.Выполнить().Выбрать(); Пока ВыборкаДанных.СледующийПоЗначениюПоля("ФорматТТ") Цикл ВходящиеДанные = Новый Структура("Номенклатура, ФорматТТ"); ВходящиеДанные.Номенклатура = Новый ТаблицаЗначений; ВходящиеДанные.Номенклатура.Колонки.Добавить("Номенклатура"); ВходящиеДанные.Номенклатура.Колонки.Добавить("Процент"); ВходящиеДанные.ФорматТТ = ВыборкаДанных.ФорматТТ; Пока ВыборкаДанных.Следующий() Цикл СтрокаТЗ = ВходящиеДанные.Номенклатура.Добавить(); СтрокаТЗ.Номенклатура = ВыборкаДанных.Номенклатура; СтрокаТЗ.Процент = ВыборкаДанных.Процент; КонецЦикла; ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ПланированиеАктивностей"); КонецЦикла; Но теперь лезет вот такая ошибка: Ошибка получения коллекции подчиненных объектов из входящих данных ПКО = ПланированиеАктивностей (Документ: (АП) Планирование активностей) ПКГС = 4 ( --> Номенклатура) Объект = (АП) Планирование активностей 000000001 от 28.01.2016 11:13:23 ((АП) Планирование активностей) ОписаниеОшибки = Получение элемента по индексу для значения не определено ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7968) КодСообщения = 66 Ошибка при выгрузке данных: {ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7991)}: Ошибка получения коллекции подчиненных объектов из входящих данных ПКО = ПланированиеАктивностей (Документ: (АП) Планирование активностей) ПКГС = 4 ( --> Номенклатура) Объект = (АП) Планирование активностей 000000001 от 28.01.2016 11:13:23 ((АП) Планирование активностей) ОписаниеОшибки = Получение элемента по индексу для значения не определено ПозицияМодуля = ВнешняяОбработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(7968) КодСообщения = 66 Подскажите, что это может быть? |
|||
10
sonne666
20.02.16
✎
12:33
|
(9) у вас табличная часть "Номенклатура" и ее реквизит "Номенклатура"?
Выложи картинку с ПКС этого документа. |
|||
11
sonne666
20.02.16
✎
13:26
|
(9) У ПКГС Номенклатура должна стоять галочка "Получить из входящих данных", у реквизитов ТЧ такой галочки быть не должно.
Может, в каких-то документах получается пустая таблица значений Номенклатура для выгрузки? Вот КД и не может получить коллекцию объектов, т.к. ее нет. |
|||
12
Reclaim
24.02.16
✎
13:51
|
Вопрос решил. Создаем ПКО: не указываем источник, указываем необходимый приемник. Создаем необходимые ПКС, на каждом ставим "Получить из входящих данных". При переносе ТЧ ставим "Получить из входящих данных" только у самой ТЧ, реквизиты не трогаем. Создаем ПВД, указываем "Произвольный алгоритм" выборки. В обработчике "Перед обработкой" пишем код:
V8 = Новый COMОбъект("V83.ComConnector"); В8 = V8.Connect("Srvr="+символ(34)+"тут указываем сервер"+символ(34)+";Ref="+символ(34)+"наименование сервера"+символ(34)+";Usr="+символ(34)+"пользователь"+символ(34)+";Pwd=пароль пользователя;"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Грузополучатели.Ссылка, | Грузополучатели.Ссылка.НачалоПериода КАК ДатаНачалаАкции, | Грузополучатели.Ссылка.КонецПериода КАК ДатаЗавершенияАкции, | Грузополучатели.Ссылка.Комментарий КАК Комментарий, | Грузополучатели.ФорматТТ КАК ФорматТТ, | Грузополучатели.Грузополучатель КАК Партнер |ИЗ | Документ.АП_ПланированиеАктивностей.Грузополучатели КАК Грузополучатели |УПОРЯДОЧИТЬ ПО | Грузополучатели.Ссылка"; ВыборкаТЧГрузополучатели = Запрос.Выполнить().Выбрать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Акции.Ссылка, | Акции.Ссылка.НачалоПериода КАК ДатаНачалаАкции, | Акции.Ссылка.КонецПериода КАК ДатаЗавершенияАкции, | Акции.Ссылка.Комментарий КАК Комментарий, | Акции.Номенклатура КАК Номенклатура, | Акции.Скидка КАК Процент, | Акции.МеханикаАктивности КАК МеханикаАкции |ИЗ | Документ.АП_ПланированиеАктивностей.Акции КАК Акции"; ВыборкаТЧАкции = Запрос.Выполнить().Выбрать(); Пока ВыборкаТЧГрузополучатели.СледующийПоЗначениюПоля("Ссылка") Цикл УИУПП = Строка(ВыборкаТЧГрузополучатели.Ссылка.УникальныйИдентификатор()); Запрос = В8.NewObject("Запрос"); Запрос.УстановитьПараметр("УИУПП", УИУПП); Запрос.Текст = "ВЫБРАТЬ | СоблюдениеАкций.Ссылка, | СоблюдениеАкций.УИУПП |ИЗ | Документ.СоблюдениеАкций КАК СоблюдениеАкций |ГДЕ | СоблюдениеАкций.УИУПП = &УИУПП"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Документ = Выборка.Ссылка.ПолучитьОбъект(); Документ.УстановитьПометкуУдаления(Истина); Документ.Записать(); КонецЦикла; Пока ВыборкаТЧГрузополучатели.Следующий() Цикл ВыборкаТЧАкции.Сбросить(); Пока ВыборкаТЧАкции.СледующийПоЗначениюПоля("МеханикаАкции") Цикл ВходящиеДанные = Новый Структура("Номенклатура, ДатаНачалаАкции, ДатаЗавершенияАкции, Комментарий, МеханикаАкции, ФорматТТ, Партнер, УИУПП"); ВходящиеДанные.Номенклатура = Новый ТаблицаЗначений; ВходящиеДанные.Номенклатура.Колонки.Добавить("Номенклатура"); ВходящиеДанные.Номенклатура.Колонки.Добавить("Процент"); ВходящиеДанные.МеханикаАкции = ВыборкаТЧАкции.МеханикаАкции; ВходящиеДанные.ФорматТТ = ВыборкаТЧГрузополучатели.ФорматТТ; ВходящиеДанные.ДатаНачалаАкции = ВыборкаТЧГрузополучатели.ДатаНачалаАкции; ВходящиеДанные.ДатаЗавершенияАкции = ВыборкаТЧГрузополучатели.ДатаЗавершенияАкции; ВходящиеДанные.Комментарий = ВыборкаТЧГрузополучатели.Комментарий; ВходящиеДанные.Партнер = ВыборкаТЧГрузополучатели.Партнер; ВходящиеДанные.УИУПП = УИУПП; Пока ВыборкаТЧАкции.Следующий() Цикл СтрокаТЗ = ВходящиеДанные.Номенклатура.Добавить(); СтрокаТЗ.Номенклатура = ВыборкаТЧАкции.Номенклатура; СтрокаТЗ.Процент = ВыборкаТЧАкции.Процент; КонецЦикла; ВыгрузитьПоПравилу(,, ВходящиеДанные,, "ПланированиеАктивностей"); КонецЦикла; КонецЦикла; КонецЦикла; |
|||
13
Reclaim
24.02.16
✎
13:51
|
Может кому-то пригодится
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |