При формировании табличного документа из макета определить адрес ячейки элемента УФ
Есть отчет, с реквизитом "РезультатОтчета" с типом: ТабличныйДокумент.
Данный реквизит помещен как элемент на УФ...
Из некоего макете формируется ТабличныйДокумент...
Задача: В момент формирования вывести сообщение пользователю с привязкой к конкретной ячейке ТД реквизита "РезультатОтчета" на форме отчета.
Для этого нужно:
ВОПРОС: Можно ли зная имя ПАРАМЕТРА в данной ячейке или ещё что-то определить будущий КакойтоАдресЯчейки в готовом табличном документе выведенном на форму?
без счетчиков (строк / колонок) при формировании.
Данный реквизит помещен как элемент на УФ...
Из некоего макете формируется ТабличныйДокумент...
Задача: В момент формирования вывести сообщение пользователю с привязкой к конкретной ячейке ТД реквизита "РезультатОтчета" на форме отчета.
Для этого нужно:
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "ЭТО НАША ЯЧЕЙКА";
Сообщение.Поле = "Отчет.РезультатОтчета["+КакойтоАдресЯчейки+"]";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
ВОПРОС: Можно ли зная имя ПАРАМЕТРА в данной ячейке или ещё что-то определить будущий КакойтоАдресЯчейки в готовом табличном документе выведенном на форму?
без счетчиков (строк / колонок) при формировании.
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)Вы должны знать адрес ячейки внутри именованной области макета. в нее вставляйте что хотите и потом это транслируется в ТабДок, вроде бы при ТабДок.вывести(ОбластьМакета)
Если не транслируется, то только счетчики и ТЗ для хранения адресов ячеек ТабДока, которые уже выведены.
Если не транслируется, то только счетчики и ТЗ для хранения адресов ячеек ТабДока, которые уже выведены.
(1) 1) макет может быть выведен в отчет несколько раз. Каждый раз когда вы выводите макет/область макета в табличный документ вы в качестве результата получаете область результирующего табличного документа. и зная его координаты (в частности верхний левый угол) и от этих координат отсчитываете координаты ячейки макета которая вас интересует
2) Если вы не хотите вручную указывать координаты ячейки макета содержащие ваш параметр, то сделайте функцию которая перебирает ячейки макета и смотри имена параметров ячейки, если там есть параметр с таким именем, то возвращает его координаты в макете, и вы их используете для расчета координат ячейки в табличном документе. Для ускорения можно вести список: Имя параметра - координаты, и сначала искать в списке, а потом в макете.
2) Если вы не хотите вручную указывать координаты ячейки макета содержащие ваш параметр, то сделайте функцию которая перебирает ячейки макета и смотри имена параметров ячейки, если там есть параметр с таким именем, то возвращает его координаты в макете, и вы их используете для расчета координат ячейки в табличном документе. Для ускорения можно вести список: Имя параметра - координаты, и сначала искать в списке, а потом в макете.
(10) Для частного случая, когда Параметр зашит в ячейку, а не в объединение ячеек, на этапе формирования табличного документа адрес ячейки вычислить можно.
Примерная функция получения относительного адреса ячейки в области макета:
Если область будет выводится методом Вывести(), то искомая строка будет
Если через Присоединить(), то нужно знать ширину присоединенных слева областей.
Примерная функция получения относительного адреса ячейки в области макета:
Функция ПолучитьАдресВОбласти(ПолученнаяОбласть, ИмяПараметра)
Ширина = Область.Ширина;
Высота = Область.Высота;
Адреса = Новый Массив;
Для ъ = 1 По Ширина Цикл
Для ь = 1 По Высота Цикл
Область = ПолученнаяОбласть.Область("R" + ь + "C" + ъ +":" + "R" + ь + "C" + ъ);
Если Область.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Параметр И
Область.Параметр = ИмяПараметра Тогда
Ячейка = Новый Структура("Строка, Колонка", ь, ъ);
Адреса.Добавить(Ячейка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
Возврат Адреса;
КонецФункции
ПоказатьЕсли область будет выводится методом Вывести(), то искомая строка будет
Адрес[0].Строка = Адрес[0].Строка + ТабличныйДокумент.Высота;
Если через Присоединить(), то нужно знать ширину присоединенных слева областей.
Я от этого отказался т.к. у меня выводятся области макета разного размера (ширина/высота) и где у них там параметры и сколько их довольно непредсказуемо...
Скорее всего придется копировать имя параметра в имя ячейки... Но очень не хочется по многим причинам...
Скорее всего придется копировать имя параметра в имя ячейки... Но очень не хочется по многим причинам...
Если поможет, у меня нашлось вот это:
Функция НайтиОбластиТабличногоДокументаПоВхождениюПодстроки(ТабличныйДокумент, ПодстрокаПоиска) Экспорт
НайденныеОбласти = Новый ТаблицаЗначений;
НайденныеОбласти.Колонки.Добавить("Область");
НайденныеОбласти.Колонки.Добавить("Текст");
НайденныеОбласти.Колонки.Добавить("Верх");
НайденныеОбласти.Колонки.Добавить("Лево");
НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска);
Пока НЕ НайденнаяОбласть = Неопределено Цикл
НоваяСтрока = НайденныеОбласти.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, НайденнаяОбласть);
НоваяСтрока.Область = НайденнаяОбласть;
НайденнаяОбласть = ТабличныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть);
КонецЦикла;
Возврат НайденныеОбласти;
КонецФункции
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот