Маленькие вопросы

Автор Харлампий Дымба, 11 мая 2025, 18:03

« назад - далее »

Харлампий Дымба

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

1й вопрос у меня такой: вот в типовых отчетах кнопки Настройка и Обновить в таблице сделаны через "Рисунок", а можно как-то до них достучаться из выведенной таблицы? Ну то есть, к примеру, после нажатия на кнопку "Обновить" изменить её название на "Вернуть как было"?

2й вопрос: как узнать по записи журнала расчета, что на основании неё введены записи-перерасчеты? По аналогии: атрибут для получения ДокументОснование в компоненте "Расчет" есть - ::ПервичнаяЗапись, а вот как бы получить ::ВыбратьПодчинененныеДокументы()?

Злоп

"Ну, барин, вы задачи ставите..."

Харлампий Дымба

Цитата: Злоп от 11 мая 2025, 23:30"Ну, барин, вы задачи ставите..."
Aliena nobis, nostra aliis

Пиит

По таблице, там вроде не Рисунок, а Надпись, и какой смысл добираться к ней в открытой таблице, если при нажатии Обновить вся таблица заново формируетя?
Вот, при формировании в режиме обновления можно и поменять текст надписи.
Задать надписи Имя, напр. НадписьОбновить,
СекцияШапка = Таб.ПолучитьСекцию("Шапка");
СекцияШапка.НадписьОбновить.Текст = "Вернуть как было";
Таб.ВывестиСекцию(СекцияЩапка).
Может я чего и не допонял.

Харлампий Дымба

#3 Да, то что надо - толкнул меня в правильном направлении, спасибо! Вот уж точно tamdiu discendum est, quamdiu vivis, а всё равно дураком помрёшь. Про то, что графическим объектам (они же "Рисунки": линий, прямоугольники, надписи, картинки, оле-объекты и диаграммы) можно дать имена я и не сообразил.
Задача от заказчика была: "скрыть / показать обратно" в уже сформированной форме отчета итоги по группам. Все элементарно, но для красоты хотелось инвертировать имя кнопки после нажатия. Таблица отчета при этом заново не формируется - работаю по уже сформированной таблице.
Не описал задачу сразу, потому что хотелось именно знать можно ли программно достучаться до графического объекта, а не получить советы как сделать всё по-другому)

Код обхода графических объектов в таблице (тип объекта - ОбластьТаблицы), может кому пригодится:
Т = СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("Таблица");
Т.Вывести();        
Т.Показать(,,0);
СчетчикГрафическихОбъектов = 0;
Пока 1 = 1 Цикл
    СчетчикГрафическихОбъектов = СчетчикГрафическихОбъектов + 1;
    Объект = Т.Область("D" + СчетчикГрафическихОбъектов);
    Если Объект.Контроль() = -4095 Тогда Прервать КонецЕсли;//закончились
    Сообщить("" + СчетчикГрафическихОбъектов + ". " + Объект.Текст);
КонецЦикла;    
Т.Показать(,,-1);

Злоп

Т.е. если у меня в макете три надписи (никак не поименованных), то
их (объект-надпись) можно получить как Т.Область("D1"), Т.Область("D2"), Т.Область("D3") ?
При том, что надпись может лежать/занимать несколько ячеек макета..?

я вот из #4 - ничего не понял.

Харлампий Дымба

Цитата: Злоп от 12 мая 2025, 23:14можно получить как Т.Область("D1")
Да, именно так. Ну и в качестве результата тебе возвращается именно тип "ОбластьТаблицы" - и тогда можно поиграться с цветами, рамками, шрифтами, текстом, расшифровкой и т.д. Потом сделать Т.Показать для обновления вида.

В #4 код для  обхода всех областей с графическими объектами, которые есть в сформированной таблице.
Была ещё мысль как-то их различить по виду (Линия/Пряиогульник/Надпись/Картинка/OLE-объект/Диаграмма) по косвенным признакам, но это полностью не заработало, поэтому не стал.



Злоп

что-то не то.
скопипастил код.
в макет положил "рамку с текстом", 2 штуки, по адресу 2-2 и 2-3.
код штрымдячит без остановки

вот видео с примером
https://wdfiles.ru/1u6p0

Харлампий Дымба

#7 А вот это интересная штучка. Меня тоже она сразу немного озадачила.
А что у тебя выведет для объектов после четвертого, если строчку сообщения поменять на
Сообщить("" + СчетчикГрафическихОбъектов + ". " + Объект.Контроль());

Харлампий Дымба

Количество графических объектов мы изначально не знаем.
Я сначала думал, что перебор будет спотыкаться на  Т.Область("D"+НесуществующийНомер) и тут-то я окончание перебора через Попытку и поймаю. Но оказалось, что 1С спокойно шарашит дальше выдавая пустые области. Тогда я посмотрел, чем эти пустые области отличаются от существующих - на моей сборке Предприятия такие области на всех запусках давали Объект.Контроль()=-4095, т.е. заведомо невозможное значение. Его-то я использовал как окончание перебора.
Но видимо, это значение не константа, а зависит от чего-то.

Надо поиграться. Возможно стоит делать выход на (Объект.Контроль()<1)или(Объект.Контроль()>6).
UPDATE: поигрался. Похоже на какое-то константное значение, но для конкретной таблицы. Ну то есть тогда вместо
Если Объект.Контроль() = -4095 Тогда Прервать КонецЕсли;
надо (и дополнительно, на всякий пожарный, подстрахуемся максимальным значением 1000 объектов - вдруг это константа случайно окажется шестеркой или двойкой):
Если (Объект.Контроль() < 1) или (Объект.Контроль() > 6) или (СчетчикГрафическихОбъектов > 1000) Тогда Прервать КонецЕсли;

Похожим способом, применяя разные функции области таблицы, я пытался разделить объекты по видам, но худо-бедно получилось разделить Диаграмму, ОЛЕ-объект и картинку, а остальное - нет.


 

Злоп

Цитата: Харлампий Дымба от 13 мая 2025, 00:33#7 А вот это интересная штучка. Меня тоже она сразу немного озадачила.
А что у тебя выведет для объектов после четвертого, если строчку сообщения поменять на
Сообщить("" + СчетчикГрафическихОбъектов + ". " + Объект.Контроль());

1. 1. a
2. 1. b
3. 1. c
4. 1. d
5. -3819.
6. -3819.
7. -3819.
8. -3819.

Злоп

счетчик - контроль - текст

Злоп

похоже просто .Контроль() < 0

Злоп

практический смысл #4 - неясен.
если можно было бы получать тип граф.объекта и его свойства - тогда может для чего-то и пригодилось бы..

Харлампий Дымба

Тип объекта для всех графических объектов - ОбластьТаблицы. Соответственно все функции области таблицы (.Полужирный, .Рамка, .Ориентация()) работают для всех видов объектов.
А вот ссылку на объект (.ТекущийОбъект()?), чтобы работать уже как с объектом Картинка или Диаграмма - да, не получишь.

Практический смысл для меня - найти нужную кнопку на выведенной таблице и исправить её название (.Текст) не формируя таблицу заново.
При этом кнопке можно присвоить Имя (не .Текст!, а через Таблица - Имена), как и обычной области таблицы. Но мне удобнее просто перебором из #4 найти нужную кнопку на таблице. По возможности сделаю демку попозже.