Закажите бесплатный расчет стоимости вашей задачи по 1С!
Перезвоним за 10 минут! (в рабочие часы)

Как в 1С создать на основании программно

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

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

В документе «Расход» или «Приход» нужно настроить связь на вкладке «Ввод на основании»:

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

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

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

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

Если в документе уже существуют данная процедура — нужно не создавать новую, а добавлять код в существующую процедуру.

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

//Код из модуля объекта документа "Расход".
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)          
            Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Приход") Тогда                      
                        Склад = ДанныеЗаполнения.Склад;
                        Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
                                   НоваяСтрока = Товары.Добавить();
                                   НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура;
                                   //… заполняем другие реквизиты табличной части
                        КонецЦикла;                      
            КонецЕсли;
КонецПроцедуры

Программный код можно также создать автоматически для этого нужно воспользоваться «Конструктором ввода на основания».

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

Чтобы в 1С автоматически создать процедуру, нужно нажать на кнопку «Конструктор ввода на основании»:

Где с помощью функции «Заполнить выражения» можно автоматически сопоставить название реквизитов:

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

После нажатия на «Ок», 1С сама сформирует готовый программный код:

Внимание! Конструктор нельзя использовать, если процедура заполнения уже существует — вы потеряете существующий программный код.

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

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

Пример кода:

//Код из модуля формы документа "Приход".
&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
     
            //Создаём новый документ
            НовДокумент = Документы.Расход.СоздатьДокумент();
            //Заполняем созданный документ (реквизиты документа заполняются значениями, которые совпадают по именам реквизитов)
            НовДокумент.Заполнить(ТекущийОбъект.Ссылка); 
            //Записываем созданный документ
            НовДокумент.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Оперативный);          

КонецПроцедуры


//Код из модуля объекта документа "Расход".
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)          
            Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Приход") Тогда                      
                        Склад = ДанныеЗаполнения.Склад;
                        Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
                                   НоваяСтрока = Товары.Добавить();
                                   НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура;
                                   //… заполняем другие реквизиты табличной части
                        КонецЦикла;                      
            КонецЕсли;
КонецПроцедуры

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

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

Пример кода:

//Код из модуля формы документа "Приход".
&НаКлиенте
Процедура ПослеЗаписи(ПараметрыЗаписи)
//Создаём структуру для передачи в виде параметра при открытии формы.
ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка);
//Открываем форму документа расход с передачей данных для заполнения
ОткрытьФорму("Документ.Расход.ФормаОбъекта", ПараметрыФормы);

КонецПроцедуры

//Код из модуля объекта документа "Расход".
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Приход") Тогда
Склад = ДанныеЗаполнения.Склад;

Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл
НоваяСтрока = Товары.Добавить();
НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура;
// … заполняем другие реквизиты табличной части
КонецЦикла;

КонецЕсли;

КонецПроцедуры

К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.

Остались вопросы?

СПРОСИТЕ в комментариях!

Добавить комментарий:

Ваш адрес email не будет опубликован.