Конвертация данных 2 Сопоставление табличной части и перезапись некоторых строк

1. nikivr 10.09.19 12:20 Сейчас в теме
Всем привет!

Уважаемые знатоки КД 2, подскажите пожалуйста:

Каким образом можно настроить правила таким образом, чтобы строки табличной части приемника сопоставлялись с тч источника по ключу (например Таб. номер сотрудника + Должность). Добавляем новую строку, если ключ не находим, а если находим, то перезаписываем значения ячеек, но тоже по какому-то условию (например: одна из ячеек заполнена, тогда и вторую не заполняем, а третью заполняем или первая не заполнена, то заполняем первую вторую и третью).

Читаю описание обработчиков и не могу понять, где можно получить ТЧ приемника и в зависимости от заполненных данных перезаписывать те или иные строки / ячейки. Возможно есть какой-то более простой способ.

Всем хорошего дня в этот солнечный денек, и всем спасибо за комментарии
Вознаграждение за ответ
Показать полностью
Найденные решения
2. dhurricane 10.09.19 12:34 Сейчас в теме
Попробуйте пойти следующим путем:

1. В обработчике "При загрузке" ПКО сохранить целиком исходную табличную часть, если объект был ранее загружен:
Если ОбъектНайден Тогда
   Объект.ДополнительныеСвойства.Вставить("СтараяТЧ", Объект.ТЧ.Выгрузить());
КонецЕсли;

2. В обработчике "После загрузки" ПКО у Вас уже есть как загруженная табличная часть, так и исходная. Модифицируйте ТЧ объекта как хотите.
Если ОбъектНайден Тогда
   СтараяТЧ = Объект.ДополнительныеСвойства.СтараяТЧ;
   НоваяТЧ = Объект.ТЧ;
   // ... модификация новой ТЧ в зависимости от данных в старой.
КонецЕсли;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 10.09.19 12:34 Сейчас в теме
Попробуйте пойти следующим путем:

1. В обработчике "При загрузке" ПКО сохранить целиком исходную табличную часть, если объект был ранее загружен:
Если ОбъектНайден Тогда
   Объект.ДополнительныеСвойства.Вставить("СтараяТЧ", Объект.ТЧ.Выгрузить());
КонецЕсли;

2. В обработчике "После загрузки" ПКО у Вас уже есть как загруженная табличная часть, так и исходная. Модифицируйте ТЧ объекта как хотите.
Если ОбъектНайден Тогда
   СтараяТЧ = Объект.ДополнительныеСвойства.СтараяТЧ;
   НоваяТЧ = Объект.ТЧ;
   // ... модификация новой ТЧ в зависимости от данных в старой.
КонецЕсли;
3. nikivr 10.09.19 13:32 Сейчас в теме
(2)
Попробуйте пойти следующим путем:


Спасибо. Может я чего-то не понимаю,

Но в таком случае мы лишний раз перезаписываем табличную часть, чего хотелось бы избежать.
4. dhurricane 10.09.19 13:36 Сейчас в теме
(3) Извините, в каком смысле "перезаписываем табличную часть"? И почему хотите этого избежать?
5. nikivr 10.09.19 13:41 Сейчас в теме
(4)Мы по правилам, перезаписали табличную часть документа, а потом в обработчике "После загрузки" еще раз пытаемся что-то перезаписать, или это не так работает?

Избежать потому, что это лишние действия и расходуются лишние ресурсы. Если документом 200 тыс. и в каждом по 100-тне сотрудников, это будет отрабатывать очень медленно, на мой взгляд.
6. dhurricane 10.09.19 13:47 Сейчас в теме
(5) Между этими двумя обработчиками не осуществляется запись объекта, если конечно эту операцию явно не реализовать в одном из них. Пусть Вас не вводит в заблуждение название "После загрузки". Да простят мне специалисты мое упрощение, обработчики срабатывают примерно так:
Объект = Документы.МойДокумент.СоздатьДокумент();

// <-- здесь выполняется обработчик "При загрузке"

ЗаполнитьЗначенияСвойств(Объект, ДанныеИзФайла);

// <-- здесь выполняется обработчик "После загрузки"

Объект.Записать();
Показать
7. dhurricane 10.09.19 13:56 Сейчас в теме
(5) Если же Вы имеете ввиду то, что сначала целиком заполняется таблица из файла обмена, а потом обрабатывается, вместо того, чтобы обрабатываться непосредственно при заполнении, то я бы на Вашем месте не беспокоился об этом. Не думаю, что выигрыш будет большим. Ведь для того, чтобы понять, что за данные пришли, нужно данные из файла обмена конвертировать и где-нибудь сохранить промежуточный результат. Да и наполнение таблицы, полагаю, заметно менее затратная операция, чем конвертация.
8. nikivr 10.09.19 14:11 Сейчас в теме
(7) Хорошо, я понял, спасибо.

Я правильно понимаю, что в моем случае не получится в ПКС указать галочку "Поиск" например по полям "Сотрудник" и "Должность" ?

Т.е. придется каким-то образом уже в обработчике ПКО "После загрузки" самостоятельно каким-то образом искать по ключам строки в так называемой "СтаройТЧ" из "НовойТЧ"
9. dhurricane 10.09.19 14:15 Сейчас в теме
(8)
Т.е. придется каким-то образом уже в обработчике ПКО "После загрузки" самостоятельно каким-то образом искать по ключам строки в так называемой "СтаройТЧ" из "НовойТЧ"

Да, именно это я и подразумевал.

Я, признаться, не знаю, как работает "Поиск" по полям табличной части, не могу прокомментировать. Возможно кто-то из форумчан предложит более элегантное решение Вашей задачи.
10. nikivr 11.09.19 18:04 Сейчас в теме
(9) Спасибо, Ваше решение помогло
11. rur39 21 29.09.20 09:10 Сейчас в теме
Добрый день!

Мне помог вот такой способ:

Установить галку поиска в Реквизите ПКГС.
В этом случае не происходит полного замещения табличной части
Прикрепленные файлы:
12. TVA_11 12.12.24 13:27 Сейчас в теме
(11) Из Контрагентов из разных конфигураций УТ 10.3 и БП3 хочу переписать ТабличнуюЧасть - полностью идентичную.

УТ - Источник
БП - Приемник

Раньше информация шла в основном из УТ в БП.
Теперь надо, чтобы из БП в УТ шла эта ТабличнаяЧасть.

В каталоге выгрузки, информации со строками табличной части не появляется.
Значит, начинать надо править обмен в БП.

пс
Галочку, как выше на рисунке установил, во всех полях, а не как в примере.
В остальном обмен БП --> УТ по Контрагенту отрабатывает, Наименование и прочие поля выгружаются.
***

В чем может быть косяк?
Прикрепленные файлы:
13. TVA_11 12.12.24 13:32 Сейчас в теме
14. TVA_11 12.12.24 15:49 Сейчас в теме
Такой вариант пробую, тоже не работает.
Прикрепленные файлы:
15. TVA_11 13.12.24 16:15 Сейчас в теме
Результат изучения.

Однако все равно не работает, при том, что сам Котрагент успешно выгружается.
В файле xml, АдресЭП - не прописывается.


Куда еще копать, подскажите?
Прикрепленные файлы:
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот