1с создание при вводе

Обновлено: 06.07.2024

Как при открытии формы определить, что создается новый элемент?

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

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

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

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

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


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

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

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

  • при интерактивном создании нового объекта
  • при вводе на основании
  • при выполнении метода объекта Заполнить()

При этом параметр ДанныеЗаполнения , передаваемый в этот обработчик, может иметь различные значения в зависимости от того, каким образом создается новый элемент. Например, он может иметь тип ссылки, если новый объект вводится на основании. Или он может иметь тип Структура , если новый объект создается интерактивной командой из списка, в котором установлен отбор. В этом случае структура будет содержать значения элементов отбора этого списка. Также этот параметр может иметь тип Неопределено , если новый элемент создается интерактивной командой из панели действий. То есть в своем алгоритме начального заполнения полезно анализировать этот параметр.

Подробнее о событии ОбработкаЗаполнения можно прочитать в синтакс-помощнике: ПрикладныеОбъекты - <Вид объектов конфигурации (Справочники, Документы и т.п.)> - <Вид объектов конфигурации>Объект - События .

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

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Если Параметры.Ключ.Пустая() Тогда

Сообщить("Создается новый объект");

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

Теперь в «Бухгалтерии 8» (ред. 3.0) реквизиты контрагента заполняются автоматически – достаточно указать только ИНН. Новая возможность не только экономит время бухгалтера, но и позволяет получить актуальную информацию о контрагенте, мгновенно зарегистрировать ее в программе, тем самым исключив возможные ошибки при вводе.

Работа с сервисом

В программе «1С:Бухгалтерия 8», начиная с версии 3.0.35.25, реализована возможность автоматического заполнения реквизитов контрагента сведениями, содержащимся в ЕГРЮЛ/ЕГРИП. Для этого при создании нового контрагента в форме элемента справочника Контрагентынеобходимо заполнить поле ИНН и нажать кнопку Заполнить реквизиты по ИНН или клавишу Enter (рис. 1).

Рис 1Создание из справочника Контрагенты.jpg

Рис. 1. Создание нового контрагента из справочника на основании ИНН

Если ИНН введен корректно и сведения о контрагенте есть в государственном реестре, то реквизиты заполняются автоматически (рис. 2).

Рис 2 Заполненные реквизиты в справочнике.jpg

Рис. 2. Автоматически заполненные реквизиты

При наличии соответствующей информации в ЕГРЮЛ для юридического лица будут заполнены:

· краткое и полное наименование;

· руководитель (записывается в основное контактное лицо);

Для физического лица (предпринимателя) заполняются краткое и полное наименование.

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

Рис 3 Создание контрагента из документа.jpg

Рис. 3. Создание контрагента с автозаполнением реквизитов из документа

Для автоматического заполнения реквизитов контрагента необходим доступ в интернет и действующий договор ИТС.

Видеурок по теме

Подключение к сервису

Чтобы пользователь имел доступ к сервису автоматического заполнения реквизитов контрагентов, ему необходимо подключить интернет-поддержку. Подключение интернет-поддержки осуществляется по одноименной гиперссылке из раздела Администрирование (рис. 4а, 4б).

Подключение к интернет поддержке 1.jpg

Рис. 4а. Подключение интернет-поддержки

Подключение к интернет поддержке 2.jpg

Рис. 4б. Подключение интернет-поддержки

Подключение к интернет поддержке 3.jpg

Рис. 5. Подключение интернет-поддержки

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

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

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

  1. имя клиента
  2. адрес клиента
  3. адрес откуда
  4. адрес куда
  5. время подачи
  6. желаемый класс автомобиля
  7. список желаемых опций

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

Создание объектов конфигурации



Реализация

В свойствах документа «Заказ» перейдем на закладку «Ввод на основании»:


Нажмем кнопку «Редактировать элемент списка» и выберем из списка справочник «Клиенты»:


Далее запустим конструктор ввода на основании нажатием на кнопку "Конструктор ввода на основании":


В открывшемся окне нужно сопоставить поля справочника с реквизитами документа заказа. Это можно сделать, нажав кнопку «Заполнить выражения» и тогда система попытается сама определить, какие поля необходимо скопировать:


Поле адреса нужно сопоставлять вручную, выбрав поле «АдресОткуда» в нижней части, а затем двойным щелчком на реквизите «Адрес» в реквизитах объекта обоснования:


По нажатию «ОК» система генерирует следующий код в модуле документа «Заказ» в процедуре ОбработкаЗаполнения:

Процедура ОбработкаЗаполнения вызывается в ряде случаев, таких как ввод нового документа интерактивно и ввод на основании. В данном случае, если переменная ДанныеЗаполнения является ссылкой на справочник клиентов, выполняется заполнение реквизитов документа. Код обработчика можно модифицировать. Предположим, что клиенты чаще всего хотят подачу такси в течение 15-20 минут. Тогда в код обработчика можно добавить инициализацию реквизита «ВремяПодачи». Также удалим комментарии, созданные конструктором:

Запустим приложение в режиме отладки и проверим, как работает ввод на основании. Добавим пару записей в справочник клиентов:


Откроем одну из них. В окне будет доступна кнопка «Создать на основании», по нажатию которой откроется список с опцией выбора «Заказ»:


При выборе «Заказ» система создает пустой документ и заполняет поля в процедуре ОбработкаЗаполнения:


Сохраним документ и убедимся, что документ был успешно создан, открыв его из спиcка документов заказа:


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


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

Запустим конфигурацию в режиме отладки и посмотрим, что получилось. Добавим опции клиенту:


Сохраним данные и создадим заказ на основании записи справочника:


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

Нехитрое дело – добавить в типовую конфигурацию, например "1С ERP Управление предприятием 2", новый документ (назовём его "Запрос цен") и настроить его так, чтобы он создавался на основании типового документа, скажем "Заказ материалов в производство".

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

1С. Добавляем новый документ в типовую конфигурацию. Как убрать лишнюю кнопку Создать на основании.

Для того, чтобы перенести команду в список штатной кнопки сделаем следующее:

В модуле менеджера документа "Заказ материалов в производство" есть процедура ДобавитьКомандыСозданияНаОсновании . Добавим в неё вызов функции, которую позже напишем в модуле менеджера документа "Запрос цен".

Добавляем функцию в модуль менеджера документа "Запрос цен":

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

В общем модуле дкВводНаОснованииКлиент создаём функцию обработчика, которая откроет нам форму создаваемого документа:

Таким образом мы добавили наш документ в список штатной кнопки "Создать на основании". Осталось убрать лишнюю кнопку на форме документа "Заказ материалов в производства". Делается это в форме документа "Заказ материалов в производство" в левом верхнем фрейме, на вкладке "Командный интерфейс". Снимаем флаги "Видимость" и "Автовидимость" для документа "Запрос цен".

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