8.х Откыть форму текущего документа из ТЗ

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Светлана5291, 2 сен 2014.

  1. TopicStarter Overlay
    Светлана5291
    Offline

    Светлана5291 Опытный в 1С

    Регистрация:
    6 фев 2013
    Сообщения:
    156
    Симпатии:
    0
    Баллы:
    26
    Добрый день!

    В обработке на форме есть таблица значений, куда по запросу попадают документы. Как при активизации строки открыть нужный документ? Пробовала так:
    Код:
    &НаКлиенте
    Процедура ЗаявкаНаВагонПриАктивизацииСтроки(Элемент)
    
        Зн = Элементы.ЗаявкаНаВагон.ТекущиеДанные;
        П = Новый Структура("Ключ",Зн);
        Форма = ПолучитьФорму("Документ.ЗаказНаПорожнийВагон.ФормаОбъекта",П);
        Форма.Открыть();
    КонецПроцедуры
    
    1.jpg 2.jpg
  2. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    я конечно в УФ не спец, но заяем вам форма, не проще получить объект и открыть?
  3. OXED
    Offline

    OXED Опытный в 1С

    Регистрация:
    10 апр 2012
    Сообщения:
    256
    Симпатии:
    0
    Баллы:
    26
    В запросе получайте ссылку на документ, выводите ее в ТЧ и при двойном клике по строчке документ сам откроется

    Код:
    Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    Контрагенты.Ссылка,
            |    Контрагенты.ИНН,
            |    Контрагенты.КПП
            |ИЗ
            |    Справочник.Контрагенты КАК Контрагенты";
        Результат = Запрос.Выполнить().Выгрузить();
    
        Объект.Список.Очистить();   
        Для Каждого Строка Из Результат Цикл
            Если ЗначениеЗаполнено(Строка.ИНН) Тогда
                НоваяСтрока = Объект.Список.Добавить();
                ЗаполнитьЗначенияСвойств(НоваяСтрока,Строка);
            КонецЕсли;
        КонецЦикла;
    
    И в свойствах поля укажите для кнопки открытия заначение "да"
  4. TopicStarter Overlay
    Светлана5291
    Offline

    Светлана5291 Опытный в 1С

    Регистрация:
    6 фев 2013
    Сообщения:
    156
    Симпатии:
    0
    Баллы:
    26
    Спасибо. Все получилось. А вообще возможно эту кнопку открытия вынести отдельно?
  5. OXED
    Offline

    OXED Опытный в 1С

    Регистрация:
    10 апр 2012
    Сообщения:
    256
    Симпатии:
    0
    Баллы:
    26
    Нет. Это встроенный механизм платформы, но при желании можно написать аналогичную
  6. TopicStarter Overlay
    Светлана5291
    Offline

    Светлана5291 Опытный в 1С

    Регистрация:
    6 фев 2013
    Сообщения:
    156
    Симпатии:
    0
    Баллы:
    26
    а пример есть какой-нибудь? При процедуре ПолучитьФорму() не получается. Хотя может я что то не так делаю.
  7. OXED
    Offline

    OXED Опытный в 1С

    Регистрация:
    10 апр 2012
    Сообщения:
    256
    Симпатии:
    0
    Баллы:
    26
    Код:
        Документ = Элементы.<НазваниеТЧ>.ТекущиеДанные.Ссылка
        Отбор = Новый Структура;
        Отбор.Вставить("Наименование",Строка(Документ)); //По наименованию искать конечно колхозно, но это просто пример. Сюда вы можете вставить любые параметры отбора
        Форма = ПолучитьФорму("Документ.<НазваниеДокумента>.ФормаОбъекта",Отбор);
        Форма.Открыть();
    Работает только если есть выделенная строка.

    P.S. А вообще грамотнее будет либо штатный механизм оставить, либо кнопку разместить в контекстном меню.
  8. mialord
    Offline

    mialord Модераторы Команда форума Модератор

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Вот прямо Вам с разными вариантами открытия :)
    Код:
    &НаКлиенте
    Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
        СтандартнаяОбработка = ложь;
        Если Поле.Имя = "Наименование"
            или Поле.Имя = "Регион"
            или Поле.Имя = "Контакт"
            или Поле.Имя = "Должность"
            или Поле.Имя = "Телефон"
            или Поле.Имя = "ЭлПочта"
            или Поле.Имя = "КоличествоКонтактов"
            Тогда
            Если НЕ Элемент.ТекущиеДанные.Ссылка = ПредопределенноеЗначение("Справочник.Контрагенты.ПустаяСсылка") Тогда
                ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаЭлемента", Новый Структура("Ключ", Элемент.ТекущиеДанные.Ссылка), ЭтаФорма,,,,,РежимОткрытияОкнаФормы.Независимый);
            КонецЕсли;
        ИначеЕсли Поле.Имя = "Договор" Тогда
            Если НЕ Элемент.ТекущиеДанные.Договор = ПредопределенноеЗначение("Справочник.Договоры.ПустаяСсылка") Тогда
                ОткрытьФорму("Справочник.Договоры.Форма.ФормаЭлемента", Новый Структура("Ключ", Элемент.ТекущиеДанные.Договор), ЭтаФорма,,,,,РежимОткрытияОкнаФормы.Независимый);
            КонецЕсли;
        ИначеЕсли Поле.Имя = "КоличествоЮрЛиц"  
            или Поле.Имя = "КоличествоЗданий"
            или Поле.Имя = "ОбщаяПлощадь"
            Тогда
            Если НЕ Элемент.ТекущиеДанные.Ссылка = ПредопределенноеЗначение("Справочник.Контрагенты.ПустаяСсылка") Тогда
                ОткрытьФорму("Справочник.Контрагенты.Форма.ФормаЭлемента", Новый Структура("Ключ, ОткрыватьПанельОбъекты", Элемент.ТекущиеДанные.Ссылка, Истина), ЭтаФорма,,,,,РежимОткрытияОкнаФормы.Независимый);
            КонецЕсли;
        ИначеЕсли Поле.Имя = "ОбщееВремяНаОбъектеДней"
            или   Поле.Имя = "ОбщаяСуммаЗатрат"
            тогда
            ПараметрыСпр = Новый Структура("Ключ", Элемент.ТекущаяСтрока);  
            Форма = ПолучитьФорму("Справочник.ПоискРаботы.Форма.ФормаЗатрат",ПараметрыСпр);
            Форма.открыть();
        ИначеЕсли Поле.Имя = "ОбщееВремяВОфисеДней"
            или Поле.Имя = "ОбщееВремяЭкспертизаДней"
            или Поле.Имя = "ОбщаяСуммаРабот"
            или Поле.Имя = "ОбщаяСуммаАванс"
            Тогда
            СтандартнаяОбработка = ложь;
            ЗначениеРеквизита = Элементы.Список.ТекущиеДанные[Поле.Имя];
            ПараметрыФормы = Новый Структура;
            ПараметрыФормы.Вставить("ИмяРеквизита",Поле.Имя);
            ПараметрыФормы.Вставить("Число",ЗначениеРеквизита);
            ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Истина);
            ПараметрыВывода = ОткрытьФормуМодально("ОбщаяФорма.ФормаВводаЧисла_2",ПараметрыФормы,ЭтаФорма);
            Если ПараметрыВывода<>Неопределено Тогда
                УстановитьРеквизитОбъектаСервер(ВыбраннаяСтрока,Поле.Имя,ПараметрыВывода.Число);  
            КонецЕсли;
          
        ИначеЕсли Поле.Имя = "ОтправкаКПДата"
            или Поле.Имя = "ДатаПоследнегоЗвонка"
            или Поле.Имя = "ДатаСледующегоЗвонка"
            Тогда
            ЗначениеРеквизита = Элементы.Список.ТекущиеДанные[Поле.Имя];
            ПараметрыФормы = Новый Структура;
            ПараметрыФормы.Вставить("ИмяРеквизита",Поле.Имя);
            ПараметрыФормы.Вставить("Дата",ЗначениеРеквизита);
            ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Истина);
            ПараметрыВывода = ОткрытьФормуМодально("ОбщаяФорма.ФормаВводаДаты",ПараметрыФормы,ЭтаФорма);
            Если ПараметрыВывода<>Неопределено Тогда
                УстановитьВыбранныйРеквизитНаСервере(ВыбраннаяСтрока,ПараметрыВывода.ИмяРеквизита,ПараметрыВывода.Дата);
            КонецЕсли;
            Элементы.Список.Обновить();
        ИначеЕсли Поле.Имя = "Комментарий" Тогда
            СтандартнаяОбработка = ложь;
            ЗначениеРеквизита = Элементы.Список.ТекущиеДанные[Поле.Имя];
            ПараметрыФормы = Новый Структура;
            ПараметрыФормы.Вставить("ИмяРеквизита",Поле.Имя);
            ПараметрыФормы.Вставить("Строка",ЗначениеРеквизита);
            ПараметрыФормы.Вставить("ЗакрыватьПриВыборе",Истина);
            ПараметрыВывода = ОткрытьФормуМодально("ОбщаяФорма.ФормаВводаСтроки",ПараметрыФормы,ЭтаФорма);
            Если ПараметрыВывода<>Неопределено Тогда
                УстановитьРеквизитОбъектаСервер(ВыбраннаяСтрока,Поле.Имя,ПараметрыВывода.Строка);  
            КонецЕсли;
            Элементы.Список.Обновить();
        ИначеЕсли Поле.Имя = "ОтветилиНаКП" Тогда
            УстановитьВыбранныйРеквизитНаСервере(ВыбраннаяСтрока,Поле.Имя,"",Истина);
            Элементы.Список.Обновить();
        ИначеЕсли Поле.Имя = "СтадияРаботыСКлиентом" Тогда  
            СтандартнаяОбработка = ложь;
            ЗначениеРеквизита = Элементы.Список.ТекущиеДанные[Поле.Имя];
            Если ВвестиЗначение(ЗначениеРеквизита,"Стадии работы") Тогда
                УстановитьРеквизитОбъектаСервер(ВыбраннаяСтрока,Поле.Имя,ЗначениеРеквизита);  
            КонецЕсли;  
            Элементы.Список.Обновить();
        КонецЕсли;
    КонецПроцедуры
    так же, если у Вас дин. список в настройке списка можно указать Ваш тип ссылки как основной и отключить редактирование всех ячеек, тогда платформа двойным кликом по строке сама будет отрывать форму
  9. TopicStarter Overlay
    Светлана5291
    Offline

    Светлана5291 Опытный в 1С

    Регистрация:
    6 фев 2013
    Сообщения:
    156
    Симпатии:
    0
    Баллы:
    26
    спасибо!!!!

Поделиться этой страницей