Открытие формы еще незаписанного документа 1С 8.2 Управляемое приложение

12.11.20

Разработка - Механизмы платформы 1С

Недавно столкнулся с проблемой открытия формы еще не записанного в БД документа, много возился с этим. Решил обобщить все найденное, может кому-то сэкономит время.

Итак вопрос №1: Как открыть форму еще не записанного документа (не заполнить на основании) ?

Ответ: Чтобы открыть форму нам нужно связать ее с ссылкой объекта, но объект еще не записан. Многие пытаются использовать метод УстановитьСсылкуНового() но это не прокатывает. После долгих чтений я сделал вот так:

&НаКлиенте
Процедура Команда(Команда)

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

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

// Можно использовать безконтекстный вызов, оптимизируем передачу данных

&НаСервереБезКонтекста

Функция ЗаполнитьДокументНаСервере(ДанныеФормы);

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

Док = Документы.НашДокумент.СоздатьДокумент();

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

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

КонецФункции

2. Как открыть форму уже записанного документа?

Здесь есть два метода ОткрытьФорму() или ОткрытьЗначение(). В обоих случаях нужно передавать ссылку на записанный документ.

 

&НаКлиенте
Процедура Команда(Команда)

СсылкаОбъекта = СоздатьНаСервере();
//1.
ОткрытьФорму("Документ.НашДокумент.Егоформа", Новый Структура("Ключ", СсылкаОбъекта)); // Через параметры мы передаем ссылку документа

//2.

ОткрытьЗначение(СсылкаОбъекта);

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

&НаСервере
Функция ЗаполнитьДокументНаСервере()

// Используем метод создать

НовыйОбъект = Документы.НашДокумент.СоздатьДокумент();

 // Заполняем его 

НовыйОбъект.Записать(); // Обязательно записываем

Возврат НовыйОбъект.Ссылка; //Возвращаем ссылку

КонецФункции

На уникальность материла не претендую, сам только "начинающий" так что если что не так  - критикуйте!

 

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4527    dsdred    53    

72

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5294    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6409    dsdred    36    

112

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18473    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12088    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8822    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6279    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15986    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. bulpi 215 29.02.12 09:22 Сейчас в теме
Для того, чтобы открыть форму нового документа, достаточно использовать метод ОткрытьФорму. Все , что Вы написали, не нужно. Другое дело, если нужно ЗАПОЛНИТЬ эту форму. Так заголовок публикации тогда нужно поменять.
CepeLLlka; China_off; kandellaster; kyrasol; yuraskas; korzhishe; Arzhanov.AV; +7 5 Ответить
34. ui69 41 14.03.17 13:00 Сейчас в теме
(1) Считаю, что заголовок соответствует. Нашел и понял суть именно по тожу заголовку который указан сейчас: Открытие формы еще незаписанного документа.
dbachinsky; wolder; Aleskey_K; andogskiy; Andreyyy; uchenik; yaroslav.artem; maksimus753; Vlaloplo; chemezov; awp234; portalUg; freeek; nekit_rdx; Drivingblind; Rusena; user1053017; victorree; PLAstic; Dach; wowik; ErshKUS; sasha777666; Sherdrada; Monte Carlo; myoker; +26 Ответить
76. user1638771 10.01.24 16:55 Сейчас в теме
2. пользователь 29.02.12 10:33
Сообщение было скрыто модератором.
...
3. M-Mark-76 117 01.03.12 09:49 Сейчас в теме
Спасибо, вся описаная методика работает
4. serg_gres 153 01.03.12 22:55 Сейчас в теме
А я сделал через временное хранилище.
5. bulas 211 27.08.12 15:00 Сейчас в теме
Заполняем документ программно, а затем:
ФормаДокумента = ДокументОбъект.ПолучитьФорму();
ФормаДокумента.ОткрытьМодально();
Оставили в открытом документе еще "следы" и записываем(проводим).
7. via64 11.04.13 11:01 Сейчас в теме
(5) bulas,
Это работает только в толстом клиенте.
chemezov; PLAstic; Dach; pbahushevich; +4 Ответить
6. Igoryany4 26.10.12 14:14 Сейчас в теме
При выполнении строки:
Форма = ПолучитьФорму("Документы.НашДокумент.ФормаОбъекта");


возникает ошибка, исправленный вариант:
Форма = ПолучитьФорму("Документ.НашДокумент.ФормаОбъекта");
pbahushevich; +1 Ответить
8. nick_krsk 19 01.06.13 14:28 Сейчас в теме
Статья помогла решить задачу, спасибо!
Vin1s; asterisk; +2 Ответить
9. nixel 1403 12.06.13 12:31 Сейчас в теме
Печально... "Разработку управляемого интерфейса" проглядите. Там есть простой пример, как это сделать.
11. leemuar 13.11.13 15:29 Сейчас в теме
(9) nixel, на какой из 500 страниц?
kholkin; wowik; CratosX; +3 Ответить
12. nixel 1403 13.11.13 18:25 Сейчас в теме
(11) leemuar, из 600 :)
Извиняюсь, сейчас проглядел книгу, действительно там этого нет. Видимо идею брал из какого-то другого печатного источника.
В работе дабы не гонять большие массивы данных между клиентом и сервером использую такой подход:

Форма, с которой мы открываем незаписанную форму.
&НаКлиенте
Процедура ОткрытьЗаполненныйДокумент(Команда)
                Адрес = ПолучитьАдресНовогоДокумента(ЭтаФорма.УникальныйИдентификатор);
                Параметры = Новый Структура(“АдресХранилища”, Адрес);
                ОткрытьФорму(”Документ.Приказ.ФормаОбъекта”, Параметры, ЭтаФорма);
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьАдресНовогоДокумента(УИД)
                ДокументОбъект = Документы.НашДокумент.СоздатьДокумент();
                ...
                code code code
                ...
                АдресХранилища  = ПоместитьВоВременноеХранилище(ДокументОбъект, УИД);

                Возврат АдресХранилища;
КонецФункции
Показать

Форма открываемого объекта
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
                Если Параметры.Свойство(”АдресХранилища”) И ЭтоАдресВременногоХранилища(Параметры.АдресХранилища) Тогда
                               ДокументОбъект = ПолучитьИзВременногоХранилища(Параметры.АдресХранилища);
                               ЗначениеВРеквизитФормы(ДокументОбъект, ”Объект”);
                КонецЕсли; 
КонецПроцедуры


Да, приходится незначительно залезать в форму объекта, но получается большой выигрыш по производительности и клиент-серверному взаимодействию.
kasper076; Tworozhok; starponyx; KilloN; improg; pavelpribytkin96; Jeka44; PLAstic; Vin1s; i.c.h; Xershi; Krio2; unichkin; kuza_87; klinval; Sergafan10; Union37; Zero_nv; Elvisnya; +19 Ответить
14. Elvisnya 21 28.07.14 12:51 Сейчас в теме
(12) nixel, спасибо за совет. В 8.3 скорее всего не будет работать, т.к. в 8.3 при помещении несериализуемого значения во временное хранилище возникает модульная ошибка, а ДокументОбъект как раз несереализуемый. Как вариант можно использовать структуру, взамен ДокументОбъект.
SkyHunter; +1 Ответить
41. Xershi 1474 08.10.17 17:16 Сейчас в теме
(14) так и есть:
АдресХранилища = ПоместитьВоВременноеХранилище(НовыйОбъект, УникальныйИд);

Ошибка при вызове метода контекста (ПоместитьВоВременноеХранилище)
АдресХранилища = ПоместитьВоВременноеХранилище(НовыйОбъект, УникальныйИд);
по причине:
Переданное значение не может быть помещено во временное хранилище

1С:Предприятие 8.3 (8.3.10.2466)

А метод автора сработал!

В своей публикации не знал как решить проблему не записанного битого объекта: https://infostart.ru/public/608150/
А теперь это стало возможно!
42. Xershi 1474 23.12.17 22:40 Сейчас в теме
(41) после тестов пришел к мнению, что открыть форму битой ссылки на УФ не возможно. Единственный вариант создавать произвольную форму, но смысла в этом нет, проще записать и открыть уже элемент!
57. Jeka44 23.03.20 13:55 Сейчас в теме
(41) Что бы не возникало такой ошибки во временное хранилище можно положить структуру, содержащую документОбъект, а не сам документ объект, например так:

Функция ПолучитьСсылкуНаДокумент(УИД)

НашДокументОбъект= Документы.НашДокумент.СоздатьДокумент();

НашДокументОбъект.Контрагент = Объект.Контрагент;

СтруктураДокумента = Новый Структура("ДокументОбъект", ДокументЗаписьВОчередь);

АдресХранилища = ПоместитьВоВременноеХранилище(СтруктураДокумента, УИД);

Возврат АдресХранилища;

КонецФункции //ПолучитьСсылкуНаДокумент
dbachinsky; kholkin; improg; +3 Ответить
58. Xershi 1474 23.03.20 14:13 Сейчас в теме
(57) а ДокументЗаписьВОчередь откуда?
59. Jeka44 23.03.20 15:02 Сейчас в теме
(58)
У меня так документ назывался, пропустил по невнимательности когда пример на инфостарт писал)
60. Xershi 1474 23.03.20 15:26 Сейчас в теме
(59) я так понял вы заменили данные объекта на данные этого объекта в структуре и тогда удалось на УФ открыть новый элемент, заполнить его данными удаленного, хотя какие данные. Речь идет об "УИД". И когда пользователь записал это, то ссылка перестала быть битой?
61. Jeka44 23.03.20 17:12 Сейчас в теме
(60) Нет, у меня не стояла задача воскресить битый документ, я решал задачу точно такую же, которая была в заголовке данной темы, а именно: "Открытие формы еще не записанного документа." Теперь подробности: Есть некая форма обработки, назовем ее "Рабочим местом". На этой форме рабочего места вводим какие-либо данные. Далее в этом же рабочем месте по нажатию кнопки "Создать Запись в очередь" программно создается Документ, как было видно ранее у меня он назывался "Запись в очередь". То есть у меня есть ДокументОбъект НЕ ЗАПИСАННОГО документа и мне нужно было открыть его заполненную форму, с чем данный способ прекрасно справился. УИД здесь - это уникальный идентификатор формы Рабочего места, нужен он для того чтобы "В случае, если передается УникальныйИдентификатор формы или адрес в хранилище, то значение будет автоматически удалено после закрытия этой формы" (читата из конфигуратора из описания метода ПоместитьВоВременноеХранилище)

P.S. Так же с этим справлялся метод "ОткрытьЗначение", но не совсем корректно, а именно он открывал форму по умолчанию, а по задаче нужно было открыть форму, не являющуюся формой по умолчанию.
62. Xershi 1474 23.03.20 18:54 Сейчас в теме
(61) а так просто открыть форму с данными это не проблема. Проблема именно, чтобы открыть с нужным УИД.
Автор описал, как заполнять объект данными.
71. KilloN 56 07.07.21 12:57 Сейчас в теме
Все же метод nixel предпочтительнее.
При создании на сервере такой большой поток различных заполнялок может быть.
Особенно дополнительные колонки в табличной части.

&НаСервере
Процедура _ПриСозданииНаСервереПеред(Отказ, СтандартнаяОбработка)
	
	Если Параметры.Свойство("АдресХранилища") И ЭтоАдресВременногоХранилища(Параметры.АдресХранилища) Тогда
	 	Структура = ПолучитьИзВременногоХранилища(Параметры.АдресХранилища);
		ЗначениеВРеквизитФормы(Структура.ДокументОбъект, "Объект");
		УдалитьИзВременногоХранилища(Параметры.АдресХранилища);
	КонецЕсли; 	
	
КонецПроцедуры
Показать
10. M.Shalimov 199 25.06.13 15:27 Сейчас в теме
Функция ЗаполнитьДокументНаСервере(ДанныеФормы);


В Вашем примере функция ничего не возвращает и ";" при определении излишни.
13. dachnik 26 13.12.13 13:03 Сейчас в теме
Спасибо, хоть ваш пример у меня и не сработал, но навел на правильную мысль.
15. Kuklachel 09.09.14 13:34 Сейчас в теме
Спасибо lobster, очень помогли разобраться!
16. t278 56 23.09.14 03:20 Сейчас в теме
в моём случае, нужно было открывать
мФорма= ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары");
mixha; Vida; +2 Ответить
50. Vida 15 29.01.19 23:35 Сейчас в теме
(16)
У меня заработало и как у вас и как у автора.
Странно...

Теперь проблема выбора.

ЧЯДНТ?

Автору СПАСИБО!
65. mixha 15.10.20 09:51 Сейчас в теме
(50)потому что вручную уже была открыта форма. Сам целый час промучился, пока не увидел (16) . И тоже думаю, че за говно, только что работало)))
17. kraynev-navi 647 27.02.15 09:07 Сейчас в теме
Подозреваю, что у последней функции в статье название должно быть все-таки СоздатьНаСервере()
18. volha-77 19 11.03.15 21:26 Сейчас в теме
Спасибо, очень нужная статья, все сработало и в 8.3
Vin1s; Vida; +2 Ответить
19. hiexe 01.04.15 14:08 Сейчас в теме
20. Sergus 09.04.15 15:11 Сейчас в теме
До недавнего времени все так и работало но вот сегодня все стало работать так как написал t278, нужно создавать конкретную форму.
51. Vida 15 29.01.19 23:38 Сейчас в теме
(20)
А что у вас изменилось? У меня работают оба варианта.
Платформа 8.3.13.1644
УНФ 1.5
21. prodines 107 10.04.15 14:49 Сейчас в теме
ПолучитьФорму - доступность "Толстый клиент"! Минусую публикацию как нерабочую.
starponyx; marku; +2 6 Ответить
49. Vida 15 29.01.19 23:30 Сейчас в теме
(21) Зачем пугаете?

ПолучитьФорму (GetForm)

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, толстый клиент, мобильное приложение(клиент).
Вызов метода выполняет обращение к серверу.
22. mirrr 88 23.04.15 15:22 Сейчас в теме
Отсутствует отображение для типа 'ДанныеФормыЭлементКоллекции'
Эта ошибка на строку ЗаполнитьДокументНаСервере(ДанныеФормы);
Версия 8.3. В чем причина?
23. sonGodv 43 29.04.15 21:14 Сейчас в теме
В моей ситуации не проходит не первый ни второй вариант.
В первом, документ Установки цен номенклатуры, не заполняется табличная часть, видимо надо вызывать еще процедуры из общих модулей
Во втором Документ можно записать, только если у пользователя есть полные права.
Мне нравиться больше второй вариант, но не нашел как обойти контроль прав пока.
Может кто сталкивался при записи программно с ограничениям по правам?
24. korppinen 69 10.06.15 12:49 Сейчас в теме
(23) sonGodv,
УстановитьПривилегированныйРежим(Истина);
48. serg-lom89 72 12.12.18 18:55 Сейчас в теме
(23)
Добрый
точно с таким же столкнулся((
не подскажете почему не заполняются ТЧ?
25. alexa191 19.07.15 18:23 Сейчас в теме
Благодарю, помогла статья
26. SunnyGirl 13.10.15 09:37 Сейчас в теме
Спасибо, статья помогла.
27. nikiforovvn 15.02.16 10:36 Сейчас в теме
28. KNM.Work 30.05.16 01:30 Сейчас в теме
29. tindir 21.08.16 18:54 Сейчас в теме
&НаКлиенте
Процедура Команда(Команда)

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

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

// Можно использовать безконтекстный вызов, оптимизируем передачу данных

&НаСервереБезКонтекста

Функция ЗаполнитьДокументНаСервере(ДанныеФормы);

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

Док = Документы.НашДокумент.СоздатьДокумент();

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

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

КонецФункции
Показать

В коде теперь ошибка - Нельзя изменять поле, содержащее объект данных формы....
Как на этом вывихе мозга можно разрабатывать....
30. sergoqwe 06.09.16 11:09 Сейчас в теме
(29) tindir,
&НаКлиенте 
Процедура Команда1(Команда) 

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

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

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

&НаСервере 
Функция ВидОперацииДокумента () 
Возврат Перечисления.ВидыОперацийРеализацияТоваров.Товары; 
КонецФункции 

Показать

Поправьте если что не правильно, только разбираюсь с этим выносом мозга 8.3
31. Meson 04.10.16 11:49 Сейчас в теме
Док = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.РеализацияТоваровУслуг"));
Док = Документы.РеализацияТоваровУслуг.СоздатьДокумент();

В чем смысл этих двух строк?
Vladimir-R; egor123456; +2 Ответить
32. user657734_YGREEN 12.01.17 23:58 Сейчас в теме
Все просто:
&НаКлиенте
Процедура СоздатьЗаявку(Команда)
	ПараметрыФормы	= новый Структура("Основание, Объект.Ссылка);
	ОткрытьФорму("Документ.ЗаказМатериалов.Форма.ФормаДокумента", ПараметрыФормы);
КонецПроцедуры


а теперь на сервере при открытии действуем как обычно при создании документа на основании:
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка)

// ДанныеЗаполнения - это основание переданное в параметрах формы.
ЗЫ: см. справку 1с: Интерфейс (управляемый)->УправляемаяФорма
@Fancy; user1067792; triviumfan; eruil; starponyx; i.c.h; Slypower; Erne100; CratosX; TelsDevelopUser; altu71; asp-1c; rusakov1969; kotlyar; Pr0glam3r; San4ez; marku; Aston1924; zhuravlev_as; +19 Ответить
33. zhuravlev_as 392 11.02.17 10:17 Сейчас в теме
(32) спасибо, этот вариант мне подошел

74. eruil 13.06.22 17:59 Сейчас в теме
(32) небольшое уточнение:
Процедура СоздатьЗаявку(Команда)
    ПараметрыФормы = Новый Структура("Основание", Объект.Ссылка);
    ОткрытьФорму("Документ.ЗаказМатериалов.Форма.ФормаДокумента", ПараметрыФормы); // .ФормаВыбора .ФормаОбъекта .ФормаСписка - задаваемые в конфигураторе или ваша форма - .Форма.ВашаФорма
КонецПроцедуры
35. LavinVladik 214 14.04.17 04:44 Сейчас в теме
вот еще один рабочий вариант,
взято от сюда http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=625538
&НаКлиенте
Процедура ОткрытьФормуНового(Команда)
 
               Форма = ПолучитьФорму("Документ.ПродажаТоваровУслуг.Форма.ФормаДокумента");
               ДанныеФормы = Форма.Объект;
               ЗаполнитьНаСервере(ДанныеФормы);
               КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
               Форма.Открыть();
 
КонецПроцедуры
 
&НаСервере
Процедура ЗаполнитьНаСервере(НовыйОбъект)
               НовыйОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000005");          
КонецПроцедуры

Показать
36. bobster123456 01.06.17 13:21 Сейчас в теме
(35) если нужный (основной) реквизит формы называется не "Объект", то кирдык. Зашёл сюда как раз в поисках решения.
37. mukhina 29.06.17 13:04 Сейчас в теме
Большое спасибо! Очень помогло при решении задачи по переводу внешней обработки по созданию нового документа ПТУ с 8.2 на 8.3.
Пример для Бухгалтерии 3.0 вместо
Форма = ПолучитьФорму("Документ.НашДокумент.ФормаОбъекта");
надо
Форма = ПолучитьФорму("Документ.ПоступлениеТоваровУслуг.Форма.ФормаДокументаТовары");
В этой форме есть реквизит Объект.
38. CratosX 112 10.07.17 13:27 Сейчас в теме
Для Расширения (тонкий клиент, клиент-сервер) помог такой код, взятый отсюда:

&НаКлиенте
Процедура ОткрытьФормуНового(Команда)

	Форма = ПолучитьФорму("Документ.ПродажаТоваровУслуг.Форма.ФормаДокумента");
	ДанныеФормы = Форма.Объект;

	ЗаполнитьНаСервере(ДанныеФормы);

	КопироватьДанныеФормы(ДанныеФормы, Форма.Объект);
	Форма.Открыть();

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

&НаСервере
Процедура ЗаполнитьНаСервере(НовыйОбъект)

	НовыйОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("000000005");         

КонецПроцедуры
Показать
Mos; MishaG709; Euroset1; +3 Ответить
39. PavelTihonov 13.09.17 13:02 Сейчас в теме
40. SvetaS2014 08.10.17 15:37 Сейчас в теме
Добрый День!
возникла необходимость передачи данных на форму документа до момента его создания из другого документа. ИНТЕРФЕЙС ОБЫЧНЫЙ
есть две процедуры



Функция ЗаполнитьДокументНаСервере(ДанныеФормы,СтрокаТабличнойЧасти);

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

        НовыйДокумент= Документы.Купюрник.СоздатьДокумент();

// Заполняем реквизиты объекта или другие действия ********
		НовыйДокумент.Сумма_необходимая         =  СтрокаТабличнойЧасти.Сумма;
        НовыйДокумент.Дата               = ТекущаяДата();
Запрос=новый Запрос;    	
	
Запрос.Текст = 
"ВЫБРАТЬ
|      Номиналы_валют.Ссылка,
|      Номиналы_валют.Число
|ИЗ
|      Справочник.Номиналы_валют КАК Номиналы_валют";



Результат = Запрос.Выполнить().Выбрать();

Пока Результат.Следующий() цикл
НоваяСтрока =  НовыйДокумент.Купюры.Добавить();
НоваяСтрока.Номинал =Результат.Ссылка;
НоваяСтрока.СтоимостьКупюры = Результат.Число;
НоваяСтрока.Пачек =1;
НоваяСтрока.ШтукКупюр=100;
Стоимость=НоваяСтрока.СтоимостьКупюры* НоваяСтрока.ШтукКупюр* НоваяСтрока.Пачек;
КонецЦикла;	
	

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

     Исключение
        Сообщить("НЕ УДАЛОСЬ создать окумент" );
	КонецПопытки;	

КонецФункции

Процедура ОперацииКупюрыОткрытие(Элемент, СтандартнаяОбработка)
	    Форма = ПолучитьФорму("Документ.Купюрник.ФормаОбъекта");
		ДанныеФормы = Форма.ЭтаФорма.ДокументОбъект; // Получаем объект формы в переменную
		СтрокаТабличнойЧасти = ЭлементыФормы.Операции.ТекущиеДанные; 

		если пустаястрока(СтрокаТабличнойЧасти.Купюры)=Истина тогда 
		    ЗаполнитьДокументНаСервере(ДанныеФормы.этотобъект,СтрокаТабличнойЧасти); // Заполняем документ на сервере
           КопироватьДанныеФормы(ДанныеФормы.этотобъект, Форма.ЭтаФорма.ДокументОбъект.этотобъект); // копируем наш объект в объект формы и далее открываем ее
            Форма.Открыть(); 	
		конецесли;

КонецПроцедуры
Показать



ИСПОЛЬЗУЮ ТЕКСТ СТАТЬИ https://infostart.ru/public/118784/
НО У МЕНЯ ОБЫЧНЫЙ ИНТЕРФЕЙС
ПОЛУЧАЕМ ОШИБКУ НА СТРОКАХ
Код: [Выделить]
НовыйДокумент = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.Купюрник")); // Получаем объект из данных формы


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

Код: [Выделить]
   КопироватьДанныеФормы(ДанныеФормы.этотобъект, Форма.ЭтаФорма.ДокументОбъект.этотобъект);


ОШИБКА "НЕСООТВЕТСТВИЕ ТИПОВ, ХОТЯ В ОТЛАДЧИКЕ ВСЕ СОВПАДАЕТ "
Цитировать
{Документ.Касса.Форма.ФормаДокумента.Форма(529)}: Ошибка при вызове метода контекста (ДанныеФормыВЗначение)
НовыйДокумент = ДанныеФормыВЗначение(ДанныеФормы, Тип("ДокументОбъект.Купюрник")); // Получаем объект из данных формы ИЛИ
по причине:
Несоответствие типов (параметр номер '1')


ПРИЧЕМ НА ВСЕХ ТРЕХ СТРОКАХ.
как исправить?
44. Xershi 1474 24.12.17 21:08 Сейчас в теме
(40) вам не нужны танцы с бубном. Получайте новую ссылку о чем автор писал ранее! Это все для УФ нужно!
43. rutadmeen 80 24.12.17 20:24 Сейчас в теме
Действительно работает. Спасибо!
45. micha26 10.04.18 14:24 Сейчас в теме
ЗаполнитьДокументНаСервере(ДанныеФормы); // Заполняем документ на сервере

Если я правильно понимаю - НаКлиенте будет ругаться на отсутствие переменной ДанныеФормы.
47. micha26 10.04.18 15:24 Сейчас в теме
(45)а нет, это я ступил. Не будет ругаться.
46. user623969_dusa 10.04.18 14:29 Сейчас в теме
все равно идет обращение к серверу так почему сразу не предложить записать объект если надо открыть его форму как рекомендуется в универсальном решении, выигрыша нет - данные формы туда сюда гоняются если документ будет записываться еще раз на сервер полетят данные формы
можно использовать директиву НаСервере и не передавать параметром)
52. hydro2588_2015 14 14.06.19 19:40 Сейчас в теме
Может кому пригодится. Пункт 2. ОткрытьЗначение(Ссылка). У меня не работало в web (хотя справка говорила что все должно быть норм, ругалось на модальность окна), версия платформы 8.12. ОткрытьФорму() отработало как надо. Открывал документ ЗаказКлиента.
53. olbir 31.10.19 15:04 Сейчас в теме
54. user1053017 20.12.19 04:28 Сейчас в теме
55. Hans 2 20.12.19 09:59 Сейчас в теме
Все способы кривые и не универсальные, особенно для типовых. ПриСозданииНаСервере срабатывает раньше, чем вы заполняете форму. Поэтому все служебные реквизиты формы - Итоги документа и др, не расчитываются.
56. Hans 2 20.12.19 10:23 Сейчас в теме

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

	ОбъектФормы = Форма.Объект;
    ЗаполнитьРеализациюНаСервере(ОбъектФормы, АдресХранилища);
	КопироватьДанныеФормы(ОбъектФормы, Форма.Объект);
       // Не экспортная процедура
	Форма.ПриЧтенииСозданииНаСервере();
    Форма.Открыть();
		
КонецПроцедуры

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

       ЗначениеВДанныеФормы(ДокументОбъект, ОбъектФормы);

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

Показать


Оказывается можно вызывать из вне, процедуры формы, которые не экспортные. Разрыв шаблона.
unknown181538; +1 Ответить
63. soulner 359 23.07.20 10:23 Сейчас в теме
Хорошая статья, но есть дополнение у меня.
1. хорошо бы менять признак модифицированности формы после заполнения объекта;
2. процедура ПолучитьФорму вызывает событие ПриСозданииНаСервере, а оно отрабатывает по пустому объекту, да объект формы потом заполняется, но отображение формы может быть некорректным.
64. GetNight 46 10.09.20 09:19 Сейчас в теме
Очень понравился тип Стурктура оператора Новый. Можно ссылку на описание?)

//1.
ОткрытьФорму("Документ.НашДокумент.Егоформа", Новый Стурктура("Ключ", СсылкаОбъекта)); // Через параметры мы передаем ссылку документа
66. TopZlodey 13 12.11.20 10:31 Сейчас в теме
Спасибо тебе добрый человек!
67. user1167610 17.12.20 16:05 Сейчас в теме
{Документ.РеализацияТоваровУслуг.Форма.ФормаДокумента.Форма(4531,5)}: Процедура или функция с указанным именем не определена (ЗаполнитьРеализациюНаСервере)
<<?>>ЗаполнитьРеализациюНаСервере(ОбъектФормы, АдресХранилища);
68. user1167610 17.12.20 16:11 Сейчас в теме
Подскажите как всунуть данные в эти реквизиты? В расшифровку платежа все ложится прекрасно, а если платеж по одной сделке - уже всю голову сломал - ни в какую
Прикрепленные файлы:
69. improg 568 15.02.21 14:17 Сейчас в теме
(12) (57) , спасибо помогло, хороший подход.
70. muzzombie 23.06.21 16:13 Сейчас в теме
&НаКлиенте
Процедура Команда(Команда)

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


"Поле объекта не обнаружено (Объект)"


На толстом клиенте делаю.
72. sponchebob 20 13.07.21 08:34 Сейчас в теме
Спасибо, очень нужная статья, все сработало и в 8.3 для УТ 11. Статья прям помогла!
73. Unry 03.08.21 16:36 Сейчас в теме
У меня работает, но мне нужно открыть несколько документов, а открывается только последний. Как изменить код, чтобы несколько можно было открыть?
75. george30@mail.ru 13.05.23 15:48 Сейчас в теме
При таком варианте заполнения неудобно то, что процедура ПриСозданииНаСервере срабатывает при вызове ПолучитьФорму, когда в форме ещё нет никаких данных. Удобнее использовать обработчик заполнения в модуле формы, который можно настроить через расширение, а в метод ОткрытьФорму передать параметр "ЗначениеЗаполнения", которое и будет использоваться для заполнения в обработчике.
Оставьте свое сообщение