1с программно перенести в группу
Программная модификация формы может потребоваться в нескольких случаях:
- При доработке типовых конфигураций для облегчения процедуры последующего обновления. В этом случае будет изменен только модуль формы. Модули намного проще обновлять, чем форму.
- При реализации некоторых общих алгоритмов. Например, в подсистеме БСП «Запрет редактирования реквизитов объектов» для всех подключенных к подсистеме объектов предусмотрено программное создание кнопки для включения возможности редактирования реквизитов.
- При реализации некоторых специфических алгоритмов. Например, в справочнике Номенклатура создаются поля для редактирования дополнительных реквизитов.
В управляемой форме можно программно добавить, изменить и удалить:
Все указанные операции возможны только на сервере.
Программное изменение формы имеет ограничения:
- Удалить можно только программно добавленные реквизиты/команды/элементы. Нельзя программно удалить объекты, созданные в конфигураторе.
- Нельзя назначить реквизит основным.
Изменение команд формы
Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды . У коллекции есть несколько методов:
Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.
В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.
&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ;
Команда . Заголовок = «История изменений…» ;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОтобразитьИсторию ( Команда )
// действия команды
КонецПроцедуры
Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .
Изменение реквизитов формы
Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты ( Путь >) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Изменение реквизитов выполняется методом ИзменитьРеквизиты ( ДобавляемыеРеквизиты >, УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .
Внимание!
Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.
Создадим новый реквизит формы с именем Покупатель:
// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив ;
ДобавляемыеРеквизиты . Добавить(Новый РеквизитФормы («Покупатель», Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
Изменение элементов формы
Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:
Коллекция Элементы доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Вставить () , Добавить () , Переместить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере. Элементами коллекции могут быть:
Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие ( ИмяСобытия >, Действие >) .
Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.
Добавление команды и связанной с ней кнопки:
// Создание команды
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ; // В форме должна быть процедура с указанным наименованием
Команда . Заголовок = «История изменений…» ;
// Создание кнопки и связь ее с командой
Элемент = Элементы . Добавить ( «ИсторияИзменений» , Тип ( «КнопкаФормы» ));
Элемент.ИмяКоманды = «ИсторияИзменений» ;
Добавление реквизита и связанного с ним поля ввода:
// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты . Добавить (Новый РеквизитФормы ( «Покупатель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменение состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
// Создание поля ввода и связь с реквизитом
Элемент = Элементы . Добавить ( «Покупатель» , Тип ( «ПолеФормы» ));
Элемент . Вид = ВидПоляФормы . ПолеВвода ;
Элемент . ПутьКДанным = «Покупатель» ;
Назначение элементу формы обработчика события:
ЭлементПокупатель . УстановитьДействие ( «ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );
&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры
Внимание!
Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие () , рекомендуется задавать префикс Подключаемый_.
Внимание!
Остались вопросы?
Спросите в комментариях к статье.
Примеры работы с дополнительными реквизитами.
Как получить значение дополнительного реквизита:
Пример: мы делаем печатную форму документа "Заказ клиента" и хотим вывести на неё значение определённого дополнительного реквизита – "Должность покупателя".
Используем вложенный запрос, в котором соединяем левым соединением таблицу "Дополнительные реквизиты" документа "Заказ клиента" с Планом видов характеристик "Дополнительные реквизиты и сведения". Устанавливаем условие: заголовок дополнительного реквизита должен быть таким – "Должность покупателя". Таблицы соединяем по ссылке на "Заказ клиента".
Получается вот такой запрос:
Также можно использовать метод НайтиПоНаименованию ( "***" ) .
Переменная Ссылка – это ссылка на "Договор контрагента".
Проверка на предмет того, что дополнительный реквизит заполнен:
Как изменить значения дополнительных реквизитов:
Задействуем общий модуль УправлениеСвойствами , который входит в состав БСП.
Комментарии
У вас ошибка в коде:
МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДатаОтправки, ТекущаяДата());
Не хватает закрывающей скобки.
У вас ошибка в коде:
МассивСтруктур.Добавить(Новый Структура("Свойство, Значение", ДопРеквизитДатаОтправки, ТекущаяДата());
Посмотрим, как можно программно добавить реквизиты и новые элементы на форму. В форме элемента справочника «Номенклатура» создадим два реквизита формы и элементы для них. Новые элементы объединим в группу с горизонтальной группировкой.
Сейчас форма имеет следующий вид:
После добавления новых элементов она будет иметь вид:
Итак, добавляем реквизиты:
- ЕдиницаИзмерения , тип СправочникСсылка.ЕдиницыИзмерения ;
- ТекущийОстаток , тип Число .
Для удаления необходимо передать массив реквизитов на удаление в качестве второго параметра метода формы ИзменитьРеквизиты() . Удалять можно только реквизиты, созданные программно.
Теперь посмотрим, как можно изменить основной реквизит формы. Изменим табличную часть Состав документа РасходнаяНакладная :
Важно понимать, что данные добавленного реквизита сохраняться в ИБ не будут.
Необходимо при проведении приказа на отчисление, переносить студента в папку отчисленные, как это сделать?
1c 7.7 Программно Создать Новый Элемент В Формесписка Справочника
День добрый! Снова нужен совет профессионалов, бьюсь уже не один день. Проблема в следующем: .
Открыть группу иерархического справочника
Как можно открыть форму с отбором по группе, чтобы открылась только необходимая группа.
Загрузка контрагентов в конкретную группу справочника
Здравствуйте! Как создать правило обмена, согласно которому контрагенты одной базы (БП 2.0).
Как программно определить тип формы справочника
Как определить, с какой формой в данный момент работает пользователь: формой элемента или формой.
папку? попробовали бы типа статусы использовать для этого. а еще лучше через регистр сведений делать, так как один студент может зачисляться, отчисляться уходим в академ отпуск
Как получить значение реквизита одного справочника и перенести их в реквизит табличной части другого
Добрый день, очень сильно нужна помощь. Есть справочник "ВидыУслуг", реквизит "Тариф" .
Как при изменении данных в одном справочнике перенести некоторые данные в него из другого справочника?
Подскажите пожалуйста! Возможно ли такое? Есть справочник "База контрагентов" так скажем.
Во введенной символьной строке группу символов заменить на другую группу символов
Sub zamena() Dim s, snew, c As String Dim n, i As Integer s = InputBox("введите строку") n =.
Во введенной символьной строке группу символов заменить на другую группу символов
Задача : Во введенной символьной строке группу символов НН заменить на группу символов Нижний.
Программная модификация формы может потребоваться в нескольких случаях:
- При доработке типовых конфигураций для облегчения процедуры последующего обновления. В этом случае будет изменен только модуль формы. Модули намного проще обновлять, чем форму.
- При реализации некоторых общих алгоритмов. Например, в подсистеме БСП «Запрет редактирования реквизитов объектов» для всех подключенных к подсистеме объектов предусмотрено программное создание кнопки для включения возможности редактирования реквизитов.
- При реализации некоторых специфических алгоритмов. Например, в справочнике Номенклатура создаются поля для редактирования дополнительных реквизитов.
В управляемой форме можно программно добавить, изменить и удалить:
Все указанные операции возможны только на сервере.
Программное изменение формы имеет ограничения:
- Удалить можно только программно добавленные реквизиты/команды/элементы. Нельзя программно удалить объекты, созданные в конфигураторе.
- Нельзя назначить реквизит основным.
Изменение команд формы
Для управления составом команд у объекта УправляемаяФорма есть коллекция Команды . У коллекции есть несколько методов:
Коллекция Команды доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Добавить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере.
В качестве примера работы с командами формы создадим новую команду ИсторияИзменений с заголовком «История изменений…», которая будет вызвать обработчик ОтобразитьИсторию () . Создание выполняется при открытии формы.
&НаСервере
Процедура ПриСозданииНаСервере ( Отказ , СтандартнаяОбработка )
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ;
Команда . Заголовок = «История изменений…» ;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОтобразитьИсторию ( Команда )
// действия команды
КонецПроцедуры
Обработчик команды должен располагаться в форме и иметь директиву компиляции &НаКлиенте .
Изменение реквизитов формы
Чтение состава реквизитов формы выполняется функцией ПолучитьРеквизиты ( Путь >) , возвращающей массив типа РеквизитФормы . Параметр функции указывает путь к родительскому реквизиту (в виде строки). Если параметр опущен или указана пустая строка, возвращаются реквизиты верхнего уровня.
Изменение реквизитов выполняется методом ИзменитьРеквизиты ( ДобавляемыеРеквизиты >, УдаляемыеРеквизиты >) объекта УправляемаяФорма . В параметры ДобавляемыеРеквизиты и УдаляемыеРеквизиты передаются массивы с элементами типа РеквизитФормы .
Внимание!
Процесс изменения состава реквизитов является достаточно ресурсоемким. Фактически выполняется пересоздание формы. В связи с этим работа с реквизитами формы выполняется в пакетном режиме.
Создадим новый реквизит формы с именем Покупатель:
// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив ;
ДобавляемыеРеквизиты . Добавить(Новый РеквизитФормы («Покупатель», Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменения состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
Изменение элементов формы
Для управления составом элементов у объекта УправляемаяФорма есть коллекция Элементы . У коллекции есть несколько методов:
Коллекция Элементы доступна как на клиенте, так и на сервере. Изменять коллекцию (методы Вставить () , Добавить () , Переместить () и Удалить () ) можно только на сервере. Искать и получать количество элементов (методы Найти () и Количество () ) можно как на клиенте, так и на сервере. Элементами коллекции могут быть:
Элементам формы можно программно назначить обработчики событий. Для этих целей предназначен метод УстановитьДействие ( ИмяСобытия >, Действие >) .
Рассмотрим несколько наиболее распространенных на практике примеров работы с командами, реквизитами и элементами формы.
Добавление команды и связанной с ней кнопки:
// Создание команды
Команда = Команды . Добавить ( «ИсторияИзменений» );
Команда . Действие = «Подключаемый_ОтобразитьИсторию» ; // В форме должна быть процедура с указанным наименованием
Команда . Заголовок = «История изменений…» ;
// Создание кнопки и связь ее с командой
Элемент = Элементы . Добавить ( «ИсторияИзменений» , Тип ( «КнопкаФормы» ));
Элемент.ИмяКоманды = «ИсторияИзменений» ;
Добавление реквизита и связанного с ним поля ввода:
// Описание добавляемых реквизитов
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты . Добавить (Новый РеквизитФормы ( «Покупатель» , Новый ОписаниеТипов ( «СправочникСсылка.Контрагенты» ), , «Клиент» ));
// Изменение состава реквизитов
ИзменитьРеквизиты ( ДобавляемыеРеквизиты );
// Создание поля ввода и связь с реквизитом
Элемент = Элементы . Добавить ( «Покупатель» , Тип ( «ПолеФормы» ));
Элемент . Вид = ВидПоляФормы . ПолеВвода ;
Элемент . ПутьКДанным = «Покупатель» ;
Назначение элементу формы обработчика события:
ЭлементПокупатель . УстановитьДействие ( «ПриИзменении» , «Подключаемый_ПокупательПриИзменении» );
&НаКлиенте
Процедура Подключаемый_ПокупательПриИзменении ( Элемент )
// Действия события
КонецПроцедуры
Внимание!
Процедурам, которые устанавливаются в качестве обработчиков событий из кода с помощью метода УстановитьДействие () , рекомендуется задавать префикс Подключаемый_.
Внимание!
Остались вопросы?
Спросите в комментариях к статье.
Для оптимизации рутинной процедуры «отрисовки» внешнего вида формы, была написана небольшая процедура.
Применение
В примере кода для вновь созданной формы отчета на СКД добавляются группы-колонки и существующие стандартные реквизиты перемещаются (Результат — в левую, настройки в правую колонку).
Следует обратить внимание на установку свойства «Вид».
До его установки часть свойств элемента (расширения данного вида) будет недоступна, и при их установке вызывать ошибку.
Пример кода
Не экономьте на рекламе, охране и страховании.
Guesto notes
При доработке типовых решений для упрощения дальнейшей поддержки и обновления использую программное создание динамического списка и вывод его на форму.
Задача
Считаем, что есть типовая форма списка номенклатуры с динамическим списком. На форму необходимо добавить страницы: на первой выводить типовой список, а на второй список номенклатуры и данные РС «Данные для обработки». На текущий момент форма выглядит так:
Решение
План работ следующий:
- Создать страницы на форме;
- Переместить типовой динамический список на нужную страницу;
- Создать динамический список и вывести его на нужную страницу.
Далее будет показан код по логическим блокам, в конце статьи будет представлен итоговый код
Создание страниц
Программное формирование реквизитов и элементов формы можно в статье 1С. Программное добавление и удаление реквизитов формы
Перемещение элементов формы
Для перемещения типового динамического списка воспользуемся методом коллекции элементов формы Переместить()
Программное создание динамического списка
Добавляем реквизит формы с типом Динамический список и определяем основные свойства.
Теперь создадим элементы формы относящиеся к динамическому списку
Небольшая хитрость
Как видно из кода, на форме не отображается поле «Ссылка», если на клиенте программно обратиться к текущим данным нашего списка, то свойства ссылка в полученной коллекции не будет. Для предотвращения такой ситуации необходимо указать обязательность использования поля, тогда свойство будет передаваться на клиент всегда
Результат
Теперь проверяем, что у нас получилось. Первая страница, на которую мы перенесли типовой список
Рассмотрим пример, когда необходимо перенести данные справочника в другую группу. Для примера выберем справочник контрагентов демонстрационной конфигурации.
Прежде всего хотелось бы отметить, что часто у пользователей возникает сложность с переключением отображения полного перечня элементов справочника на отображение по группам и наоборот. Это производится кнопкой "Установка (отключение) режима вывода списка по группам".
Теперь можем перейти… собственно к описанию переноса данных между группами справочника. Например перенесем группу "Учредители" в группу "Поставщики" и Элемент "Добро" в группу "Покупатели".
в окне справа нажмем на пиктограмму "+" возле корневой группы "Контрагенты", это приведет к раскрытию списка по группам.
В этом же окне теперь выберем группу "Поставщики". А в правом окне выделим группу "Учредители".
Нажимаем правой клавишей мыши на группе "Учредители" и выбираем пункт меню "Перенести в другую группу". Подтверждаем действие нажатием кнопки "Да".
После этого группа "Учредители" станет подгруппой группы "Поставщики".
Аналогичные действия можно проделать с элементом "Добро" для перемещения в группу "Покупатели". Т.е в левом окне выделим группу "Покупатели", в правом окне на элементе "Добро" нажмем правой кнопкой и выберем пункт меню, отвечающий за перенос. Подтвердим выбор и элемент будет перенесен в новую группу.
В программе 1С:Предприятие 8.2 Бухгалтерия для Украины перенос элементов справочника в другую группу аналогичен рассмотренному выше. Отличия несущественны.
При выборе пункта меню "Переместить в группу" появляется окно выбора целевой группы. В нашем случае это "Группы контрагентов". После выбора производится собственно перемещение.
Если у Вас появились вопросы по статье или остались нерешенные проблемы обсудить их Вы можете на Форуме 1С Вопросы и ответы
2 комментария
Как сделать групповое перемещение элементов?
Добавить комментарий Отменить ответ
Для отправки комментария вам необходимо авторизоваться.
Заходите в «Одноклассники»!
Регистрируйтесь в «Вконтакте»!
Темы форума
1С на Линукс. advanter, 17.11
Аренда сервера.. за границей. advanter, 03.10
удаление чека. zvar, 11.09
1c 8.3 бухучет 8.2 сотрудники. zvar, 11.09
Корректировка расходной накладной. zvar, 11.09
Декретные. skameykin22, 30.07
обмен данными. taba88, 12.06
Списання малоцінки. advanter, 12.06
Допоможіть новачку. ). advanter, 12.06
Ошибка потока 1с 8.2 Предприятие после обновления SOS. advanter, 07.06
Изменить название основания на печатной форме. advanter, 16.05
Движение денежных средств за период по ответственным. advanter, 25.04
Рубрики
Это интересно:
Ответы на вопросы:
Полное или частичное копирование материалов сайта разрешается при наличии в тексте прямой индексируемой ссылки на сайт
У многих подписчиков и читателей нашего сайта периодически возникают вопросы по работе с интерфейсом программы 1С, по выполнению стандартных операций с информационной базой данных. Мы описывали некоторые способы в предыдущих статьях: «Как в 1с удалить помеченные на удаление документы ? 1С 7.7 и 1С 8.2», «Где в 1С найти …? 1С 7.7 и 1С 8.2», «Как добавить единицы измерения в 1С 7.7?», «Как устранить ошибку «Порядок сортировки, установленный для базы данных, отличается от системного»?», «Как определить версию 1С? (для 1С 7.7 и 1С 8.2)» и т.д. Однако функционал прогаммы 1с достаточно обширен и мы, по мере возможности, будем освещать самые наболевшие вопросы наших читателей и подписчиков.
В данной статье рассмотрим возможность группового перемещения элементов справочника из группы в группу. Это могут быть элементы номенклатуры, контрагенты, различние статьи и т.п.
Для перемещения нескольких элементов справочника удобно использовать многофункциональную обработку, которая входит в конфигурацию 1С Бухгалтерия 8,2 , она называется «Групповая обработка справочников и документов».
Откроем пункт главного меню «Сервис» и подпункт «Групповая обработка справочников и документов».
В открывшейся форме выберем тип объектов отбора — «Справочники». Далее нажмем кнопку «Добавить» с зеленой пиктограммой «+».
В отборе справочника для выбора элементов найдем, например, справочник номенклатуры, выделим его и нажмем кнопку «Выбрать».
Далее выполним отбор по одному из признаков, которые характеризуют элементы справочника номенклатуры. Для этого в секции «Отбор» нажмеп подобную выбранной ранее кнопку «Добавить». Далее выберем «Родитель» и нажмем «ОК».
В секции отбора установим значение критериев отбора и родителя для перемещаемых элементов. Для примера сделаем перемещение из папки номенклатуры «Послуги» в папку «Послуги фірми». Установим тип сравнения «В списке».
Далее нажмем в колонке «Значение» кнопку «…» и добавим папку «Послуги».
При добавлении, в открывшемся справочнике номенклатуры, выделим папку из которой будет происходить перемещение и, кликнув правой клавишей мышки, нажмем «Выбрать». Далее, в редактировании списка значений, нажмем «ОК». Стоит отметить, что на этом этапе можно добавлять несколько значений, в случае, если нужно перенести данные не из одной, а из нескольких папок.
Промежуточный результат выглядит следующим образом.
Далее нажимаем кнопку «Отобрать» и получаем на второй закладке формы результат отбора — элементы, входящие в папку «Послуги» справочника номенклатуры.
На данном этапе можно отредактировать список обрабатывваемых позиций для далнейшей обработки, которую выбираем в секции «Действие». В нашем случае это «Изменить:(Группа)». В следующем реквизите указываем группу, в которую будем производить перемещение и нажимаем кнопку «Выполнить». Соглашаемся с предупреждением для запуска процесса перемещения.
Теперь, если взглянуть в справочник номенклатуры, то содержимое папки «Послуги» перекочевало в папку «Послуги фірми». Что и требовалось доказать.
На этом наш пример можно считать законченным. Рассмотренная обработка весьма масштабируема, поэтому, поэкпериментировав с заполнениями отборов можно получить в пользование достаточно мощный и нужный инструмент. Удачи в исследованиях.
В случае, если у Вас появятся какие-либо сложности, свяжитесь с нами, мы обязательно поможем.
Обсудить операцию и задать по ней вопросы можно в форуме «1С:Вопросы и ответы».
Изменение реквизитов документов с помощью «Групповой обработки справочников и документов»
Если у Вас появились вопросы по статье или остались нерешенные проблемы обсудить их Вы можете на Форуме 1С Вопросы и ответы
Читайте также: