Владелец табличной части

1. Mahon83 13 11.02.22 06:16 Сейчас в теме
Привет инфостарцы.

В общий модуль передается табличная часть документа
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения);

Можно как то в этом общем модуле определить владельца табличной части?
Будет достаточно определить тип документа.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. EVKash 14 11.02.22 21:59 Сейчас в теме
(6) Так не получится. В процедуру передается только коллекция формы. Тип документа там не определить. Нужны другие решения.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Max_Max 11.02.22 06:25 Сейчас в теме
(1)
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения);


Объект?
3. Mahon83 13 11.02.22 06:28 Сейчас в теме
(2) Откуда в общем модуле объект?
4. Mahon83 13 11.02.22 06:31 Сейчас в теме
(3)
Прикрепленные файлы:
17. Kolesonik 13 13.02.22 11:14 Сейчас в теме
5. dehro 5 11.02.22 07:23 Сейчас в теме
Нужно что-то из "шапки" документа?
я делал так:

Процедура ОбработатьТЧ(ТЧ, СтруктураДействий, КэшированныеЗначения, аДополнительныеПараметры = неопределено)


Туда структуру с необходимыми данными.

СтруктураПараметров = Новый Структура(......) - всё что нужно
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения, СтруктураПараметров);
6. Mahon83 13 11.02.22 07:29 Сейчас в теме
(5) Я не хотел редактировать форму документа, т.е. вызов процедуры. Форм несколько, по этому я хотел в общем модуле определить тип документа. Сейчас я понял, что возможно не совсем корректно задал вопрос. Мне нужно определить тип документа.
14. yaroslav.artem 12.02.22 15:05 Сейчас в теме
(5)Потом процедура будет вызываться из других документов, где в типовом коде передаётся 3 параметра, а не 4, и вылезет "Недостаточно фактических параметров"
16. dehro 5 13.02.22 10:42 Сейчас в теме
(14)Параметр необязательный. Ничего не вылезет.
18. yaroslav.artem 13.02.22 14:19 Сейчас в теме
(16) Так не вылезет, ага.. не заметил
7. JohnGalt 57 11.02.22 18:58 Сейчас в теме
Чтобы сходу, можно проверить по списку табчастей документов, к какому документу принадлежит:
Метаданные.НайтиПотипу(типзнч(Объект.Товары)) = Метаданные.Документы.ПоступлениеТоваровУслуг.ТабличныеЧасти.Товары
9. user823999 21 12.02.22 12:26 Сейчас в теме
(7) Это не даст однозначного понимания - ведь табличная часть "Товары" у большого количества документов.
А если при вызове в КэшированныеЗначения передавать то, что нужно, из шапки документа?
10. JohnGalt 57 12.02.22 12:55 Сейчас в теме
(9) Делаем массив из метаданных табчастей документов (Метаданные.Документы.ПоступлениеТоваровУслуг.ТабличныеЧасти.Товары, Метаданные.Документы.РеализацияТоваровУслуг.ТабличныеЧасти.Товары итд), перебираем, сравниваем, узнаем однозначно к какому документу принадлежит указанная табчасть. В чем неоднозначность?
15. user823999 21 12.02.22 19:54 Сейчас в теме
(10)
Делаем массив из метаданных табчастей документов

Потому что Метаданные.НайтиПотипу(типзнч(Объект.Товары)) - будет возвращать Неопределено. Тип значения Объект.Товары - это ДанныеФормыКоллекция.
Mahon83; EVKash; +2 Ответить
11. JohnGalt 57 12.02.22 13:03 Сейчас в теме
(9) Кстати еще вариант без перебора:
Метаданные.НайтиПотипу(типзнч(Объект.Товары)).Родитель()
8. EVKash 14 11.02.22 21:59 Сейчас в теме
(6) Так не получится. В процедуру передается только коллекция формы. Тип документа там не определить. Нужны другие решения.
24. Mahon83 13 14.02.22 11:53 Сейчас в теме +1 $m
(8) Видимо так и есть. Пришлось вносить правки во все формы. Изначально я планировал уже в
ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(Объект.Товары, СтруктураДействий, КэшированныеЗначения)

переопределить структуру действий, чтобы не править каждую форму.
user823999; +1 Ответить
12. user925427 123 12.02.22 14:09 Сейчас в теме
Любая ТЧ представляет собой отдельную таблицу в базе данных. Эти таблицы соединяются с таблицами документов (шапка) по реквизиту "Ссылка". Тип этого реквизита и нужно анализировать.
20. user823999 21 14.02.22 09:25 Сейчас в теме
(12) В данном случае это не табличная часть, а данные формы коллекция - нет реквизита "Ссылка".
21. user925427 123 14.02.22 11:27 Сейчас в теме
(20) Данные формы коллекция - копия табличной части на клиенте. Куда ссылка делась из копии? Нужно проставить в форме флажок "Использовать всегда" и ссылка появится. Может, и ещё каких-то данных нет в этой коллекции по сравнению с табличной частью? Посмотрите в сторону изменения постановки задачи.
22. user823999 21 14.02.22 11:40 Сейчас в теме
(21)
Подскажите, где на форме "Использовать всегда"? Я в свойствах элемента формы не нашла такого...мере, в УТ 11.4, в документе реализации.
Приложила скрин в файле.
Прикрепленные файлы:
23. laperuz 46 14.02.22 11:43 Сейчас в теме
(22) На вашем же скриншоте)
Прикрепленные файлы:
25. user823999 21 14.02.22 11:55 Сейчас в теме
(23) Точно)) я смотрела на свойства формы)) но у меня все равно нет ссылки, если в отладке проверять.
Прикрепленные файлы:
26. user925427 123 14.02.22 12:59 Сейчас в теме
(25) Смотрите в свойствах реквизита. Перезапустите, что у Вас там, обработку или конфигурацию после установки этого свойства.
user823999; +1 Ответить
27. user823999 21 14.02.22 13:33 Сейчас в теме
(26) Спасибо, полезная информация!
13. yaroslav.artem 12.02.22 15:00 Сейчас в теме
В то место, откуда вызывается процедура общего модуля, в структуру действий добавьте поле "ТипДокумента".
СтруктураДействий.Вставить("ТипДокумента", ВашТипДокументаОткудаОнПередеаётся");

В общем модуле процедуры:
Если СтруктураДействий.Свойство("ТипДокумента")  = Тип("МойТипДокумента") Тогда
//ваша доработка
КонецЕсли;


Еще проще добавить Булево.
В то место, откуда вызывается процедура, в структуру действий добавьте поле "ЭтоНужныйМнеТипДокумента".
СтруктураДействий.Вставить("ЭтоНужныйМнеТипДокумента", Истина");


В общем модуле:
Если СтруктураДействий.Свойство("ЭтоНужныйМнеТипДокумента") = Истина Тогда
//ваша доработка
КонецЕсли;


Для других документов свойство не будет найдено и код не будет срабатывать
19. Mahon83 13 14.02.22 05:13 Сейчас в теме
(13) Не хотелось бы редактировать то место, откуда я вызываю процедуру
Оставьте свое сообщение

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