Имя: Пароль:
1C
1С v8
УФ Заполнение и открытие программно созданного документа
0 Snork
 
05.05.14
09:44
В обработке нажали кнопку. Нужно создать, заполнить и открыть (НО не записать) новый документ. Как?

Пробовал:
Форма = ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта");
//Далее через Форма.Объект заполнять реквизиты
Форма.Открыть();

Но есть проблема. Этот код на клиенте, а чтоб заполнить некоторые реквизиты надо переводить на сервер. Но при переводе обратно с сервера на клиент, ругается, что на сервере нельзя изменять данные Форма.Объект
1 Snork
 
05.05.14
09:48
В коде самого док ничего менять нельзя
2 Рэйв
 
05.05.14
09:55
(0)Не стой стороны копаешь.

Док=Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
//Заполнить....
Ф=Док.ПолучитьФорму();
Ф.Открыть();
3 Рэйв
 
05.05.14
09:57
А если из формы хочешь, то как то так на сервере

Об=РеквизитФормыВЗначение("Объект");
//...заполнить Об.
ЗначениеВРеквизитФормы(Об,"Объект");
4 DexterMorgan
 
05.05.14
10:10
Кури ОткрытьФорму, ПараметрыФормы
5 DexterMorgan
 
05.05.14
10:12
а именно ЗначенияЗаполнения

Расширение управляемой формы для документа (Managed form extension for documents)
ЗначенияЗаполнения (FillingValues)
Описание:

Тип: Структура.
Параметры заполнения нового объекта.
Ключ структуры - имя реквизита формы, значение - заполняемое значение.
6 Defender aka LINN
 
05.05.14
10:30
(0) Дык получи нужные значения на сервере, а на клиенте их просто присвой.
7 andreymongol82
 
05.05.14
11:33
Это если у документа управляемая форма.

КлючУникальности = новый УникальныйИдентификатор;
Док=Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
Форма = Док.ПолучитьФорму("Документ.СчетНаОплатуПокупателю.ФормаОбъекта",,КлючУникальности);

ДанныеФормы = Форма.Объект;
//заполняем данные формы
КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
Форма.Модифицированность  = истина;
Форма.КлючУникальности = КлючУникальности;
Форма.Открыть();
8 Snork
 
05.05.14
15:07
(7) так не работает, см. (0)
9 Snork
 
05.05.14
15:08
(5) при этом методе не получится использовать общие функции заполнения типа:
ОтветственныеЛицаБП.УстановитьОтветственныхЛиц(ДокОбъект);
10 Snork
 
05.05.14
15:08
(6) табличные части так не перенести
11 VRednaia
 
05.05.14
15:20
(8) в (0) про метод из (7) ни слова. Метод из (7) реально работает.
12 Snork
 
05.05.14
15:23
ап
13 Snork
 
05.05.14
15:31
(11) На клиенте недоступен Документы...
На сервере недоступен ПолучитьФорму()
14 Snork
 
05.05.14
15:32
Аналог (7) я реализовал в (0). При передаче клиент-сервер выдает ошибку
15 Snork
 
05.05.14
16:51
up
16 Kamas
 
05.05.14
16:53
(15) дык на сервере функция для сбора данных  а на клиенте открой форму
17 Snork
 
05.05.14
16:55
(16) ты не разобрался
18 DexterMorgan
 
05.05.14
17:02
(17) тебе чем (4) не подходит?
19 DexterMorgan
 
05.05.14
17:03
кароче
ФормаЗаказа = ПолучитьФорму("Документ.ЗаказПоставщику.ФормаОбъекта");

и делай с ней че хочешь
20 Snork
 
05.05.14
17:26
(19) см. (9)
21 Snork
 
05.05.14
17:46
ап
22 DexterMorgan
 
05.05.14
17:46
(20) копируй функции, переписывай под "Форма.объект"
23 Snork
 
05.05.14
17:56
(22) похоже на было код
24 DexterMorgan
 
05.05.14
18:09
(23) Вспомни об этом, когда переименуют функцию заполнения или добавят параметр.
Ты походу быдло кода не видел.
25 Snork
 
06.05.14
12:12
Финальное решение:

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


&НаСервере...
ПолучитьПараметрыСчетаНаСервере():

СтрПарам = Новый Структура;
...
    
ДокОбъект = Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
ДокОбъект.Заполнить(Неопределено);
ДокОбъект.Реквизит = Значение;
...

ОтветственныеЛицаБП.УстановитьОтветственныхЛиц(ДокОбъект);
    
ЗаполнитьЗначенияСвойств(СтрПарам, ДокОбъект);
    
Возврат СтрПарам;