Имя: Пароль:
1C
1С v8
Не могу понять, почему процедура то отрабатывает, то нет
, , , ,
0 Dyspho
 
18.10.16
07:32
Есть:
Функция ПолучитьЗначениеПраваПользователя(Право, ЗначениеПоУмолчанию) Экспорт
    
    КэшДополнительныхПрав = глЗначениеПеременной("ЗначенияДополнительныхПравПользователя");
    
    МассивЗначенийПрава = КэшДополнительныхПрав[Право];
    
    Если МассивЗначенийПрава = Неопределено Тогда
        МассивЗначенийПрава = Новый Массив;
        
        Если РольДоступна("ПолныеПрава") Тогда
            ЗначениеПрава = ПолучитьЗначениеРазрешенногоПрава(Право);
            МассивЗначенийПрава.Добавить(ЗначениеПрава);
        Иначе
            ОбъектПрав = глЗначениеПеременной("ПрофильПолномочийПользователя");
            Если ЗначениеЗаполнено(ОбъектПрав) Тогда
                Запрос = Новый Запрос;
                
                Запрос.УстановитьПараметр("ОбъектПрав", ОбъектПрав);
                Запрос.УстановитьПараметр("ПравоПользователя",   Право);
                
                Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                |    РегистрЗначениеПрав.Значение КАК Значение
                |ИЗ
                |    РегистрСведений.ЗначенияДополнительныхПравПользователя КАК РегистрЗначениеПрав
                |ГДЕ
                |    РегистрЗначениеПрав.Право = &ПравоПользователя
                |    И РегистрЗначениеПрав.Пользователь = &ОбъектПрав";
                
                Выборка = Запрос.Выполнить().Выбрать();
                
                Если Выборка.Следующий() Тогда
                    ЗначениеПрава = Выборка.Значение;
                Иначе
                    ЗначениеПрава = ЗначениеПоУмолчанию;
                КонецЕсли;
                МассивЗначенийПрава.Добавить(ЗначениеПрава);
            Иначе
                ТекущийПользователь = глЗначениеПеременной("глТекущийПользователь");    
                МассивЗначенийПрава = ПрочитатьЗначениеПраваПользователя(Право, ЗначениеПоУмолчанию, ТекущийПользователь);
            КонецЕсли;
        КонецЕсли;
        
        КэшДополнительныхПрав[Право] = МассивЗначенийПрава;
        
        #Если Сервер Тогда
            глЗначениеПеременнойУстановить("ЗначенияДополнительныхПравПользователя", КэшДополнительныхПрав, Истина);
        #КонецЕсли
    КонецЕсли;
    
    Возврат МассивЗначенийПрава;
    
КонецФункции
1 Dyspho
 
18.10.16
07:33
Функция ПравоЕстьУПользователя(Право, ЗначениеПоУмолчанию)
    
    МассивЗначенийПрава = ПолучитьЗначениеПраваПользователя(Право, ЗначениеПоУмолчанию);
    
    Возврат МассивЗначенийПрава.Найти(Истина) <> Неопределено;
    
КонецФункции
2 Dyspho
 
18.10.16
07:33
Функция РазрешеноПревышениеОбъемаЗаказаПриОтгрузке() Экспорт

    Возврат НЕ ПравоЕстьУПользователя(ПланыВидовХарактеристик.ПраваПользователей.КонтролироватьПревышениеОбъемЗаказаПриОтгрузке, Ложь);

КонецФункции // РазрешеноПревышениеОбъемаЗаказаПриОтгрузке()
3 Dyspho
 
18.10.16
07:34
То контролирует превышение объёма, то нет
Не могу понять почему
4 _Дайвер_
 
18.10.16
07:49
(3)я в 1с слабоват еще, но возможно стоит очистить значение в начале функции???
//Здесь добавить КэшДополнительныхПрав.Очистить();
КэшДополнительныхПрав = глЗначениеПеременной("ЗначенияДополнительныхПравПользователя");
    
    МассивЗначенийПрава = КэшДополнительныхПрав[Право];
5 _Дайвер_
 
18.10.16
07:51
(0) Либо здесь:
Функция ПравоЕстьУПользователя(Право, ЗначениеПоУмолчанию)
    
//МассивЗначенийПрава.Очистить();
    МассивЗначенийПрава = ПолучитьЗначениеПраваПользователя(Право, ЗначениеПоУмолчанию);
    
    Возврат МассивЗначенийПрава.Найти(Истина) <> Неопределено;
    
КонецФункции
6 Dyspho
 
18.10.16
07:52
Ты это просто так сказал или знаешь, что надо ?)
7 _Дайвер_
 
18.10.16
07:53
(6) попробуй, возможно при отработке функции значение остается , и при повторном отрабатывании заполняется значение из кеша
8 DDwe
 
18.10.16
07:54
(6) Попробовать совсем лень?
9 Dyspho
 
18.10.16
07:54
(7) Ну мне нужно ВСЕГДА контроировать превышение
10 Dyspho
 
18.10.16
07:54
Если в кеше остаётся значение, то оно и должно оставаться "контролировать"
11 Dyspho
 
18.10.16
07:55
(8) Да нет, не лень, просто возможности проверить нет
12 _Дайвер_
 
18.10.16
07:56
(10) У тебя в запросе идет проверка прав пользователя
13 _Дайвер_
 
18.10.16
08:00
(12) в (4) не проверяй его, это не правильно, (5) способ проверяй.
14 Dyspho
 
18.10.16
08:05
(13) Спасибо, только проблема ещё в "проверяй"
как? он иногда(оч редко) не контролирует
15 Dyspho
 
18.10.16
09:00
Ну вот и чо, проверил я, но как убедиться, что оно работает, если и так работало, но не всегда)
16 FIXXXL
 
18.10.16
09:07
(15) что значит "не всегда"? у разных пользователей? как у тебя там кто работает? мож в регистр руками лазают?
17 Dyspho
 
18.10.16
09:12
(16) Нет, пользователь 1, ТСД пробивает и если больше чем в заказе переносят, то ошибку выдаёт, а вот иногда пропускает
18 Dyspho
 
18.10.16
09:30
Ладно
19 Torquader
 
18.10.16
12:20
(17) Возможно, что в ТСД две строки - каждая не превышает, а обе вместе - превышают.
Таблицу терминала сворачивал перед загрузкой ?
20 Dyspho
 
18.10.16
12:22
(19) Слушай, а возможно   две строки - каждая не превышает, а обе вместе - превышают.
И как это поправить ?)

А про "Таблицу терминала сворачивал перед загрузкой ?" - не совсем понял о чем речь
21 Dyspho
 
18.10.16
12:36
а?
22 Torquader
 
18.10.16
13:10
(20) Ты из ТСД перегружаешь товары в документ 1С, который потом проводится.
Вот в процессе перегрузки ты получаешь таблицу товаров, в которой товары, их атрибуты (если используются характеристики или серии) и количество.
Так вот, если по Товары и атрибуты свернуть, суммируя количество, то в полученной таблице записи по товарам будут уникальными, то есть не будет встречаться несколько строк с одними и теми же данными товаров.

Стандартная обработка загрузки из ТСД, например, задаёт вопрос "Свернуть или нет", так как некоторым иногда очень нужно, чтобы было две строки с одним товаром.

А самое простое - проверять остатки после проведения документа, и если находится хоть один отрицательный, то запрашивать право "на отрицание" и отменять проведение, если такого права нет.
23 Dyspho
 
18.10.16
13:14
(22) Я если честно никогда с ТСД не работал в 1с, со слов я понял, что в ТСД интерфейс 1с, и док там и проводится
24 Torquader
 
19.10.16
01:16
(23) Если он подключен через RDP - то да - с терминала работают в 1С, а если там Cleverence или что-то подобное, то работа идёт через "прослойку", которая подключается к 1С в режиме COM-соединения от имени какого-то заданного на этапе настройки пользователя.
25 Dyspho
 
19.10.16
05:53
(24) Через РДП наверное, я ещё не видел, но мне сказали "захожу в 1с и ввожу лог пасс"
26 Dyspho
 
19.10.16
08:47
т.е. получается галка Контролировать превышение объема заказа при отгрузке не отрабатывает, если позиции 2 и в сумме они превышают заказ?
27 Dyspho
 
19.10.16
09:25
Точнее получается так: в Заказе допустим 1200ШТ
И товар проходит больше чем надо в той ситуации, если:
Перемещения по заказу 2 реализации в 1ой реализации 600 во 2ой 640, вроде бы как они обе не превышают заказ, а если вместе, то не 1200, а 1240 из-за этого и контроль превышения объёма походу не отрабатывает
так ?)
28 Dyspho
 
19.10.16
09:30
имею ввиду "контроль превышения объёма" отрабатывает не по сумме товара во всех перемещениях, а только по всем документам и если будет 2 документа с одинаковой позицией, то есть возможность превысить объём заказа ?
29 FIXXXL
 
19.10.16
09:42
(28) наврядли, по нормальному читаться должен остаток регистра, а не количество документа-основания
30 Dyspho
 
19.10.16
09:44
(29) Ну просто я заметил, если в 1 реализации больше чем в заказе - ошибка, если в 2ух реализациях в сумме больше, но по отдельности меньше чем в заказе, то ошибки нет