Имя: Пароль:
1C
1С v8
управляемые формы, определение формы которую надо открыть
0 vlasabo
 
06.11.15
19:16
Доброго дня еще раз. В связи с предыдущей темой назрел вопрос:
Есть две формы объекта задачи. В одной есть поле "Рекв" и он соответственно заполняется, во второй его нет и он соответственно пустой.
Вопрос: как при открытии формы определить какую именно форму открывать? Открывать будет пользователь из клиента через список задач, т.е. ОткрытьФорму мне не поможет, увы.
Т.е. логика ясна, если реквизит "рекв" заполнен - то первую форму, если не заполнен - то вторую, но как реализовать?
ОбработкаПолученияФормы у нас в модуле менеджера, как добраться оттуда до реквизита задачи я не знаю.
ЗЫ: не обязательно упираться именно в этот способ решения, если есть еще варианты - посоветуйте, пожалуйста. Задача с БП не связана, существует отдельно сама по себе
1 Горогуля
 
06.11.15
19:18
сделать фейковую форму, из которой уже открывать ту или эту не вариант?
2 Zamestas
 
06.11.15
19:19
(0) А одной формой обойтись никак?
3 vlasabo
 
06.11.15
19:26
(1) а как?
Процедура ПриОткрытии(Отказ)
Если ЗначениеЗаполнено(Рекв) Тогда ?? Иначе ??
КонецЕсли;
КонецПроцедуры

(2) одной формой, опять же, как? Видимость элементов отключать при незаполненности, чтоб пользователям не мешали куча незаполненных полей? Костыли же, хотелось бы нормально реализовать.
4 Zamestas
 
06.11.15
19:51
(3) Т.е. отключать видимость - это костыли, а использование двух форм не костыли?
5 FIXXXL
 
06.11.15
19:56
реквизит именно формы? тогда он заполняется по какому то условию в момент открытия? условие вне формы возможно анализировать?
6 vlasabo
 
07.11.15
14:43
Реквизит объекта. Заполняется программно в момент создания задачи, анализировать какую форму открыть надо соответственно перед открытием формы. Можно и вне, но как?
7 vlasabo
 
07.11.15
14:44
(4) отключать видимость костыли потому, что когда будет десяток рахзных форм -можно будет потеряться в видимости элементов. Тогда как использование различных форм для каждого случая - решение вполне масштабируемое
8 DmitrO
 
07.11.15
17:08
Вообще не понятно в чем проблема.
В ОбработкаПолученияФормы передаются параметры открытия формы среди них ясен пень есть параметр Ключ, который является ссылкой..
9 vlasabo
 
09.11.15
09:22
(8) не могу понять, увы(
Не мог бы ты набросать примерный код, привязанный к примеру наверху, в (0)?

ЗЫ: я не на чужом горбу в рай хочу, если что, пример сверху - упрощенный вариант того, что мне надо сделать. Разберусь с ним - разберусь и со своей проблемой...
10 BadSanta
 
09.11.15
09:24
(9) поставь точку останова в событии и сам посмотри что приезжает в параметрах.
11 Fedor-1971
 
09.11.15
09:32
(9) Вот тебе схема:
1. создаёшь форму со списком задач (в запросе ДС должен быть твой параметр, на основании которого собираешься открывать различные формы)
2. в событии ПриНачалеИзменения() ДС проводишь анализ и выбираешь форму, которую собрался открыть.

Второй вариант: На форму выносишь закладки без заголовков и в ПриСозданииНаСервере рулишь активной страницей - имеешь одну форму, расширяемую и т.д. и не имеешь гемора с выбором какую форму соизволить открыть поскольку она одна во всех лицах.
12 vlasabo
 
09.11.15
10:01
(11) ок, ДС выбирает в т.ч. нужный мне параметр, проверку реализовал,

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

Как открыть форму?) Т.е. если я тупо напишу ОткрытьФорму то он мне и откроет её, пустую.
13 Fedor-1971
 
09.11.15
10:16
(12) Посмотри в сторону параметра Ключ (погугли или в СП прочитай)
пар=новый Структура("Ключ", СтрокаДС.СсылкаНаОткрываемуюЗадачу);
ОткрытьФорму("ОднаИзНужныхФорм", пар);
14 vlasabo
 
09.11.15
10:19
(13)     

Если ЗначениеЗаполнено(Элемент.ТекущиеДанные.Ссылка1) тогда
        Сообщить("итс ворк");
    П = Новый Структура;
    П.Вставить("Ключ", Элемент.ТекущиеДанные.ссылка);
ОткрытьФорму("Задача.Задачи.Форма.ФормаЗадачи1", П);
КонецЕсли;
не работает.
15 vlasabo
 
09.11.15
10:20
То есть исправно сообщает "итс ворк" когда условие срабатывает, но форму все равно открывает установленную по дефолту
16 Горогуля
 
09.11.15
10:21
не "итс ворк", а "ИТС воркс"
17 vlasabo
 
09.11.15
10:30
(13) пардон, всё заработало, случайно в названии процедуры добавил лишний символ и она перестала быть привязанной к событию.
Крайний вопрос: сейчас код выглядит так:




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


Всё исправно отрабатывает, открывает нужную форму, но вместе с ней открывается и стандартная форма.

В общем-то это я думаю решу и самостоятельно, спасибо большое за долгую возню со мной и помощь.
18 vlasabo
 
09.11.15
10:35
После КонецЕсли но перед КонецПроцедуры забыл дописать Отказ=Истина;


Задвоение прошло