Проверить наличие колонки реквизита формы (Неуникальное имя реквизита)

1. Altez50 1 14.04.23 20:36 Сейчас в теме
При программном добавлении колонки в ТаблицуЗначений на форме требуется проверка на наличие уже существующих с данным именем,
иначе ловим исключение:
		Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты); 
по причине:
Неуникальное имя реквизита. Имя: "НачальныйЭтап"
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
19. spacecraft 17.04.23 21:35 Сейчас в теме
(1) если известна хоть одна из колонок, то можно выгрузкой в ТЗ.
ТЗ = РеквизитТЗ.Выгрузить(Новый Структура("ИмяКолонки", Ложь),);

Главное знать имя одной из колонок и в отбор подставить ее с несуществующим значением, тогда получится незаполненная ТЗ но с колонками. А уже у ТЗ можно найти колонку по имени.

Если не известна ни одна из колонок, то просто выгрузкой, но тут будут выгружены все значения.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
19. spacecraft 17.04.23 21:35 Сейчас в теме
(1) если известна хоть одна из колонок, то можно выгрузкой в ТЗ.
ТЗ = РеквизитТЗ.Выгрузить(Новый Структура("ИмяКолонки", Ложь),);

Главное знать имя одной из колонок и в отбор подставить ее с несуществующим значением, тогда получится незаполненная ТЗ но с колонками. А уже у ТЗ можно найти колонку по имени.

Если не известна ни одна из колонок, то просто выгрузкой, но тут будут выгружены все значения.
21. user1826630 17.04.23 22:08 Сейчас в теме
(19) Красавчик ))) Автор как раз и не знает - есть такая колонка или нет. А ты сразу предлагаешь её выгрузить. Аплодисменты!
22. spacecraft 18.04.23 05:28 Сейчас в теме
(21) мозги попробуй включить. Приведен скрин с уже существующей таблицей и несколькими колонками. Нужно к ней добавлять колонки программно. Но часть колонок существует изначально. Значит в отбор по строкам можем указать уже известную колонку. Она нужна только для отсева выгрузки всех строк.
Но не указывая какие колонки выгружать, будут выгружены все.
2. пользователь 14.04.23 20:50
Сообщение было скрыто модератором.
...
3. Altez50 1 17.04.23 00:25 Сейчас в теме
(2) Всм? Вопрос: какой метод позволяет проверить наличие колонки у реквизита формы по её имени.
4. пользователь 17.04.23 00:32
Сообщение было скрыто модератором.
...
5. Altez50 1 17.04.23 09:30 Сейчас в теме
(3) Никакой.

это я и хотел сказать


(4)
Дело в именах.

В 2022 я бы решил, что этот ответ добавляет стартмани, но теперь без понятия, чем он полезен.
7. Sashares 33 17.04.23 09:32 Сейчас в теме
(5)
В 2022 я бы решил, что этот ответ добавляет стартмани, но теперь без понятия, чем он полезен.

Этот совет предлагает немного подумать =)
6. Sashares 33 17.04.23 09:31 Сейчас в теме
(3)Проверить наличие можно. Для этого надо выгрузить в таблицу значений и искать колонку по имени.
Но совет вам правильный дают - при добавлении своих реквизитов в именах добавляйте им префиксы.
8. Altez50 1 17.04.23 09:34 Сейчас в теме
(6)
Для этого надо выгрузить в таблицу значений и искать колонку по имени.

несколько нестандартное, но ок

при добавлении своих реквизитов в именах добавляйте им префиксы

если б это была типовая обработка/таблица, так бы и поступил, но нет, зачем отвлекать внимание разраба от логики?
9. Sashares 33 17.04.23 09:41 Сейчас в теме
(8)Все зависит от того, что вы будете делать, если такой реквизит уже есть.
Если создавать такой реквизит не будете, тогда одно.
А если будете, но уже с префиксом, то возвращаемся к тому, что если сразу добавлять префикс, то и искать ничего не надо.
10. Altez50 1 17.04.23 13:57 Сейчас в теме
(9) Поясню, как родилась необходимость проверки. В обработке на форме АРМ все реквизиты и элементы формы исторически создавались программно. И случилось так(ТМ), что их решили продублировать вручную, разместив на форме в режиме конфигуратора. Чтобы не ломался оригинальный код программного формирования, нужно перед созданием колонок проверить их отсутствие на форме. Префиксы лесом, задача иная.

Когда вся форма будет переведена на статические реквизиты, динамическое их формирование будет убрано.
11. Sashares 33 17.04.23 14:00 Сейчас в теме
(10)Понял, тогда вопросов нет.
12. пользователь 17.04.23 14:05
Сообщение было скрыто модератором.
...
13. Rokky78 42 17.04.23 14:50 Сейчас в теме
(10) Конфигурация не озвучена. Если типовая - может есть модуль ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта

			//реквизит может уже существовать, если например вызывается команда "Перечитать"
			Если НЕ ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(Форма, "НаОснованииОприходования") Тогда
				ДобавляемыеРеквизиты = Новый Массив;
				ТипРеквизита = Новый ОписаниеТипов("ДокументСсылка.ОприходованиеИзлишковТоваров");
				РеквизитФормы = Новый РеквизитФормы("НаОснованииОприходования", ТипРеквизита, "", "На основании оприходования");
				ДобавляемыеРеквизиты.Добавить(РеквизитФормы);
				Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
			КонецЕсли;
14. Altez50 1 17.04.23 14:54 Сейчас в теме
(13)
ЕстьРеквизитИлиСвойствоОбъекта

Не работает для подчиненных реквизитов, выгрузить массив выданный ф-ей ПолучитьРеквизиты() в структуру с именем реквизита в ключе и искать по Структуре помогает. Но это всё ещё костыль.
15. user1826630 17.04.23 16:16 Сейчас в теме
(14) А по-другому никак. Это старая боль платформы - неумение искать по реквизитам формы, и даже неумение искать по массиву выгруженных этих реквизитов...
Приходится их получать в массив, а при необходимости - выгружать их имена во второй массив (чтобы использовать нормальные методы массива с примитивными типами).
С элементами формы есть метод Найти(), а с реквизитами - нет (потому что принцип уникальности имен разный).
16. user1826630 17.04.23 19:21 Сейчас в теме
(14) А зачем в структуру выгружать одни ключи без значений? Можно же просто имена выгрузить и в массив, и в СЗ, и в строку с разделителями...
17. Altez50 1 17.04.23 21:00 Сейчас в теме
(16) Бесспорно проще в массив, структура в мысленном эксперименте с данными вылезла из кеша первой, как самая ходовая коллекция ;). Вживую применять время ещё не пришло, разбираюсь с "обязательной" 10 сек. паузой при проведении поступлений для расчета взаиморасчетов онлайн: ещё одно передовое техническое решение, в купе с формой реестра документов блокирующее интерфейс ЕРП на 15+сек.
18. user1880116 17.04.23 21:24 Сейчас в теме
(17)
в купе
в плацкарте же, не?
20. user1826630 17.04.23 22:00 Сейчас в теме
(18) Не, я старый уже, лет 8 как в плацкарте не езжу...
23. пользователь 18.04.23 13:49
Сообщение было скрыто модератором.
...
24. Xershi 1540 04.03.25 19:47 Сейчас в теме
(23) какая то паленая ссылка на ТГ...

А решение вот!
Если ТаблицаДанных.Количество() > 0 И ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ТаблицаДанных[0], "СтавкаНДС") Тогда

ТаблицаДанных = ДанныеФормыКоллекция.
Оставьте свое сообщение

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