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

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

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

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

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

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

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

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

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

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

"возврат МойДокумент.Ссылка;"

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