Как в 1С создать на основании программно
Рассмотрим простой пример программного ввода документа в 1С на основании. Допустим необходимо после проведения приходного документа «Приход» создать расходный документ «Расход» на основании данных полученных из приходного документа.
Содержание
Простое создание на основании стандартным способом платформы 1С
В документе «Расход» или «Приход» нужно настроить связь на вкладке «Ввод на основании»:
Где указать с кем он связан:
Должна получиться следующая картина:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Далее в модуле документа «Расход» нужно создать процедуру «Обработка заполнения» с помощью клика в верхнем меню:
Если в документе уже существуют данная процедура — нужно не создавать новую, а добавлять код в существующую процедуру.
И прописать программный код заполнения. Пример кода:
//Код из модуля объекта документа "Расход". Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Приход") Тогда Склад = ДанныеЗаполнения.Склад; Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура; //… заполняем другие реквизиты табличной части КонецЦикла; КонецЕсли; КонецПроцедуры
Программный код можно также создать автоматически для этого нужно воспользоваться «Конструктором ввода на основания».
Конструктор ввода на основании
Чтобы в 1С автоматически создать процедуру, нужно нажать на кнопку «Конструктор ввода на основании»:
Где с помощью функции «Заполнить выражения» можно автоматически сопоставить название реквизитов:
Если реквизиты различаются по названию, их можно сопоставить вручную. Например, в одной табличной части у вас реквизит «Номенклатура», а в другой «Товар».
После нажатия на «Ок», 1С сама сформирует готовый программный код:
Внимание! Конструктор нельзя использовать, если процедура заполнения уже существует — вы потеряете существующий программный код.
Создание документа после записи первого документа с последующей записью созданного
Для реализации такой задачи можно использовать метод объекта Заполнить(), в параметры которого необходимо будет передать данные заполнения из документа прихода. Метод инициирует событие ОбработкаЗаполнения() и вызов процедуры-обработчика в модуле объекта документа «Расход».
Пример кода:
//Код из модуля формы документа "Приход". &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) //Создаём новый документ НовДокумент = Документы.Расход.СоздатьДокумент(); //Заполняем созданный документ (реквизиты документа заполняются значениями, которые совпадают по именам реквизитов) НовДокумент.Заполнить(ТекущийОбъект.Ссылка); //Записываем созданный документ НовДокумент.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Оперативный); КонецПроцедуры //Код из модуля объекта документа "Расход". Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Приход") Тогда Склад = ДанныеЗаполнения.Склад; Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура; //… заполняем другие реквизиты табличной части КонецЦикла; КонецЕсли; КонецПроцедуры
Создание объекта после записи с открытием управляемой формы
Для программного создания документа в 1С с открытием управляемой формы пользователю можно использовать функцию ОткрытьФорму(), в параметры которой можно передавать данные для заполнения.
Пример кода:
//Код из модуля формы документа "Приход". &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) //Создаём структуру для передачи в виде параметра при открытии формы. ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка); //Открываем форму документа расход с передачей данных для заполнения ОткрытьФорму("Документ.Расход.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры //Код из модуля объекта документа "Расход". Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.Приход") Тогда Склад = ДанныеЗаполнения.Склад; Для Каждого ТекСтрокаТовары Из ДанныеЗаполнения.Товары Цикл НоваяСтрока = Товары.Добавить(); НоваяСтрока.Номенклатура = ТекСтрокаТовары.Номенклатура; // … заполняем другие реквизиты табличной части КонецЦикла; КонецЕсли; КонецПроцедуры
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Аноним:
Есть кто на связи?
[email protected]:
Вопрос такой? у меня 1 компания и в нем 4 организации как сделать чтоб в одну организации создали документ расхода и овтоматический создавались в 3 остальных организации
Kirk174:
Уважаемые коллеги, подскажите начинающему! Допусти есть список документов «Заказ покупателя». На форму выведена кнопка, как по нажатию сделать массовое создание и проведение документов «Реализация товаров услуг»? прошу помочь!
Юрий:
Добрый день! Не понятно когда писался вопрос. А так нужно написать некий код в расширении и всё.
Аноним:
про обрбаотку записи нового так же написать надо было