|   |   | 
| 
 | Открытие формы нового элемента справочника с заполнением | ☑ | ||
|---|---|---|---|---|
| 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) посоветовал. Скопировал форму себе в обработку, и с минимальными дописками все взлетело.     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |