Имя: Пароль:
1C
1С v8
Создание документа программно
,
0 PinkiBosh
 
13.04.15
09:36
Подскажите, пожалуйста, как при создании документа сделать так, чтобы данные по умолчанию были заполнены. Имеется в виду те данные, которые заполняются, когда в пользовательском режиме нажимают на кнопку "Создать"?

Я создаю документ "ЗаказПокупателя". Так вот, если создавать в пользовательском режиме, то обязательными полями для заполнения являются: "Контрагент", "Дата отгрузки" да и всё вроде. А если программно создавать, так там требуется заполнить ещё и дату, и номер счета и в итоге он вообще не создается.

Я так понимаю, что все данные заполняются в процедуре "ПриСозданииНаСервере", а она вызывается при открытии формы, а мне не надо чтобы форма открывалась.
1 чувак
 
13.04.15
09:38
Есть у объекта событие призаполнении()
2 PinkiBosh
 
13.04.15
12:54
А можно кусок кода, а то я что-то не нашел призаполнении().

Вот мой неработающий:
        ДокЗаказ = Документы.ЗаказПокупателя.СоздатьДокумент();
        НовНоменклатура = ДокЗаказ.Запасы.Добавить();
            НовНоменклатура.Цена = 3;
            
        ДокЗаказ.ДатаОтгрузки = ТекущаяДата();
        ДокЗаказ.Дата = ТекущаяДата();
        ДокЗаказ.Контрагент = Справочники.Контрагенты.НайтиПоНаименованию("Покупатель1");
        ДокЗаказ.Записать();

Причем, ошибки не выдает.
3 Kupogun
 
13.04.15
13:31
в модуле объекта событие: ОбработкаЗаполнения
4 Kupogun
 
13.04.15
13:32
посмотри как в типовых сделано
5 krunm
 
13.04.15
15:17
нет ошибки, возможно документ создается, но в списке у тебя стоит отбор (например по организации), вот и не показывает
6 PinkiBosh
 
15.04.15
15:46
Помимо прочих нашел такое решение:

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

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


&НаСервереБезКонтекста
Процедура ЗаполнитьДокументНаСервере(ДанныеФормы);

    Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.ЗаказПокупателя")); // Получаем объект из данных формы ИЛИ

    Док = Документы.ЗаказПокупателя.СоздатьДокумент();

// Заполняем реквизиты объекта или другие действия:

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



    ЗначениеВДанныеФормы(Док,ДанныеФормы); // Кладем обратно в объект формы уже созданный документ

КонецПроцедуры
7 ЧеловекДуши
 
15.04.15
15:50
(6) Не сработает, должен сругаеться "Попытка передачи на сервер мутабельного типу" :)
8 ЧеловекДуши
 
15.04.15
15:51
+(6) Ты хоть его запусти, прежде чем постить :)
9 kortun
 
15.04.15
15:52
Попробуй так
НовыйДокумент = Документы.ЗаказПокупателя.СоздатьДокумент();
НовыйДокумент.ОбработкаЗаполнения(Неопределено, Истина);

// тут заполняешь сам чего надо

НовыйДокумент.Записать();
10 PinkiBosh
 
15.04.15
16:53
(8) Конечно же я его запустил, прежде чем постить!!
11 Адский плющ
 
15.04.15
17:28
ДокОбъект.Заполнить(Неопределено);
12 PinkiBosh
 
16.04.15
13:33
(9) проходит всё без ошибок, но потом в форме списка документа "ЗаказПокупателя" не появляется новый (только что созданный) документ!!
13 PinkiBosh
 
16.04.15
13:33
(11) Работает! То что надо!!)
14 PinkiBosh
 
16.04.15
13:34
Спасибо, всем!!)