Версия для печати темы (https://pro1c.org.ua/index.php?s=5fd00835d820cf880d44ed3c8e6b2945&showtopic=52542)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование управляемых форм 1С 8.2 _ Открыть форму созданного и существующего документа по ДокументуОснования

Автор: Constantus 14.06.19, 11:02

Приветствую, Форумчане!
1с8.2.6, БСП, самопис, УФ

В Документе есть кнопка, которая должна создавать дополнительный другой новый документ с заполнением и открытием вновь созданного документа, либо в случае, если такой документ уже существует, просто открыть его форму...

&НаКлиенте
Процедура УведомитьЗаказчикаОГотовностиСтелы(Команда)
    СоздатьОткрытьДокументУведомления();
    ОткрытьФорму("Документ.УведомлениеЗаказчикаОГотовностиСтелы.ФормаОбъекта", Новый Структура("ДокументОснование", Объект.Ссылка),ЭтотОбъект);
КонецПроцедуры


&НаСервере
Процедура СоздатьОткрытьДокументУведомления()
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    УведомлениеЗаказчикаОГотовностиСтелы.Ссылка
        |ИЗ
        |    Документ.УведомлениеЗаказчикаОГотовностиСтелы КАК УведомлениеЗаказчикаОГотовностиСтелы
        |ГДЕ
        |    УведомлениеЗаказчикаОГотовностиСтелы.ДокментОснование = &ДокментОснование";
    
    Запрос.УстановитьПараметр("ДокментОснование", Объект.Ссылка);

    Результат = Запрос.Выполнить();
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Выборка.Следующий();    
        ДокУведомление = Выборка.Ссылка;
    Иначе
        ДокУведомление = Документы.УведомлениеЗаказчикаОГотовностиСтелы.СоздатьДокумент();
        ДокУведомление.Дата = ТекущаяДата();
        ДокУведомление.Автор = ПараметрыСеанса.ТекущийПользователь;
        ДокУведомление.ДокментОснование = Объект.Ссылка;
        ДокУведомление.Заказчик = Объект.Заказчик;
        ДокУведомление.Записать();
    КонецЕсли;    
    
КонецПроцедуры


Докмуент создается, документОснование заполняется... Подскажите как правильно открывать формы для вновь созданных документов и для уже существующих...
Никак этот параметр открытия подобрать не могу...



Автор: fly 14.06.19, 11:47

Constantus @ Сегодня, 12:02 * ,


&НаКлиенте
Процедура УведомитьЗаказчикаОГотовностиСтелы(Команда)
    СоздатьОткрытьДокументУведомления();
    ОткрытьФорму("Документ.УведомлениеЗаказчикаОГотовностиСтелы.ФормаОбъекта", ВыбранныйДокумент);
КонецПроцедуры;



&НаСервере
Процедура СоздатьОткрытьДокументУведомления()
...
...
...
    Если НЕ Результат.Пустой() Тогда
        Выборка = Результат.Выбрать();
        Пока Выборка.Следующий() Цикл
                ВыбранныйДокумент = Выборка.Ссылка.ПолучитьОбъект();
        КонецЦикла;
    Иначе
        ДокУведомление = Документы.УведомлениеЗаказчикаОГотовностиСтелы.СоздатьДокумент();
        ДокУведомление.Дата = ТекущаяДата();
        ДокУведомление.Автор = ПараметрыСеанса.ТекущийПользователь;
        ДокУведомление.ДокментОснование = Объект.Ссылка;
        ДокУведомление.Заказчик = Объект.Заказчик;
        ДокУведомление.Записать();

        ВыбранныйДокумент = ДокУведомление;
    КонецЕсли;    
КонецПроцедуры


fly @ Сегодня, 12:24 * ,
или

 Пока Выборка.Следующий() Цикл
                ВыбранныйДокумент = Выборка.Ссылка;
КонецЦикла;




ВыбранныйДокумент = ДокУведомление.Ссылка;


вроде как надо ссылку на объект передать, а не сам объект

Автор: Vladal 20.06.19, 8:00

Цитата(fly @ 14.06.19, 12:47) *
вроде как надо ссылку на объект передать, а не сам объект

Да.
Я иногда делаю так:
(сферический пример в вакууме)
&НаСервере
Функция СоздатьРТУНаСервере()
    ДокОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    ДокОбъект.Дата = ТекущаяДата();
    ДокОбъект.Записать();
    Возврат ДокОбъект.Ссылка;
КонецФункции

&НаКлиенте
Процедура СоздатьРТУ(Команда)
    СсылкаНаДокумент = СоздатьРТУНаСервере();
    ОткрытьЗначение(СсылкаНаДокумент);
КонецПроцедуры

Автор: Aksiniya 02.06.23, 10:56

Цитата(Vladal @ 20.06.19, 9:00) *
Да.
Я иногда делаю так:
(сферический пример в вакууме)
&НаСервере
Функция СоздатьРТУНаСервере()
    ДокОбъект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
    ДокОбъект.Дата = ТекущаяДата();
    ДокОбъект.Записать();
    Возврат ДокОбъект.Ссылка;
КонецФункции

&НаКлиенте
Процедура СоздатьРТУ(Команда)
    СсылкаНаДокумент = СоздатьРТУНаСервере();
    ОткрытьЗначение(СсылкаНаДокумент);
КонецПроцедуры



Спасибо за пример!
В УФ сработало вместо ОткрытьЗначение(СсылкаНаДокумент); -- ПоказатьЗначение(,ССылкаНаДокумент);

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua