Форум Кладовочки АЛьФ`а

Общие вопросы => 7.7 => Тема начата: Харлампий Дымба от 11 мая 2025, 18:03

Название: Маленькие вопросы
Отправлено: Харлампий Дымба от 11 мая 2025, 18:03
Зачастую бывают ситуации, когда вопрос копеечный и вроде не солидно целую тему создавать, но спросить хочется. Вдруг кто знает.

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

2й вопрос: как узнать по записи журнала расчета, что на основании неё введены записи-перерасчеты? По аналогии: атрибут для получения ДокументОснование в компоненте "Расчет" есть - ::ПервичнаяЗапись, а вот как бы получить ::ВыбратьПодчинененныеДокументы()?
Название: Re: Маленькие вопросы
Отправлено: Злоп от 11 мая 2025, 23:30
"Ну, барин, вы задачи ставите..."
Название: Re: Маленькие вопросы
Отправлено: Харлампий Дымба от 12 мая 2025, 00:36
Цитата: Злоп от 11 мая 2025, 23:30"Ну, барин, вы задачи ставите..."
Aliena nobis, nostra aliis
Название: Re: Маленькие вопросы
Отправлено: Пиит от 12 мая 2025, 11:16
По таблице, там вроде не Рисунок, а Надпись, и какой смысл добираться к ней в открытой таблице, если при нажатии Обновить вся таблица заново формируетя?
Вот, при формировании в режиме обновления можно и поменять текст надписи.
Задать надписи Имя, напр. НадписьОбновить,
СекцияШапка = Таб.ПолучитьСекцию("Шапка");
СекцияШапка.НадписьОбновить.Текст = "Вернуть как было";
Таб.ВывестиСекцию(СекцияЩапка).
Может я чего и не допонял.
Название: Re: Маленькие вопросы
Отправлено: Харлампий Дымба от 12 мая 2025, 17:33
#3 Да, то что надо - толкнул меня в правильном направлении, спасибо! Вот уж точно tamdiu discendum est, quamdiu vivis, а всё равно дураком помрёшь. Про то, что графическим объектам (они же "Рисунки": линий, прямоугольники, надписи, картинки, оле-объекты и диаграммы) можно дать имена я и не сообразил.
Задача от заказчика была: "скрыть / показать обратно" в уже сформированной форме отчета итоги по группам. Все элементарно, но для красоты хотелось инвертировать имя кнопки после нажатия. Таблица отчета при этом заново не формируется - работаю по уже сформированной таблице.
Не описал задачу сразу, потому что хотелось именно знать можно ли программно достучаться до графического объекта, а не получить советы как сделать всё по-другому)

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

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

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


Название: Re: Маленькие вопросы
Отправлено: Злоп от 13 мая 2025, 00:11
что-то не то.
скопипастил код.
в макет положил "рамку с текстом", 2 штуки, по адресу 2-2 и 2-3.
код штрымдячит без остановки

вот видео с примером
https://wdfiles.ru/1u6p0
Название: Re: Маленькие вопросы
Отправлено: Харлампий Дымба от 13 мая 2025, 00:33
#7 А вот это интересная штучка. Меня тоже она сразу немного озадачила.
А что у тебя выведет для объектов после четвертого, если строчку сообщения поменять на
Сообщить("" + СчетчикГрафическихОбъектов + ". " + Объект.Контроль());
Название: Re: Маленькие вопросы
Отправлено: Харлампий Дымба от 13 мая 2025, 00:45
Количество графических объектов мы изначально не знаем.
Я сначала думал, что перебор будет спотыкаться на  Т.Область("D"+НесуществующийНомер) и тут-то я окончание перебора через Попытку и поймаю. Но оказалось, что 1С спокойно шарашит дальше выдавая пустые области. Тогда я посмотрел, чем эти пустые области отличаются от существующих - на моей сборке Предприятия такие области на всех запусках давали Объект.Контроль()=-4095, т.е. заведомо невозможное значение. Его-то я использовал как окончание перебора.
Но видимо, это значение не константа, а зависит от чего-то.

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


 
Название: Re: Маленькие вопросы
Отправлено: Злоп от 13 мая 2025, 01:07
Цитата: Харлампий Дымба от 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.
Название: Re: Маленькие вопросы
Отправлено: Злоп от 13 мая 2025, 01:08
счетчик - контроль - текст
Название: Re: Маленькие вопросы
Отправлено: Злоп от 13 мая 2025, 01:13
похоже просто .Контроль() < 0
Название: Re: Маленькие вопросы
Отправлено: Злоп от 13 мая 2025, 01:14
практический смысл #4 - неясен.
если можно было бы получать тип граф.объекта и его свойства - тогда может для чего-то и пригодилось бы..
Название: Re: Маленькие вопросы
Отправлено: Харлампий Дымба от 13 мая 2025, 01:53
Тип объекта для всех графических объектов - ОбластьТаблицы. Соответственно все функции области таблицы (.Полужирный, .Рамка, .Ориентация()) работают для всех видов объектов.
А вот ссылку на объект (.ТекущийОбъект()?), чтобы работать уже как с объектом Картинка или Диаграмма - да, не получишь.

Практический смысл для меня - найти нужную кнопку на выведенной таблице и исправить её название (.Текст) не формируя таблицу заново.
При этом кнопке можно присвоить Имя (не .Текст!, а через Таблица - Имена), как и обычной области таблицы. Но мне удобнее просто перебором из #4 найти нужную кнопку на таблице. По возможности сделаю демку попозже.
Название: Re: Маленькие вопросы
Отправлено: Харлампий Дымба от 16 мая 2025, 10:36
Сделал себе "кнопку" в таблице сформированного отчета - тыкаешь "Очистить подытоги" и итоги по группам товаров пустеют, а кнопка меняет название на "Восстановить подытоги". Тыкаешь её ещё раз - подытоги возвращаются, а название кнопки меняется обратно. Думал сделать примерчик на типовой ТиС, открыл ОтчетПоПродажамТМЦ, выпал в осадок от
|СвойствоПокупателя = Регистр.ПартииНаличие.ТекущийДокумент.Реализация.Контрагент.ОсновноеСвойство.ЗначениеСвойства...,и закрыл)

Цитата: Злоп от 13 мая 2025, 01:14практический смысл #4 - неясен.
Графический объект - идеальный сейф в ванильной 1С.
Например, объект "Линия" "Текст" можно сделать практически точкой (с мелким шрифтом и с невидимым обрамлением).
Точку можно добавить в любую из множества таблиц конфигурации / внешних отчетов.
Эту точку можно разместить где угодно в таблице - даже вне секций на строке 65535 на пересечении границ ячеек.
В эту точку можно положить любой нужный текст и этот текст нельзя обнаружить через "Конфигурация - Поиск во всех текстах".
Если не присвоить этой точке имя, то даже зная таблицу, её нельзя будет обнаружить через позиционирование с помощью Таблица - Имена - Выбрать.
При этом программно всегда можно получить содержимое этой безымянной точки как раз кодом из #4.
Идентифицировать точки можно, например, по .Расшифровка.
Что можно записать в содержимое и как его использовать - это я расписывать не буду, сейф же - значит что-то тайное.

А так, конечно, никакого практического смысла нет. Я, лично, прекрасно обходилось без этих знаний 30 лет :D