Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1040/)
-   -   БП 3.0 программно создать и открыть документ (http://forums.kuban.ru/f1040/bp_3_0_programmno_sozdat-_i_otkryt-_dokument-8322228.html)

andiv21 17.05.2017 13:37

БП 3.0 программно создать и открыть документ
 
Подскажите плз, почему последовательность команд не работет для документа "РеализацияТоваровУслуг" ? при выборе в Объект.ДокументПриемник документа другого типа все работает нормально
ФормаДокумента = ПолучитьФорму("Документ." + Объект.ДокументПриемник + ".ФормаОбъекта");
ДанныеФормы = ФормаДокумента.Объект;
ЗаполнитьДокументНаСервере(ДанныеФормы);
КопироватьДанныеФормы(ДанныеФормы, ФормаДокумента.Объект);
ФормаДокумента.Открыть();

andiv21 17.05.2017 13:45

при выборе документа "РеализацияТоваровУслуг" выдает ошибку
"Поле объекта не обнаружено(Объект)"

roma n 17.05.2017 14:45

Ну нет у полученной формы реквизита с именем "Объект"...

andiv21 17.05.2017 15:18

ага, понял уже, выход есть какой-нибудь ?

user1C 17.05.2017 16:05

(3)
получать форму, у которой есть реквизит объект))
глянуть какие у этого дока формы и где там объект...

USSR 17.05.2017 16:18

(0)По моему, в вопросе уже содержится ответ. Нужно на сервере создать объект нового документа, вернуть на клиента ссылку, а на клиенте получить форму и открыть ее

roma n 17.05.2017 16:29

(5) подразумевает запись объекта в базу, что далеко не всегда необходимо

USSR 17.05.2017 16:40

(6)Почему запись? я не говорил, что объект надо записывать. Я полагаю, что 1С вернет ссылку нового документа, которой еще нет в базе. Вот работающий код:
&НаСервере
Функция СоздатьДокумент()
ТребОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

Возврат ТребОбъект.Ссылка;
КонецФункции

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

КлючПоиска = Новый Структура("Ключ", СсылкаНаДокумент);
ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", КлючПоиска);
ФормаДокумента.Открыть();

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

roma n 17.05.2017 17:07

(7) - СоздатьДокумент() вернет пустую ссылку, с UID 00000000-0000-0000-0000-000000000000 (если насильно не впихнуть СсылкуНового), по такому ключу откроется форма совершенно иного нового документа, никак не связанного с созданным в во время выполнения функции СоздатьДокумент()
В чем смысл?

USSR 17.05.2017 17:32

(8)я привел решение навскидку, просто никогда этим не озадачивался. Может можно и проще, хотя и тут ничего сложного, и задача состояла именно в том, чтобы открыть форму нового документа, или я просто не вьехал ? Тогда прошу прощения. Автор вроде хотел создать и открыть. Я не гуру управляемых форм, но как я понимаю, можно открыть форму объекта, значит чтобы открыть форму надо объект создать. Или мы о чем спорим ?) Записывать его в базу данных я не предлагал

roma n 17.05.2017 17:39

Для того, чтоб открыть форму нового документа - его не нужно создавать, нужно просто открыть форму. Без дополнительных манипуляций. Вот прямо как в (0)
ФормаДокумента = ПолучитьФорму("Документ." + Объект.ДокументПриемник + ".ФормаОбъекта");
.....
ФормаДокумента.Открыть();

Как правило, кроме открытия формы нужно провести ещё частичное заполнение реквизитов (как раз то, что за многоточием :) )

USSR 17.05.2017 17:57

(10)Вы хотите сказать, что при простом открытии формы
ФормаДокумента = ПолучитьФорму("Документ." + Объект.ДокументПриемник + ".ФормаОбъекта");
нмкакой объект не будет создан ? Дуиаю, что будет, просто нам о нем будет не дано знать. А заполнять программно надо все таки реквизиты объекта, а не реквизиты формы, которые являются визуализацией объекта. Заполнять программно реквизиты формы по моему чистейшее извращение. Есть документ, так заполняйте ц него то, что будет храниться в БЛ, а не на экране. Может я и неправ, но у меня такое мнение. Работать надо с данными, а не с их отображением

USSR 17.05.2017 18:03

(10)до меня дошло о чем Вы, щас проверю ))

USSR 17.05.2017 18:05

Принимаю все возражения )

Jimbo 17.05.2017 20:22

если УФ, то сразу ОткрытьФорму("Документ.Реализация.Форма.Формаобьекты",ПараметрыФормы), а в нужные параметры подсунуть то, что надо

USSR 18.05.2017 06:19

У Автора видимо в открываемой форме гнет реквизита "Объект", как например в форме "ФормаДокумента" документа "РеализацияТоваровУслуг". А в форме "ФормаДокументаОбщая" реквизит есть и вот такой код работает, контрагент заполняется:
ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаОбщая");
ФормаДокумента.Объект.Контрагент = Контрагент;

USSR 18.05.2017 06:40

[url]http://v8.1c.ru/metod/faq2/answer.jsp?id=651[/url]
Попробовал, работает:
ЭлементыОтбора = Новый Структура("Контрагент", Контрагент);
ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора);
ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы);

user1C 18.05.2017 09:48

(16)
оно будет работать только для тех реквизитов, у которых стоит галка "Заполнять из данных заполнения"

andiv21 19.05.2017 07:34

всем спасибо, все получилось

USSR 19.05.2017 08:52

(18)Признак хорошего тона - привести решение )


Текущее время: 15:23. Часовой пояс GMT +3.