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

Обновлено: 03.07.2024

Введение в управляемая форма 1С реквизиты элементы команды

Рекомендуется модифицировать управляемые формы типового решения 1С программно для удобного будущего обновления и исключения конфликтов, а также для удобной работы с изменениями и надежности при использовании механизма расширений.
В некоторых типовых конфигурациях 1С (ЕРП 2, УТ 11) используется механизм упрощенного изменения конфигурации. Статьи о типовом механизме можно найти в разделе полезных ссылок. Данный механизм используется в БСП, и его необходимо знать при модификации типовых конфигураций.
При добавлении элементов на форму программно можно отредактировать практически любое свойство из панель свойств, которое можно установить вручную в конфигураторе.
Также все описанные в текущем разделе процедуры и функции находятся во внешней обработке УпрФормы.

Программное переопределение обработчиков событий формы и элементов формы

В теле модуля формы:

А в новой процедуре нужно добавить вызов основной, если такая процедура есть.

Аналогично можно поступить и с обработчиками элементов формы:

Программное создание групп формы.

Доступные виды групп формы:


Программное добавление команды на форму.

Удалить команду можно при помощи метода коллекции формы команд: Команды.Удалить(<Команда>). Удалять можно только те команды, которые были созданы программно.

Программное создание декораций форм.

Программное добавление реквизита на форму.

Добавлять новые реквизиты в управляемую форму и удалять необходимо с помощью метода ИзменитьРеквизиты(), куда в параметры передается массив добавляемых реквизитов и массив удаляемых. Удалять при этом можно только те реквизиты, которые были созданы программно.

Вывод реквизитов на форму.

Вызов процедур при создании на сервере 1С

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

Некоторые советы при программном редактировании формы


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

Андрис --> Андрис



Просмотр профиля Имеются два документа, один из них вводится на основании другого. Как отменить ввод (создание) нового документа, если на основании первого документа уже был введен документ?
Создал в первом документе реквизит (ЗаявкаНаРемонт) - ссылка на второй документ, заполняется при первом вводе на основании. Во втором документе есть реквизит основание - ссылка на документ-основание. В каком событии проверять на заполнение реквизита ЗаявкаНаРемонт и отказаться от создания нового документа при нажатии на кнопку создать на основании? Stazy --> Stazy



Просмотр профиля В процедуре "Перед открытием" формы документа, вводимого на основании. Vofka --> Vofka



Просмотр профиля

Если имеется ввиду именно ввод на основании - тогда

А если ввод на основании - это когда определенный реквизит заполнен - тогда можно, как писали выше

Андрис --> Андрис



Просмотр профиля

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

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

Рассмотрим простой пример программного ввода документа в 1С на основании. Допустим необходимо после проведения приходного документа «Приход» создать расходный документ «Расход» на основании данных полученных из приходного документа.

Простое создание на основании стандартным способом платформы 1С


Где указать с кем он связан:


Должна получиться следующая картина:


Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>


И прописать программный код заполнения. Пример кода:

Конструктор ввода на основании




Создание документа после записи первого документа с последующей записью созданного

Для реализации такой задачи можно использовать метод объекта Заполнить(), в параметры которого необходимо будет передать данные заполнения из документа прихода. Метод инициирует событие ОбработкаЗаполнения() и вызов процедуры-обработчика в модуле объекта документа «Расход».

Создание объекта после записи с открытием управляемой формы

Для программного создания документа в 1С с открытием управляемой формы пользователю можно использовать функцию ОткрытьФорму(), в параметры которой можно передавать данные для заполнения.

Добавление расширения в конфигурацию

Работа с расширением

Мы добавили новое расширение и теперь можно приступать к работе с ним.

Для этого в списке расширение двойным кликом или с помощью контекстного меню откроем конфигурацию нашего расширения



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


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



Переходим в модуль команды и описываем обработку нашей глобальной команды:

На этом работа с глобальной командой завершена.


В добавленной процедуре напишем простой код для заполнения нашего документа по основанию

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



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

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