При формировании табличного документа из макета определить адрес ячейки элемента УФ

1. AnryMc 849 23.09.21 10:34 Сейчас в теме
Есть отчет, с реквизитом "РезультатОтчета" с типом: ТабличныйДокумент.

Данный реквизит помещен как элемент на УФ...

Из некоего макете формируется ТабличныйДокумент...

Задача: В момент формирования вывести сообщение пользователю с привязкой к конкретной ячейке ТД реквизита "РезультатОтчета" на форме отчета.
Для этого нужно:
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "ЭТО НАША ЯЧЕЙКА";
			Сообщение.Поле = "Отчет.РезультатОтчета["+КакойтоАдресЯчейки+"]";
			Сообщение.УстановитьДанные(ЭтотОбъект);
			Сообщение.Сообщить();

ВОПРОС: Можно ли зная имя ПАРАМЕТРА в данной ячейке или ещё что-то определить будущий КакойтоАдресЯчейки в готовом табличном документе выведенном на форму?
без счетчиков (строк / колонок) при формировании.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
11. nomad_irk 72 23.09.21 16:09 Сейчас в теме
(1)Вы должны знать адрес ячейки внутри именованной области макета. в нее вставляйте что хотите и потом это транслируется в ТабДок, вроде бы при ТабДок.вывести(ОбластьМакета)

Если не транслируется, то только счетчики и ТЗ для хранения адресов ячеек ТабДока, которые уже выведены.
16. user790708 24.09.21 11:11 Сейчас в теме
(1) 1) макет может быть выведен в отчет несколько раз. Каждый раз когда вы выводите макет/область макета в табличный документ вы в качестве результата получаете область результирующего табличного документа. и зная его координаты (в частности верхний левый угол) и от этих координат отсчитываете координаты ячейки макета которая вас интересует
2) Если вы не хотите вручную указывать координаты ячейки макета содержащие ваш параметр, то сделайте функцию которая перебирает ячейки макета и смотри имена параметров ячейки, если там есть параметр с таким именем, то возвращает его координаты в макете, и вы их используете для расчета координат ячейки в табличном документе. Для ускорения можно вести список: Имя параметра - координаты, и сначала искать в списке, а потом в макете.
2. AnryMc 849 23.09.21 10:42 Сейчас в теме
ПОДВОПРОС: Например: Зная имя параметра в макете, позиционироваться на данную ячейку и дать ей имя?
6. AnryMc 849 23.09.21 14:21 Сейчас в теме
(4)
ко раз, то КакихТоАдресовЯчейки будет тоже несколько.


Да.
7. AnryMc 849 23.09.21 14:23 Сейчас в теме
(2) Перефразирую вопрос:

Зная параметр в макете, можно ли спозиционироваться на ячейке где он "обитает" и назначить ей имя?
8. Sashares 34 23.09.21 14:41 Сейчас в теме
(1) Разве можно спозиционировать сообщение на ячейку табличного документа?
У вас это работает в принципе, хоть для какой то ячейки?
9. Sashares 34 23.09.21 14:43 Сейчас в теме
(7)Ищите ячейку по тексту, например, назначайте ей имя, если хотите.
Но вывести сообщение к определенной ячейке вы все равно не сможете.
Максимум - добавить примечание, или цвет фона, или еще что сделать с оформлением. Но никак не сообщение.
3. STELEICE 23.09.21 11:14 Сейчас в теме
5. AnryMc 849 23.09.21 14:21 Сейчас в теме
(3) Нет.
Задача при расчете Параметра макета вывести предупреждение привязанное к ячейке где он выведен...
4. alex_bob 246 23.09.21 12:22 Сейчас в теме
Если область с параметром выводится в ТабличныйДокумент несколько раз, то КакихТоАдресовЯчейки будет тоже несколько.
10. AnryMc 849 23.09.21 15:31 Сейчас в теме
(4) Мой Ответ (6) почему то "прицепило" ко (2)му
12. KVIKS 399 23.09.21 16:38 Сейчас в теме
Можно с помощью функции НайтиТекст(), но так будет искать текст ячейки, а не параметр.
Еще вариант, заполнить что то в параметр расшифровки и только перебором уже вылавливать нужные ячейки.
13. alex_bob 246 23.09.21 17:02 Сейчас в теме
(10) Для частного случая, когда Параметр зашит в ячейку, а не в объединение ячеек, на этапе формирования табличного документа адрес ячейки вычислить можно.
Примерная функция получения относительного адреса ячейки в области макета:
Функция ПолучитьАдресВОбласти(ПолученнаяОбласть, ИмяПараметра)
	
	Ширина = Область.Ширина;
	Высота = Область.Высота;
	
	Адреса = Новый Массив;
	
	Для ъ = 1 По Ширина Цикл
		Для ь = 1 По Высота Цикл
			Область = ПолученнаяОбласть.Область("R" + ь + "C" + ъ +":" + "R" + ь + "C" + ъ);
			Если Область.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Параметр И
				Область.Параметр = ИмяПараметра Тогда
				Ячейка = Новый Структура("Строка, Колонка", ь, ъ);
				Адреса.Добавить(Ячейка);
			КонецЕсли;	
		КонецЦикла;
	КонецЦикла;	
	Возврат Адреса;
КонецФункции	

Показать


Если область будет выводится методом Вывести(), то искомая строка будет

Адрес[0].Строка = Адрес[0].Строка + ТабличныйДокумент.Высота;


Если через Присоединить(), то нужно знать ширину присоединенных слева областей.
14. AnryMc 849 23.09.21 17:17 Сейчас в теме
Я от этого отказался т.к. у меня выводятся области макета разного размера (ширина/высота) и где у них там параметры и сколько их довольно непредсказуемо...

Скорее всего придется копировать имя параметра в имя ячейки... Но очень не хочется по многим причинам...
15. gonnahard 24.09.21 03:37 Сейчас в теме
Если поможет, у меня нашлось вот это:

Функция НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска) Экспорт
	
	НайденныеОбласти = Новый ТаблицаЗначений;
	НайденныеОбласти.Колонки.Добавить("Область");
	НайденныеОбласти.Колонки.Добавить("Текст");
	НайденныеОбласти.Колонки.Добавить("Верх");
	НайденныеОбласти.Колонки.Добавить("Лево");
	
	НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска);
	
	Пока НЕ НайденнаяОбласть = Неопределено Цикл
		
		НоваяСтрока = НайденныеОбласти.Добавить();
		ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяОбласть);
		НоваяСтрока.Область = НайденнаяОбласть;
		
		НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть);
		
	КонецЦикла;
	
	Возврат НайденныеОбласти;
	
КонецФункции
Показать
17. AnryMc 849 15.12.21 15:11 Сейчас в теме +1 $m
Тема умерла - вознаграждение забрал. :-(
Оставьте свое сообщение

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