HelpF.pro

Создание нового документа

Для 8.2:
Открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных:
проще всего использовать метод глобального контекста ОткрытьФорму(). Это можно сделать на клиенте.
Код 1C v 8.2 УП
 ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта");   

При этом создается новый документ и открывается для редактирования основная форма этого документа.

Если нужно какое-то предварительное заполнение документа начальными данными, то это можно сделать либо с помощью свойств реквизитов документа ЗначениеЗаполнения, ЗаполнятьИзДанныхЗаполнения либо в обработчике события документа ОбработкаЗаполнения.

Создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю:
можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события ОбработкаЗаполнения, записать, и передать ссылку на новый документ в метод глобального контекста ОткрытьЗначение(), который откроет форму этого документа. Например:
Код 1C v 8.2 УП
 &НаКлиенте
Процедура ПриходнаяНакладная(Команда)

СсылкаНаДокумент = СоздатьНовыйДокумент();
ОткрытьЗначение(СсылкаНаДокумент);

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

&НаСервере
Функция СоздатьНовыйДокумент()

НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();
НовыйДокумент.Номер = "111";
НовыйДокумент.Дата = ТекущаяДата();
НовыйДокумент.Записать();

Возврат НовыйДокумент.Ссылка;

КонецФункции

Подробнее об использовании методов ОткрытьЗначение() и ОткрытьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции для интерактивной работы
Код 1C v 8.2 УП
 // ЕЩЕ ПРИМЕР:
&НаКлиенте
Процедура СоздатьНовыйДокумент(Команда)

// Вставить содержимое обработчика.
Если СоздатьНовыйДокументНаСервере() = 0 Тогда
Сообщить("Не удалось создать новый документ");
КонецЕсли;

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

&НаСервере
Функция СоздатьНовыйДокументНаСервере()

Перем НоваяРасходнаяНакладная;
Перем СтрокаТЧ;

НоваяРасходнаяНакладная=ДокРасходнаяНакладная.СоздатьДокумент();

//Заполняем реквизиты шапки
НоваяРасходнаяНакладная.Дата= ТекущаяДата();
НоваяРасходнаяНакладная.Фирма =Справочники.Фирмы.ОсновнаяФирма;
НоваяРасходнаяНакладная.Контрагент=Справочники.Контрагенты.НайтиПоКоду("000000001");
НоваяРасходнаяНакладная.Склад=Справочники.Склады.ОсновнойСклад;

//Заполняем табличную часть
СтрокаТЧ=НоваяРасходнаяНакладная.ТЧТовары.Добавить();
СтрокаТЧ.Товар=Справочники.Номенклатура.НайтиПоКоду("000000002");
СтрокаТЧ.Цена=СтрокаТЧ.Товар.РозничнаяЦена;
СтрокаТЧ.Количество= 2;
СтрокаТЧ.Сумма=СтрокаТЧ.Цена*СтрокаТЧ.Количество;

Попытка
НоваяРасходнаяНакладная.Записать();
Возврат 1;
Исключение
Возврат 0;
КонецПопытки;

КонецФункции


Для 8.1:
Код 1C v 8.х
 
//Создаем документ Выплата, Документ будет создан и показан пользователю, Но НЕ ЗАПИСАН
НовДок = Документы.ЗарплатаКВыплатеОрганизаций.ПолучитьФормуНовогоДокумента();
НовДок.Дата=ТекущаяДата();
НовДок.Организация=Организация;
НовДок.ПериодРегистрации=ПериодРегистрации;
НовДок.ответственный= глЗначениеПеременной("глТекущийПользователь");
НовДок.Комментарий="Выплата за "+МесяцСтрока;
НовДок.ЭлементыФормы.Комментарий.Доступность=Ложь;
Для Каждого ТекущаяСтрока Из ТаблицыЗначений Цикл // заполним табличную часть документа, из ТаблицыЗначений
НС=НовДок.зарплата.добавить();
нс.Авторасчет=истина;
нс.Физлицо = ТекущаяСтрока.Физлицо;
нс.ВыплаченностьЗарплаты=Перечисления.ВыплаченностьЗарплаты.НеВыплачено;
нс.сумма=ТекущаяСтрока.Результат;
КонецЦикла;
НовДок.Открыть();

//Для создания и записи документа используется следующий код:
НовДок = Документы.РасходнаяНакладная.СоздатьДокумент();
НовДок.Дата=ТекущаяДата();
НовыйДок.УстановитьНовыйНомер();
НовДок.Организация=Организация;
НовДок.ПериодРегистрации=ПериодРегистрации;
НовДок.ответственный= глЗначениеПеременной("глТекущийПользователь");
НовДок.Комментарий="Выплата за "+МесяцСтрока;
НовДок.ЭлементыФормы.Комментарий.Доступность=Ложь;
Для Каждого ТекущаяСтрока Из ТаблицыЗначений Цикл // заполним табличную часть документа, из ТаблицыЗначений
НС=НовДок.зарплата.добавить();
нс.Авторасчет=истина;
нс.Физлицо = ТекущаяСтрока.Физлицо;
нс.ВыплаченностьЗарплаты=Перечисления.ВыплаченностьЗарплаты.НеВыплачено;
нс.сумма=ТекущаяСтрока.Результат;
КонецЦикла;
НовДок.Записать();

//Или так:
НовыйДок = Документы.ПеремещениеТоваров.СоздатьДокумент();
НовыйДок.Дата = ПолеВводаДаты;
НовыйДок.УстановитьВремя();
НовыйДок.УстановитьНовыйНомер();
// Формирование табличной части
Для Н=1 По N Цикл
НоваяСтрока = НовыйДок.Товары.Добавить();
НоваяСтрока.Номенклатура = СтрокаДанных.Номенклатура;
// формируются другие реквизиты табличной части
КонецЦикла;
НовыйДок.Записать();
СписокДокументов.Добавить(НовыйДок.Ссылка);

Опубликовано на сайте: https://HelpF.pro
Прямая ссылка: https://HelpF.pro/faq82/view/41.html