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


1С:Предприятие :: 1С:Предприятие 8 общая

Создание и заполнение документа на сервере и передача его на клиент

Создание и заполнение документа на сервере и передача его на клиент
Я
   Flempy
 
23.08.18 - 10:40
На сервере создаю и заполняю документ, после чего мне необходимо получить его на клиенте(в процедуре "ВыполнитьКоманду"), чтобы открыть форму документа, чтобы у пользователя была возможность редактирования. Все материалы по созданию связанных объектов уже перечитал. Подскажите, пожалуйста, как это можно реализовать?
 
 
   Cyberhawk
 
1 - 23.08.18 - 10:43
Один из вариантов - ОткрытьФорму + ЗначенияЗаполнения в передаваемых в форму параметрах
   Cyberhawk
 
2 - 23.08.18 - 10:43
Альтернативный вариант - КопироватьДанныеФормы
   Flempy
 
3 - 23.08.18 - 10:46
(2) ЗначениеВДанныеФормы
с помощью этого можно как-нибудь передать документ?
   RomaH
 
4 - 23.08.18 - 10:46
   RomaH
 
5 - 23.08.18 - 10:47
(3) попробуй
   Numerus Mikhail
 
6 - 23.08.18 - 10:47
   Flempy
 
7 - 23.08.18 - 10:48
(4) "Все материалы по созданию связанных объектов уже перечитал" не подходит, мне нужно сначала заполнить документ, а затем получить его форму, а не наоборот
   Flempy
 
8 - 23.08.18 - 10:52
(5) а потом на клиенте как вызвать мой документ?
   RomaH
 
9 - 23.08.18 - 10:52
(7) почему?
   Cyberhawk
 
10 - 23.08.18 - 10:54
(3) Безсмысленно. Объект формы у тебя уже есть
 
 Рекламное место пустует
   RomaH
 
11 - 23.08.18 - 10:56
(4) - но тут проблема с "асинхронными вызовами"

нет ОповещенияОЗакрытии в методе "Открыть"
   Остап Сулейманович
 
12 - 23.08.18 - 10:58
(7) Звиздетц...
Что значит "сначала заполнить документ"?
Это может означать
1. "заполнить все реквизиты документа и записать его в базу данных"
2. "заполнить реквизиты и не записывать в базу до показа пользователю".

Если вы выберете вариант 2 - укажите где все-таки нужно хранить значения реквизитов несохраненного документа. Обычно это хранится в реквизитах формы. Где предлагаете это делать Вы?
   RomaH
 
13 - 23.08.18 - 11:01
по сути - создать структуру - заполнить её и передать в обработку заполнения - там еще раз обработчик написать - заполнение из стуруктуры
   Flempy
 
14 - 23.08.18 - 11:02
(12) Да, мне несомненно нужен второй вариант, и как я понял, реквизиты должны храниться в мною созданном документе, после чего необходимо открыть его форму. Исправьте меня, если я не прав
   RomaH
 
15 - 23.08.18 - 11:04
реквизиты должны храниться в мною созданном документе ОБЪЕКТЕ(?)

тип какой у "Документа"?

документ объект на клиенте не существует
   Flempy
 
16 - 23.08.18 - 11:05
(15) Я создаю документ на сервере.
Док=Документы.МойДокумент.СоздатьДокумент();
   Flempy
 
17 - 23.08.18 - 11:06
(16) И затем уже заполняю его из запроса
   Cyberhawk
 
18 - 23.08.18 - 11:06
(15) Что-то ты тупишь. Ему надо создать объект документа в памяти, заполнить его реквизиты, а затем показать форму этого объекта на клиенте (для записи или отказа от нее)
   Остап Сулейманович
 
19 - 23.08.18 - 11:08
(14) "реквизиты должны храниться в мною созданном документе" Документ - это связная совокупность значений реквизитов. Значения реквизитов хранятся в таблицах БД. Связь осуществляется (грубо) по ссылке. Нет ссылки - нет документа. Ссылка может быть только у записанного документа.

ЗЫ. Если коротко. Открывай форму. Заполняй реквизиты. И не делай людям моск. Пока будешь заполнять реквизиты форму все равно никто не увидит. Увидят только после заполнения.
   Остап Сулейманович
 
20 - 23.08.18 - 11:10
+ (19) И не слушай (18). Он тебя плохому научит. Когда Cyberhawk научит тебя как форму связать с данными объекта-документа - тогда слушай. А пока не нужно.
   RomaH
 
21 - 23.08.18 - 11:11
(18) да не туплю - именно это и понял
ИМХО не получится

как вариант - создать и заполнить переменную с типом структура
передать её в ЗначенияЗаполнения 
о обработать в ОбработкеЗаполнения
   Flempy
 
22 - 23.08.18 - 11:12
(19) я бы и рад так поступить. Но начальника такой вариант не устроил, он хочет, чтобы изначально был создан объект(документ), а уже потом получить форму этого объекта
   Cyberhawk
 
23 - 23.08.18 - 11:12
(20) Что-то ты паясничаешь. "Нет ссылки - нет документа" // Лол
   Flempy
 
24 - 23.08.18 - 11:13
(22) Возможно я что-то не так понимаю
   Остап Сулейманович
 
25 - 23.08.18 - 11:14
(21) Это как гланды через ... и автогеном. Почему бы в ОбработкаЗаполнения не выполнить тот же код, который заполнит "переменную с типом структура"? Но заполнить реквизиты формы напрямую?
   RomaH
 
26 - 23.08.18 - 11:15
(22) невозможно
   Остап Сулейманович
 
27 - 23.08.18 - 11:16
(22) Прочитай еще раз (15). Если там чего-то непонятно - ты спроси...
   Остап Сулейманович
 
28 - 23.08.18 - 11:20
(23) Ну скажем ... получился каким то образом документ-объект. На сервере. Он просто нигде больше жить не может.
Где планируется открыть Форму? Я надеюсь все в адеквате и форму таки будем открывать на клиенте. Чего и как будем передавать на клиент с сервера что б сказать что "вот он документ-объект" и нужно теперь открыть именно его форму?
   Cyberhawk
 
29 - 23.08.18 - 11:20
(25) Это *овнокод. А вот через ОбработкуЗаполнения как раз то что доктор прописал
   Остап Сулейманович
 
30 - 23.08.18 - 11:22
(29) О_О Консенсус)))
   Cyberhawk
 
31 - 23.08.18 - 11:22
(28) Передавать будем в ОткрытьФорму структуру с данными для заполнения реквизитов документа-объекта ("ЗначенияЗаполнения") и/или произвольную структуру данных для обработки в модуле объекта ОбработкаЗаполнения
   Cyberhawk
 
32 - 23.08.18 - 11:24
(30) Конечно. Твое "заполнить реквизиты формы напрямую" плодит лишние серверные вызовы там, где их можно избежать
   Остап Сулейманович
 
33 - 23.08.18 - 11:28
(32) Стоп. Откуда пришла мысль что реквизиты формы предлагается заполнить НЕ на сервере и НЕ за один вызов?
Другими словами - "каким образом можно ПриСозданииНаСервере переганять несколько раз с Сервера на Клиент и обратно"?
Как вообще возможно с Сервера передать выполнение на Клиент посреди кода?
 
 
   Cyberhawk
 
34 - 23.08.18 - 11:33
Хз про что ты меня спрашиваешь.
Ты согласен с тем, что написано в (32)?
   Остап Сулейманович
 
35 - 23.08.18 - 11:37
(34) Не-а. Если я за один вызов заполню все необходимые реквизиты - чего будет стоить (32)? А я их заполню в ПриСозданииНаСервере. А оно неделимо. Оно полностью выполнится на сервере. За один раз. И никакого "лишние серверные вызовы" не получится.
   Жан Пердежон
 
36 - 23.08.18 - 11:39
(22) тебе в (1) правильный ответ сказали
всё остальное - убогий говнокод
   Cyberhawk
 
37 - 23.08.18 - 11:41
(35) Видимо мы под твоей фразой "заполнить реквизиты формы _напрямую_" разное понимаем.
Я трактую это как "ПолучитьФорму" + обращаться к ее элементам через точку + потом открыть эту подготовленную форму.
А ты походу про ОткрытьФорму с параметром-маркером и в ПриСозданииНаСервере уже этот маркер анализировать, правильно? Тогда вопросов нет, ОткрытьФорму конечно же не *овнокод.
   Tonik992
 
38 - 23.08.18 - 11:44
(37) заполнение через ПолучитьФорму() тоже не говнокод, если оформить все как надо.
У 1С рекомендации по этому поводу "... в общем случае не рекомендуется". А где-то я видел, помоему в УНФ, вполне себе нормально используют через ПолучитьФорму и обращение через точку.
   Flempy
 
39 - 23.08.18 - 11:45
(36) Можно по-подробнее, пожалуйста
   Cyberhawk
 
40 - 23.08.18 - 11:46
(38) Если можно внести изменения в модуль открывемой формы и/или в модуль объекта этой формы, то ПолучитьФорму всегда *овнокод
   Остап Сулейманович
 
41 - 23.08.18 - 11:47
(37) "в ПриСозданииНаСервере уже этот маркер анализировать, правильно?" - 100 пудов.
Тонкость одна - в момент до входа в ПриСознанииНаСервере Форма уже формально существует. А Документ-Объект пока еще нет. И нарушается требование из (7)
   Остап Сулейманович
 
42 - 23.08.18 - 11:50
(38) Зачем нужно ПолучитьФорму лично я вообще не представляю. Видимо оно идет от обычных форм. Когда параметры передавались прямым присвоением значений реквизитам открываемой формы.
В УФ можно передать в параметрах.
   Tonik992
 
43 - 23.08.18 - 11:58
(40) Все верно, в общем случае ПолучитьФорму() и заполнять не надо.. Я давно завязал с этим, когда был слаб и не опытен.
(42) Вообще не нужно, в идеале. Тем более, происходит вызов ПриСозданииНаСервере(), в котором заложена какая-то логика.. А она может противоречить желанию ТС.
Через параметры надо значит адрес временного хранилище передавать в процедуру ОткрытьФорму()? Ведь данных может быть очень много.. А в самой форме на закладке "Параметры" можно создать видимый параметр, который будет явно указывать на существование у формы параметра.
   Cyberhawk
 
44 - 23.08.18 - 11:59
"нарушается требование из (7)" // Да там пади этот "начальник" недалеко ушел от ОФ и ПолучитьФорму, а скорее всего требование единственное - чтоб объект не был записан в БД на момент показа формы
   Tonik992
 
45 - 23.08.18 - 12:00
(43) забыл, там же можно даже указать тип значения "Произвольный" и передавать много чего, в т.ч. структуру заполнения.
   Жан Пердежон
 
46 - 23.08.18 - 12:06
(36) передаешь в параметрах нужные тебе данные,
анализируешь их в обработке заполнения (в подписке /расширении);

(38) 1С УХ напичкана такими "шедевральными" приемами - поместить куски обработки заполнения, в ПриСозданииНаСервере и выполнять, причем, иногда безусловно.

То, что конфа типовая, не гарантирует что это не говноконфа.

(41) садись, два.
   Tonik992
 
47 - 23.08.18 - 12:14
(46) в УХ все стили и приемы программирования применены
   Flempy
 
48 - 23.08.18 - 12:28
(42) а если в конце заполнения указать
 "возврат МойДокумент.Ссылка;" 

а потом на клиенте просто присвоить переменной доки "заполнениеНаСервере" получится открыть форму, обращаясь к переменной. Или бред полный?
   Cyberhawk
 
49 - 23.08.18 - 12:36
Автор баклан какой-то - ему говорят, как можно, а он в ответ спрашивает "а если вот так?". Причем неоднократно.
 
 Рекламное место пустует
   Flempy
 
50 - 23.08.18 - 12:45
(49) Ммм, я пытаюсь разобраться вообще-то. И я что-то не особо вижу особых предложений "как можно" (кроме как от  (46)  ), в основном лишь ваши дискуссии, что, как вы говорите, "*овнокод", а что нет
   Tonik992
 
51 - 23.08.18 - 12:51
(50)
(1), (2), (6) посты, предоставляющие интерес исключительно для вас по вашему вопросу.
Если хотите разобраться как работает, а как нет, тогда надо читать клиент-серверное взаимодействие, про управляемые формы.
   Tonik992
 
52 - 23.08.18 - 12:52
+ (4).
Все. Больше вам ничего не надо.
   Flempy
 
53 - 23.08.18 - 12:55
(51) (52)  Спасибо, буду копать в эту сторону
   arsik
 
54 - 23.08.18 - 13:11
(53) Такой вариант не подходит?
http://www.obrabotki.com/1s-openform-managedforms/
   Flempy
 
55 - 23.08.18 - 13:16
(54) практически то же самое, что и тут (4) .Но все равно, спасибо
   arsik
 
56 - 23.08.18 - 14:34
Ну можно еще сделать так...
В вызываемой форме добавить реквизит типа "ДокументОбъект"
На сервере создать документ, в реквизит формы записать это реквизит.
И уже после этого создать форму объекта и запихнуть значения из этого реквизита в созданную форму.
Реквизит - это будет буфер на время после создания объекта и до создания формы.
   arsik
 
57 - 23.08.18 - 14:35
поправка
>На сервере создать документ, в реквизит формы записать этот документ.


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