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

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

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

Автор: martynovalena 13.12.17, 11:41

Внешняя обработка прикрепрелена к документу и вызывается по кнопке "Заполнить" .Заполняет реквизиты и при обновлении формы не проставляется один реквизит .Он заполняется , но на форме не выходить (даже после прочтения ее по-новому).А если форму переоткрыть он встает на свое место.Мне же нужно чтобы после того как заполнились реквизиты.Перед клиентом была форма уже сразу со всеми реквизитами , чтобы ему ее не нужно было переоткрывать

&НаСервере 
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    НайденноеЗначение = "";
    ЭтаФорма.Параметры.Свойство("ОбъектыНазначения", НайденноеЗначение);
    
    Объект.ТекущДопСогл = НайденноеЗначение[0];
    
    //заполнить ОсновнойДоговор по ДопСоглаш
    Запрос=Новый Запрос;
    Запрос.Текст=
    "ВЫБРАТЬ
        |    бит_уп_Задача.БизнесПроцесс
        |ПОМЕСТИТЬ Процесс
        |ИЗ
        |    Задача.бит_уп_Задача КАК бит_уп_Задача
        |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.бит_ПроектДоговора КАК бит_ПроектДоговора
        |        ПО (бит_ПроектДоговора.Ссылка = бит_уп_Задача.Предмет)
        |ГДЕ
        |    бит_ПроектДоговора.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |    бит_уп_Задача.БизнесПроцесс
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |    бит_уп_ПроцессПараметрыПроцесса.Значение КАК Значение
        |ИЗ
        |    Процесс КАК Процесс
        |        ЛЕВОЕ СОЕДИНЕНИЕ БизнесПроцесс.бит_уп_Процесс.ПараметрыПроцесса КАК бит_уп_ПроцессПараметрыПроцесса
        |        ПО Процесс.БизнесПроцесс = бит_уп_ПроцессПараметрыПроцесса.Ссылка
        |ГДЕ
        |    ТИПЗНАЧЕНИЯ(бит_уп_ПроцессПараметрыПроцесса.Значение) = ТИП(Документ.бит_ПроектДоговора)";
        
        
        Запрос.УстановитьПараметр("Ссылка", Объект.ТекущДопСогл);
        
        РезультатЗапроса = Запрос.Выполнить();
        
        ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
        
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
            // Вставить обработку выборки ВыборкаДетальныеЗаписи
            Если  ТипЗнч(ВыборкаДетальныеЗаписи.Значение)= Тип("ДокументСсылка.бит_ПроектДоговора") тогда
                Объект.ПроектДоговора=ВыборкаДетальныеЗаписи.Значение;
            КонецЕсли;
        КонецЦикла;
        


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



&НаСервере
Процедура ЗаполнитьНаСервере()
    Об = Объект.ТекущДопСогл.ПолучитьОбъект();
    ОсновнДоговор=Объект.ПроектДоговора.ПолучитьОбъект();
    //Сообщить("Основной договор тек ДопСог"+Об.ОсновнойДоговор);
    ЕстьИзменения = Ложь;
    Если Об.ОсновнойДоговор=Документы.бит_ПроектДоговора.ПустаяСсылка() или Об.ОсновнойДоговор=неопределено тогда
        Об.ОсновнойДоговор=ОсновнДоговор.Ссылка;
        Сообщить("Основной Договор ДопСоглашения"+ОсновнДоговор.Ссылка);
        ЕстьИзменения=истина;
    КонецЕсли;
        
    
    Если Об.ДатаДоговора=Дата('00010101')  тогда
        Об.ДатаДоговора= ОсновнДоговор.ДатаДоговора;
        Сообщить("Дата ДопСоглашения"+ОсновнДоговор.ДатаДоговора);
        ЕстьИзменения = Истина;
    КонецЕсли;
    
    Если  Об.бит_П_МенеджерПоЗакупкам= справочники.ФизическиеЛица.ПустаяСсылка() тогда
        Об.бит_П_МенеджерПоЗакупкам= ОсновнДоговор.бит_П_МенеджерПоЗакупкам;
        Сообщить("МенеджерПоЗакупкам ДопСоглашения"+ОсновнДоговор.бит_П_МенеджерПоЗакупкам);
        ЕстьИзменения = Истина;
    КонецЕсли;
    
    Если Об.Контрагент = Справочники.Контрагенты.ПустаяСсылка()   Тогда
        //и ОсновнДоговор <> Документы.бит_ПроектДоговора.ПустаяСсылка()    Тогда
        Об.Контрагент = ОсновнДоговор.Контрагент;
        Сообщить("Контрагент ДопСоглашения"+ОсновнДоговор.Контрагент);
        ЕстьИзменения = Истина;
    КонецЕсли;
    
    Если Об.бит_П_Аналитика_1 = Справочники.бит_П_СтатьиРасходов.ПустаяСсылка() Тогда
        Об.бит_П_Аналитика_1 = ОсновнДоговор.бит_П_Аналитика_1;
        Сообщить("Статьи расходов ДопСоглашения"+ОсновнДоговор.бит_П_Аналитика_1);
        ЕстьИзменения = Истина;
    КонецЕсли;
    
    Если Об.бит_П_Аналитика_2 = Справочники.бит_П_ИсточникиФинансирования.ПустаяСсылка() Тогда
        Об.бит_П_Аналитика_2 = ОсновнДоговор.бит_П_Аналитика_2;
        Сообщить("Источники фоинансирования ДопСоглашения"+ОсновнДоговор.бит_П_Аналитика_2);
        ЕстьИзменения = Истина;
    КонецЕсли;                                                      
    
    Если Об.бит_П_Аналитика_6 = Справочники.Подразделения.ПустаяСсылка() или Об.бит_П_Аналитика_6 = Неопределено Тогда
        Об.бит_П_Аналитика_6 = ОсновнДоговор.бит_П_Аналитика_6;
        Сообщить("Инициатор расходов ДопСоглашения"+ОсновнДоговор.бит_П_Аналитика_6);
        ЕстьИзменения = Истина;
    КонецЕсли;                                    
    
    Если Об.ЦФО = Справочники.Подразделения.ПустаяСсылка() Тогда
        Об.ЦФО = ОсновнДоговор.ЦФО;
        Сообщить("ЦФО ДопСоглашения"+ОсновнДоговор.ЦФО);
        ЕстьИзменения = Истина;
    КонецЕсли;
    
    Если ЕстьИзменения Тогда
        Об.Записать(?(Об.Проведен, РежимЗаписиДокумента.Проведение, РежимЗаписиДокумента.Запись));
    КонецЕсли;
    
КонецПроцедуры

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

Автор: Ефремов 03.04.18, 6:40

martynovalena @ 13.12.17, 15:41 * ,

Мне тоже нужно было переоткрыть документ. Я сделал так:

&НаКлиенте
Процедура Переоткрыть(Команда)
    Если ЭтаФорма.ВладелецФормы <> Неопределено Тогда
        ЭтаФорма.ВладелецФормы.Закрыть();
        ОткрытьФорму("Документ.СписаниеМатериаловИзЭксплуатации.ФормаОбъекта", новый Структура("Ключ", ЭтаФорма.Документ));
    КонецЕсли;
КонецПроцедуры

Автор: хакерок 03.04.18, 20:44

Ефремов @ Сегодня, 7:40 * ,
Если произошли изменения в базе данных то для обновления того что показывают открытые формы можно использовать
"Оповещения об изменнния" можно прочитать в книге "Профессиональная разработка в системе ..." -> Разработка форм ->Обновление данных в динамических списках.

Автор: logist 03.04.18, 21:54

Цитата(martynovalena @ 13.12.17, 12:41) *
Заполняет реквизиты и при обновлении формы не проставляется один реквизит .Он заполняется , но на форме не выходить

вероятно, у вас неправильный подход к программированию в управляемом приложении, необходимо взять объект через ДанныеФормывзначение передать в обработку, обработать его там и получить обработанный объект, вернуть его обратно через Значениевданныеформы

Автор: Ефремов 04.04.18, 9:04

хакерок @ Сегодня, 1:44 * ,
Спасибо!

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