Имя: Пароль:
1C
 
Отмена проведения
,
0 Marry04
 
24.06.16
05:43
Нужно чтобы в документе "Перемещение товаров" при установке пользователем "Администратор" склада центрального, возможность проведения отсутствовала. Но пишет вот такую ошибку:
{Документ.ПеремещениеТоваров.Форма.ФормаДокумента.Форма(1901)}: Ошибка при вызове метода контекста (РольДоступна)
    Если РольДоступна("Администратор")=Истина
по причине:
Недопустимое значение параметра (параметр номер '1')

Вот код:

Процедура СкладОтправительПриИзменении(Элемент)
    СсылкаНаСправочник = Справочники.Склады;
    Если РольДоступна("Администратор")=Истина
    Тогда
        ЗначениеОтправителя = ЭлементыФормы.СкладОтправитель.Значение;
        Если ЗначениеОтправителя.Родитель = "Центральные склады" Тогда
            ЭлементыФормы.ДействияФормы.Кнопки.Действие4.Доступность = Ложь;
        
        КонецЕсли;
        КонецЕсли;
    
    РаботаСДиалогами.УстановитьЗаголовокФормыДокументаСУчетомСклада(Строка(ВидОперации), ЭтотОбъект, ЭтаФорма, СкладПолучатель);

    // Установить видимость реквизитов и заголовков колонок.
    УстановитьВидимость();
    ПриИзмененииВидаСклада();

КонецПроцедуры
1 Marry04
 
24.06.16
05:43
упп 1.3 обычное приложение
2 Amra
 
24.06.16
05:50
Нет такой роли в конфигурации. Ждем следующего вопроса почему не отрабатывает условие "Если ЗначениеОтправителя.Родитель = "Центральные склады" Тогда"
3 80ksa
 
24.06.16
05:54
Администратор это видимо ИмяПользователя а на Роль, Машенька мужского пола))
4 Marry04
 
24.06.16
06:02
Есть такая роль в конфигурации.
Процедура СкладОтправительПриИзменении(Элемент)
    СсылкаНаСправочник = Справочники.Склады;
    Роль = "Администратор пользователей";
    Если РольДоступна(Роль)
    Тогда
        ЗначениеОтправителя = ЭлементыФормы.СкладОтправитель.Значение;
        Если ЗначениеОтправителя.Родитель = "Центральные склады" Тогда
            ЭлементыФормы.ДействияФормы.Кнопки.Действие4.Доступность = Ложь;
        
        КонецЕсли;
        КонецЕсли;
    
    РаботаСДиалогами.УстановитьЗаголовокФормыДокументаСУчетомСклада(Строка(ВидОперации), ЭтотОбъект, ЭтаФорма, СкладПолучатель);

    // Установить видимость реквизитов и заголовков колонок.
    УстановитьВидимость();
    ПриИзмененииВидаСклада();

КонецПроцедуры
5 Marry04
 
24.06.16
06:05
Если ЗначениеОтправителя.Родитель.Наименование = "Центральные склады" Тогда
исправила
6 Marry04
 
24.06.16
06:14
(2) есть такая Роль.да, дейсвительно ошиблась. но потом исправила. но все равно
7 Marry04
 
24.06.16
06:23
(2) (3) Получилось. Невнимательность делает свое дело. Но теперь при выборе соответствующего склада, кнопка активна все равно
8 Marry04
 
24.06.16
06:36
ДокументОбъект.Записать( РежимЗаписиДокумента.ОтменаПроведения);так пробовала еще больше ошибок вылазиет
9 Amra
 
24.06.16
06:51
(7) "Если ЗначениеОтправителя.Родитель = "Центральные склады" Тогда" на что исправила то?)
10 vicof
 
24.06.16
06:52
Отойди от компьютера, пока делов не натворила
11 Marry04
 
24.06.16
06:54
(9) Если ЗначениеОтправителя.Родитель.Наименование = "Центральные склады"
12 Marry04
 
24.06.16
07:03
не понимаю как отменить проведение.помогите пожалуйста!
13 Amra
 
24.06.16
07:07
(11) Если СокрЛП(ЗначениеОтправителя.Родитель.Наименование) = "Центральные склады"
14 Marry04
 
24.06.16
07:14
(13) Не помогло, документ также проводиться
15 Mankubus
 
24.06.16
07:19
(14) в обработке проведения ставь отказ = истина
16 Beretta
 
24.06.16
07:20
Надо научить пользователей хитрому алгоритму. Создать документ или отменить проведение, изменить склад, записать, провести из списка =)
17 Marry04
 
24.06.16
07:23
(15) я писала представлнный обработчик при изменении отправителясклада.
если я поставлю отказ=истина. то для всех пользователей проведение будет недоступно
18 Beretta
 
24.06.16
07:26
(16)+ после записи выйти из базы, зайти другим пользователем и провести. Из списка.
19 Beretta
 
24.06.16
07:27
(18)+ ...при желании =)
20 Marry04
 
24.06.16
07:29
(19) нет, им не нужны такие заморочки. нужно чтоб возможности не было проводить просто.
21 Marry04
 
24.06.16
07:29
(15) обработки проведения нет . есть токлько ДействияФормыДействиеЗаполнитьИПровести(Кнопка)
22 Mankubus
 
24.06.16
07:32
(17) Так ты перед этим условие напиши
Если МоеУсловие ТОгда
Отказ = Истина
КонецЕсли
23 Beretta
 
24.06.16
07:33
(20) это не заморочки. Это последоватедьность действий, которая позволяет  им элегантно забить на то что ты делаешь и сделать так как они хотят

Тебе в (15) правильную вещь советуют.
24 Михаил 1С
 
24.06.16
07:33
(0) Мм, ну, простейший способ - взять модуль Объекта, в нем процедуру ПередЗаписью и далее - Если роль такая-то и склад такой-то, то Отказ=Истина, Сообщить("руководство сказало Нельзя").
Можно еще доп.проверку поставить - если РежимЗаписи=Проведение или (РежимЗаписи=Запись и Проведен), чтобы разрешить обычную запись без проведения.
25 Михаил 1С
 
24.06.16
07:34
А в процедуре СкладОтправительПриИзменении() ничего не пиши.
26 Marry04
 
24.06.16
07:35
(24) нет обработчика ПередЗаписью
27 Михаил 1С
 
24.06.16
07:36
(26) Поищи, в моих документах он есть.
28 Beretta
 
24.06.16
07:37
(26) И никогда больше не будет? =)
29 Marry04
 
24.06.16
07:37
(27) В модуле данного документа нет такого метода.
30 Михаил 1С
 
24.06.16
07:37
(26) создай его сама
31 Михаил 1С
 
24.06.16
07:38
Поищи рядом с кнопкой "Процедуры и функции" - это сверху, третья строка менюшек
32 Marry04
 
24.06.16
07:39
(31) в поиске нет такого метода. но в любом случае данные записываются как-то. значит метод по другому называется
33 MrStomak
 
24.06.16
07:41
(32) Поищи ПередЗаписьюДляМаши(), тут парни наверное напутали просто
34 Marry04
 
24.06.16
07:42
(31) ПослеЗаписи есть. а перед нет.
35 Mankubus
 
24.06.16
07:48
(34) Смотри (31)
36 Mankubus
 
24.06.16
07:49
(35) + или нажми Ctrl+Alt+P
37 catena
 
24.06.16
07:54
(34)Ну создай, в чем проблема-то?
38 Marry04
 
24.06.16
07:57
(31) Создала. Только теперь записать не могу даже его. мне нужно, чтоб только провести нельзя было его.
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СсылкаНаСправочник = Справочники.Склады;
    Роль = "АдминистраторПользователей";
    Если РольДоступна(Роль)
    Тогда
        ЗначениеОтправителя = ЭлементыФормы.СкладОтправитель.Значение;
            
        КонецЕсли;

        //Если ЗначениеОтправителя.Родитель.Наименование = "Центральные склады" Тогда
        Если СокрЛП(ЗначениеОтправителя.Родитель.Наименование) = "Центральные склады" Тогда
            Отказ = истина;
            Сообщить("руководство сказало Нельзя")
            //ОбработкаУдаленияПроведения(ЭтаФорма.ДокументОбъект);
            //ДокументОбъект.Записать( РежимЗаписиДокумента.ОтменаПроведения);
            //ЭлементыФормы.ДействияФормы.Кнопки.Действие4.Доступность = Ложь;
            КонецЕсли;    
    
    
    
    
КонецПроцедуры
39 Beretta
 
24.06.16
08:01
(38) Эх, Маша не читатель - Маша писатель.

В (24) было рассказано про проверку условия режима записи. И обращение к элементам формы убери. Совсем.
40 MrStomak
 
24.06.16
08:01
(38)
Брррр.
В начале нужно писать
Если ОбменДанными.Загрузка = Истина Тогда
Возврат;
КонецЕсли;

Потом весь твой кусок нужно включать в тело условия;

Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда

Потом ЗначениеОтправителя = СкладОтправитель.

И я очень надеюсь ты не на живых людях эксперименты ставишь!
41 catena
 
24.06.16
08:01
(38) читай (24)
42 MrStomak
 
24.06.16
08:08
(39)Вангую, что она вообще не в модуле объекта находится.
43 Marry04
 
24.06.16
08:10
РежимПроведения = ложь;
                     РежимЗаписи=истина;
Отказ = истина;
В форме документа
44 Marry04
 
24.06.16
08:11
(43) так не правильНО?
45 Marry04
 
24.06.16
08:17
Спасибо всем большое!Все получилось!
46 Marry04
 
24.06.16
08:18
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
    Если ОбменДанными.Загрузка = Истина Тогда
Возврат;
КонецЕсли;
Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
СсылкаНаСправочник = Справочники.Склады;
    Роль = "АдминистраторПользователей";
    Если РольДоступна(Роль)
    Тогда
        ЗначениеОтправителя = ЭлементыФормы.СкладОтправитель.Значение;
            
        КонецЕсли;
        Если СокрЛП(ЗначениеОтправителя.Родитель.Наименование) = "Центральные склады" Тогда
                                         Отказ = истина;
            Сообщить("руководство сказало Нельзя")
                    КонецЕсли;    
          КонецЕсли;
    
             
КонецПроцедуры

вот так получилось
47 catena
 
24.06.16
08:26
"СкладОтправитель" - реквизит формы или документа?
48 MrStomak
 
24.06.16
08:30
(44) Теперь убирай это из формы и переноси в модуль объекта. Иначе твоя проверка при проведении из списка работать не будет.