1с записать дополнительный реквизит программно
Введение в управляемая форма 1С реквизиты элементы команды
Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.
Программное переопределение обработчиков событий формы и элементов формы
В теле модуля формы:
А в новой процедуре нужно добавить вызов основной, если такая процедура есть.
Аналогично можно поступить и с обработчиками элементов формы:
Программное создание групп формы.
Доступные виды групп формы:
Программное добавление команды на форму.
Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.
Программное создание декораций форм.
Программное добавление реквизита на форму.
Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.
Вывод реквизитов на форму.
Вызов процедур при создании на сервере 1С
После описания всех процедур выводим их в процедуре ПриСозданииНаСервере. Также можно изменить программно некоторые свойства формы, например, заголовок. Чтобы был виден только наш заголовок, нужно отключить свойство Автозаголовок.
Некоторые советы при программном редактировании формы
Итак, взглянем на получившийся результат. Все элементы на форме созданы программно:
Как мне программно при чтении Excel-файла записать в них данные.
Я могу из файла брать название номенклатуры на русск. языке, искать в справочнике нужный элемент. Как к данному найденному элементу записать соответствующие названия на англ. и эст. в соответствующие доп. реквизиты?
// Возвращает значение дополнительного свойства объекта.
//
// Параметры:
// Объект - ЛюбаяСсылка - ссылка на объект, например, СправочникСсылка.Номенклатура,
// ДокументСсылка.ЗаказПокупателя, .
// Свойство - ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения - ссылка на
// дополнительный реквизит, значение которого нужно получить.
// - Строка - Имя дополнительного свойства.
//
// Возвращаемое значение:
// Произвольный - любое значение, допустимое для свойства.
//
а функции ЗначенияСвойств нету же
надо самому дописать? (10) Серега, огромное тебе спасибо за наводки. Получилось прочитать (4) Подскажите , что не так в моем примере ?
Загружаем из Excel в Розницу2.2 номенклатуру, у которой ведены Дополнительные Реквизиты Допы с типом значения - Дополнительное значение
(12) Нужно сохранить объект перед записью доп.реквизитов
(14)
Внутри модуля УправлениеСвойствами
у меня ВладелецСвойств это НовыйЭл , его тип СправочникОбъект.Номенклатура - это правильно ?
(15) Возник еще вопрос , как сделать из " НовыйЭл " СправочникСсылка,Номенклатура ? (16) ЭлементНом=НовыйЭл.Ссылка;Ошибок нет , но доп реквизиты не появились.
При передаче в модуль УправлениеСвойствами.ЗаписатьСвойстваУОбъекта
Значение заполнено , а свойство пустое поле.
Что-то не так заполняю ?
(18) В процедуру УправлениеСвойствами.ЗаписатьСвойстваУОбъекта нужно передать ссылку на объект и таблицу значений,
пример
(19) Спасибо , что отвечаете.
Вопрос еще в наименовании Доп Реквизита.
В Дополнительных реквизитах (Администрирование- Общие настройки) по Номенклатуре прописаны Доп. свойства справочника "Номенклатура" (Общий) , имя Допы.
Тогда строка выглядит так
НовСтр.Свойство=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Допы (Доп. свойства справочника ""Номенклатура"" (Общий))");
С другой стороны в форме Допов (Дополнительный реквизит) есть Имя (Для разработчиков)
Допы_abe6502c17e640daaa03e18f232d87d4
Тогда строка должна быть такой
НовСтр.Свойство=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Допы_abe6502c17e640daaa03e18f232d87d4)");
У меня не проходит ни первый , ни второй вариант . Свойство - пустое
Кстати, просто имя "Допы" тоже пробовала.
Что еще я пишу не так ?
1с дополнительные сведения в режиме Предприятие
Рассмотрим, как добавить в документе дополнительное сведение. Для примера возьмем конфигурацию Управление торговлей 11, документ Авансовый отчет.
- Откроем любой документ для которого необходимо дополнительное сведение;
- На форме документа нажмем кнопку Открыть дополнительные сведения;
- Откроется форма дополнительных сведений;
- Нажимаем кнопку Все действия -> Изменить состав дополнительных сведений;
- Нажимаем кнопку Добавить -> Новое;
- В открывшемся окне заполняем Наименование свойства и его Тип;
- Жмем Записать и закрыть;
- Теперь снова откроем наш документ и нажмем кнопку Открыть дополнительные сведения;
- В форме 1с дополнительные сведения появится строчка с добавленным свойством. Ему можно задать любое значение заданного типа;
- Данное свойство будет доступно во всех документах Авансовый отчет, для каждого документа можно задать свое значение.
Функция получающая в 1с дополнительные сведения
- Ссылка. Тип: Любая ссылка. Ссылка на объект имеющий дополнительные сведения;
- Свойство. Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Свойство, значение которого для данного объекта мы хотим получить.
1с дополнительные сведения функция программной записи
Данная функция осуществляет программную запись значения в дополнительные сведения объекта по переданному свойству. Предназначена для конфигурации Управление торговлей 11. Возвращает значение Истина в случае успешной записи и Ложь в случае ошибки.
- Объект Тип: Любая ссылка. Ссылка на объект для которого записывается сведение;
- Свойство Тип: План видов характеристик ДополнительныеРеквизитыИСведения. Дополнительное свойство;
- Значение Тип: Произвольный(Задается при создании (редактировании) свойства в плане видов характеристик ДополнительныеРеквизитыИСведения). Значение, которое будет записано в дополнительные сведения.
Если вы еще не знаете, как правильно работать с механизмом дополнительных реквизитов в 1с 8, то прочтите об этом в статье Получить / записать дополнительные реквизиты программно.
Довольно часто встречаются задачи, когда нужно организовать программное заполнение формы какого-то объекта. Скажем, у нас есть форма документа, на форме есть реквизиты, и нам нужно сделать команду, которая заполнит эти реквизиты. Данные для заполнения предполагается получать запросом.
Если конфигурация типовая, то, наверное, самый простой способ решения такой задачи – создать внешнюю обработку вида "Заполнение объекта".
Заполнение формы объекта с помощью внешней обработки
Строка с соответствующим параметром в модуле обработки:
Подключив обработку и указав, для какого документа она назначена, мы получим в форме документа команду. Тип команды задаётся при создании внешней обработки, и от него зависит, где и как будет выполняться обработчик команды. Для наших целей может подойти один из следующих типов команд:
- ВызовСерверногоМетода – обработчик команды располагается в модуле обработки;
- ВызовКлиентскогоМетода – обработчик команды располагается в модуле формы обработки;
- ЗаполнениеФормы – обработчик команды располагается в модуле обработки и позволяет работать с данными формы. Также позволяет вызвать серверную процедуру из модуля формы объекта. При этом можно заполнить форму не записывая объект.
Возможность заполнить форму не записывая объект – это то, что нужно. Ведь пользователь скорее всего ожидает, что по нажатию кнопки форма заполнится, а записываться будет позднее, после проверки результата заполнения. Поэтому выбираем тип команды – ЗаполнениеФормы.
В конечном итоге код в модуле обработки будет выглядеть примерно так:
В общем счёте задача решена. Однако, у такого способа есть небольшой недостаток – команда на форме размещается в определённом месте, а не там, где мы хотим её разместить. К примеру, на форме уже есть группа команд, включающая в себя команды заполнения, и мы хотели бы видеть новую команду в этой группе, но при подключении обработки команда на форме будет расположена отдельно от группы.
В связи с этим можно реализовать другой способ: добавить команду непосредственно в форму объекта – либо в основной конфигурации, либо в расширении – а обработчик команды организовать в модуле формы.
Заполнение формы объекта посредством обработчика команды в модуле формы
Итак, размещаем команду на форме объекта в том месте, которое нам нравится. В модуле формы добавляем клиентскую процедуру обработчика команды, из которой будем вызывать серверную процедуру. Серверную процедуру тоже создадим, она нам понадобится потому, что по условию задачи данные для заполнения получаются запросом.
Над серверной процедурой нужно подумать. В ней у нас будет объект формы с типом "ДанныеФормыСтуктура". Что-либо менять или заполнять в этом объекте не получится, возникнет ошибка "Объект недоступен для изменения".
Можно получить объект документа Объект . Ссылка . ПолучитьОбъект () , и заполнить его данными. Но тогда, чтобы увидеть данные в открытой форме, объект придётся записать, а это не очень хорошо.
Будет лучше, если данные добавятся без записи, и мы можем это сделать с помощью метода РеквизитФормыВЗначение . Этот метод преобразует реквизит формы в объект прикладного типа, и вот этот объект прикладного типа мы можем заполнить, а затем, уже заполненный, преобразовать обратно с помощью метода ЗначениеВРеквизитФормы . Выглядеть это будет примерно так:
Читайте также: