1с программно перенести в группу

Обновлено: 07.07.2024

Программная модификация формы может потребоваться в нескольких случаях:

  • При доработке типовых конфигураций для облегчения процедуры последующего обновления. В этом случае будет изменен только модуль формы. Модули намного проще обновлять, чем форму.
  • При реализации некоторых общих алгоритмов. Например, в подсистеме БСП «Запрет редактирования реквизитов объектов» для всех подключенных к подсистеме объектов предусмотрено программное создание кнопки для включения возможности редактирования реквизитов.
  • При реализации некоторых специфических алгоритмов. Например, в справочнике Номенклатура создаются поля для редактирования дополнительных реквизитов.

В управляемой форме можно программно добавить, изменить и удалить:

Все указанные операции возможны только на сервере.

Программное изменение формы имеет ограничения:

  • Удалить можно только программно добавленные реквизиты/команды/элементы. Нельзя программно удалить объекты, созданные в конфигураторе.
  • Нельзя назначить реквизит основным.

Изменение команд формы

Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды . У коллекции есть несколько методов:

Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.

В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.

&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ;
Команда . Заголовок = «История изменений…» ;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОтобразитьИсторию ( Команда )
// действия команды
КонецПроцедуры

Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .

Изменение реквизитов формы

Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты ( Путь >) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.

Изменение реквизитов выполняется методом ИзменитьРеквизиты ( ДобавляемыеРеквизиты >, УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .

Внимание!

Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.

Создадим новый реквизит формы с именем Покупатель:

// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив ;
ДобавляемыеРеквизиты . Добавить(Новый РеквизитФормы («Покупатель», Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));

// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );

Изменение элементов формы

Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:

Коллекция Элементы доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Вставить () , Добавить () , Переместить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере. Элементами коллекции могут быть:

Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие ( ИмяСобытия >, Действие >) .

Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.

Добавление команды и связанной с ней кнопки:

// Создание команды
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ; // В форме должна быть процедура с указанным наименованием
Команда . Заголовок = «История изменений…» ;
// Создание кнопки и связь ее с командой
Элемент = Элементы . Добавить ( «ИсторияИзменений» , Тип ( «КнопкаФормы» ));
Элемент.ИмяКоманды = «ИсторияИзменений» ;

Добавление реквизита и связанного с ним поля ввода:

// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты . Добавить (Новый РеквизитФормы ( «Покупатель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменение состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
// Создание поля ввода и связь с реквизитом
Элемент = Элементы . Добавить ( «Покупатель» , Тип ( «ПолеФормы» ));
Элемент . Вид = ВидПоляФормы . ПолеВвода ;
Элемент . ПутьКДанным = «Покупатель» ;

Назначение элементу формы обработчика события:

ЭлементПокупатель . УстановитьДействие ( «ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );

&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры

Внимание!

Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие () , рекомендуется задавать префикс Подключаемый_.

Внимание!

Остались вопросы?
Спросите в комментариях к статье.

Для оптимизации рутинной процедуры «отрисовки» внешнего вида формы, была написана небольшая процедура.

Применение

В примере кода для вновь созданной формы отчета на СКД добавляются группы-колонки и существующие стандартные реквизиты перемещаются (Результат — в левую, настройки в правую колонку).

Следует обратить внимание на установку свойства «Вид».

До его установки часть свойств элемента (расширения данного вида) будет недоступна, и при их установке вызывать ошибку.

Пример кода

Не экономьте на рекламе, охране и страховании.

Guesto notes

При доработке типовых решений для упрощения дальнейшей поддержки и обновления использую программное создание динамического списка и вывод его на форму.

Задача


Считаем, что есть типовая форма списка номенклатуры с динамическим списком. На форму необходимо добавить страницы: на первой выводить типовой список, а на второй список номенклатуры и данные РС «Данные для обработки». На текущий момент форма выглядит так:

Решение

План работ следующий:

  1. Создать страницы на форме;
  2. Переместить типовой динамический список на нужную страницу;
  3. Создать динамический список и вывести его на нужную страницу.

Далее будет показан код по логическим блокам, в конце статьи будет представлен итоговый код

Создание страниц

Программное формирование реквизитов и элементов формы можно в статье 1С. Программное добавление и удаление реквизитов формы

Перемещение элементов формы

Для перемещения типового динамического списка воспользуемся методом коллекции элементов формы Переместить()

Программное создание динамического списка

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

Теперь создадим элементы формы относящиеся к динамическому списку

Небольшая хитрость

Как видно из кода, на форме не отображается поле «Ссылка», если на клиенте программно обратиться к текущим данным нашего списка, то свойства ссылка в полученной коллекции не будет. Для предотвращения такой ситуации необходимо указать обязательность использования поля, тогда свойство будет передаваться на клиент всегда

Результат

Теперь проверяем, что у нас получилось. Первая страница, на которую мы перенесли типовой список

А что же на "мисте" этот вариант не выложил?

"А зачем:<br>> Спис.ДобавитьЗначение(Спр.Код);<br>> Код = Спис.ПолучитьЗначение(С,Ст);<br>> Спр.НайтиПоКоду(Код);<br>Если можно:<br>Спис.ДобавитьЗначение(Спр.ТекущийЭлемент());<br>и далее: <br>Для С = 1 По Спис.РазмерСписка() Цикл<br>Элемент=Спис.ПолучитьЭлемент(С);<br>Элемент.Родитель=ВотЭтаГруппа;<br>Спр.Записать();<br>КонецЦикла;<br><br>Но проще вообще:<br>Спр.ВыбратьЭлементы(1); <br>Пока Спр.ПолучитьЭлемент(0) = 1 Цикл<br>Если Спр.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли;<br>Спр.Родитель=ВотЭтаГруппа;<br>Спр.Записать();<br>КонецЦикла;<br><br>Если я не прав спецы меня поправят. :)"

"> Но проще вообще:<br>> Спр.ВыбратьЭлементы(1); <br>> Пока Спр.ПолучитьЭлемент(0) = 1 Цикл<br>> Если Спр.ЭтоГруппа() = 1 Тогда Продолжить; КонецЕсли;<br>> Спр.Родитель=ВотЭтаГруппа;<br>> Спр.Записать();<br>> КонецЦикла;<br>> <br>> Если я не прав спецы меня поправят. <br><br>выборка собьётся!"

"> (перемещаю только элементы справочника, не входящие ни в одну из групп):<br> <br><br>Процедура Сформировать()<br><br>Спр = СоздатьОбъект("Справочник.Контрагенты"); <br><br>Спр.НайтиПоНаименованию("Наша группа");<br><br>ВотЭтаГруппа = Спр.ТекущийЭлемент(); <br><br>Спис = СоздатьОбъект("СписокЗначений");<br><br><br>Спр.ВыбратьЭлементы(0); <br><br>Пока Спр.ПолучитьЭлемент(0) = 1 Цикл<br><br>Если (Спр.ЭтоГруппа() = 1) или (спр.Уровень()>0) Тогда Продолжить; КонецЕсли;<br><br>Спис.ДобавитьЗначение(Спр.ТекущийЭлемент());<br> <br>КонецЦикла;<br><br>Спр = СоздатьОбъект("Справочник.Контрагенты"); <br><br>Для С = 1 По Спис.РазмерСписка() Цикл<br><br>Код = Спис.ПолучитьЗначение(С);<br><br>Если Спр.НайтиЭлемент(Код)=1 тогда<br><br>Спр.Родитель=ВотЭтаГруппа; <br><br>Спр.Записать(); <br>КонецЕсли;<br>КонецЦикла;<br><br>КонецПроцедуры<br><br>соточку на тел )))))))"

1c 7.7 Программно Создать Новый Элемент В Формесписка Справочника
День добрый! Снова нужен совет профессионалов, бьюсь уже не один день. Проблема в следующем: .

Открыть группу иерархического справочника
Как можно открыть форму с отбором по группе, чтобы открылась только необходимая группа.

Загрузка контрагентов в конкретную группу справочника
Здравствуйте! Как создать правило обмена, согласно которому контрагенты одной базы (БП 2.0).


Как программно определить тип формы справочника
Как определить, с какой формой в данный момент работает пользователь: формой элемента или формой.

папку? попробовали бы типа статусы использовать для этого. а еще лучше через регистр сведений делать, так как один студент может зачисляться, отчисляться уходим в академ отпуск Мне именно перенос нужен, и я не правильно выразился, не папка а предопределенная группа. ну при проведении получите объект студента и поменяйте там значение группы


Как получить значение реквизита одного справочника и перенести их в реквизит табличной части другого
Добрый день, очень сильно нужна помощь. Есть справочник &quot;ВидыУслуг&quot;, реквизит &quot;Тариф&quot; .


Как при изменении данных в одном справочнике перенести некоторые данные в него из другого справочника?
Подскажите пожалуйста! Возможно ли такое? Есть справочник &quot;База контрагентов&quot; так скажем.


Во введенной символьной строке группу символов заменить на другую группу символов
Sub zamena() Dim s, snew, c As String Dim n, i As Integer s = InputBox(&quot;введите строку&quot;) n =.

Во введенной символьной строке группу символов заменить на другую группу символов
Задача : Во введенной символьной строке группу символов НН заменить на группу символов Нижний.

Особенности реализации перетаскивания в формах

В 1С:Предприятии реализован механизм поддержки операций перетаскивания. С его помощью возможно осуществлять перенос данных между разными элементами управления. Например, можно переносить элементы списка справочника из одной группы в другую, переносить данные из табличного поля в поле табличного документа или перенести список выделенных файлов из проводника MS Windows в какой-либо элемент управления.

Операции перетаскивания поддерживают следующие элементы управления:

  • табличное поле;
  • поле табличного документа;
  • поле календаря;
  • поле картинки.

При операциях перетаскивания используются следующие понятия:

  • источник данных - элемент управления из которого можно перетаскивать данные;
  • <приемник данных - элемент управления в который можно перетаскивать данные.

Существует возможность разрешать или запрещать элементам управления предоставлять или принимать данные, т.е. быть источником или приемником данных. Для этого у элементов управления существуют следующие свойства: “Разрешить начало перетаскивания” – разрешает элементу управления предоставлять данные и “Разрешить перетаскивание” – разрешает элементу управления принимать данные. Эти свойства можно устанавливать из палитры свойств или из встроенного языка .

Последовательность событий при перетаскивании

При нажатии кнопки мыши на выделенной области элемента управления (это может быть строка, группа строк табличного поля, область поля табличного документа, дата календаря или картинка) у элемента управления – источника данных вызывается обработчик события НачалоПеретаскивания . В качестве параметров данного события передаются объект типа “ ПараметрыПеретаскивания ” и “ СтандартнаяОбработка ”. Параметр ПараметрыПеретаскивания имеет следующие свойства:

  • Значение - содержит перетаскиваемое значение, например, для табличного поля это может быть ссылка на объект, для табличного документа – область табличного документа, для календаря – дата. Можно присвоить этому свойству свое значение (например, какую-нибудь структуру), тогда это значение будет являться перетаскиваемым объектом.
  • Действие – указывает действие перетаскивания и является значением типа ДействиеПеретаскивания ( Копирование , Перемещение , Выбор или Отмена ).
  • ДопустимыеДействия – указывает допустимые действия перетаскивания и является значением типа ДопустимыеДействияПеретаскивания ( Копирование , Перемещение , КопированиеИПеремещение , H еОбрабатывать ). При помощи этого свойства можно указать какие операции возможны с данными источника данных (например, только копирование).

Параметр СтандартнаяОбработка позволяет разрешить или запретить стандартную обработку операции перетаскивания из данного элемента управления. Для события НачалоПеретаскивания стандартной обработкой является начало перетаскивания данных .

Далее, у элемента управления – приемника данных вызывается обработчик события ПроверкаПеретаскивания . Данный обработчик вызывается всякий раз, когда курсор попадает на новый объект в элементе управления – приемнике данных (например, в новую ячейку табличного поля или поля табличного документа, при попадании в новую дату в поле календаря). Набор параметров данного события зависит от элемента управления – приемника данных, но первые два параметра у всех одинаковы. Это объект типа ПараметрыПеретаскивания и СтандартнаяОбработка . Остальные параметры описывают объект под курсором. Для табличного поля это Строка и Колонка , для поля табличного документа – Область , для календаря – Дата , а для поля картинки дополнительных параметров нет. При обработке данного события можно управлять видом курсора, т.е. например указывать что перетаскивание в данный элемент управления запрещено или возможно только копирование. Для этого необходимо установить необходимое действие в свойстве Действие параметра ПараметрыПеретаскивания. Необходимо учитывать , что устанавливаемое действие перетаскивания должно быть разрешенным , т . е . не вступать в противоречие с значением свойства ДопустимыеДействия . Например, действие Копирование не вступает в противоречие со значением допустимых действий КопированиеИПеремещение , а значение Перемещение вступает в противоречие со значением допустимых действий Копирование . Параметр СтандартнаяОбработка используется для указания возможности стандартной обработки элементом управления данного события. Стандартная обработка перетаскивания зависит от типа элемента управления :

Для табличного поля проверяется возможность вставки значения, т.е. проверяется тип значения, и если он совпадает с типом отображаемых данных, то производятся стандартные действия. Стандартные действия для иерархических динамических списков – перемещение в группу, для табличных полей , отображающих наборы записей или табличные части изменение порядка строк и копирование.

Для поля табличного документа – проверка возможности вставить передаваемое значение.

Для поля картинки и календаря стандартной обработки нет.

При отпускании клавиши мыши в элементе управления – приемнике данных вызывается обработчик события Перетаскивание . Набор параметров этого события тот же, что и у события ПроверкаПеретаскивания . Параметр СтандартнаяОбработка позволяет разрешить или запретить стандартную обработку события элементом управления. Стандартные действия перетаскивания описаны выше .

Затем в элементе управления – источнике данных вызывается обработчик события ОкончаниеПеретаскивания . При обработке этого события элемент управления – приемник данных может, например, удалить перемещенные данные или очистить какие – либо переменные.

В демонстрационную конфигурацию ИТС помещен пример , показывающий основные приемы при реализации перетаскивания в формах . Описание примера см. в разделе Пример реализации перетаскивания в формах.

Читайте также: