Имя: Пароль:
1C
1C 7.7
v7: Редактирование элементов формы
0 Масянька
 
11.11.15
09:37
Доброе утро!

Есть форма отчета. На ней есть элементы.
Как можно запретить изменение некоторых элементов формы?
Сразу скажу:
1. ТолькоПросмотр - не устраивает: есть поле Дата, которое нужно редактировать.
2. Сделать недоступным - не нравится: элементы серые.

Хочется вариант, когда поля типа доступны, но при попытке редактировании - не дает. Но не получается...

Есть варианты?

Спасибо.
1 aka AMIGO
 
11.11.15
09:46
(0) А что, проц. ПриНачалеВыбораЗначения(Элем, Флаг) не годится? там можно указать элемент диалога и расписать действия
2 aka AMIGO
 
11.11.15
09:48
+1 али ОбработкаВыбораЗначения(...)
тоже годится.. ИМХО, конечно :)
3 Масянька
 
11.11.15
09:51
(1) Это на каждый элемент нужно, а хочется  - одну на всё :(
4 aka AMIGO
 
11.11.15
09:52
(3) А если "ТолькоПросмотр", а для поля "Дата" применить доступность(1) ?
Проверять не буду, лень :)
5 Масянька
 
11.11.15
09:53
(4) Не работает... :)
6 aka AMIGO
 
11.11.15
09:53
(5) :((
7 Митяйский
 
11.11.15
09:57
Задублировать все "неизменяемые" реквизиты в форме, в элементах формы ссылаться на дубли, а реальные реквизиты спрятать.

В событии ПриИзменении навесить процедуру, которая будет перезаписывать элемент-дубль значением реального реквизита.

Только не совсем понятно, зачем оно надо.
8 Остап Сулейманович
 
11.11.15
10:02
(0) Для простых типов есть фишка "Запретить редактирование".
Попытку выбора ссылочных фильтровать в ПриНачалеВыбораЗначения
9 Остап Сулейманович
 
11.11.15
10:03
+ (8) Кстати оно же (ПриНачалеВыбораЗначения) срабатывает и для простых, если там есть кнопка выбора. Для строк работает точно.
10 DexterMorgan
 
11.11.15
10:08
жесть, это что за платформа?
11 Масянька
 
11.11.15
10:09
(8) Не получается :(

Процедура ПриначалеВыбораЗначения(Элемент, ФСО)
    
Если (Элемент = "ЦенаТовара") Тогда
    Предупреждение("Низя...");
    ФСО = 0;
КонецЕсли;
КонецПроцедуры

Спокойно редактирует...
12 HawkEye
 
11.11.15
10:13
(0) доступность()
13 Масянька
 
11.11.15
10:13
(12) Серыми становятся - не нравится :(
14 aka AMIGO
 
11.11.15
10:16
(11) А предыдущее значение не запоминается? Ну, чтоб вместо нового вернуть..

2.в порядке бреда - СтатусВозврата(0) :)
15 Масянька
 
11.11.15
10:18
(14) Вообще не заходит (в процедуру)...
16 AntiBuh
 
11.11.15
10:20
(15) так она ж по энтеру срабатывает или по педальке
17 aka AMIGO
 
11.11.15
10:21
(15) смутно помнится, там были варианты по входу - через кнопку, или прямо в поле.. От этого и зависел вход/не-вход..

А ОбработкаВыбораЗначения(..) не срабатывает?
18 aka AMIGO
 
11.11.15
10:21
(16) опередил :((
:)
19 Масянька
 
11.11.15
10:23
(16) А по мышке?
20 Масянька
 
11.11.15
10:24
(17) Судя по всему - тоже самое :(((((((((

Блин,неужели такая неразрешимая проблема? :((((((((
21 HawkEye
 
11.11.15
10:24
(13) вечно у тебя какие-то заморочки... нравится не нравится...


запоминай значение реквизита которое там должно быть и при любом его изменении - возвращай назад.
22 DDwe
 
11.11.15
10:26
(21) +100
23 HawkEye
 
11.11.15
10:28
+21 и вообще, если значение не должно редактироваться, то и нечего его пользователю показывать в "Поле ввода".
24 Масянька
 
11.11.15
10:31
(21) Да знаю я...
Она всех вечно удивляла. Такая уж она была. (С)

(23) Это настройки. Показывать надо.

Ладно. Всем спасибо.
25 aka AMIGO
 
11.11.15
10:32
(20) По нажатию кнопки-педальки - входит в процедуру.
А если вносить ручками - не входит.

ЗЫ. а что, у тебя так много навешено на диалог?
Мож просто потрудиться полчасика - и будет готово..
Кстати, это отчет?
26 Злопчинский
 
11.11.15
10:32
Формекс.
Отлов нажатий клавиш.
Если активный атрибут = в списке запрещенных/разрешенных - то либо ФСО=0 либо Фсо=1
27 HawkEye
 
11.11.15
10:33
(24) ну вот и показывай в зависимости от настройки.. кому можно - поле ввода, кому нельзя - Текст...
28 HawkEye
 
11.11.15
10:37
на форму повесь функцию, в ней напиши, что-то типа:

Если ТестРеквизит <> '01.01.01' Тогда
   ТестРеквизит = '01.01.01';
КонецЕсли;
29 aka AMIGO
 
11.11.15
10:43
(27) +1

Через ПравоДоступа(...) - если ущемить всех по правам.

Или через ИмяПользователя(...), чтоб досадить конкретному юзеру :)

И в условии - доступ к дате
30 Масянька
 
11.11.15
10:52
Чёт, я не понимаю...

Есть поле "Склад" - тип "Справочник.Склады".
Есть поле (со списком) "Цена".
Для склада работает, а для цены нет...
Почему?
31 Масянька
 
11.11.15
10:56
Всем - СПАСИБО!!!! :)))))))))
32 ADirks
 
11.11.15
11:13
.Редактирование(0)
попробуй результат как с доступностью, но слегка другой вид
33 Злопчинский
 
11.11.15
11:52
(27) фигня какая.
Вариант типа (26) (или с доступностью) нормально кладется на всякие "допправа по доступу" - вплоть до разрешения редактирвоания отдельных полей отдельным людям
34 Злопчинский
 
11.11.15
11:52
(31) В итоге-то как сделала?
35 HawkEye
 
11.11.15
13:40
(33) фигня... но я же не тебе это советую делать, а Масе, она все равно по нормальному не хочет делать...
36 Масянька
 
11.11.15
13:41
(35) Вот, ты опять обзываешься....
Да, нормально я сделала. нормально.
Через ПриНачалеВыбораЗначения.
37 HawkEye
 
11.11.15
13:49
(36) нормально, это через Доступность() ))))
38 Масянька
 
11.11.15
13:50
(37) А я хочу, чтобы были не серыми! :))))
39 HawkEye
 
11.11.15
13:54
(38) пользователей надо любить, а не издеваться над ними подсовывая им не редактируемые поля, которые визуально не отличаются от редактируемых )))
40 Масянька
 
11.11.15
13:54
(39) Если вырастут крылья за спиной я хочу чтобы были белыми - https://www.youtube.com/watch?v=nCoHXij91f0
41 HawkEye
 
11.11.15
13:57
(40) правильно, раз выросли и доступны -  значит белые...

а ты крылья белые то вырастила.... а летать не моги... садистка ))
42 Масянька
 
11.11.15
13:58
(41) Сам ... извращенец :))))))
43 aka AMIGO
 
11.11.15
14:06
(40) (42) а лопатки уже чешутся? :)
44 Масянька
 
11.11.15
14:07
(43) Не, уже вылезли... Хлопают только сильно. Никак не научусь... :)))
45 HawkEye
 
11.11.15
15:24
(44) потому что доступность(0)... ))
46 Масянька
 
11.11.15
15:27
(45) Следи за её левой рукой (тут злобное лицо и метла в руках) (С) :)))))
47 Масянька
 
12.11.15
11:45
Дабы не плодить новые ветки - спрошу здесь:
на форме есть поле со списком. Если дважды мышей - срабатывает, а если один раз мышей - нет.
Есть вариант обойти?
48 aka AMIGO
 
12.11.15
11:49
(47) хмык.. Придется обратиться непосредственно в MS, они этим занимаются с давних пор :)
49 Масянька
 
12.11.15
11:49
(48) Да нет...
Вас пока дождешься... :)
Формексом обойду.
50 aka AMIGO
 
12.11.15
11:51
(49) врде-б не ленивые мы, с утра 3 дока переделал, чтоб, стар быть, юзеры по недосмотру, али по злому умыслу не вводили дублей товаров в ТЧ.. Замучили логистов, да бухов, ошибки кучей повалили :)
51 Масянька
 
12.11.15
11:54
(50) Я с этими дублями так намучалась в свое время... Бр-р-р-р...
52 aka AMIGO
 
12.11.15
11:58
(51) сочувствую.. А я на одном доке отработал, на 2-х проверил - работает, теперь можно во все оставшиеся вставить. Вроде просто получилось.
На мысль натолкнул Guk (давным-давно), однако, не очень устроило, пришлось перелопатить методику.
53 Масянька
 
12.11.15
12:02
(52) Не томи, рассказывай, что за мысль.
54 АЛьФ
 
12.11.15
12:04
2(0) Сделать ТолькоПросмотр(), а рядом с полем даты поставить кнопку и вызывать по ней диалог ввода даты.
55 Масянька
 
12.11.15
12:09
(54) Сколько лет, сколько зим :)
Уже писала - не хочу. Хочу чтобы всё не было серым. В принципе - уже почти готово... Щас, со списком разберусь...
56 aka AMIGO
 
12.11.15
12:19
(53) Ладно, опозорюсь на всю мисту. Вот тебе Г-код:
Перем ТЗТЧт;
Перем КопируютЦуки;
Перем НомерСтаройСтроки;

Процедура ПроверкаНаДубль(Тов)
    ТЗТЧ=СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТЗТЧ,"Товар");
    ТЗТЧ.НоваяКолонка("К","Число");
    ТЗТЧ.Заполнить(1,,,"К");
    ТЗТЧ.Свернуть("Товар","К");
    стр=0;
    ТЗТЧ.НайтиЗначение(Товар,стр,"Товар");
    ТЗТЧ.ПолучитьСтрокуПоНомеру(стр);
    Если ТЗТЧ.К>1 Тогда
        КопируютЦуки=1;
    КонецЕсли;
    
КонецПроцедуры
Процедура ПриОкончанииРедактированияСтроки(НовСтр)
    Если НовСтр=1 Тогда //новая строка
        ПроверкаНаДубль(Товар);
        Если КопируютЦуки=1 Тогда
            УдалитьСтроку();
            КопируютЦуки=0;
            АктивизироватьСтроку(НомерСтаройСтроки);
            Предупреждение("Такой Товар введен в другой строке!");
            Возврат;
        КонецЕсли;
    Иначе //Старая строка
        ТЗТЧт.ПолучитьСтрокуПоНомеру(НомерСтаройСтроки);
        Если Товар = ТЗТЧт.Товар Тогда
            Возврат;
        КонецЕсли;
        ПроверкаНаДубль(Товар);
        Если КопируютЦуки=1 Тогда
            Предупреждение("Такой Товар введен в другой строке!");
            ТЗТЧт.ПолучитьСтрокуПоНомеру(НомерСтаройСтроки); //здесь вставить реквизиты документа, чтобы вернуть строку, как была до переделки!
            Товар = ТЗТЧт.Товар;
            Количество = ТЗТЧт.Количество;
            Единица = ТЗТЧт.Единица;
            Цена = ТЗТЧт.Цена;
            Сумма = ТЗТЧт.Сумма;
            НДС = ТЗТЧт.НДС;
            Коэффициент = ТЗТЧт.Коэффициент;
            ГТД = ТЗТЧт.ГТД;
        КонецЕсли;
        
        Возврат;
        
    КонецЕсли;

    //ПроверитьНаПолнотуДанных();
    
КонецПроцедуры
Процедура ПриНачалеРедактированияСтроки()
          
        Если НазваниеНабораПрав() = "Кладовщик" Тогда
             СтатусВозврата(0);
             Возврат;
        КонецЕсли;    
    

    НомерСтаройСтроки=НомерСтроки;
    ТЗТЧт = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТЗТЧт);
КонецПроцедуры
Процедура ПриВводеСтроки()
    Если НазваниеНабораПрав() = "Кладовщик" Тогда
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;

    НомерСтаройСтроки=НомерСтроки;
    ТЗТЧт = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(ТЗТЧт);
КонецПроцедуры
57 aka AMIGO
 
12.11.15
12:23
+56 тут 3 варианта защиты от дублей:
1. Тупое копирование строки
2. ввод новой строки с указанием Товара, который уже есть в ТЧ
3. Исправление Товара любой имеющейся строки на товар, который есть в ТЧ

Когда док многострочный - уследить глазками нереально.
58 Масянька
 
12.11.15
12:38
(56) Фигасе себе...
Не, я так не шмогла...
Пошли обходным путем: ответственные за ведение номенклатуры, общие принципы формирования наименования номенклатуры, ну и, есессьно, строгая иерархия справочника.
По рукам пришлось дать всего пару раз :)
59 Злопчинский
 
12.11.15
12:38
На ИСе у Опланета была типа "Предупреждаем что такой контрагент уже есть в базе", а для дублей отлично работает "Удар по бездуховности" там же - у меня на нем куча всяких загрузек похожих прайсов и даже есть отдельное рабочее место для клиента по вычисте дублей/похожих товаров (сведения их в один) в справочнике с большой номенклатурой..
60 HawkEye
 
12.11.15
14:00
(47) функция на форме... анализируешь текущуюстроку списка.
61 Масянька
 
12.11.15
14:20
(60) Я же говорю: вас пока дождешься - и не хочешь, а получится :)
Спасибо.
62 HawkEye
 
12.11.15
14:34
(61) SLA стоит денег ;)