![]() |
БП 3.0 программно создать и открыть документ Подскажите плз, почему последовательность команд не работет для документа "РеализацияТоваровУслуг" ? при выборе в Объект.ДокументПриемник документа другого типа все работает нормально ФормаДокумента = ПолучитьФорму("Документ." + Объект.ДокументПриемник + ".ФормаОбъекта"); ДанныеФормы = ФормаДокумента.Объект; ЗаполнитьДокументНаСервере(ДанныеФормы); КопироватьДанныеФормы(ДанныеФормы, ФормаДокумента.Объект); ФормаДокумента.Открыть(); |
при выборе документа "РеализацияТоваровУслуг" выдает ошибку "Поле объекта не обнаружено(Объект)" |
Ну нет у полученной формы реквизита с именем "Объект"... |
ага, понял уже, выход есть какой-нибудь ? |
(3) получать форму, у которой есть реквизит объект)) глянуть какие у этого дока формы и где там объект... |
(0)По моему, в вопросе уже содержится ответ. Нужно на сервере создать объект нового документа, вернуть на клиента ссылку, а на клиенте получить форму и открыть ее |
(5) подразумевает запись объекта в базу, что далеко не всегда необходимо |
(6)Почему запись? я не говорил, что объект надо записывать. Я полагаю, что 1С вернет ссылку нового документа, которой еще нет в базе. Вот работающий код: &НаСервере Функция СоздатьДокумент() ТребОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент(); Возврат ТребОбъект.Ссылка; КонецФункции &НаКлиенте Процедура Сформировать(Команда) СсылкаНаДокумент = СоздатьДокумент(); КлючПоиска = Новый Структура("Ключ", СсылкаНаДокумент); ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", КлючПоиска); ФормаДокумента.Открыть(); КонецПроцедуры |
(7) - СоздатьДокумент() вернет пустую ссылку, с UID 00000000-0000-0000-0000-000000000000 (если насильно не впихнуть СсылкуНового), по такому ключу откроется форма совершенно иного нового документа, никак не связанного с созданным в во время выполнения функции СоздатьДокумент() В чем смысл? |
(8)я привел решение навскидку, просто никогда этим не озадачивался. Может можно и проще, хотя и тут ничего сложного, и задача состояла именно в том, чтобы открыть форму нового документа, или я просто не вьехал ? Тогда прошу прощения. Автор вроде хотел создать и открыть. Я не гуру управляемых форм, но как я понимаю, можно открыть форму объекта, значит чтобы открыть форму надо объект создать. Или мы о чем спорим ?) Записывать его в базу данных я не предлагал |
Для того, чтоб открыть форму нового документа - его не нужно создавать, нужно просто открыть форму. Без дополнительных манипуляций. Вот прямо как в (0) ФормаДокумента = ПолучитьФорму("Документ." + Объект.ДокументПриемник + ".ФормаОбъекта"); ..... ФормаДокумента.Открыть(); Как правило, кроме открытия формы нужно провести ещё частичное заполнение реквизитов (как раз то, что за многоточием :) ) |
(10)Вы хотите сказать, что при простом открытии формы ФормаДокумента = ПолучитьФорму("Документ." + Объект.ДокументПриемник + ".ФормаОбъекта"); нмкакой объект не будет создан ? Дуиаю, что будет, просто нам о нем будет не дано знать. А заполнять программно надо все таки реквизиты объекта, а не реквизиты формы, которые являются визуализацией объекта. Заполнять программно реквизиты формы по моему чистейшее извращение. Есть документ, так заполняйте ц него то, что будет храниться в БЛ, а не на экране. Может я и неправ, но у меня такое мнение. Работать надо с данными, а не с их отображением |
(10)до меня дошло о чем Вы, щас проверю )) |
Принимаю все возражения ) |
если УФ, то сразу ОткрытьФорму("Документ.Реализация.Форма.Формаобьекты",ПараметрыФормы), а в нужные параметры подсунуть то, что надо |
У Автора видимо в открываемой форме гнет реквизита "Объект", как например в форме "ФормаДокумента" документа "РеализацияТоваровУслуг". А в форме "ФормаДокументаОбщая" реквизит есть и вот такой код работает, контрагент заполняется: ФормаДокумента = ПолучитьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаОбщая"); ФормаДокумента.Объект.Контрагент = Контрагент; |
[url]http://v8.1c.ru/metod/faq2/answer.jsp?id=651[/url] Попробовал, работает: ЭлементыОтбора = Новый Структура("Контрагент", Контрагент); ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", ЭлементыОтбора); ОткрытьФорму("Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента", ПараметрыФормы); |
(16) оно будет работать только для тех реквизитов, у которых стоит галка "Заполнять из данных заполнения" |
всем спасибо, все получилось |
(18)Признак хорошего тона - привести решение ) |
Текущее время: 15:23. Часовой пояс GMT +3. |