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

Как открыть форму незаписанного объекта документа?

Как открыть форму незаписанного объекта документа?
Я
   Хосе
 
08.08.21 - 19:43
Т.е. я формирую некий документ, но не хочу его записывать, а хочу показать пользователю.
Это может быть и новый и существующий документ.
Для нового вроде тут написано: Как открыть форму нового не записанного документа? УФ 1С 8.3
А для существующего как?
   acht
 
1 - 08.08.21 - 19:51
Вопрос противоречит названию темы.
Как открыть форму незаписанного - ты, кажется, уже знаешь.
Как открыть форму записанного - описано тысячи раз.
   DJ Anthon
 
2 - 08.08.21 - 19:52
ПоказатьЗначение (ShowValue)
Синтаксис:

ПоказатьЗначение(<ОписаниеОповещенияОЗавершении>, <Значение>)
Параметры:

<ОписаниеОповещенияОЗавершении> (необязательный)

Тип: ОписаниеОповещения.
Содержит описание процедуры, которая будет вызвана после закрытия окна ввода значения с параметром
   acht
 
3 - 08.08.21 - 19:59
Тысячи и один раз.
Ждем следующего необученного.
   Хосе
 
4 - 08.08.21 - 20:40
(2) хахаха, чтобы показать значение, его надо передать на клиента сперва. Ну и как предлагаете передать ДокументОбъект на клиента?
   Хосе
 
5 - 08.08.21 - 20:40
(3) можно было бы просто ссылку на ветку с решением. Я искал, не нашел
   I_am_rrrrED
 
6 - 09.08.21 - 10:26
Покажи, что у тебя уже есть.
   Хосе
 
7 - 09.08.21 - 10:45
(6) у меня есть ДокументОбъект, который возвращается с сервера. Я могу его конвертировать в ДанныеФормы и таким образом перегнать на клиент, а как сделать, чтобы открылся именно документ по ссылке, если ссылка уже есть. Т.е. чтобы если я запишу этот объект, он не создавал новый, а записал по этой ссылке?
   hhhh
 
8 - 09.08.21 - 10:50
(7) так в ДокументОбъект ссылка заполнена. В чем проблема? Значит, по этой ссылке и запишет.
   Хосе
 
9 - 09.08.21 - 10:56
(8) ну ладно, попробую потестить, потом сообщу
   Pprog151713
 
10 - 09.08.21 - 12:00
Запиши документ и работай с ним. Форму не записанного документа открывать не надо.
   israel
 
11 - 09.08.21 - 12:52
(0) При откритии формы:
значениевреквизитформы(мой_не_записанный_в_базу_доукмент, "Объект")
   israel
 
12 - 09.08.21 - 12:52
(10) > Форму не записанного документа открывать не надо

Почему?
   vicof
 
13 - 09.08.21 - 13:44
Есть волшебный параметр формы Ключ
   Pprog151713
 
14 - 09.08.21 - 14:01
Так запишите документ, не проводите. :). Вы еще форму в файл сохраните.
   israel
 
15 - 09.08.21 - 14:17
(13) Как этот параметр поможет в задаче из (0) ?

(14) Зачем записывать в базу документ, когда его можно не записывать? А если пользователь передумает его сохранять? Удалять документ из базы, или что?
   Хосе
 
16 - 09.08.21 - 16:08
(11) это надо иметь доступ в при открытии.
   israel
 
17 - 09.08.21 - 17:50
(16) в присозданиинасервере, не понимаю в чём проблема
   israel
 
18 - 09.08.21 - 18:26
(16) если модуль формы нельзя менять, юзай расширение
   Хосе
 
19 - 09.08.21 - 19:49
(18) приходится лезть в конфу, раньше в обработке я мог в ОФ заполнить объект и открыть его форму в обработке, без насилия над конфигурацией
   Chameleon1980
 
20 - 09.08.21 - 19:55
не записанный ты знаешь
записанный возвращай документ. ссылка
на клиента и открыть значение
   acht
 
21 - 09.08.21 - 20:03
(19) Нытик.
   Хосе
 
22 - 09.08.21 - 21:12
(20) это будет документ, который в базе, а не документ, который я модифицировал. Его нельзя сразу записывать, надо дать пользователю сперва посмотреть.
   BeerHelpsMeWin
 
23 - 09.08.21 - 21:30
(22) заполняй не документ, заполняй форму?
   Chameleon1980
 
24 - 09.08.21 - 22:22
бля так записанный или не записанный?
ты же знаешь как не записанный открыть
   Chameleon1980
 
25 - 09.08.21 - 22:23
получпй форму, заполняй, открывай
   Сергиус
 
26 - 10.08.21 - 01:01
(0)ОткрытьФорму(ИмяФормы, Новый Структура("Ключ", НужнаяСсылка), ФормаДокумента);
   Хосе
 
27 - 10.08.21 - 07:52
(26) вы не первый, кто таким образом ошибся.
(25) гм, надо подумать.
   Pprog151713
 
28 - 10.08.21 - 07:59
(15) :) Делайте, как хотите.
   Хосе
 
29 - 12.08.21 - 13:38
Вот что получилось сделать для нового объекта Как открыть форму нового не записанного документа? УФ 1С 8.3
Подтверждаю, работает и даже могу модально форму открыть, вот код:

&НаКлиенте
Процедура СоздатьТовар(Каталог)
    //=+++

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

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

    
КонецПроцедуры

&НаКлиенте
Процедура СоздатьТоварЗакрытие(РезультатЗакрытия, ДополнительныеПараметры) Экспорт
    Если ЗначениеЗаполнено(ДополнительныеПараметры.Форма.Объект.Ссылка) Тогда
        Объект.Товар = ДополнительныеПараметры.Форма.Ссылка;
        //...

    КонецЕсли;
КонецПроцедуры
   Хосе
 
30 - 12.08.21 - 13:40
думаю сработает и с формой обычного объекта, его же можно получить через ключ:

П = Новый Структура("Ключ", Поставщик);
Форма = ПолучитьФорму("Справочник.Контрагенты.ФормаОбъекта", П);

Ну а дальше по той же самой схеме.
 
 
   Сергиус
 
31 - 16.08.21 - 23:32
(27)У меня работало, по крайней мере в том случае, когда использовал.
   Хосе
 
32 - 21.08.21 - 19:31
В общем, поэкспериментировал с открытием формы существующего документа (Табель рабочего времени).
В общем, проблема и с новым и с существующим объектом.
Дело в том, что ПриСозданииФормы вызывается при вызове Получить.
Поэтому если документ хитрый и рисует табличную часть хитрым образом (как в табеле), то эта методика не работает.

Но есть другой вариант - через транзакцию.
Открываем транзакцию, записываем документ, получаем его данные формы.
Откатываем транзакцию.

Метод кривой, но если совсем никак без демонстрации, то чего поделать.
   ДедМорроз
 
33 - 22.08.21 - 09:11
(32) на клиента не вернуться с открытой транзакцией.
Хотя,идея растет из 7.7
   ДедМорроз
 
34 - 22.08.21 - 09:12
Правильная реализация требует изменения формы документа и реализации обработки заполнения.
   CepeLLlka
 
35 - 22.08.21 - 09:46
(32)Всё работает штатными методами без извращений, ты просто не разобрался, хотя в теме многие советовали верные варианты.
   Хосе
 
36 - 22.08.21 - 09:53
(35) видимо ты не учитываешь, что то, о чем советовали не работает в случае рисуемых форм, ну та же таблица табеля, которая рисуется из данных документа, или документ установки цен. Так что или мы разговариваем о конкретных способах, или нет.
   Хосе
 
37 - 22.08.21 - 09:54
(33) да, какая-то засада... а ведь при создании формы не вызвать программно, хотя там по сути нужно все вызывать. Похоже, задача решаемая в ОФ, в УФ не решается.
   acht
 
38 - 22.08.21 - 10:16
(37) Да не работает, Геня, не работает... Иди статью обличающую напиши, будь собой уже.
   CepeLLlka
 
39 - 22.08.21 - 10:23
(36)Вот в (26) коллега вам посоветовал, чем не устраивает вариант?
   ДедМорроз
 
40 - 22.08.21 - 11:49
Кстати,если сохранить данные документа,потом его записать новыми данными,потом открыть форму,а потом вернуть сохраненные данные документа,то мы получим то,что нужно,за малым исключением,что при записи открытой формы нам система скажет,что объект изменен и не даст его записать,а так да,открыть вполне можно.
   Ненавижу 1С
 
41 - 22.08.21 - 12:38
С небольшим кодом в расширении:

&НаКлиенте
Процедура ПеречитатьДанныеОбъекта() Экспорт    
    ПеречитатьДанныеОбъектаНаСервере();
КонецПроцедуры
 
&НаСервере
Процедура ПеречитатьДанныеОбъектаНаСервере() 
    ТекущийОбъект = РеквизитФормыВЗначение("Объект");
    ПриЧтенииНаСервере(ТекущийОбъект);
КонецПроцедуры


тогда работать можно так:

&НаСервере
Процедура ИзменитьНаСервере(ОбъектФормы)
    ОбъектДок = ДанныеФормыВЗначение(ОбъектФормы,Тип("ДокументОбъект.УстановкаЦенНоменклатуры"));
    
    //здесь что-то меняем, например так:

    ОбъектДок.Товары.Очистить();
    
    ЗначениеВДанныеФормы(ОбъектДок,ОбъектФормы);    
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьИОткрыть(Команда)
    Форма = ПолучитьФорму("Документ.УстановкаЦенНоменклатуры.ФормаОбъекта",Новый Структура("Ключ",Док));    
    ОбъектФормы = Форма.Объект;
    ИзменитьНаСервере(ОбъектФормы);
    КопироватьДанныеФормы(ОбъектФормы,Форма.Объект);
    Форма.ПеречитатьДанныеОбъекта();  //эмулируем обновление формы

    Форма.Открыть();
КонецПроцедуры
   acht
 
42 - 22.08.21 - 12:43
(41) > Форма.ПеречитатьДанныеОбъекта();

У формы документа уже есть метод Прочитать(). Не?
   acht
 
43 - 22.08.21 - 12:43
А, у тя подмена объекта, понял. Предложение отменяется.
   Хосе
 
44 - 22.08.21 - 21:19
(41) не, так просто не взлетит. Потому что данные ты то перечитаешь, но отображение данных в данные формы занимается код ПриСозданииНаСервере, например. Поэтому надо еще и эту функцию дергать.

Но вообще как-то криво, что в платформе нельзя это сделать. Т.е. взяли и порезали функционал, который раньше был. Возникает вопрос о разумности разработчиков, которые не обеспечивают функциональную полноту.

(43) именно
   Ненавижу 1С
 
45 - 22.08.21 - 21:25
(44) не надо ничего дергать, но если хочешь дергай, раз ты такой умный
суть подхода в эмуляции перечитывания данных из БД
и что "именно"? ты хоть понял, к чему он комментарий написал?
   Вафель
 
46 - 23.08.21 - 08:20
(45) не всегда код находится в ПриЧтении.
А если в ПриСоздании, да еще там элементы формы создаются,то все повтормл может и не сработать
   Ненавижу 1С
 
47 - 23.08.21 - 17:37
(46) ПриСоздании уже отработало при ПолучитьФорму
с другой стороны перечитывать данные это нормально - поэтому исходя из нормальной логики - все должно работать
   Вафель
 
48 - 23.08.21 - 17:42
(47) это если писали форму нормальные люди
   Хосе
 
49 - 23.08.21 - 19:23
(47) ну я привел пример с табелем. При создании прочитало и создало таблицу на форме по исходным данным. если подсунуть новые даннные, новая таблица не нарисуется сама. Нужно опять дергать при создании.
   Хосе
 
50 - 23.08.21 - 19:23
(48) на это не стоит расчитывать
   Хосе
 
51 - 23.08.21 - 19:27
простейший пример, установка цен.
в бд хранятся строки
пиво розничная 10
водка розничная 20
пиво оптовая 1
водка оптовая 5

При создании будет создана таблица на форме:
       оптовая   розничная
пиво   1         10
водка  5         20

А теперь я добавляю в объект
квас оптовая 3

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

Так наглядно, понятно?
   Ненавижу 1С
 
52 - 23.08.21 - 19:34
(51) ага, а теперь давай подумаем - если я открыл форму с двумя товарами как ты сказал и ничего не делаю
в это время Вася добавляет в документ Квас и записывает(!!!) его
теперь я перечитываю документ, я что не увижу изменений пока не переоткрою формы?

Короче - что спорить - попробуй, если хочешь
   Ненавижу 1С
 
53 - 23.08.21 - 19:37
(46) (48) в типовых в этом плане обычно все норм
   МаленькийВопросик
 
54 - 23.08.21 - 19:38
(0) вот здесь я делаю так - можешь посмотреть https://infostart.ru/public/1492688/
   Хосе
 
55 - 23.08.21 - 19:44
(52) посмотри, какая цепочка событий происходит при вызове перечитать - это и чтение из файла и создание формы заново (при создании формы)
   Хосе
 
56 - 23.08.21 - 19:44
(54) прости, на такое дело 1000 рублей жалко (10 см), ггг
   Ненавижу 1С
 
57 - 23.08.21 - 19:50
(55) так... еще одно пятно вскрыто - гений тупо не знает какие события вызываются на форме
не знание событий в транзакциях ты показывал раньше
в общем типичный гений
   Хосе
 
58 - 23.08.21 - 19:59
ок, проверил. При перечитывании вызывается только чтение на сервере, при создании на сервере не вызывается. Но многие пишут код именно в при создании на сервере, думаю, если просто перечитывать, логика будет не корректно отрабатывать. не всегда корректно, скажем так.
   Хосе
 
59 - 23.08.21 - 19:59
и потом, какие клиентские события вызываются после перечитывания? никакие7
   Ненавижу 1С
 
60 - 23.08.21 - 20:02
(58) типовые пишут вменяемые люди
форма должна вести себя адекватно
(59) причем здесь клиентские события?

просто признай, что не в теме оказался, чего уж
 
 
   acht
 
61 - 23.08.21 - 20:03
(55) > это и чтение из файла и создание формы заново
Геня, что лучше, потратить 1000 или прилюдно обосраться? Ггг.
   Хосе
 
62 - 23.08.21 - 20:04
(61) я до сего момента писал код по показу всяческой видимости и т.п. при создании формы, уверен что многие тоже так пишут.
   Хосе
 
63 - 23.08.21 - 20:04
а следовательно код, расчитанный на "правильное написание" событий, будет работать не правильно
   Ненавижу 1С
 
64 - 23.08.21 - 20:08
(62) (63) это твои личные проблемы, что ты код кривой пишешь
   Хосе
 
65 - 23.08.21 - 20:10
(64) проблема в том, что не я один. это тренд писать все в присоздании. хотя из расширения вызвать присоздании не проблема, в принципе
   Хосе
 
66 - 23.08.21 - 20:10
но без расширения не взлетит, так что какие-то универсальные вещи не заработают, в отличии от ОФ
   Ненавижу 1С
 
67 - 23.08.21 - 20:16
(65) (66) у тебя совсем проблемы с логикой стали на фоне самозанятости?
тебе говорят - так может не работать, а вот как работает правильно
ты говоришь, да, так правильно, но есть "тренд"

"тренд" этот родился исключительно в твоей голове?
   Хосе
 
68 - 23.08.21 - 20:17
(67) можешь устроить голосовалку. но я видел много кода и своего и чужого. В любом случае, даже если это 10% кода, то рассчитывать на гарантироавнное корректное отображение в универсальном случае уже не приходится. Я бы еще и клиентские ПриОткрытии дергал, мало ли чего там прописано
   acht
 
69 - 23.08.21 - 20:19
(68) Статью напиши.
   Ненавижу 1С
 
70 - 23.08.21 - 20:19
(68) ты чего решил повилять хвостом, когда нечего сказать о том, что не знал какие события вызываются у форм?
   Хосе
 
71 - 23.08.21 - 20:20
(70) голосовалку создал: Где вы прописываете настройки формы - в ПриСозданииНаСервере или в ПриЧтенииНаСервере
Я не загромождаю себе голову лишней информацией, не критичной для работы


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