Имя: Пароль:
1C
1С v8
УФ. Как в ТЧ у поля сделать ТолькоПросмотр, но с кнопкой открытия
, ,
0 Max1986
 
26.04.12
12:54
Как в УФ в ТЧ у поля сделать ТолькоПросмотр, но с кнопкой открытия.
сабж. Надо что бы в списке у ТЧ пользователь не мог изменяь номнклатуру, но посмотреть (нажав на лупу - мог).
Если ставлю у поля ТолькоПросмотр, то лупа пропадает.
Как это сделать?
1 Buster007
 
26.04.12
13:03
вот это да... 1С отожгло...
2 Buster007
 
26.04.12
13:06
ну что ж... пиши обработчики... )
3 Buster007
 
26.04.12
13:21
&НаКлиенте
Процедура ТЧВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
   
   Если Поле.ТолькоПросмотр тогда
   
       ИмяПоля = ВернутьИмяКолонки(Поле.Имя);
       
       МассивПримитивныхТипов = Новый Массив;
       МассивПримитивныхТипов.Добавить(Тип("Число"));
       МассивПримитивныхТипов.Добавить(Тип("Строка"));
       МассивПримитивныхТипов.Добавить(Тип("Булево"));
       
       Значение = Элемент.ТекущиеДанные[ИмяПоля];
       Если НЕ МассивПримитивныхТипов.Найти(ТипЗнч(Элемент.ТекущиеДанные[ИмяПоля])) = Неопределено тогда
           Возврат;
       КонецЕсли;
       
       ОткрытьЗначение(Значение);
       
   КонецЕсли;
   
КонецПроцедуры

&НаСервере
Функция ВернутьИмяКолонки(Поле)
   
   ПутьКДанным = Элементы[Поле].ПутьКДанным;
   
   Пока Найти(ПутьКДанным, ".") > 0 цикл
       
       ПутьКДанным = Сред(ПутьКДанным, Найти(ПутьКДанным, ".")+1, СтрДлина(ПутьКДанным));
       
   КонецЦикла;
   
   Возврат ПутьКДанным;
   
КонецФункции
4 Buster007
 
26.04.12
13:22
+(3) плохо что на сервер всю форму конечно тащу...
5 wald
 
26.04.12
13:35
(4) Можно проще. в процедуре НачалоВыбора() проверяй на какое нибудь условие (можно роль создать) и если не нужно выбирать, то СтандартнаяОбработка = Ложь; Тоже самое в процедуре Очистка().
6 Buster007
 
26.04.12
13:42
(5) а если я начну в поле вводить текст и будет срабатывать автоподбор?
7 Buster007
 
26.04.12
13:42
(5) и для каждого поля я должен процедуру писать?
8 Mort
 
26.04.12
13:43
А тупо по щелчку в поле не сутба открывать?
9 wald
 
26.04.12
13:43
(5) Можно еще круче - делаешь ТолькоПросмотр у поля. А для таблицы создаешь команду контекстного меню, что-то типа "Открыть элемент". Пишешь обработчик для команды и пользватели писают кипятком))
10 Buster007
 
26.04.12
13:44
(8) это как?
11 wald
 
26.04.12
13:44
(7) ну создай общую процедуру обработчиков.... конечно нужно для каждого поля соответсвующую процедуру писать
12 wald
 
26.04.12
13:46
Кстати чтобы не создавать обработчик для каждого поля, команда контекстного меню ваще тема, можно по текущим данным определять какую ссылку нужно отркывать, не нужно залезать на сервер
13 Mort
 
26.04.12
13:49
(10)
&НаКлиенте
Процедура ПрограммныеОбъектыВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
   Если Поле = Элементы.ПрограммныеОбъекты1ПрограммныйОбъект Тогда
       НС = ПолучитьНавигационнуюСсылку(Элемент.ТекущиеДанные.ПрограммныйОбъект);
       ПерейтиПоНавигационнойСсылке(НС);
   КонецЕсли;
КонецПроцедуры
14 Buster007
 
26.04.12
13:51
(13) молодец ) у меня 10 колонок у всех только просмотр. Для каждого поля писать условие?
15 Mort
 
26.04.12
14:12
(14) Если Поле.ТолькоПросмотр... и т.д.