Как заполнить значение реквизита 1с
Довольно часто встречаются задачи, когда нужно организовать программное заполнение формы какого-то объекта. Скажем, у нас есть форма документа, на форме есть реквизиты, и нам нужно сделать команду, которая заполнит эти реквизиты. Данные для заполнения предполагается получать запросом.
Если конфигурация типовая, то, наверное, самый простой способ решения такой задачи – создать внешнюю обработку вида "Заполнение объекта".
Заполнение формы объекта с помощью внешней обработки
Строка с соответствующим параметром в модуле обработки:
Подключив обработку и указав, для какого документа она назначена, мы получим в форме документа команду. Тип команды задаётся при создании внешней обработки, и от него зависит, где и как будет выполняться обработчик команды. Для наших целей может подойти один из следующих типов команд:
- ВызовСерверногоМетода – обработчик команды располагается в модуле обработки;
- ВызовКлиентскогоМетода – обработчик команды располагается в модуле формы обработки;
- ЗаполнениеФормы – обработчик команды располагается в модуле обработки и позволяет работать с данными формы. Также позволяет вызвать серверную процедуру из модуля формы объекта. При этом можно заполнить форму не записывая объект.
Возможность заполнить форму не записывая объект – это то, что нужно. Ведь пользователь скорее всего ожидает, что по нажатию кнопки форма заполнится, а записываться будет позднее, после проверки результата заполнения. Поэтому выбираем тип команды – ЗаполнениеФормы.
В конечном итоге код в модуле обработки будет выглядеть примерно так:
В общем счёте задача решена. Однако, у такого способа есть небольшой недостаток – команда на форме размещается в определённом месте, а не там, где мы хотим её разместить. К примеру, на форме уже есть группа команд, включающая в себя команды заполнения, и мы хотели бы видеть новую команду в этой группе, но при подключении обработки команда на форме будет расположена отдельно от группы.
В связи с этим можно реализовать другой способ: добавить команду непосредственно в форму объекта – либо в основной конфигурации, либо в расширении – а обработчик команды организовать в модуле формы.
Заполнение формы объекта посредством обработчика команды в модуле формы
Итак, размещаем команду на форме объекта в том месте, которое нам нравится. В модуле формы добавляем клиентскую процедуру обработчика команды, из которой будем вызывать серверную процедуру. Серверную процедуру тоже создадим, она нам понадобится потому, что по условию задачи данные для заполнения получаются запросом.
Над серверной процедурой нужно подумать. В ней у нас будет объект формы с типом "ДанныеФормыСтуктура". Что-либо менять или заполнять в этом объекте не получится, возникнет ошибка "Объект недоступен для изменения".
Можно получить объект документа Объект . Ссылка . ПолучитьОбъект () , и заполнить его данными. Но тогда, чтобы увидеть данные в открытой форме, объект придётся записать, а это не очень хорошо.
Будет лучше, если данные добавятся без записи, и мы можем это сделать с помощью метода РеквизитФормыВЗначение . Этот метод преобразует реквизит формы в объект прикладного типа, и вот этот объект прикладного типа мы можем заполнить, а затем, уже заполненный, преобразовать обратно с помощью метода ЗначениеВРеквизитФормы . Выглядеть это будет примерно так:
Применение механизмов БСП для добавления новых команд заполнения к формам различных объектов. Использование расширений конфигурации для доработки. Шаблоны для реализации собственных команд заполнения.
Подсистемы библиотеки стандартных подсистем (далее БСП) на текущий момент используют практически все типовые конфигурации, поэтому знание принципов их построения и использования для доработки конфигураций является большим подспорьем в работе программиста.
В данной статье я хочу рассмотреть использование подсистемы БСП «Заполнение объектов» для доработки типовых конфигураций. Доработки буем выполнять в расширении конфигурации.
Подсистема «Заполнение объектов» предназначена для вывода команд заполнения в формы списков и элементов различных объектов системы:
Для этой же цели применяется механизм «Дополнительные отчеты и обработки» с типами команд: «Заполнение формы» или «Вызов клиентского метода». Предложенный в данной статье механизм является более современной альтернативой дополнительным отчетам и обработкам, так как может быть реализован с использованием технологии «Расширения конфигурации».
Рассматриваемые версии БСП: 2.4.5, 3.0.1.
Команды заполнения
Существует несколько способов разработки дополнительных команд заполнения объектов, которые поддерживаются БСП.
Подсистема поддерживает три мета описания команд заполнения:
- В модуле менеджера объекта назначения
- В процедуре общего модуля «ЗаполнениеОбъектовПереопределяемый»
- В дополнительно подключенной обработке
Создание команд заполнения в модуле менеджера объекта назначения
Команды действуют только в рамках объекта в котором они определены.
Для реализации необходимо прописать объекты, в которых требуется выводить команды заполнения в процедуре «ПриОпределенииОбъектовСКомандамиЗаполнения» общего модуля «ЗаполнениеОбъектовПереопределяемый»:
А также указать перечень необходимых команд в модуле менеджера объекта назначений, в процедуре «ДобавитьКомандыЗаполнения»:
Важно : если объект указан в процедуре « ПриОпределенииОбъектовСКомандамиЗаполнения », процедура « ДобавитьКомандыЗаполнения » должна присутствовать в модуле менеджера объекта, даже если команды заполнения отсутствуют, иначе будет выдаваться ошибка при открытии форм объекта.
Создание команд заполнения с описанием в общем модуле
Команды могут действовать для группы объектов.
Как и в первом варианте, необходимо прописать объекты, в которых требуется выводить команды заполнения в процедуре «ЗаполнениеОбъектовПереопределяемый .ПриОпределенииОбъектовСКомандамиЗаполнения».
Необходимые команды, в данном случае, нужно описывать в процедуре «ПередДобавлениемКомандЗаполнения» общего модуля «ЗаполнениеОбъектовПереопределяемый»
Создание команд заполнения, с описанием в модулях отдельных обработок
Команды могут действовать для группы объектов.
Необходимо создать новую обработку и включить ее в подсистему « ПодключаемыеОтчетыИОбработки ».
В модуле менеджера обработки необходимо разместить экспортную процедуру «ПриОпределенииНастроек», с указанием объектов назначения команд заполнения и принадлежности обработки к функционалу заполнения объектов:
Необходимые команды нужно описывать в модуле менеджера обработки в специальной экспортной процедуре «ДобавитьКомандыЗаполнения»:
Процедура обязательна даже в случае отсутствия команд заполнения.
Добавление команд заполнения
Во всех трех случаях необходимо добавлять команды заполнения. Принцип добавления один и тот же, команды добавляются в коллекцию «КомандыЗаполнения», переданную в качестве параметра. Перечень возможных параметров команд заполнения приведен ниже:
Представление - п редставление команды в списке команд формы
Обработчик (обязательно для заполнения если не задан параметр «ИмяФормы») - и мя обработчика, выполняющего основное действие команды. Детальное описание обработчиков приведено ниже.
ИмяФормы (обязательно для заполнения если не задан параметр «Обработчик»)- и мя формы, в которой размещена процедура - обработчик команды. Если о бработчик не задан, вызывается метод формы « Открыть ».
Идентификатор - и спользуется для идентификации команды (если параметр не заполнен, будет сгенерирован автоматически).
Важность - группы в подменю, в которой следует вывести эту команду. Доступные значение: "Важное", "Обычное" и "СмТакже". Команда будет выведена в соответствующей подгруппе (если подгруппа создана в командной панеле формы).
Порядок - п орядок размещения команды в списке по отношению к другим командам.
СочетаниеКлавиш - с очетание клавиш для быстрого вызова команды (тип «СочетаниеКлавиш».
ТипПараметра - используется для уточнения типов объектов, для которых предназначена команда в случае, когда поставщик команд подключен к нескольким объектам (тип «ОписаниеТипов»).
ВидимостьВФормах - и спользуется для уточнения состава форм (перечисленных через запятую), к которым требуется подключить команду. По умолчанию, команда доступна во всех формах объекта.
ФункциональныеОпции - имена функциональных опций (перечисленных через запятую) , определяющих видимость команды.
УсловияВидимости – массив условий, о пределяющих видимость команды в форме. Для добавления новых условий удобно использовать процедуру общего модуля «ПодключаемыеКоманды. ДобавитьУсловиеВидимостиКоманды(Команда, Реквизит, Значение, Знач ВидСравнения = Неопределено) » . Где параметр «Реквизит» является именем реквизита объекта назначения.
ИзменяетВыбранныеОбъекты – значение «Истина» означает что команда не будет доступна в случае отсутствия у пользователя прав на запись объекта, по умолчанию, значение равно «Ложь» .
МножественныйВыбор - поддержка множественного выбора для выполнения команды. В случае значения – «Истина» в первом параметре обработчика команды будет передан массив ссылок на объекты.
РежимЗаписи - н астройки действий, которые нужно выполнить перед обработкой команды. Доступные значения:
- НеЗаписывать – в этом режиме предполагается работать напрямую с формой, которая передается в структуре второго параметра обработчика команды.
- ЗаписыватьТолькоНовые – записывать только новые объекты.
- Записывать – записывать новые и модифицированные объекты.
- Проводить – проводить документы.
Значение по умолчанию: « Записывать».
Менеджер - п олное имя объекта метаданных, в модуле менеджера которого размещена процедура - обработчик команды. По умолчанию, заполняется именем объекта, в модуле менеджера которого описана команда.
ДополнительныеПараметры - структура дополнительных параметров, которые передаются обработчику команды.
Обработчики команд заполнения
Расположение обработчиков команд заполнения зависит от необходимого контекста их выполнения. Они могут быть размещены в следующих объектах информационной базы:
- клиентские общие модули,
- серверные общие модули,
- модули менеджеров объектов,
- модули форм подключенных обработок.
Если обработчик команды размещен в общем модуле , указываем в описании имя модуля и имя обработчика через точку:
В соответствующем общем модуле необходимо разместить процедуру:
Если обработчик размещен в модуле формы или модуле менеджера , указываем просто имя обработчика
Если параметр команды « ИмяФормы » заполнен, то в модуле указанной формы необходимо разместить клиентскую процедуру следующего вида:
Если параметр « ИмяФормы » не заполнен, то в модуле менеджера объекта, указанного в параметре « Менеджер » или в модуле менеджера текущего объекта, необходимо разместить серверную процедуру следующего вида:
Примечание: Если обработчик серверный, можно изменить и записать в базу данных объект, из формы которого вызван данный обработчик. Для корректного обновления данных в форме в этом случае, параметр команды « РежимЗаписи » должен иметь значение «Записывать».
Параметры обработчиков команд заполнения
Имя первого параметра содержит ссылку на объект, в котором выбрана команда (если режим записи команды - «Не записывать» и это новый объект, передается пустое значение). Также необходимо иметь в виду, что тип параметра зависит от параметра команды « МножественныйВыбор ». В случае множественного выбора, передается массив ссылок.
Параметр обработчика « ПараметрыВыполнения » является структурой и содержит следующие поля:
ОписаниеКоманды - все параметры команды.
Идентификатор - и дентификатор команды.
Представление - представление команды в форме.
ДополнительныеПараметры - д ополнительные параметры команды.
Форма – ссылка на форму, из которой вызвана команда. Через данный параметр можно обращаться к элементам управляемой формы.
ЭтоФормаОбъекта - истина , если команда вызвана из формы объекта.
Источник – о бъект управляемой формы или список формы при условии множественного выбора.
Дополнительно
Примечание: обязательным условием для вывода команд заполнения в формах объектов, является наличие в формах специальных процедур еще одной подсистемы БСП «Подключаемые команды». Данная подсистема позволяет выводить в формах все возможные дополнительные команды: «Печать», «Дополнительные отчеты и обработки», «Команды заполнения», «Варианты отчетов». Подробнее я расскажу про эту подсистему в отдельной статье, здесь же лишь укажу, что необходимо реализовать для нового объекта, для корректной работы подсистемы «Команды заполнения».
Для вывода команд в форме объекта
В модуле формы необходимо вставить процедуры:
В обработчике формы «ПриСозданииНаСервере»:
В обработчике формы «ПриЧтенииНаСервере»:
В обработчике формы «ПриОткрытии»:
Для вывода команд в форме списка
В модуле формы необходимо вставить процедуры:
В обработчике формы «ПриСозданииНаСервере»:
В обработчике формы «ПриАктивацииСтроки»:
Также необходимо в командной панели формы добавить группу для вывода команд «ПодменюЗаполнить» с подгруппами: «Важное», «Обычное», «СмТакже».
В качестве примера использования команд заполнения прикладываю файл с расширением конфигурации.
Расширение тестировалось на конфигурации – УТ 11.4.5.129 (версия платформы - 8.3.10.2667).
Если статья оказалась для Вас полезной не забывайте поставить звездочку J
gvk2009 подробно и доходчиво описал разницу методов, за что ему огромное спасибо:
В Синтаксис-Помощнике очень скупо написано о процедуре ДанныеФормыВЗначение(), чуть побольше - о РеквизитФормыВЗначение(). И совсем нет примеров использования. Попробуем с этим разобраться.
РеквизитФормыВЗначение()
Является методом управляемой формы, компилируется только &НаСервере, контекст формы является для него необходимым, поэтому компиляция &НаСервереБезКонтекста недоступна. На клиенте не работает, поскольку в результате получаем прикладной объект.
Где и когда его нужно использовать?
Метод РеквизитФормыВЗначение() необходим, если требуется из модуля формы вызвать стандартный метод объекта или метод (процедуру, функцию) из модуля объекта, из общего модуля.
Этот метод будет отрабатывать с данными, взятыми из формы, т.е. еще не записанными в базу.
Для того, чтобы измененные данные вернуть на форму, используется метод ЗначениеВРеквизитФормы().
Вторым параметром метода РеквизитФормыВЗначение является тип значения. Это необязательный параметр. Если обрабатываемый реквизит не является составным типом, то тип будет автоматически получен из реквизита формы. Иначе генерируется исключение времени выполнения.
В указанных выше случаях метод РеквизитФормыВЗначение() похож на метод ПолучитьОбъект(). Разница в том, что первый получает объект, заполненный данными формы, а второй - объект с данными из базы.
ДанныеФормыВзначение()
В отличие от метода управляемой формы РеквизитФормыВЗначение(), процедура глобального контекста ДанныеФормыВЗначение() может работать без контекста формы, но именно поэтому, в частности, ей необходимо указывать тип конвертируемых данных.
Обратной процедурой является ЗначениеВДанныеФормы().
В этом примере на форме отображен набор записей регистра бухгалтерии. При отработке процедуры, активность набора меняется только на форме, в базе при этом ничего не происходит. Активность у набора записей регистра в базе поменяется только после выполнения операции Записать.
В этом примере на клиент возвращается ОснРеквизит, содержащий измененные данные. Но его еще нужно "запихать" в отображаемую форму. Для этого используем процедуру глобального контекста КопироватьДанныеФормы().
В большинстве случаев процедуры ДанныеФормыВзначение() и РеквизитФормыВЗначение() взаимозаменяемы. При этом РеквизитФормыВЗначение проще в использовании. Но если требуется использование &НаСервереБезКонтекста - тогда только ДанныеФормыВЗначение.
В качестве иллюстрации взаимозаменяемости Пример 2 еще в двух вариантах:
Похожие FAQ
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора База 1С при запуске уходит в дамп и вылетает 1
В последнее время частенько обращаются пользователи у которых после замены или ремонта компьютера 1С не запускается, а точнее при открытии уходит в dump и вылетает. Как правило, решение одно: Отключить аппаратное ускорение видеокарты В Window Посмотреть все результаты поиска похожих
Еще в этой же категории
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П Как открыть внешнюю обработку или отчет программно 1С УП? 6
В версии 8.2 и старше: приложение не работает непосредственно с локальными файлами, расположенными на компьютере. Файлы должны находиться на сервере. Поэтому для открытия внешней обработки нужно выполнить следующую последовательность действий: Ввод по строке - поиск по первым символам или в любом месте наименования 6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в Как передать таблицу значений с сервера на клиент? 5
Многие спрашиваю, как передать тз с сервера на клиент - ниже несколько вариантов как это можно реализовать: Через ЗначениеВСтрокуВнутр и ЗначениеИзСтрокиВнутр НаКлиенте Процедура ПолучитьТаблицу НаСервер(Команд а) ТЗВСтроке = ПолучитьТЗНаС Вывод результата запроса на форму УП в таблицу значений (аналог СоздатьКолонки() для УП) 2
при разработке на обычных формах было удобно выводить результат запроса используя метод СоздатьКолоки(): Процедура ПоискНажатие(Элемент) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДокументоОборот.Этап, | ДокументоОборот.Отдел, | Докуме Посмотреть все в категории Управляемое приложение, Тонкий клиент
Механизм проверки заполнения позволяет автоматически проверить, заполнены ли указанные реквизиты объекта. Для этого нужно воспользоваться свойством ПроверкаЗаполнения , которое есть у реквизитов объектов конфигурации.
Разработчик может повлиять на стандартную проверку заполнения, выполняемую платформой. Для этого у него есть два события:
- Одно событие — ОбработкаПроверкиЗаполненияНаСервере — можно обработать в модуле формы.
- Другое событие — ОбработкаПроверкиЗаполнения — можно обработать в модуле прикладного объекта.
У формы, как правило, есть основной реквизит (редактируемый объект) и могут быть реквизиты, не относящиеся к редактируемому объекту, а являющиеся лишь частью формы:
Поэтому серверное событие формы ОбработкаПроверкиЗаполненияНаСервере предназначено для проверки заполнения тех реквизитов формы, которые не относятся к редактируемому объекту. Это данные только формы, у формы могут быть свои причины и алгоритмы для проверки этих данных.
Напротив, событие объекта ОбработкаПроверкиЗаполнения предназначено для для того, чтобы проверить реквизиты основного реквизита формы.
Обработчики обеих событий имеют параметр ПроверяемыеРеквизиты , в который платформа передает массив имен тех реквизитов, которые подлежат проверке. Если после выхода из обработчика в этом массиве все еще останутся какие-то имена реквизитов — платформа выполнит автоматическую проверку оставшися реквизитов.
Поэтому существует несколько сценариев того, как разработчик может встроить свой алгоритм в механизм проверки заполнения:
- самостоятельно проверить заполненность всех реквизитов и очистить массив ПроверяемыеРеквизиты , чтобы платформа не выполняла их проверку
- проверить часть реквизитов самостоятельно, удалить их из массива ПроверяемыеРеквизиты , а оставшиеся оставить на проверку платформе
- добавить в массив ПроверяемыеРеквизиты какие-то реквизиты, чтобы платформа проверила и их тоже
- вообще отказаться от проверки заполненности реквизитов, очистив массив
Все эти сценарии реализуются довольно просто. Например, чтобы самостоятельно проверить заполненность реквизитов, можно выполнить следующий код:
Чтобы проверить лишь часть реквизитов, можно выполнить такой код:
Добавить в массив проверяемых реквизитов еще один реквизит можно следующим образом:
А очистить массив проверяемых реквизитов, чтобы ничего не проверять ни самому, ни платформе, можно так:
Вторым параметром в обработчиках этих событий является параметр Отказ . Если ему присвоить значение Истина , то после выхода из обработчика дальнейшая запись объекта будет отменена. Таким образом этот параметр нужно устанавливать в значение Истина тогда, когда ваш алгоритм приходит к выводу, что реквизит не заполнен. В этом случае запись объекта выполнена не будет.
Справка
ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
- Отказ . Тип: Булево . Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина , то запись выполнена не будет. Значение по умолчанию Ложь .
- ПроверяемыеРеквизиты . Тип: Массив . Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.
Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение() . Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство ПроверятьЗаполнениеАвтоматически . В этом случае вначале будет вызван данный обработчик, а затем обработчик ОбработкаПроверкиЗаполнения() модуля объекта.
Позволяет разработчику самостоятельно реализовать проверку заполнения в обработчике события. При этом в обработчике можно полностью отказаться от системной обработки (очистив список проверяемых реквизитов), отказаться от проверки системой части реквизитов (выполнив проверку отдельных реквизитов особенным образом и исключив эти реквизиты из списка), а также добавить для проверки другие реквизиты, проверка которых не была указана.
Для формы документа, если при конфигурировании для документа свойство Проведение установлено в Разрешить , событие вызывается только при проведении. Если документ не проводится (свойство Проведение установлено в Запретить ), то вызывается при записи.
ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
- Отказ . Тип: Булево . Если в теле процедуры-обработчика установить данному параметру значение Истина , то будет выполнен отказ от продолжения работы после выполнения проверки заполнения. Значение по умолчанию Ложь .
- ПроверяемыеРеквизиты . Тип: Массив . Массив путей к реквизитам, для которых будет выполнена проверка заполнения. Массив может быть модифицирован удалением или добавлением путей к необходимым реквизитам.
Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи или при проведении документа в форме, а также при выполнении метода ПроверитьЗаполнение() . Если для документа при конфигурировании свойство Проведение установлено в Разрешить , то вызывается только при проведении. Если документ не проводится (установлено Запретить ), то вызывается при записи.
Позволяет разработчику конфигурации самостоятельно реализовать проверку заполнения в обработчике события. При этом в обработчике можно полностью отказаться от системной обработки (очистив список проверяемых реквизитов), отказаться от проверки системой части реквизитов (выполнив проверку отдельных реквизитов особенным образом и исключив эти реквизиты из списка), а также добавить для проверки другие реквизиты, проверка которых не была указана.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
В этой статье я рассмотрю основные механизмы платформы 1С 8.3, которые обеспечивают проверку заполнения реквизитов.
Проверка заполнения реквизита объекта 1С
У любого реквизита объекта 1С можно настроить проверку заполнения, когда нельзя сохранить новый элемент объекта, не заполнив этот реквизит. Выйдет ошибка.
Для того, чтобы у реквизита объекта осуществлялась проверка заполнения, достаточно в свойстве реквизита «Проверка заполнения» указать значение «Выдавать ошибку».
При таком конфигурировании реквизита, если это реквизит не заполнен, то при попытке записи элемента, выйдет соответствующая ошибка, и запись элемента не будет осуществлена.
Данная проверка будет осуществляться независимо от того, сгенерирована эта форма платформой 1С 8.3 автоматически, или используется форма созданная разработчиком.
Проверка заполнения табличной части в 1С
Помимо реквизитов у объектов можно проверять заполнение табличной части. Для этого у табличных частей объектов имеется свойство «Проверка заполнения», в которое также необходимо установить значение «Выдавать ошибку».
Если в этом случае мы попытаемся записать элемент, в котором будет табличная часть без строк, то выйдет ошибка, и записать элемент не получится.
В тоже время, мы спокойно сможем записать элемент, у которого имеется строка табличной части с пустыми полями.
Если мы хотим проверять реквизиты табличной части, то у них нужно заполнить аналогичное свойство.
Проверка заполнения программно в 1С
Иногда возникает необходимость проверить программно заполнение объекта в 1С. Для этих целей предназначен метод ПроверитьЗаполнение(), который имеется у большинства объектов 1С (справочники, документы и т.д.).
Например, во время программного создания элемента справочника, мы можем проверить заполнение реквизитов этого справочника, перед его записью.
В этом случае, элемент справочника не будет записан, если у него имеются реквизиты, у которых в свойстве ПроверкаЗаполнения установлено значение «Выдавать ошибку».
Иногда, нужно проверить заполнение реквизита, у которого в свойстве «Проверка заполнения» установлено значение «Не проверять». Например, у реквизита Артикул справочника Номенклатура.
Если нам нужно осуществлять проверку этого реквизита (например, по какой-то определенной логике), то необходимо в модуле объекта создать метод ОбработкаПроверкиЗаполнения.
У этого метода, который является процедурой, имеется параметр ПроверяемыеРеквизиты. Этот параметр массив, в котором содержится список имен реквизитов, которые нужно проверять. Если в этот список мы добавим название реквизита, то при сохранении элемента будет осуществляться проверка на то, заполнен этот реквизит или нет.
Также, мы можем удалить реквизит из проверяемых, если по какой-то причине нет необходимости в проверке заполнения этого реквизита.
Например, удалим из проверяемых реквизит ПолноеНаименование.
Тогда мы сможем спокойно записать элемент с незаполненным реквизитом ПолноеНаименование.
Если мы хотим проверить программно, что заполнен реквизит табличной части объекта, то необходимо добавить этот реквизит в массив ПроверяемыеРеквизиты по такому формату: [НазваниеТабличнойЧасти].[НазваниеРеквизита] .
В этом случае, будет осуществляться проверка заполнения реквизита табличной части.
Проверка заполнения формы 1С
Иногда нужно проверить заполнение реквизитов формы. Разберем небольшую задачу: будем на форме умножать два числа друг на друга, если они заполнены. Создадим на форме реквизиты с типом Число — Множитель1, Множитель2 и Сумма. У реквизитов Множитель1 и Множитель2 установим в свойство «Проверка заполнения» значение «Выдавать ошибку».
При выполнении команды Посчитать, произведем расчет только в том случае, если реквизиты заполнены. Проверку заполнения будем выполнять при помощи метода ПроверитьЗаполнение.
Теперь мы не сможем посчитать сумму, если один из множителей не заполнен.
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»
Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.
Читайте также: