1с добавить кнопку создать на основании

Обновлено: 07.07.2024

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

Если конфигурация типовая, то, наверное, самый простой способ решения такой задачи – создать внешнюю обработку вида "Заполнение объекта".

Заполнение формы объекта с помощью внешней обработки

Строка с соответствующим параметром в модуле обработки:

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

  • ВызовСерверногоМетода – обработчик команды располагается в модуле обработки;
  • ВызовКлиентскогоМетода – обработчик команды располагается в модуле формы обработки;
  • ЗаполнениеФормы – обработчик команды располагается в модуле обработки и позволяет работать с данными формы. Также позволяет вызвать серверную процедуру из модуля формы объекта. При этом можно заполнить форму не записывая объект.

Возможность заполнить форму не записывая объект – это то, что нужно. Ведь пользователь скорее всего ожидает, что по нажатию кнопки форма заполнится, а записываться будет позднее, после проверки результата заполнения. Поэтому выбираем тип команды – ЗаполнениеФормы.

В конечном итоге код в модуле обработки будет выглядеть примерно так:

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

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

Заполнение формы объекта посредством обработчика команды в модуле формы

Итак, размещаем команду на форме объекта в том месте, которое нам нравится. В модуле формы добавляем клиентскую процедуру обработчика команды, из которой будем вызывать серверную процедуру. Серверную процедуру тоже создадим, она нам понадобится потому, что по условию задачи данные для заполнения получаются запросом.

Над серверной процедурой нужно подумать. В ней у нас будет объект формы с типом "ДанныеФормыСтуктура". Что-либо менять или заполнять в этом объекте не получится, возникнет ошибка "Объект недоступен для изменения".

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

Будет лучше, если данные добавятся без записи, и мы можем это сделать с помощью метода РеквизитФормыВЗначение . Этот метод преобразует реквизит формы в объект прикладного типа, и вот этот объект прикладного типа мы можем заполнить, а затем, уже заполненный, преобразовать обратно с помощью метода ЗначениеВРеквизитФормы . Выглядеть это будет примерно так:

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

свойство Использовать стандартные команды у документа установлено?

В командном интерфейсе формы проверьте наличие галок

Комплексная автоматизация, редакция 1.0 (1.0.6.1)(не типовая конечно)

(4) что то нашел команду вроде как создал как надо, но что то не так. с управляемой формой не работаю почти поэтому такие сложности. может кто мат часть скинет? почитаю

(10) может быть уже проверите наличие галок в командном интерфейсе формы?!

(11) захожу в командный там пусто. группа создать на основание пустая. почему так?

Проверьте контекстное меню. Возможно группа "создать на основании", в которую вы заходите не является системной. А заполняется програмно каким-то кодом. Пострайтесь его найти.

(10)конфу сохранял после того как добавил ввод на основании?

(13) там нету этого кода такого (14) конечно.. но даже на форме не отображается в конфигураторе.

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

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

(19) В других документах на управляемых формах есть эта кнопка? Смотри как там сделано. В типовых (КА 2.0, ERP), вывод кнопок ввод на основании засунули в модуль менеджера, автоматом само ничего не выводится, может и у тебя также.

она не типовая обновлён на ЕГАИС - управляемая форма

(20) в том и дело что не нет в этой конфе больше управляемых форм с основанием. эту и то дорабатываю.

(24) в форме зайдите в Глобальные параметризуемые команды. Там есть нужное создание на основании?

(29) тогда нужно создавать собственную команду скорее всего. Всё-таки у вас только 1 документ на УФ, а не вся конфигурация.

а у командной панели на вкладке Элементы автозаполнение включено?

(30) я создал общую команду уже и там прописал открытие формы . но не знаю как привязать его нужному месту. или предлагаешь прям вообще отдельную кнопку сделать?

(32) эта общая команда должна появится в глобальных командах в форме. Ее надо перетащить в командный интерфейс.

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

Вот у меня была подобная команда:

(39) это когда самому надо что-то заполнять, не було обработки заполнения.
По идее открыть с параметром можно так:

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

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

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

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

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

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

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

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

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

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

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


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


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


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


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

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




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

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

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

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

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