Имя: Пароль:
1C
1С v8
Программное создание элементов форм
0 slafor
 
27.03.22
10:02
Это даже не вопрос, а просто мысли вслух по теме сообщения.

Делал обновление сильно доработанной конфигурации 1С:Розница 2.3. Магазин автозапчастей от Раруса. И столкнулся с тем, что они стали использовать программное формирование элементов форм для новых реквизитов, которых нет в типовой Рознице. Что-ж, это, конечно, само по себе хорошо, и соответствует стандартам разработки 1С. Если бы не одно Но.
Вот, скажем, на форме уже есть элемент с таким же наименованием, а его хотят создать еше раз, но уже программно. И там есть такая интересная "защита" от подобных случаев, но "защита" весьма своеобразная - если возникает подобная ситуация, то пользователь получает сообщение об ошибке внизу экрана (без объяснения причин), а программа продолжает "работать", как ни в чем не бывало. Только остальные элементы формы, которые должны были создастся после этого "ошибочного" элемента, тоже уже создаются. Только об этом тоже ничего не говорится. И, как у меня получилось, из-за того, что я пока не знал о программном создании новых элементов, и сам создал такой же на форме элемента справочника Номенклатуры (ну, мало ли, может это не от Раруса, а от предыдущего программиста элемент), а потом получил сообщение о том, что на форме отсутствуют страницы Шины и Диски, я начал "плясать" именно от этого - и естественно, подумал, что ошибка из-за того, что у меня почему-то не перенеслись новые страницы. Хорошо, что я не стал создавать их вручную, а попытался разобраться более детально. Оказалось, что страницы и другие элементы формы должны были создаться после той, из-за которой и возникла проблема. То есть один элемент помешал созданию всех последующих. И при этом никаких сообщений об этом.
Я просто к тому, что могли бы хоть показать сообщение для пользователя, а дальше создавать остальные элементы. Или вывести критическую ошибку, и не дать работать с формой до решения проблемы. Или, что и лучше и логичнее всего - при попытке создания элемента, если на форме уже есть элемент с таким же наименованием, определить его тип и привязку к данным, и если они соответсвуют нужным, просто пропустить создание этого элемента и заняться следующими...

А у вас бывали подобные ситуации?
1 slafor
 
27.03.22
10:04
(0) Извините, поспешил и ошибся. Фразу "Только остальные элементы формы, которые должны были создастся после этого "ошибочного" элемента, тоже уже создаются." конечно же, надо читать так: "Только остальные элементы формы, которые должны были создастся после этого "ошибочного" элемента, тоже уже НЕ создаются."
2 acht
 
27.03.22
10:15
(0) Гм. То есть, у тебя претензия к тому, что разработчики Раруса не предполагали, что ты начнешь дорабатывать их фунционал, сделашь что-то несовместимое с их проектным решением, и не показали тебе сообщение о твоей же ошибке?
3 slafor
 
27.03.22
10:35
(2) Мысль, конечно, интересная, но я о другом )
Просто когда я делал обновление, я не знал, должны ли их новые элементы создаваться на форме программно, или же они просто руками туда заносятся. Увидел, что он есть в старом релизе, ну и перенес его в новый "ручками" - может, это и не от Раруса вовсе, может, это уже после них сделали.
Кстати, "сделашь что-то несовместимое с их проектным решением" - это не ко мне, я всего лишь переношу в новый релиз то, что сделали до меня другие.
4 slafor
 
27.03.22
10:36
(2) Основная мысль такая, что уж если увидели, что элемент не создается на форме, не надо останавливаться, прекращать создание других элементов, и делать вид, что "все в порядке" )
5 acht
 
27.03.22
10:46
(4) Зачем? Чтобы получить заранее неработоспособный результат?
6 acht
 
27.03.22
10:48
Пользователь уже получил "сообщение об ошибке внизу экрана", продолжение построение формы приведет к непредсказуемым последствиям.
7 slafor
 
27.03.22
11:16
(6) Все правильно. Сообщение он получил. Но форма-то на все равно уже на экране и с ней можно "работать". Сообщение не запрещает ему это делать.

Основная мысль моего сообщения - в его последней фразе: "Или, что и лучше и логичнее всего - при попытке создания элемента, если на форме уже есть элемент с таким же наименованием, определить его тип и привязку к данным, и если они соответствуют нужным, просто пропустить создание этого элемента и заняться следующими".
8 ДедМорроз
 
27.03.22
11:23
Можно в имя добавляемых элементов включить уникальный идентификатор,вырезав черточки,тогда пересечение очень маловероятно.
Конечно,можно создание обернуть в попытку,но наличие уже созданногл элемента означает,что вся логика работы формы коту под хвост.
Предположим,что имя элемента совпадает с существующим,который потом добавили в код,а вот тип и тип значения могут несовпадать.
Правда,в управляемых формах,мы только события из элемента получаем - значение-то живет в реквизите,и вот здесь уже хождение по граблям,так как присвоение реквизиту другого типа,обычно,дает результатом или неопределено или пустое значение.
9 acht
 
27.03.22
11:28
(7) Ну, никто не запрещает делать это персонально тебе.
Точно также никто не запрещает тебе игнорировать сценарии, которые в твоем проектном решении никогда не могут возникнуть.

Все ж с чего началось - с того, что ты полез в уже существующее решение и причиной возникновения ошибки явилось именно твое вмешательство. Общего подхода здесь нет и быть не может - ну обнаружил ты, что хочешь вставить флажок, а с таким именем уже существует группа-страница. И как ты это обрабатывать собрался? Или вообще пользователь вытащил колонку в табличную часть и появился элемент с новым именем... Или это автосгенерированный элемент отбора...