|
Открытие формы нового элемента справочника с заполнением | ☑ | ||
---|---|---|---|---|
0
OzziK2000
09.09.21
✎
08:28
|
Доброе утро! Помогите решить следующую задачу. Вопрос наверное не новый, но ответа нигде не могу найти.
Есть справочник с табличной частью. Обработка и показ табличной части на форме происходит в "ПриСозданииНаСервере", то есть если идти стандартным путем через ПолучитьФорму, заполнить на сервере, КопироватьДанныеФормы, ФормаОткрыть - табличная часть на форме не отображается. Ну это понятно. Пытаюсь открыть форму с ЗначенияЗаполнения - ругается на ТаблицуЗначений, нельзя ее передавать с клиента на сервер. Можно создать элемент справочника и сформировать ДанныеФормы на сервере, но только как потом открыть форму? Я понимаю, что можно открыть форму и потом ручками добавить все, но неужели нет стандартного механизма? Помогите. Пожалуйста :-) |
|||
1
hhhh
09.09.21
✎
08:49
|
(0) надо создать и заполнить документ, без всяких форм. А потом уже, когда всё заполнено, открывать форму, или не открывать форму.
|
|||
2
OzziK2000
09.09.21
✎
08:51
|
(1) Нельзя сохранять, надо открыть форму нового элемента справочника, чтобы можно потом либо записать либо отказаться от записи. Если через запись - то конечно все работает.
|
|||
3
banco
09.09.21
✎
08:56
|
(2) Передать ДанныеЗаполнения и заполнять в ОбработкаЗаполнения
|
|||
4
Василий Алибабаевич
09.09.21
✎
08:59
|
(0) "ругается на ТаблицуЗначений, нельзя ее передавать с клиента на сервер."
Как удалось поиметь ТаблицуЗначений на клиенте? |
|||
5
OzziK2000
09.09.21
✎
09:03
|
(3) Нельзя менять конфу.
|
|||
6
OzziK2000
09.09.21
✎
09:05
|
(4)
Например так ОписаниеТЗ = Новый ОписаниеТипов("ТаблицаЗначений"); ТабЗначений = ОписаниеТЗ.ПривестиЗначение(Элементы.ТЧ); |
|||
7
banco
09.09.21
✎
09:06
|
(5) Конфу менять нельзя, сохранить объект нельзя, расширение использовать нельзя. Ну если столько запретов, то ничего не делать.
|
|||
8
Василий Алибабаевич
09.09.21
✎
09:08
|
(6) Это все понятно. Но! Ситуация запутывается все больше и больше.
Что такое Элементы.ТЧ? Это табличное поле? Или где? |
|||
9
OzziK2000
09.09.21
✎
09:14
|
(8) На форме обработки создал ТЗ, аналогичную той, что в нужном справочнике, заполняю ее на сервере, чтобы потом получить на клиенте вышеописанным способом. ТЧ - таблица на форме связанная с этой ТЗ.
|
|||
10
АнализДанных
09.09.21
✎
09:25
|
(0)
Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта"); Для Каждого Строка Из ЭтаФорма.ТЧ Цикл нСтр = Форма.Объект.Товары.Добавить(); ЗаполнитьЗначениеСвойств(нСтр, Строка); КонецЦикла; Форма.Открыть(); |
|||
11
OzziK2000
09.09.21
✎
09:28
|
(10) Не. "ПриСозданииНаСервере" отработало при "ПолучитьФорму". Дальнейшее заполнение не отобразит на форме эту ТЧ.
|
|||
12
acht
09.09.21
✎
09:32
|
(6) О, мьсе любитель вприсядку! Повторите, пожалуйста, это самое в веб-клиенте.
|
|||
13
OzziK2000
09.09.21
✎
09:38
|
(12) Да да, это не выход, я понимаю, просто пытался найти решение разными способами)
|
|||
14
DrShad
09.09.21
✎
09:40
|
создай объект, заполни его как тебе надо, потом открывай форму и параметром "Ключ" передай этот объект и будет тебе счастие
|
|||
15
OzziK2000
09.09.21
✎
09:43
|
(14) для этого надобно его записать, а этого делать нельзя. У пользователя должен быть выбор отказаться от записи
|
|||
16
DrShad
09.09.21
✎
09:44
|
(15) где я сказал что его нужно записать?
|
|||
17
АнализДанных
09.09.21
✎
09:45
|
(11) Я не понял задачу, опиши еще раз.
> если идти стандартным путем через ПолучитьФорму, заполнить на сервере, КопироватьДанныеФормы, ФормаОткрыть - табличная часть на форме не отображается Почему не отображается ? Почему код из (10) не отработает? |
|||
18
OzziK2000
09.09.21
✎
09:46
|
(16) ну незаписанный объект передастся на клиент в виде пустой ссылки, откроется новая пустая форма же, нет?
|
|||
19
DrShad
09.09.21
✎
09:48
|
(18) для чего эти гадания? напиши и попробуй, сильно удивишься
|
|||
20
АнализДанных
09.09.21
✎
09:49
|
(18) Тебе надо открыть форму существующего объекта, а потом изменить там ТЧ ?
ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ключ", СсылкаНаДокумент); Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы); |
|||
21
OzziK2000
09.09.21
✎
09:52
|
(17) Потому что как таковой табличной части на форме нет, она есть только в реквизитах справочника. А на форме при создании ее на сервере, программно создаются элементы формы и заполняются данными из этой Табличной части. Соответственно если ТЧ заполнять после Создания формы, то они на форме не отобразятся. (20) Нет, новый элемент, свежесозданный
|
|||
22
OzziK2000
09.09.21
✎
09:55
|
(19) ну конечно я пробовал. Если передавать на клиент спр.ссылка - открывает пустую форму. Ну а сам объект спр передать, соответственно, нельзя.
|
|||
23
DrShad
09.09.21
✎
10:15
|
(22) почему у меня можно? что я делаю не так?
|
|||
24
OzziK2000
09.09.21
✎
10:23
|
(23) вот так у тебя работает???
&НаСервере Функция Команда1НаСервере() Нов = Справочники.Контрагенты.СоздатьЭлемент(); Нов.Наименование = "Администрация Президента"; Возврат Нов.Ссылка; КонецФункции &НаКлиенте Процедура Команда1(Команда) ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", Новый Структура("Ключ", Команда1НаСервере())); КонецПроцедуры |
|||
25
АнализДанных
09.09.21
✎
10:27
|
(21) Опиши задачу подробно. Ты открываешь какой-то справочник у которого на форме есть таблица значений, Таблица заполняется по данным этого справочника при создании на сервере ? Ты хочешь поменять данные в этой таблице, и дать возможность пользователю записать эти данные в справочник ? Механизма записи данных из таблицы в справочник на форме нет, она существует только для отображения текущих значений? При этом дорабатывать ничего нельзя ? У тебя какая-то внешняя обработка, где ты все это хочешь сделать ?
Если это внешняя обработка, тогда единственный вариант: скопируй в нее форму справочника и допили (главное, чтобы основной объект у формы был от этого справочника, а не от твоей обработки), открывай свою новую форму и делай там что хочешь. |
|||
26
Kassern
09.09.21
✎
10:28
|
(24) что за.... вот тебе рабочий вариант, сделай по аналогии:
Форма = ПолучитьФорму("Документ.ОтчетКомиссионера.ФормаОбъекта"); ДанныеФормы = Форма.Объект; // Получаем объект формы в переменную ЗаполнитьДокументНаСервере(ДанныеФормы); // Заполняем документ на сервере КопироватьДанныеФормы(ДанныеФормы, Форма.Объект); // копируем наш объект в объект формы и далее открываем ее Форма.Открыть(); |
|||
27
Kassern
09.09.21
✎
10:28
|
(26) надеюсь не стоит объяснять, что надо делать в ЗаполнитьДокументНаСервере(ДанныеФормы)?)
|
|||
28
АнализДанных
09.09.21
✎
10:30
|
(24) Ты же не записываешь объект, поэтому у тебя Команда1НаСервере() возвращает всегда пустую ссылку.
|
|||
29
DrShad
09.09.21
✎
10:32
|
(24) нафига ты возвращаешь ссылку?
|
|||
30
Kassern
09.09.21
✎
10:33
|
(27) ладно, распишу немножко:
Процедура ЗаполнитьДокументНаСервере(ДанныеФормы); Док = Документы.ОтчетКомиссионера.СоздатьДокумент(); Док.Дата=ТекущаяДата(); Док.ФормаОплаты=Перечисления.ФормыОплаты.Безналичная; ..................... ЗначениеВДанныеФормы(Док,ДанныеФормы); // Кладем обратно в объект формы уже созданный документ КонецПроцедуры |
|||
31
OzziK2000
09.09.21
✎
10:34
|
(27) это не поможет. Да, ты заполнишь ТабличнуюЧасть, все верно. Но она на форме не отобразится, так как рисуется в ПриСозданииНаСервере, а в твоем примере эта процедура отработает в первой строчке в получитьФорму, когда ТЧ еще пустая.
|
|||
32
OzziK2000
09.09.21
✎
10:36
|
(29) а что мне возвращать, сам объект?)) попробуй)
|
|||
33
Kassern
09.09.21
✎
10:42
|
(31) "отработает в первой строчке в получитьФорму, когда ТЧ еще пустая." ну и пускай отработает, что в этом плохого?
|
|||
34
OzziK2000
09.09.21
✎
10:46
|
(25) Да, есть справочник. У него есть табличная часть. Но она не выведена на форму. Она выводится на форму программно в процедуре ПриСозданииНаСервере. Соответственно когда (33) создаем новый объект табличная часть еще пустая, и на форме ничего не показывается. Мы можем создать объект, записать его и тогда при открытии все прекрасно отображается. Вопрос как это сделать не записывая.
|
|||
35
OzziK2000
09.09.21
✎
10:48
|
(25) спасибо большое за идею, я попробую это сделать, сам не додумался бы так сделать, спасибо еще раз.
|
|||
36
OzziK2000
09.09.21
✎
11:02
|
Ну а все же вопрос то открытым остается. Существует ли способ сначала создать объект, заполнить его, а уже потом получить форму и открыть ее, не записывая объект.
|
|||
37
acht
09.09.21
✎
11:11
|
(29) Потому что у него не толстый клиент.
|
|||
38
banco
09.09.21
✎
15:01
|
(36) Сделай свою форму объекта и там заполняй что хочешь.
|
|||
39
АнализДанных
09.09.21
✎
15:58
|
(36) Только при условии, что в "обработке заполнения" документа есть соответствующий код:
ДанныеЗаполнения = Новый Структура; ДанныеЗаполнения.Вставить("Дата", ТекущаяДата()); ДанныеЗаполнения.Вставить("Комментарий", "Тест"); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ДанныеЗаполнения", ДанныеЗаполнения); Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы); |
|||
40
acht
09.09.21
✎
16:57
|
(39) Плюс дополнительно у реквизитов в метаданных должен быть установлен флаг "Заполнять из даннх заполнения" и/или в модуле объекта установлен обработчик заполнения.
|
|||
41
OzziK2000
09.09.21
✎
17:04
|
(39) Огромное тебе спасибо. Все сделал, как ты мне в (25) посоветовал. Скопировал форму себе в обработку, и с минимальными дописками все взлетело.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |