Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Открытие формы нового элемента справочника с заполнением

Открытие формы нового элемента справочника с заполнением
Я
   OzziK2000
 
09.09.21 - 08:28
Доброе утро! Помогите решить следующую задачу. Вопрос наверное не новый, но ответа нигде не могу найти.
Есть справочник с табличной частью. Обработка и показ табличной части на форме происходит в "ПриСозданииНаСервере", то есть если
идти стандартным путем через ПолучитьФорму, заполнить на сервере, КопироватьДанныеФормы, ФормаОткрыть - табличная часть на форме не отображается. Ну это понятно.

Пытаюсь открыть форму с ЗначенияЗаполнения - ругается на ТаблицуЗначений, нельзя ее передавать с клиента на сервер.

Можно создать элемент справочника и сформировать ДанныеФормы на сервере, но только как потом открыть форму?

Я понимаю, что можно открыть форму и потом ручками добавить все, но неужели нет стандартного механизма?

Помогите. Пожалуйста :-)
   hhhh
 
1 - 09.09.21 - 08:49
(0) надо создать и заполнить документ, без всяких форм. А потом уже, когда всё заполнено, открывать форму, или не открывать форму.
   OzziK2000
 
2 - 09.09.21 - 08:51
(1) Нельзя сохранять, надо открыть форму нового элемента справочника, чтобы можно потом либо записать либо отказаться от записи. Если через запись - то конечно все работает.
   banco
 
3 - 09.09.21 - 08:56
(2) Передать ДанныеЗаполнения и заполнять в ОбработкаЗаполнения
   Василий Алибабаевич
 
4 - 09.09.21 - 08:59
(0) "ругается на ТаблицуЗначений, нельзя ее передавать с клиента на сервер."
Как удалось поиметь ТаблицуЗначений на клиенте?
   OzziK2000
 
5 - 09.09.21 - 09:03
(3) Нельзя менять конфу.
   OzziK2000
 
6 - 09.09.21 - 09:05
(4)

Например так
 ОписаниеТЗ = Новый ОписаниеТипов("ТаблицаЗначений");
 ТабЗначений = ОписаниеТЗ.ПривестиЗначение(Элементы.ТЧ);
   banco
 
7 - 09.09.21 - 09:06
(5) Конфу менять нельзя, сохранить объект нельзя, расширение использовать нельзя. Ну если столько запретов, то ничего не делать.
   Василий Алибабаевич
 
8 - 09.09.21 - 09:08
(6) Это все понятно. Но! Ситуация запутывается все больше и больше.
Что такое Элементы.ТЧ? Это табличное поле? Или где?
   OzziK2000
 
9 - 09.09.21 - 09:14
(8) На форме обработки создал ТЗ, аналогичную той, что в нужном справочнике, заполняю ее на сервере, чтобы потом получить на клиенте вышеописанным способом. ТЧ - таблица на форме связанная с этой ТЗ.
   АнализДанных
 
10 - 09.09.21 - 09:25
(0)
Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта");

Для Каждого Строка Из ЭтаФорма.ТЧ Цикл
  
  нСтр = Форма.Объект.Товары.Добавить();
  ЗаполнитьЗначениеСвойств(нСтр, Строка);

КонецЦикла;

Форма.Открыть();
   OzziK2000
 
11 - 09.09.21 - 09:28
(10) Не. "ПриСозданииНаСервере" отработало при "ПолучитьФорму". Дальнейшее заполнение не отобразит на форме эту ТЧ.
   acht
 
12 - 09.09.21 - 09:32
(6) О, мьсе любитель вприсядку! Повторите, пожалуйста, это самое в веб-клиенте.
   OzziK2000
 
13 - 09.09.21 - 09:38
(12) Да да, это не выход, я понимаю, просто пытался найти решение разными способами)
   DrShad
 
14 - 09.09.21 - 09:40
создай объект, заполни его как тебе надо, потом открывай форму и параметром "Ключ" передай этот объект и будет тебе счастие
   OzziK2000
 
15 - 09.09.21 - 09:43
(14) для этого надобно его записать, а этого делать нельзя. У пользователя должен быть выбор отказаться от записи
   DrShad
 
16 - 09.09.21 - 09:44
(15) где я сказал что его нужно записать?
   АнализДанных
 
17 - 09.09.21 - 09:45
(11) Я не понял задачу, опиши еще раз.
> если идти стандартным путем через ПолучитьФорму, заполнить на сервере, КопироватьДанныеФормы, ФормаОткрыть - табличная часть на форме не отображается
Почему не отображается ? Почему код из (10) не отработает?
   OzziK2000
 
18 - 09.09.21 - 09:46
(16) ну незаписанный объект передастся на клиент в виде пустой ссылки, откроется новая пустая форма же, нет?
   DrShad
 
19 - 09.09.21 - 09:48
(18) для чего эти гадания? напиши и попробуй, сильно удивишься
   АнализДанных
 
20 - 09.09.21 - 09:49
(18) Тебе надо открыть форму существующего объекта, а потом изменить там ТЧ ?

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Ключ", СсылкаНаДокумент);

Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы);
   OzziK2000
 
21 - 09.09.21 - 09:52
(17) Потому что как таковой табличной части на форме нет, она есть только в реквизитах справочника. А на форме при создании ее на сервере, программно создаются элементы формы и заполняются данными из этой Табличной части. Соответственно если ТЧ заполнять после Создания формы, то они на форме не отобразятся. (20) Нет, новый элемент, свежесозданный
   OzziK2000
 
22 - 09.09.21 - 09:55
(19) ну конечно я пробовал. Если передавать на клиент спр.ссылка - открывает пустую форму. Ну а сам объект спр передать, соответственно, нельзя.
   DrShad
 
23 - 09.09.21 - 10:15
(22) почему у меня можно? что я делаю не так?
   OzziK2000
 
24 - 09.09.21 - 10:23
(23) вот так у тебя работает???

&НаСервере
Функция Команда1НаСервере()
    
    Нов = Справочники.Контрагенты.СоздатьЭлемент();
    
    Нов.Наименование = "Администрация Президента";
    
    
    Возврат Нов.Ссылка;
    
    
КонецФункции

&НаКлиенте
Процедура Команда1(Команда)
    
    
    
    ОткрытьФорму("Справочник.Контрагенты.ФормаОбъекта", Новый Структура("Ключ", Команда1НаСервере()));
    
    
КонецПроцедуры
   АнализДанных
 
25 - 09.09.21 - 10:27
(21) Опиши задачу подробно. Ты открываешь какой-то справочник у которого на форме есть таблица значений, Таблица заполняется по данным этого справочника при создании на сервере ? Ты хочешь поменять данные в этой таблице, и дать возможность пользователю записать эти данные в справочник ? Механизма записи данных из таблицы в справочник на форме нет, она существует только для отображения текущих значений? При этом дорабатывать ничего нельзя ? У тебя какая-то внешняя обработка, где ты все это хочешь сделать ?
Если это внешняя обработка, тогда единственный вариант: скопируй в нее форму справочника и допили (главное, чтобы основной объект у формы был от этого справочника, а не от твоей обработки), открывай свою новую форму и делай там что хочешь.
   Kassern
 
26 - 09.09.21 - 10:28
(24) что за.... вот тебе рабочий вариант, сделай по аналогии:

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

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

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

    Форма.Открыть();
   Kassern
 
27 - 09.09.21 - 10:28
(26) надеюсь не стоит объяснять, что надо делать в ЗаполнитьДокументНаСервере(ДанныеФормы)?)
   АнализДанных
 
28 - 09.09.21 - 10:30
(24) Ты же не записываешь объект, поэтому у тебя Команда1НаСервере() возвращает всегда пустую ссылку.
   DrShad
 
29 - 09.09.21 - 10:32
(24) нафига ты возвращаешь ссылку?
   Kassern
 
30 - 09.09.21 - 10:33
(27) ладно, распишу немножко:

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


КонецПроцедуры
 
 
   OzziK2000
 
31 - 09.09.21 - 10:34
(27) это не поможет. Да, ты заполнишь ТабличнуюЧасть, все верно. Но она на форме не отобразится, так как рисуется в ПриСозданииНаСервере, а в твоем примере эта процедура отработает в первой строчке в получитьФорму, когда ТЧ еще пустая.
   OzziK2000
 
32 - 09.09.21 - 10:36
(29) а что мне возвращать, сам объект?)) попробуй)
   Kassern
 
33 - 09.09.21 - 10:42
(31) "отработает в первой строчке в получитьФорму, когда ТЧ еще пустая." ну и пускай отработает, что в этом плохого?
   OzziK2000
 
34 - 09.09.21 - 10:46
(25)  Да, есть справочник. У него есть табличная часть. Но она не выведена на форму. Она выводится на форму программно в процедуре ПриСозданииНаСервере. Соответственно когда (33) создаем новый объект табличная часть еще пустая, и на форме ничего не показывается. Мы можем создать объект, записать его и тогда при открытии все прекрасно отображается. Вопрос как это сделать не записывая.
   OzziK2000
 
35 - 09.09.21 - 10:48
(25) спасибо большое за идею, я попробую это сделать, сам не додумался бы так сделать, спасибо еще раз.
   OzziK2000
 
36 - 09.09.21 - 11:02
Ну а все же вопрос то открытым остается. Существует ли способ сначала создать объект, заполнить его, а уже потом получить форму и открыть ее, не записывая объект.
   acht
 
37 - 09.09.21 - 11:11
(29) Потому что у него не толстый клиент.
   banco
 
38 - 09.09.21 - 15:01
(36) Сделай свою форму объекта и там заполняй что хочешь.
   АнализДанных
 
39 - 09.09.21 - 15:58
(36) Только при условии, что в "обработке заполнения" документа есть соответствующий код:

ДанныеЗаполнения = Новый Структура;
ДанныеЗаполнения.Вставить("Дата", ТекущаяДата());
ДанныеЗаполнения.Вставить("Комментарий", "Тест");

ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("ДанныеЗаполнения", ДанныеЗаполнения);

Форма = ПолучитьФорму("Документ.ЗаказКлиента.ФормаОбъекта", ПараметрыФормы);
   acht
 
40 - 09.09.21 - 16:57
(39) Плюс дополнительно у реквизитов в метаданных должен быть установлен флаг "Заполнять из даннх заполнения" и/или в модуле объекта установлен обработчик заполнения.
   OzziK2000
 
41 - 09.09.21 - 17:04
(39) Огромное тебе спасибо. Все сделал, как ты мне в  (25) посоветовал. Скопировал форму себе в обработку, и с минимальными дописками все взлетело.


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