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

Механизм ввода на основании - это один из прикладных механизмов платформы . Он позволяет упростить работу пользователя с прикладным решением и избавить его от повторного ввода данных, которые уже хранятся в информационной базе.

Рассмотрим простой пример. Допустим, в прикладном решении существует документ Поступление товара , который фиксирует факт появления в организации некоторых позиций номенклатуры:

После того, как номенклатура получена от поставщика, следует оформить документ Оплата товаров и услуг , в котором указать поставщика и сумму, которую ему необходимо перечислить за поставленный товар:

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

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

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

Разработка интерфейса в 1С состоит из двух частей – разработка меню или рабочего стола и разработка экранных форм 1С. Окна, с которыми пользователь работает в 1С, называют экранные формы 1С или просто формы 1С.

Пользователи в программе работают с формами 1С. Мало того — пользователи видят только формы 1С. Поэтому с точки зрения удобства работы в программе это один из важных элементов. При этом убить времени на разработку формы 1С можно больше, чем на программирование самого сложного алгоритма.

Частой ошибкой программистов является попытка нарисовать все по своему вкусу. Сделать фон синим, а надписи зеленым. Или желтый на черном. Или как он ему нравится в какой-то другой его любимой программе.

К сожалению, этот подход ошибочен, так как пользователи привыкли работать с типовыми формами 1С, которых в конфигурации большинство. Рисовать собственный велосипед, помечать его надписями Courier вида «Copyright Vasya Pupkin» — это явно дурной тон.

Сейчас мы с Вами пройдем краткий ликбез по рисованию форм 1С.

Что такое Формы 1С

Форма 1С – это метод представления пользователю. Обычно форма представляет собой ряд полей, которые требуется заполнить и набор кнопок (команд меню) для управления. Форма 1С есть у большинства объектов 1С.

В толстом клиенте 1С используются «обычные» формы 1С. Это значит, что программист просто рисует мышкой форму 1С также как это делается в Visual Studio и других фреймфорках.

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

Большинство форм 1С типовых конфигураций в 1С имеют свое, типовое представление, привычное пользователю.

Как работают формы 1С

Логика (порядок) работы пользователя в 1С следующая:

Таким образом пользователь работает всегда с формами 1С, начиная с форма списка 1С и переходя к форме элемента 1С. Если программист не нарисовал формы, то 1С генерирует формы по умолчанию. Они естественно лишены идеальной красоты и совершенства, но работать позволяют.

Автоматически сгенерированная форма списка 1С обычно содержит минимум полей (код/наименование и дата/номер соответственно). Автоматически сгенерированная форма элемента обычно содержит все поля (реквизиты), перечисленные сверху вниз.

Задача формы 1С – открыться и ждать действий пользователя. При действии – отреагировать. Таким образом основу модуля формы 1С составляют обработчики событий. Это такие функции, которые вызываются тогда, когда пользователь совершает какое то действие на форме 1С.

Где находятся формы 1С

В режиме 1С Предприятие при выборе практически любого объекта 1С (справочника, документа, отчета, обработки и т.п.) Вам откроется форма этого объекта.

В конфигураторе, в окне конфигурации, выберите нужный Вам объект, раскройте его ветку, чтобы увидеть вложенную ветку Формы 1С.

Другой вариант – открыть редактор объекта (два раза мышкой или поставить курсор и Enter) и перейти на закладку Формы 1С.

Здесь расположен список форм 1С. Одну из добавленных форм 1С можно добавить как форма по-умолчанию (форма списка 1С, форма элемента 1С и так далее).

Создание форм 1С

Чтобы добавить новую форму 1С, нужно нажать кнопку Добавить (Ins на клавиатуре). Чтобы войти в существующую – нажмите на нее два раза мышкой.

Конструктор предложит Вам выбрать вид формы 1С – форма элемента 1С, списка. Здесь же можно добавить или убрать командные панели на форме 1С. Чаще всего эти настройки оставляются как есть, по умолчанию.

Открывается форма 1С, заполненная по умолчанию — на нее добавились все реквизиты объекта 1С, которые есть. Отметить галочками конкретный список требуемых полей можно на второй закладке конструктора.

Ненужные реквизиты можно удалить. Для этого выделите одно или несколько полей и нажмите Del.

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

Чтобы добавить на форму 1С новые реквизиты, нажмите кнопку на панели Размещение данных (меню Форма/Размещение данных), установите галочки на тех элементах, которые нужно добавить, а также галочки «Вставить надписи» и «Разместить автоматически».

По другому можно просто добавить элемент управления, нажав соответствующую кнопку на панели внизу или выбрав в меню Форма/Вставить элемент управления. Нажмите на элементе управления (поле) два раза левой кнопкой мыши и откроются его свойства. Свойство «Данные» содержит название реквизита . Здесь его можно изменить или назначить.

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

Почти на всех формах документа используются закладки. Добавляется закладка так же, как и другой элемент управления (см. выше), только нужно выбрать элемент управления «Панель». Чтобы добавить страницу панели, нажмите на нее правой кнопкой мыши и выберите «Добавить страницу». Другие элементы управления (поля) на страницы панели просто перетаскиваются.

Чтобы изменить размер формы 1С, просто подведите курсор к краю формы 1С, нажмите левую кнопку мышки и просто перетащите край формы 1С.

Чтобы форма 1С заработала – т.е. делала что-то в ответ на действия пользователя – нужно добавить функции обработчики. Войдите в свойства любого элемента (щелкнув на нем два раза левой кнопкой мыши) или самой формы 1С (аналогично на заголовке формы). В самом низу окна свойств есть раздел «События». Выберите удобное событие (для всех полей это обычно «ПриИзменении», для формы «ПриОткрытии») и нажмите кнопку с лупой. Откроется ее обработчик события.

Для кнопок добавление происходит так же. Однако кроме произвольных обработчиков можно выбрать один из стандартных для этой формы (для формы справочника это одни стандартные действия, для формы документа – другие). Просто выберите одно из стандартных действий в свойстве «Действие» или нажмите крестик, если хочется сделать свой обработчик.

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

  • Неправильный выбор объекта;
  • Неверное количество или опечатка в наименовании;
  • Задвоение элементов справочников, их не уникальность или пересортица;
  • Игнорирование заполнения полей, критически важных для правильного расчета и бесперебойной работы программы.

Решением последней проблемы является, для восьмой версии программы 1С проверка заполнения реквизитов формы.

Проверка заполнения для обычной формы

При открытии формы пользователем, в случае если режим запуска «Обычное приложение», элементы, обязательные к заполнению выделяются красной пунктирной строкой (Рис.1).

Как видно из приведенного примера, полями документа «Реализация товаров и услуг», обязательными для заполнения, являются «Номер» и «Контрагент». При этом поле «Номер» недоступно для редактирования. Это значит, что при записи документа в информационную базу оно автоматически будет заполнено в соответствии с правилами нумерации, заданными для данной организации.

Запись элементов справочников или проведение документов, содержащих незаполненные обязательные поля, будет вызывать исключительную ситуацию (Рис. 2).

Рис. 2

Более подробную информацию о том, какое конкретно поле не заполнено, можно увидеть в окне служебных сообщений.

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

  1. Открываем форму в Конфигураторе;
  2. Кликаем правой кнопкой мышки по элементу формы, и вызываем окно «Свойства»;
  3. Необходимо проставить флажки АвтоОтметкаНезаполненного и АвтоВыборНезаполненного в подменю «Использование» (Рис.3);

Непосредственная проверка, как правило, прописывается в модуле объекта.

Для справочников и непроводимых документов процедуру проверки заполнения целесообразно вызывать при записи элемента. Не до конца заполненные документы, если они проводятся, можно записать в базу, а процедуру проверки лучше вызывать перед формированием движений, то есть при проведении. Выполнение проверки в обработках и отчетах, содержащих поля обязательные для заполнения, целесообразно производить непосредственно в обработке нажатия кнопки.

Проверить отличается ли значение, переданное в поле от пустого (значения по умолчанию), можно с помощью функции ЗначениеЗаполнено(«Знач»). При этом следует иметь в виду, что если поле имеет составной тип данных, выполнение этой функции вызывает исключительную ситуацию.

Проверка в управляемых формах

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

Для начала необходимо понять, какая процедура, за какой следует при вводе объекта в этом режиме функционирования.

Итак, после нажатия кнопки «Записать», «ОК», «Провести»:

  1. Вызывается процедура «Перед записью» на клиенте;
  2. Данные передаются на сервер и происходят события, прописанные в модуле формы на сервере (здесь можно запустить процедуру ОбработкаПроверкиЗаполненияНаСервере);
  3. Данные формы передаются в модуль объекта на сервер (появляется возможность запуска стандартной процедуры ОбработкаПроверкиЗаполнения);
  4. Данные из модуля возвращаются в модуль формы на сервер, и происходит процедура ПередЗаписьюНаСервере;
  5. Данные возвращаются в модуль объекта, и происходит еще одна процедура ПередЗаписью;
  6. Происходит непосредственная запись объекта в базу.

В любой момент этой схемы можно вставить функцию ПроверитьЗаполнение(). Пробежавшись по реквизитам, в свойствах которых реквизит «Проверка заполнения» имеет значение «Выдавать ошибку»(Рис.4), эта функция, если хоть один из них не заполнен, вернет «Ложь».

Различия между обработчиками ОбработкаПроверкиЗаполнения() и ОбработкаПроверкиЗаполненияНаСервере()

Ввиду того, что интерфейс управляемого приложения может содержать как реквизиты объекта, так и непосредственно реквизиты формы и разделились эти две процедуры. В то же самое время они схожи по параметрам, которые могут быть переданы в обработчики это:

  1. Отказ (сюда после проверки передается ее результат);
  2. ПроверяемыеРеквизиты (тип данных – массив, если не заполнено, то будут проверяться все реквизиты, для которых в свойствах стоит «Проверять заполнение», в противном случае будут обрабатываться реквизиты, выбранные программно).

Процедура ОбработкаПроверкиЗаполненияНаСервере() позволяет выполнить проверку реквизитов, которые не относятся непосредственно к редактируемому объекту. Каждый программист сам решает, что и в каком объеме он хотел бы проверять.

Процедура ОбработкаПроверкиЗаполнения() проверяет основные реквизиты.

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

  • Подстановка единственного значения
  • Подстановка значения по отбору
  • Заполнение реквизитов по статистике
  • Подстановка ранее введенных реквизитов
  • Подстановка значений по шаблону
  • Ввод нового документа копированием

Подстановка единственного значения на который у пользователя есть права.

Допустим, в вашей организации есть три склада, они введены в базу. При этом менеджеру разрешено продавать товар только с какого-то одного. При создании нового документа этот склад будет подставляться автоматически. Это работает на основе установленных прав доступа у пользователя. То есть, выключая права на объекты, с которыми пользователь не работает, можно автоматизировать ввод данных.

Подстановка значения по отбору, указанному в форме списка.

Если в списке установлен отбор по какому-то реквизиту (касса, банковский счет, склад), то этот реквизит будет автоматически заполнен в новом документе. Например, вы в форме списка документов РКО устанавливаете отбор по кассе. При оформлении нового платежного документа из списка будет автоматически взята информация о выбранной кассе. И так как, для кассы указана организация, то будет автоматически заполнена информация об организации. Использовать отборы можно в любом списке документов.

Заполнение реквизитов по статистике.

Программа 1С ведет статистику ввода основных значений по каждому пользователю. В случае, если вы два раза ввели при создании нового документа одинаковые организацию, подразделение, склад, хозяйственную операцию и т.д., программа будет анализировать последние введенные значения. Таким образом, алгоритм заполнения по статистике автоматически «подстраивается» под каждого пользователя.
Если пользователь нарушает в новом документе эту цепочку, то программа это поймет и начнет подставлять через некоторое время новые значения, но в первом таком документе значения подставлены не будут.
Заполнение ранее введенных реквизитов при выборе значения другого реквизита возможно в случае если выбирается, например торговое соглашение или договор, где заполнены все основные поля (склад, график оплаты, цены и т.д.). При указании соглашения или договора в документе реквизиты будут заполнены по следующим правилам:

будут заполнены все те данные, которые были определены в соглашении или договоре;

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

Подстановка значений по шаблону.

Обратите внимание, когда создается новый вид номенклатуры, то можно указать значения по умолчанию, которые будут подставляется в новые объекты. При оформлении новой позиции номенклатуры данного вида эти значения будут подставляться автоматически. Еще одним примером может служить автоматическая подстановка информации о подразделении в документ, если для пользователя, оформляющего документ, определена информация о подразделении в карточке пользователя.

Ввод нового документа копированием.

Тут все просто. Если пользователь уже вводил похожий документ, то его можно скопировать и после этого поправить изменившиеся данные. Проверить все реквизиты, уделив особое внимание, такому реквизиту, как дата.

Вот пять основных способов облегчить ввод однотипных документов и справочников. Обязательно используйте их в своей повседневной работе

Как быстро ввести значение реквизитов в 1С?

Платформа 1С:Предприятие позволяет программно добавлять и изменять элементы управляемой формы. Разберемся для чего это может потребоваться.

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

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

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

  • реквизиты;
  • локальные команды;
  • элементы.

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

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

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

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

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

    Добавить(< ИмяКоманды >)

    Количество ()

    Найти(< ИмяКоманды >)

    Удалить(< Команда >)

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

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

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

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

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

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

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

Внимание!

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

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


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

// Изменения состава реквизитов
);

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

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

    Вставить(< Имя>, < ТипЭлемента>, < Родитель>, < Элемент >)

    Добавить(< Имя>, < ТипЭлемента>, < Родитель >)

    Количество ()

    Найти(< Имя >)

    Переместить(< Элемент>, < Родитель>, < МестоРасположения >)

    Удалить(< Элемент >)

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

  • ГруппаФормы;
  • ТаблицаФормы;
  • ПолеФормы;
  • КнопкаФормы.

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

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

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

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

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

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

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

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

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

Внимание!

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

Внимание!

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



Понравилась статья? Поделитесь ей
Наверх