Вход | Регистрация
 

Создать объект документа и открыть его форму 8.2

Создать объект документа и открыть его форму 8.2
Я
   riv40rus
 
04.03.10 - 12:33
Создан объект документа, документ не записан. Как открыть его форму ?
 
 
   Stepa86
 
1 - 04.03.10 - 12:42
Как создать документ и открыть его форму?

В 1С Предприятии 8.2  для этих целей существует два возможных сценария работы:

открыть форму нового документа и предоставить пользователю самому интерактивно записать данные объекта в базу данных.
создать новый документ программно, программно заполнить его данными и программно записать. Затем, если нужно, показать его пользователю.
В первом сценарии проще всего использовать метод глобального контекста ОткрытьФорму(). Это можно сделать на клиенте.

ОткрытьФорму("Документ.ПриходнаяНакладная.ФормаОбъекта");
При этом создается новый документ и открывается для редактирования основная форма этого документа.

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

Во втором случае можно программно создать документ на сервере, заполнить данными, если это нужно в обработчике события ОбработкаЗаполнения, записать, и передать ссылку на новый документ в метод глобального контекста ОткрытьЗначение(), который откроет форму этого документа. Например:

&НаКлиенте
Процедура ПриходнаяНакладная(Команда)
    СсылкаНаДокумент = СоздатьНовыйДокумент();
    ОткрытьЗначение(СсылкаНаДокумент);
КонецПроцедуры
&НаСервере
Функция СоздатьНовыйДокумент()
   НовыйДокумент = Документы.ПриходнаяНакладная.СоздатьДокумент();
   НовыйДокумент.Номер = "111";
   НовыйДокумент.Дата = ТекущаяДата();
   НовыйДокумент.Записать();
   Возврат НовыйДокумент.Ссылка;
КонецФункции 
Подробнее об использовании методов ОткрытьЗначение() и ОткрытьФорму() можно прочитать в синтакс-помощнике: Глобальный контекст - Процедуры и функции для интерактивной работы.  

http://v8.1c.ru/metod/faq/answer.jsp?id=101
   riv40rus
 
2 - 04.03.10 - 12:50
Stepa86 конечно все это хорошо. Но как без записи в базу, ссылки на документ нет, а имеется только созданный объект на сервере. Это нужно для того чтобы реализовать нестандартный ввод на основании.
   riv40rus
 
9 - 04.03.10 - 13:13
&НаСервере
Процедура СоздатьДокументПеремещениеТоваров(ОбъектФормы, ДанныеЗаполнения)
    
    Объект = ДанныеФормыВЗначение(ОбъектФормы, Тип("ДокументОбъект.ПеремещениеТоваров");
    ЗаполнитьЗначенияСвойств(Объект, ДанныеЗаполнения);
    Объект.Ответственный = ПараметрыСеанса.ТекущийПользователь;
    Объект.ПодразделениеОтправитель = ДанныеЗаполнения.Подразделение;
    Для Каждого ТекПродукт Из ДанныеЗаполнения.Товары Цикл
        НоваяСтрока = Объект.Товары.Добавить();
        ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекПродукт,,"Цена, Сумма");
        НоваяСтрока.Цена = ТекПродукт.ЦенаСНаценкой;
        НоваяСтрока.Сумма = ТекПродукт.СуммаСНаценкой;
    КонецЦикла;
    
    ЗначениеВДанныеФормы(Объект, ОбъектФормы);
    
КонецПроцедуры

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    ФормаНовогоДокумента = ПолучитьФорму("Документ.ПеремещениеТоваров.Форма.ФормаДокумента");
    СоздатьДокументПеремещениеТоваров(ФормаНовогоДокумента.Объект, ПараметрКоманды);    
    ФормаНовогоДокумента.Открыть();
    
КонецПроцедуры

Алгоритм не прокатил. Вылетает ошибка "Нельзя изменять поле, содержащее объект данных формы".
   Stepa86
 
12 - 04.03.10 - 13:24
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    ОткрытьФорму("Документ.УстановкаЦенНоменклатурыПартнера.Форма.ФормаДокумента",
        Новый Структура("Основание",ПараметрКоманды),
       ,
       ,
       );

КонецПроцедуры
   Stepa86
 
13 - 04.03.10 - 13:26
http://screencast.com/t/YjdhNmEyY2Q

// Процедура - обработчик события "ОбработкаЗаполнения". 
//
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)
    
    ТипДанныхЗаполнения = ТипЗнч(ДанныеЗаполнения);

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

    ИнициализироватьДокумент();    
    
КонецПроцедуры// ОбработкаЗаполнения()
   riv40rus
 
18 - 04.03.10 - 13:51
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
    
    ОткрытьФорму("Документ.УстановкаЦенНоменклатурыПартнера.Форма.ФормаДокумента",
        Новый Структура("Основание",ПараметрКоманды),
       ,
       ,
       );

КонецПроцедуры
Не прокатывает. В документе вызывается ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка), а данные заполнения пустые.
   Mort
 
19 - 04.03.10 - 13:54
(18) А ты в ПараметрКоманды что пихаешь?
   riv40rus
 
20 - 04.03.10 - 13:55
&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        
    ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.ФормаДокумента",
        Новый Структура("Основание, ВидОперацииЗаполнения",ПараметрКоманды, "Продукция"));
    
КонецПроцедуры
   riv40rus
 
21 - 04.03.10 - 13:55
ПараметрКоманды имеет тип ДокументСсылка
   riv40rus
 
24 - 04.03.10 - 14:06
ОткрытьФорму("Документ.ПеремещениеТоваров.Форма.ФормаДокумента",
        Новый Структура("Основание", Новый Структура("Основание, ВидОперацииЗаполнения", ПараметрКоманды, "Продукция")));
   riv40rus
 
25 - 04.03.10 - 14:07
Всем спасибо! Разобрался.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.