1с элементы добавить недопустимое значение параметров
Программный изменение формы списка, Динамический список
В данном разделе можно задавать вопросы по программированию на платформе 1С:Предприятие 8.
(Раздел предназначен для тех, кто уже прошел обучение в нашем учебном центре)
p.s. Просьба задавать вопросы только по программированию. На вопросы по типовым конфигурациям обычно не отвечаю по двум причинам
1. В последнее время редко с ними работаю.
2. Чтобы ответить на вопрос требуется: установить соответствующую базу нужного релиза, смоделировать ситуацию, и только после этого возможно залезть в конфигуратор и разобраться что не так (к сожалению, у меня нет столько времени).
Программный изменение формы списка, Динамический список
Александр » 24 июн 2013, 18:02
Здравствуйте Сергей!
Вывожу программно новый реквизит на управляемую форму списка.
Меняю произвольный запрос из динамического списка(Добавляю в него выбор нужного мне поля).
Хочу вывести новое поле в колонке таблицы.
На строчке кода Элемент.ПутьКДанным = "Список.ВнешнийКод" выдает ошибку, и ругается на неправильный путь.
Как быть? Добавить реквизит в динамический список тоже нельзя.
Код: выделить все ЭтаФормаПерем.Список.ТекстЗапроса = СтрЗаменить(ЭтаФормаПерем.Список.ТекстЗапроса,"СправочникКонтрагенты.Ссылка,","СправочникКонтрагенты.Ссылка, СправочникКонтрагенты.ВнешнийКод КАК ВнешнийКод");
admin » 26 июн 2013, 13:22
НовЭлемент = ЭтаФормаПерем.Элементы.Добавить("ПолеВнешнийКод",Тип("ПолеФормы"),ЭтаФормаПерем.Элементы.Список);
НовЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовЭлемент.ПутьКДанным = "Список.ВнешнийКод";
и у поля ВнешнийКод необходимо в реквизитах формы поставить галочку "использовать всегда"
Мне до конца не ясна задача, для чего вам все это потребовалось
Более простой вариант: вытащить все колонки и программно регулировать видимость колонок.
Александр » 26 июн 2013, 14:55
Я создал справочник метаконфигуратор, и через вызов процедуры ПриСозданииНаСервере, управляемой формы вызываю процедуру которая выводит новые реквизиты указанные в метеконфигураторе.Александр » 26 июн 2013, 16:36
и у поля ВнешнийКод необходимо в реквизитах формы поставить галочку "использовать всегда"
вот это не понял где?
У меня список -- динамический список с произвольным запросом.
И реквизита ВнешнийКод в "Список" нету, так в запросе изначально его нету.
Но я программно меняю запрос и добавляю ВнешнийКод .
но путь "Список.ВнешнийКод" не присваивается.
Все делается таким образом, для того чтобы не вмешиваться в форму.
весь код пишется в общем модуле и не затрагивает форму.
Цель обновление без проблем.
admin » 28 июн 2013, 10:53
Динамический список сами добавляете, или он уже есть на форме? Динамический список используется только для справочника Номенклатура или в зависимости от запроса может отображаться любой справочник?Александр » 01 июл 2013, 10:57
Все изменения в форме списка контрагента бп 3.0, динамический список уже есть на форме. В него заменой(изменением) запроса добавляю выбор нового поля "ВнешнийКод". и на путь "Список.ВнешнийКод" при выводе реквизита ругается.admin » 01 июл 2013, 14:32
У меня все работает:
ЭтаФорма.Список.ТекстЗапроса = СтрЗаменить(ЭтаФорма.Список.ТекстЗапроса,"СправочникКонтрагенты.Ссылка,","СправочникКонтрагенты.Ссылка, СправочникКонтрагенты.ВнешнийКод КАК ВнешнийКод,");
НовЭлемент = ЭтаФорма.Элементы.Добавить("ПолеВнешнийКод",Тип("ПолеФормы"),ЭтаФорма.Элементы.Список);
НовЭлемент.Вид = ВидПоляФормы.ПолеНадписи;
НовЭлемент.ПутьКДанным = "Список.ВнешнийКод";
(Это при условии, что в динамическом списке установлен флаг "произвольный запрос", к сожалению под рукой у меня нет свежей БП 3.0, в старой БП 3.0 этот флаг не установлен)
frutty » 13 фев 2015, 19:13
Аналогичная проблема, в документ добавил свой реквизит, и хотелось бы видеть его в списке документов, но вот вручную его добавлять не хочется, чтобы избежать проблем с обновлениями.Из-за этого решил воспользоваться общим модулем "МодификацияКонфигурацииПереопределяемый" в котором можно внести свои изменения в форму при вызове процедуры "ПриСозданииНаСерврере".
Так вот в чём проблема, пытаюсь изменить запрос и вытащить колонку с моим реквизитом, но ловлю ошибку:
Ошибка при установке значения атрибута контекста (ПутьКДанным)
Элемент.ПутьКДанным = "Список.ДополнительныйНомер";
по причине:
Недопустимое значение
Код: выделить все Форма.Список.ТекстЗапроса = СтрЗаменить(Форма.Список.ТекстЗапроса, "СостоянияЭД.СостояниеВерсииЭД", ",ДокументЗаказКлиента.ФАЙТ_ДополнительныйНомер КАК ДополнительныйНомер");
Форма.Список.УстановитьОбязательноеИспользование("ДополнительныйНомер", Истина);
Элемент = Форма.Элементы.Добавить("ПолеДополнительныйНомер", Тип("ПолеФормы"), Форма.Элементы.Список);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = "Список.ДополнительныйНомер";
Каждый, кто программировал в обычном приложении, часто сталкивался с задачей получения произвольной таблицы значений на форме. Под произвольной таблицей значений понимается таблица, количество и тип колонок которой наперед не известно. То есть колонок может быть 3, а может 6, а может 8. В обычном приложении все просто: можно было на форме обработки разместить элемент «ТаблицаЗначений»,и затем передать в этот элемент созданную таблицу значений программным способом. Потом простой командой:
получить готовую таблицу значений на форме. Казалось бы, что может быть проще.
Это все было в обычном приложении. В управляемом приложении все изменилось. Так просто произвольную таблицу не создать. Теперь нужно либо жестко параметризировать таблицу значений на форме, либо создавать ее программным способом (описывать,ну, в этом, собственно, и суть самого управляемого приложения). Это мы и попробуем сделать: программными средствами создать произвольную таблицу значений на управляемой форме.
Решение задачи.
Первое, что мы должны сделать, это определить, как таблица появится на форме. Главное, что никакого элемента формы в обработке создавать не нужно. Мы его создадим программным способом, как и всю таблицу. То есть таблица будет описана, и создаваться в момент открытия формы или с помощью кнопки – это кому как нужно.
Создание таблицы на форме происходит через описание таблицы значений как реквизита:
Теперь мы должны создать программную таблицу значений, которая содержит данные. Если таблица значений будет получена из запроса, то все более - менее порядок. Если таблица создается вручную, то значение колонок, которые будут содержать числа или даты могут быть созданы через «ОписаниеТипов». Суть в том, что колонки в таблице значений обязательно должны иметь какой-то тип. Если, например,предполагается, что пользователь будет заполнять данные в этих колонках интерактивно, то нельзя добавлять колонку таблицы значений просто с именем, она должна иметь тип. Имейте ввиду – это очень важно т.к. эти типы мы передадим в таблицу на форме.
Создаем таблицу, которая содержит несколько колонок:
Далее мы заполним нашу программную таблицу ТЗ нужными данными. Получаем таблицу ТЗ, которая содержит необходимые значения и готова к передаче в созданный реквизит формы.
Вот такая нехитрая комбинация и наша таблица готова.
Далее укажем путь к данным и, например, можем установить ширину колонок:
Условное оформление, если нам нужно мы также пишем вручную,командное меню – вручную. Обработчики таблицы также пишутся руками. Например,что бы добавить обработчик события таблицы «Выбор»:
Для обработки данного события в форме процедуры прописывается отдельная процедура:
Обратите внимание, что обработчики таблицы срабатывают на клиенте и поэтому должны иметь команду указатель компилятора
Ну, и последнее что хотелось добавить, что после всех этих действий обязательно не забываем передать готовую таблицу в реквизит формы:
Вот что имеем в результате:
А вот обработка события "Выбор":
Послесловие.
Надеюсь, статья окажет помощь тем программистам 1С, которые начинают создавать таблицы на форме программным способом.
Вы можете скачать обработку, которая программным способом создает таблицу значения и выводит на управляемую форму с комментариями,которые помогут Вам создавать свои таблицы.
Внешняя обработка. Таблица значений добавлена в реквизиты и элементы формы (для размещения на форме в нужном месте). Структура таблицы не определена (колонок нет). Вывод осуществляется одной процедурой, в качестве параметра в которую передаётся таблица значений. Дополнительно можно для созданной таблицы определить обработчики событий.
Специальные предложения
Спасибо! Программно добавил колонки в тз и долго мучился с выводом их на форму. Постоянно была Ошибка при установке значения атрибута контекста (ПутьКДанным) по причине: Недопустимое значение.
Оказалось что перед добавлением элементов формы нужно еще реквизиты формы добавить (ИзменитьРеквизиты).
Если бы в коде (3) была проверка на ПрограммноСозданныйРеквизит да и еще для внешней обработки, то юзал бы Ваш код "as is":)
Типовое создание элементов/реквизитов управляемой формы.В чем уникальность публикации? Или просто как визуализация книжек по упр. интерфейсу?
Уникальности никакой нет, на неё и не претендую. Обработка находится в нужное время, в нужном месте, пользуется спросом. У самого на днях стояла такая задача. Пришлось порыться в интернете, литературы под рукой не было. На инфостарте не нашел.
Особенностью обработки считаю универсальную процедуру, т.к. в инете есть примеры с конкретной структурой.
(5) hiduk, Большое спасибо за помощь. В 82 из мелочи любят выдумывать сложности. Туда сюда гонять реквизиты и т д. Не понимаю зачем так заморачиваться. Сам не додумался. Большое спасибо! Получилось с вашей помощью . Спасибо за готовое решение.Скопировал код, буду использовать в ближайшее время - ибо пока обходился без заполнения таблиц на УФ.
Я пробовал вышеуказанный код - у меня не работало удаление таблицы значений из управляемой формы. В итоге сделал свою модификацию:
Удаление таблицы значений из управляемой формы
Удалять реквизиты таблицы значений нет нужды - достаточно удалить саму таблицу значений.
Ну и до кучи - процедура вывода таблицы значений на управляемую форму:
v.l.; detro; lost-s0u1; Steelvan; Valerich; Prog1CZUP31; mangy; Styvi; + 8 – Ответить&НаСервере
Процедура УдалитьТЗ(УФ, НомерТЗ="1") Экспорт
ИмяТЗНаФорме = ИмяТаблицы + НомерТЗ;
// Если удаляемая таблица значений действительно присутствует на данной управляемой форме
Если НЕ УФ.Элементы.Найти(ИмяТЗНаФорме) = Неопределено Тогда
// Сначала удалим реквизит "Таблица значений" из УФ
МассивИменУдаляемыхРеквизитов = Новый Массив;
Если НЕ УдаляемыйЭлемент = Неопределено Тогда
// Теперь удалим элемент формы, который служил для визуального отображения
// удалённого реквизита УФ "Таблица значений"
УФ.Элементы.Удалить(УдаляемыйЭлемент);
А как сделать группы. Ну чтобы при отображении на форме несколько колонов были объединены в Группу колонок. (11) AleksSF, Добрый день! Группы сделать можно, но сложно:) (13) hiduk,
Повозился немного и сделал. В принципе не так сложно.
Но я делал для своей конфы, поэтому не доводил ее до универсальности.
Если интересно могу прислать.
Я немного подправил код вывода ТЗ: ранее он позволял вывести на управляемую форму только одну таблицу значений. Либо нужно было удалять сначала одноимённую ТЗ. Теперь ничего удалять не надо, и можно выводить на форму сколько угодно ТЗ, причём процедура принимает только один параметр - саму таблицу значений и ничего лишнего:
Но ещё интереснее было бы печатать таблицу значений в независимый табличный документ. Как бы это сделать?
Спасибо за обработку, очень удобнов вставлять и юзать. Даже внутрь не лазил процедур, юзал как функцию.
Если у таблицы тип содержит массив, не выводится.
Пришлось сделать проверку, ну и потом добавление колонок в попытке-исключении.
Спасибо за открытый код в комментариях! Даже скачивать не пришлось))Просмотры 52885
Загрузки 316
Рейтинг 45
Создание 21.06.13 22:59
Обновление 21.06.13 22:59
№ Публикации 191774
Конфигурация Конфигурации 1cv8
Операционная система Windows
Страна Россия
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Не указано
См. также
Альтернативный способ добавления элементов и реквизитов на формы Промо
Предлагаю альтернативный вариант добавления динамически создаваемых элементов и реквизитов на форму.
1 стартмани
09.09.2019 18022 35 bmk74 7
Выделение текущей строки в отчете (сделать сразу во всех отчетах и ничего не сломать)
Как за 10 минут упростить работу с отчётами программистам и пользователям. Добавить ВО ВСЕ ОТЧЁТЫ механизм автоматического выделения текущей строки отчёта (той, на которой установлен курсор). И ПРИ ЭТОМ НИЧЕГО НЕ СЛОМАТЬ.
1 стартмани
17.10.2021 2843 6 Патриот 48
Самые красивые шахматы для 1С на управляемых формах
Здравствуйте, представляем Вашему вниманию классическую игру – Шахматы! Написана игра средствами 1С, на управляемых формах. Программный код представляет собой с аккуратностью составленную систему, содержащую лаконичные логические приемы и описательные имена переменных, объектов и функций. Программа полностью отлажена и многократно протестирована. Оригинальный авторский дизайн фигур, иконок и кнопок приятен глазу. Игра содержит большое количество функций, настроек и режимов игры, включая сетевую игру, тренировку с ботом или игру на двоих. Не упустите возможность найти ряд технических решений, применимых для реализации различных задач, а также поиграть в вечную игру с отличным оформлением! Желающие научиться программировать на управляемых формах могут многое почерпнуть в этой конфигурации.
5 стартмани
18.02.2021 5755 13 compmir 30
Интерактивная справка по объектам 1С (подключаемое расширение)
База знаний, подключаемая к объектам основной базы. Пополняется интерактивно, формируется в виде статей прямо в 1С (текст, картинки, таблицы, ссылки). Есть возможность прикрепления файлов, привязки к объектам 1С, возможности рейтинга и комментирования пользователями.
3 стартмани
29.09.2020 16020 84 sapervodichka 47
Расширенная настройка динамического списка УФ Промо
Открывая управляемую форму выбора и не увидев там видимых в форме списка элементов, часто хочется узнать причину их отсутствия там, т. е. какой наложен отбор. Но стандартная настройка списка управляемой формы показывает только пользовательские настройки, скрывая от пользователя фиксированный отбор. Предлагаю вам расширение конфигурации с расширенной настройкой динамического списка, отображающей пользователю кроме пользовательских настроек еще фиксированные.
1C. "Недопустимое значение параметра" при вызове макета в расширении
Дано: 1С (в данном примере конфигурация 1С:Университет ПРОФ), платформа 8.3.10. Создано расширение, в котором к документу добавлен новый макет. В модуле менеджера документа есть процедура, формирующая печатную форму на базе макета. Необходимо было заменить данную процедуру (при помощи директивы расширения "&Вместо") и заменить вызов встроенного макета на наш, добавленный в расширение.
Проблема: при вызове добавленного макета в момент его печати в режиме "1С:Предприятие" возникала ошибка при получении макета:
: Ошибка при вызове метода контекста (ПолучитьМакет)
Макет = Документы.ЗаявлениеПоступающего.ПолучитьМакет ("Расш1_МакетЗаявлениеПоступающего");
по причине:
Недопустимое значение параметра (параметр номер '1')
Код, вызывающий ошибку:
Варианты решения:
1. Добавить функцию, выполняемую на сервере, которая вызовет добавленный макет из документа:
Макет = Документы . ЗаявлениеПоступающего . ПолучитьМакет ( "Расш1_МакетЗаявлениеПоступающего" );
А затем из заменяемой процедуры вызвать эту функцию:
(как оказалось этот способ не нужен. Причину читайте ниже)
2. Другой вариант - перенести макеты в общие и следующей командой вызвать (получить) макет из "Общие макеты":
------
Видимо это всё-таки какой-то глюк платформы (протестировано на 8.3.10.2252 и 8.3.10.2299), но если просто добавить пустой макет в общие макеты в расширении, то команда, ранее вызывавшая ошибку (ПолучитьМакет из макета документа без допфункций на сервере), начинает нормально работать. При удалении пустого общего макета, команда вызова макета из документа снова вызывает ошибку (даже если вынесена в функцию на сервере, как показано в способе 1).
Т.е. если всё-таки хочется сделать макеты нормально в документе (ожидая, что когда-нибудь этот глюк исправят), то нужно сделать макет-заглушку в общих макетах. Например:
Читайте также: