|
Gectar 0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
||||
|
1 |
||||
|
1C 8.x (тонкий) Ошибка при указании ПутьКДанным в программно созданной таблице10.08.2016, 13:34. Показов 32948. Ответов 7 Метки нет (Все метки)
Переделываю форму документа КорректировкаЗаписейРегистров под управляемое приложение. Если вручную из реквизитов на форму документа перетащить нужное движение по регистру никаких проблем не возникает: создается таблица, добавляются колонки. Для таблицы регистра бухгалтерии Хозрасчетный свойство ПутьКДанным заполняется значением «Объект.Движения.Хозрасчетный». Но если я программно создаю таблицу и пытаюсь присвоить этому свойству это же значение,
то выскакивает «ошибка при установке значения атрибута контекста (ПутьКДанным)» по причине Недопустимое значение. Из-за чего тут ошибка? Пробовал привязывать к созданной таблице табличную часть документа ТаблицаРегистровНакопления — свойству ПутьКДанным присвоил значение «Объект.ТаблицаРегистровНакопления», потом программно же создал колонки таблице, указал ПутьКДанным для них и все отработало без нареканий.
__________________
0 |
|
Dethmontt Модератор 3700 / 2899 / 570 Регистрация: 10.03.2011 Сообщений: 11,414 Записей в блоге: 1 |
||||
|
11.08.2016, 01:57 |
2 |
|||
|
По моему Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента Добавлено через 13 минут Добавлено через 1 минуту Добавлено через 58 секунд
0 |
|
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
|
11.08.2016, 10:56 [ТС] |
3 |
|
Движения это свойство типа ДокументОбъект и оно не конвертируется на клиента Это так, но я же не с этим свойством связываю таблицу. Тип свойства Движения — КоллекцияДвижений. Содержит эта коллекция наборы записей регистров. С одним из таких наборов я и пытаюсь связать таблицу, ведь наборы вполне себе конвертируются на клиенте. Добавлено через 7 минут
Нужно создавать свой НаборЗаписей (реквизит формы) устанавливать отбор и к нему привязывать ТаблицуФормы Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. В обычном приложении именно напрямую к данным и идет привязка, вот и в управляемом надеялся сделать также. Добавлено через 19 минут
И программно получить доступ на форме к свойству движения не получиться ибо они ни где не хранятся. Вот тут я может и не до конца понял вашу мысль, но движения по конкретной номенклатуре хранятся в документе, форму которого я и пытаюсь открыть.
0 |
|
Модератор 3700 / 2899 / 570 Регистрация: 10.03.2011 Сообщений: 11,414 Записей в блоге: 1 |
|
|
11.08.2016, 11:01 |
4 |
|
Gectar, форма и документ это разные сущности! Добавлено через 2 минуты 1. На сервере происходит чтение из БД документа (ДокументОбъект) Добавлено через 49 секунд
Как вариант я тоже думал так сделать, но хотелось бы как-то напрямую к данным, чтобы потом не заморачиваться с обработкой добавления/удаления/изменения записей. Придется именно так и сохранение тоже придется делать самому
1 |
|
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
|
11.08.2016, 11:11 [ТС] |
5 |
|
Я может сейчас и ступлю с этим вопросом, но почему же тогда все работает при ручном перетаскивании того же самого набора записей регистра из движений на форму — таблица создается, колонки добавляются, ПутьКДанным прописывается, работет все чин чинарем и не нужно никаких промежуточных реквизитов?
0 |
|
Модератор 3700 / 2899 / 570 Регистрация: 10.03.2011 Сообщений: 11,414 Записей в блоге: 1 |
|
|
11.08.2016, 11:25 |
6 |
|
работет все чин чинарем и не нужно никаких промежуточных реквизитов? потому что платформа все делает за НАС многе оскрывая от наших глазок =)))
0 |
|
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
|
25.08.2016, 17:38 [ТС] |
7 |
|
Оказалось такие сложности совершенно ни к чему, как в общем-то с самого начала и думал. Нужно было просто в настройках реквизитов поставить галочку «Использовать всегда» Миниатюры
0 |
|
0 / 0 / 0 Регистрация: 10.08.2016 Сообщений: 18 |
|
|
25.08.2016, 17:40 [ТС] |
8 |
|
Тогда приведенный в самом начале код работает без проблем.
0 |
Пишу по подсказке:
В результате ругается: Ошибка при установке значения атрибута контекста (ПутьКДанным)
Источник
УФ. ДинамическийСпикок. ПутьКДанным = итог по колонке ТЧ кодом. Как?
Хочу в динамический список, в элемент (колонку) ЭлКол, утративший актуальность, где ПутьКДанным был равен «Список.СуммаДокумента», в ПриСозданииНаСервере заменить на Элементы.ЭлКол.ПутьКДанным = «Список.Ссылка.ТЧ.ИтогСтоимость», где ИтогСтоимость — автоматическое поле итога по колонке Стоимость.
Вываливается с ошибкой:
Ошибка при установке значения атрибута контекста (ПутьКДанным)
по причине:
Недопустимое значение
А интерактивно — устанавливается подобный путь. Но элемент-колонка не появляется на форме в Предприятии. И если обратиться в ПриСозданииНаСервере к Элементы.ЭлКол — ошибка:
Поле объекта не обнаружено (ЭлКол)
И в элементах в отладчике ЭлКол отсутствует, и в подчинённых элементах элемента Список.
Что это?
Как порешить?
И ссылка в запросе динамического списка присутствует, а в Предприятии на форму ссылку не вытащить.
В конфигураторе добавил элемент-колонку = Список.Ссылка, Видимость поставил Ложь, чтобы не видно её было, так её не видно и в настройке формы в Предприятии.
Видимость оставил Истина — Ссылка появилась, но колонка видна, а не нужна. Да что за дичь-то такая? Вместе с тем, колонка ЭлКол так и не появилась, и в ДобавитьПоле в настройке формы — ЭлКол тоже отсутствует.
Источник
Программное создание реквизита управляемой формы с помощью механизма расширений
В ЗУП 3 возникла задача добавить реквизит в справочник не внося изменений в конфигурацию. БСП с механизмом дополнительных реквизитов использовать было нежелательно, поэтому был использован механизм расширений. Для вывода данного реквизита на форму добавлять саму форму в расширение не хотелось по ряду причин, описанных ниже. Создание реквизита и элемента формы, соответствующего данному реквизиту было решено сделать программно в самом расширении, следуя принципу минимального воздействия на конфигурацию.
Мотивация автора изобретать велосипед вызывает недоумение.
Да, в расширении что-то добавлять чуть сложнее, чем просто в конфигурации править, но удобства перекрывают некоторые минусы. А автор из-за нюансов работы с расширениями вовсе отказывается от расширений, еще и других такому учит.
Если Вы не знали, то у окошка расширения есть кнопочка, которая показывает только вручную добавленные объекты в расширение, скрывая автоматически заимствованные.
А в последних версиях платформы появился инструмент обновления заимствованной формы из формы поставщика.
Если уж ссылаетесь на теорию, то следите за изменениями механизма. Разработчики понимают о некоторых неудобствах, и стараются упростить жизнь с расширениями, но кто-то уже обозвал расширения злом и избегает их, это же глупо.
Не знал об этом, можно поподробнее? Даже если это уже реализовано, то мне не нравится, что при заимствовании формы в расширение автоматически заимствуются объекты метаданных всех ссылочных типов, выводящихся на форму, что загромождает расширение «не нужными» объектами и в свою очередь усложняет сопровождение данного расширения.
Источник
Добавление реквизитов справочников в расширении
Здравствуйте, я счастливый обладатель платформы 8.3.13.1644 и ут 11.4.6.188, в моем расширении «адаптация» установлен режим совместимости 8.3.12
я добавил новый реквизит к унаследованному в расширении справочнику КассыККМ и попытался вывести его не управляемой форме, он не появился..не смотря на права и т.д, в настройках внешнего вида его тоже нет. Попробывал сделать программно:
&НаСервере
Процедура ср_ПриСозданииНаСервереПосле(Отказ, СтандартнаяОбработка)
МассивТипов = Новый Массив;
МассивТипов.Добавить(Тип(«СправочникСсылка.Кассы»));
МассивРеквизитов = Новый Массив;
МассивРеквизитов.Добавить(Новый РеквизитФормы(«ср_ОсновнаяКасса», Новый ОписаниеТипов(МассивТипов),»»,»Основная касса»,истина));
ИзменитьРеквизиты(МассивРеквизитов);
Элемент = ЭтаФорма.Элементы.Добавить(«ОсновнаяКасса», Тип(«ПолеФормы»), ЭтаФорма);
Элемент.Вид = ВидПоляФормы.ПолеВвода;
Элемент.ПутьКДанным = «ср_ОсновнаяКасса»;
КонецПроцедуры
Показать
Элемент на форме видно, но он не сохраняется. Подскажите пожалуйста в чем я туплю и почему не сработало добавление клацками мышки?
(0) ты кодом добавил реквизит формы(!) и вывел его на форму. С чего бы ему сохраняться?
Что означает префикс «ср_», если не секрет?
Источник
Программное создание элементов формы (3 вложенные таблицы)
Доброго времени суток. Помогите разобраться с ошибкой.
Есть задача программно добавить реквизиты и элементы формы
Проблема в том, что реквизиты — это 3 вложенные таблицы, для примера:
есть таблица классы школы Таблица2, к ней привязана таблица учеников класса Таблица22, а к таблице учеников в свою очередь привязана таблица предметов с оценками учеников Таблица223. С помощью конструктора можно разместить реквизиты и соответствующие элементы на форме (таблицы формы), но при программном формировании (добавление элемента «Т223») появляется ошибка
<Форма.Форма.Форма(87)>: Ошибка при установке значения атрибута контекста (ПутьКДанным)
НовЭл.ПутьКДанным = «Элементы.Т22.ТекущиеДанные.Таблица223»;
по причине:
Недопустимое значение
Код процедуры
&НаСервере
Процедура Команда2НаСервере()
//ДобавляемыеРеквизиты=Новый Массив;
//СуществующиеРеквизиты = Новый Массив;
//ЗарплатаКадры.ЗаполнитьМассивИменРеквизитовФормы(ЭтаФорма, СуществующиеРеквизиты);
//СуществующиеРеквизиты.Удалить(СуществующиеРеквизиты.Найти(«Реквизит777»));
//СуществующиеРеквизиты.Удалить(СуществующиеРеквизиты.Найти(«Объект»));
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Реквизит1»,Новый ОписаниеТипов(«Дата»),,»Реквизит1″));
//Массив=Новый Массив;
//Массив.Добавить(Тип(«ТаблицаЗначений»));
//ОписаниеТиповТаблицаЗначений = Новый ОписаниеТипов(Массив);
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Таблица2″,ОписаниеТиповТаблицаЗначений,,»Таблица2»));
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Столбец21»,Новый ОписаниеТипов(«Строка»),»Таблица2″ ,»Столбец21″));
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Таблица22″,ОписаниеТиповТаблицаЗначений,»Таблица2″ ,»Таблица22»));
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Столбец221»,Новый ОписаниеТипов(«Строка»),»Таблица2.Таблица22″,»Столбец221″));
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Столбец222»,Новый ОписаниеТипов(«Строка»),»Таблица2.Таблица22″,»Столбец222″));
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Таблица223″,ОписаниеТиповТаблицаЗначений,»Таблица2.Таблица22″,»Таблица223»));
//ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(«Столбец2231»,Новый ОписаниеТипов(«Строка»),»Таблица2.Таблица22.Таблица223″,»Столбец2231″));
////СформироватьРеквизитыФормы(Дерево.Строки,ДобавляемыеРеквизиты);
//ИзменитьРеквизиты(ДобавляемыеРеквизиты,СуществующиеРеквизиты); ЗарплатаКадры.УдалитьПодчиненныеЭлементыГруппы(ЭтаФорма,Элементы.ГруппаПрограммныеЭлементы);
НовЭл=Элементы.Добавить(«Реквизит1»,Тип(«ПолеФормы»),Элементы.ГруппаПрограммныеЭлементы);
НовЭл.Вид = ВидПоляФормы.ПолеВвода;
НовЭл.ПутьКДанным = «Реквизит1»;
НовЭл=Элементы.Добавить(«Т2»,Тип(«ТаблицаФормы»),Элементы.ГруппаПрограммныеЭлементы);
//НовЭл.Вид = ВидПоляФормы.ПолеВвода;
НовЭл.ПутьКДанным = «Таблица2»;
//ЭлТаблица22=НовЭл;
НовЭл=Элементы.Добавить(«Столбец21»,Тип(«ПолеФормы»),НовЭл);
НовЭл.Вид = ВидПоляФормы.ПолеВвода;
НовЭл.ПутьКДанным = «Таблица2.Столбец21»; НовЭл=Элементы.Добавить(«Т22»,Тип(«ТаблицаФормы»),Элементы.ГруппаПрограммныеЭлементы);
НовЭл.ПутьКДанным = «Элементы.Т2.ТекущиеДанные.Таблица22»;
ЭлТаблица22=НовЭл;
НовЭл=Элементы.Добавить(«Столбец221»,Тип(«ПолеФормы»),ЭлТаблица22);
НовЭл.Вид = ВидПоляФормы.ПолеВвода;
НовЭл.ПутьКДанным = «Элементы.Т2.ТекущиеДанные.Таблица22.Столбец221»;
НовЭл=Элементы.Добавить(«Столбец222»,Тип(«ПолеФормы»),ЭлТаблица22);
НовЭл.Вид = ВидПоляФормы.ПолеВвода;
НовЭл.ПутьКДанным = «Элементы.Т2.ТекущиеДанные.Таблица22.Столбец222»;
Управляемые формы, тестировал обработку в БП (3.0.40.36)
на платформах 1С:Предприятие 8.3 (8.3.6.2237) и 1С:Предприятие 8.3 (8.3.6.2332)
Реквизиты формы (3 вложенные таблицы) создаются без проблем, для упрощения в конфигураторе на форму обработки вручную уже добавлен реквизит Таблица2 и закоментирован рабочий код программного добавления реквизита формы вложенных таблиц.
Источник
Adblock
detector
// Реквизиты
ДобавляемыеРеквизиты = Новый Массив;
ИмяТаблицы = "КомандыДополнительныхОбработок";
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ИмяТаблицы, Новый ОписаниеТипов("ТаблицаЗначений")));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Ссылка", Новый ОписаниеТипов("СправочникСсылка.ДополнительныеОтчетыИОбработки"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ВариантЗапуска", Новый ОписаниеТипов("ПеречислениеСсылка.СпособыВызоваДополнительныхОбработок"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ИмяЭлемента", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Представление", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Идентификатор", Новый ОписаниеТипов("Строка"), ИмяТаблицы));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ЭтоОтчет", Новый ОписаниеТипов("Булево"), ИмяТаблицы));
Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//реквизит
ИмяЭлемента = "Добавлен" + ИндексЭлемента;
Реквизит = Новый РеквизитФормы(ИмяЭлемента, ОписаниеТипов);
ДобавляемыеРеквизиты.Добавить(Реквизит);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
//команда печать
ИмяКомандыПечать = "ДобавленПечать" + ИндексЭлемента;
КомандаПечать = Команды.Добавить(ИмяКомандыПечать);
КомандаПечать.Действие = "ПечатьДокумента";
КомандаПечать.Подсказка = НСтр("ru = 'Печать документа...'");
//элемент формы
//Родитель = Элементы.ГруппаСформированныеДокументы;
Элемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), ЭлементГруппа);
Элемент.Вид = ВидПоляФормы.ПолеНадписи;
Элемент.ПутьКДанным = ИмяЭлемента;
Элемент.Гиперссылка = Истина;
Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
ЭтаФорма[ИмяЭлемента] = Документ;
//кнопка печать
ИмяЭлементаПечать = "ДобавленПечать" + ИндексЭлемента;
ЭлементПечать = Элементы.Добавить(ИмяЭлементаПечать, Тип("КнопкаФормы"), ЭлементГруппа);
ЭлементПечать.Картинка = БиблиотекаКартинок.Печать;
ЭлементПечать.Отображение = ОтображениеКнопки.Картинка;
ЭлементПечать.ИмяКоманды = ИмяКомандыПечать;
[Практика программирования] Управляемые формы 1С 8: как программно изменить запрос динамического списка и программно вывести колонку добавленного реквизита списка
Ранее уже описывалось в соответствующей статье то, как разместить программно в форме колонку реквизита объекта базы (например, документа или справочника). В этой статье будет рассмотрено как программно добавить колонку с флажком в список управляемой формы с динамическим списком, данные для которого выбираются произвольным запросом.
Для программного добавления элементов управляемой формы должно быть учтено условие о том, что добавление происходит на стороне сервера, а не на клиенте (не в процедуре «ПриОткрытии», как это было в обычном приложении). И так можно ошибочно подумать по старой привычке (если есть опыт программирования в обычном интерфейсе), учитывая архитектуру платформы 1С: Предприятие 8.2 и 8.3. Ведь процедура «ПриОткрытии» формы есть и в управляемом приложении, но через не создать программно и не разместить элементы для прикладной задачи. Поэтому «&НаСервере» и преимущественно в процедуре «ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)» формы документа или элемента справочника или формы списка теперь происходит программное добавление каких-либо элементов формы.
В общем информация о том, как программно изменить текст запроса динамического списка, использующего произвольный запрос можно найти на странице сайта ИТС 1С, если у Вас есть доступ. Но если доступа нет, то можете сильно не расстраиваться — информация на странице как и во многих случаях методологической информации от 1С носит условно практический характер. А это означает, что мелочи и нюансы, о которых бы было неплохо упомянуть на указанной странице ИТС, не упомянуты никак. И их понимание будет происходить на практике. Вот часть такой практики изложена ниже на прикладной задаче.

Рис. 1. Пример теоретического кода для программного изменения текста произвольного динамического списка для управляемой формы в 1С 8.
Прикладная задача заключалась в том, чтобы выводить программно в управляемую форму списка документов «Реализация товаров и услуг» колонку добавленного реквизита документа. Реквизит с именем «ДопМФ_Отгружено» тип «Булево», в данном примере добавлен в расширении, но может быть и добавлен в основной конфигурации, если она на частичной поддержке. Как вывести программно элемент формы, содержащей флажок, добавленного реквизита, повторимся, можно изучить в соответствующей статье, о которой уже упоминалось в начале страницы.
Рис. 2. Пример добавленного реквизита объекта конфигурации (документа) в 1С 8 для дальнейшего программного вывода колонки в управляемую форму списка объекта.
Прежде чем перейти непосредственно к программному добавлению колонки элемента таблицы формы нужно добавить его выбор в текст запроса динамического списка. Таким образом подготовительный рабочий исполняемый код получается примерно следующим:
| 1 | | | СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); |
| 2 | | | СвойстваСписка.ОсновнаяТаблица = «Документ.РеализацияТоваровУслуг»; |
| 3 | | | СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; |
| 4 | | | ИсхТекстаЗапроса = СписокРеализацииТоваровУслуг.ТекстЗапроса; |
| 5 | | | |
СвойстваСписка.ТекстЗапроса = СтрЗаменить(ИсхТекстаЗапроса, «ВЫБРАТЬ», «ВЫБРАТЬ»+Символы.ПС+«РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено,»); |
| 6 | | | |
ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.СписокРеализацииТоваровУслуг, СвойстваСписка); |
| 7 | | | //СписокРеализацииТоваровУслуг.Параметры.УстановитьЗначениеПараметра(«Параметр1», 42); |
Прокомментируем его основные моменты. В строке 1 происходит получение структуры через функцию «СтруктураСвойствДинамическогоСписка()» общего модуля «ОбщегоНазначения» для заполнения ее значений и передачи для заполнения свойств динамического списка. Для ключа «ОсновнаяТаблица» структуры в строке 2 указывается название основной таблицы, которая используюется для динамического списка, в примере это «Документ.РеализацияТоваровУслуг». Значение ключа структуры в строке 3 «ДинамическоеСчитываниеДанных» в значении «Истина». В строках 4 и 5 ведется произвольная модификация запроса.

Рис. 3. Пример исходного текста произвольного запроса динамического списка реквизита управляемой формы списка документов.
Можно просто подготовить новый или измененный исходный текст запроса для указания его в ключе «ТекстЗапроса» структуры. В данном же случае была использована хитрость, чтобы минимизировать зависимость от изменений разработчиков. Происходит модификация исходного текста запроса, который определили разработчики, за счет замены подстроки «ВЫБРАТЬ», которая есть в любом запросе, на подстроку так же содержащее это обязательное слово текста запроса и текст для выборки значения добавленного реквизита документа «ДопМФ_Отгружено». Таким образом, доработка в расширении может сломаться тогда, когда разработчики существенным образом изменять исходный текст запроса. И на примере строки 5 помещаем новый вариант текста запроса в структуру. В данном примере получилось, что запрос содержит одну дополнительную строчку, чтобы выбирать значения добавленного реквизита. Порядок следования полей выборки в запросе для динамического списка не имеет значения.
Т.е. в практической задаче начало запроса программно изменялось:
| С: |
|
ВЫБРАТЬ РеализацияТоваровУслуг.Ссылка, |
| На: |
|
ВЫБРАТЬ РеализацияТоваровУслуг.ДопМФ_Отгружено КАК ДопМФ_Отгружено, РеализацияТоваровУслуг.Ссылка, |
Особенно обратим внимание на то, к каким объектам ведется обращение в строке 7, когда выполняется установка новой настройки для динамического списка с помощью процедуры «УстановитьСвойстваДинамическогоСписка» общего модуля «ОбщегоНазначения». В этом месте важно не перепутать, т.к. в типовой конфигурации названия элемента формы таблицы-списка и реквизита формы одинаковые. А важно, что первым параметром передается элемент управляемой формы — Таблица реквизита формы. Не перепутать его с названием реквизита формы, к которому ранее обращались для получения текста исходного запроса. Вторым параметром передается заполненная структура. Строка 7 в данном примере закомментирована, т.к. в данной прикладной задаче в тексте запроса не содержится параметров. Но, если параметр есть, то устанавливается через свойство «Параметры» и метод «УстановитьЗначениеПараметра» реквизита управляемой формы, а не элемента формы. Установка значения по имени параметра по коду как для классического запроса в 1С: первое значение — текстовое имя параметра, второе значение — собственно значение для параметра.

Рис. 4. Сравнение одноименных реквизита и элемента управляемой формы 1С 8 для программного изменения текста произвольного запроса динамического списка этого реквизита формы.
После модификации текста произвольного динамического запроса реквизита управляемой формы 1С 8, становится возможным размещение колонки нового реквизита. И теперь рассмотрим код для программного вывода, размещения, добавления (как будет угодно) колонки в элемент-таблицу формы.

Рис. 5. Пример кода в 1С 8 для программного вывода колонки нового реквизита объекта конфигурации, в частности документа, в элемент «Таблица» управляемой формы
По логике программного вывода в прикладной задачи новая колонка, напомним с флажком, должна выводиться сразу после колонки «Номер», содержащей данные номеров документов списка. Код на скриншоте содержит условие на то, что если колонка «Номер» по каким то причинам, например скрыта пользователем в управляемой форме, что вполне может быть (странно но может быть, ведь номер для документа является ключевым реквизитом для работы пользователей), то тогда новая колонка будет выведена самой первой в списке.
| 1 | | | ТаблицаФормы = Элементы.СписокРеализацииТоваровУслуг; |
| 2 | | | КолонкаВставки = ТаблицаФормы.ПодчиненныеЭлементы.Найти(«Номер»); |
| 3 | | | |
| 4 | | | КолонкаОтгружено = Элементы.Вставить(«_Отгружено», Тип(«ПолеФормы»), ТаблицаФормы, КолонкаВставки); |
| 5 | | | КолонкаОтгружено.Вид = ВидПоляФормы.ПолеФлажка; |
| 6 | | | КолонкаОтгружено.Заголовок = «О.»; |
| 7 | | | КолонкаОтгружено.Подсказка = «Отгружено»; |
| 8 | | | КолонкаОтгружено.ТолькоПросмотр = Истина; |
| 9 | | | КолонкаОтгружено.ШиринаЭлемента = 5; |
| 10 | | | КолонкаОтгружено.ПутьКДанным = «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено»; |
Есть небольшие отличия от случая, который уже упоминался выше, добавления колонки для элемента формы Таблица динамического списка, как было описано смежной статье. В смежном случае был пример для таблицы, данными (ПутьКДанным) которой выступал «динамический список», но у которого основанием выступала таблица, а не произвольный запрос. Если отличия не учесть, то будут просто возникать ошибки. В данном же примере
Отличия заключаются в двух местах кода. Во-первых, это обращение к свойству «ШиринаЭлемента, а не просто «Ширина» как в случае, если колонка — это программно выводимая колонка динамического списка, но у которого указана «Основная таблица» и не используется произвольный запрос. Т.е. для программно добавляемой колонки динамического списка с произвольным запросом указывается свойство «ШиринаЭлемента».
Во-вторых, очень важно правильно указать значение свойства «ПутьКДанным», иначе можно получить ошибку:

Рис. 6. Пример ошибки «Недопустимое значение» при указании неверного значения для свойства «ПутьКДанным» элемента управляемой формы .
{Документ.РеализацияТоваровУслуг.Форма.ФормаСписка.Форма(26)}: Ошибка при установке значения атрибута контекста (ПутьКДанным)
КолонкаОтгружено.ПутьКДанным = «Объект.СписокРеализацииТоваровУслуг.ДопМФ_Отгружено»;
по причине:
Недопустимое значение
Недопустимое значение
Конечно, подобную ошибку можно «поймать» и при других условиях. Но когда она касается свойства «ПутьКДанным», то это явно говорит о том, что указанное строковое значение попросту не верное. Следует тщательно проанализировать корректность ее составления, т.к. в реквизитах управляемых форм можно запутаться.

Рис. 7. Демонстрация того, что данные элемента формы Таблица — это динамический произвольный запрос.
В текущей задаче реквизит формы (он не основной) носит имя «СписокРеализацийТоваровУслуг», а не так, как часто можно встретить в конфигурации, что основной реквизит формы носит имя «Объект». И значения для добавленной колонки берется из реквизита типа «ДинамическийСписок» и для элемента формы. Поэтому строка для «ПутьКДанным» — «СписокРеализацииТоваровУслуг.ДопМФ_Отгружено» с указанием через «.» имени нового реквизита.
Это все условия и нюансы, с которыми пришлось столкнуться на практике для программной модификации произвольного запроса динамического списка реквизита управляемой формы в 1С 8, чтобы потом программно вывести колонку нового реквизита объекта конфигурации базы в элемент «Таблица» формы .
Оцените, оказалась ли эта публикация полезна для Вас?

© www.azhur-c.ru 2013-2020. Все права защищены. Использование текстов и изображений с данной страницы без письменного разрешения владельца запрещено. При использовании материалов с данной страницы обязательно указание ссылки на данную страницу.
25-11-2021
Журавлев А.С.
(Сайт azhur-c.ru)
Назад
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов














