Версия для печати темы (https://pro1c.org.ua/index.php?s=4fb63f22e5f13aa524e3f68d74e999b6&showtopic=44444)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Запрет на просмотр цен

Автор: r1p88@mail.ru 01.03.18, 12:24

Платформа: 1С:Предприятие 8.3 (8.3.8.2322)
Конфигурация: "Управление торговлей для Украины", редакция 2.3.
Разработка конфигурации: "ABBYY Ukraine", 2003-2009
(2.3.11.1)

Добрый день. Столкнулись с такой проблемой. Необходимо закрыть доступ на просмотр всех цен, кроме одной. Сделали следующим образом, через RLS в регистре сведений "ЦеныНоменклатуры" оставили право чтение на определённой роли и в нём добавили ограничение вида:

ГДЕ ТипЦен.Код <> "000000005" И ТипЦен.Код <> "000000002" И ТипЦен.Код <> "000000001" И ТипЦен.Код <> "УТ0000001" И ТипЦен.Код <> "000000008"
. Вроде всё. Но вот тут и вылазят ошибки.

При создании любого документа, для примера "ЗаказПокупателя", менеджер выбирает Организацию, Контрагента, Договор и делает подбор номенклатуры. В списке номеклатуры всё ок и цены спрятаны, но когда менеджер выбирает номенклатуру, то выдаёт сообщение "Ошибка выполнения запроса".
{ОбщийМодуль.Ценообразование.Модуль(631)}: Ошибка при вызове метода контекста (Выполнить)
        Выборка = Запрос.Выполнить().Выбрать();
по причине:
Ошибка выполнения запроса
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.


Если нажать "ОК", позиция добавляется в документ, цена проставляется, но нет суммы по номенклатуре и нет автоматической скидки.
Типы цен, которые скрываем все базовые.

Собственно вопрос, что нужно еще изменить, чтобы всё нормально функционировало? Потому что пока не могу понять.

Автор: Petre 01.03.18, 12:34

r1p88@mail.ru @ Today, 12:24 * ,
Какой в отладчике текст запроса?

Автор: r1p88@mail.ru 01.03.18, 12:58

Petre @ Сегодня, 12:34 * ,

Запрос.Текст = Запрос.Текст + "
        |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |    Справочник.Номенклатура КАК сНоменклатура
        |ПО
        |    сНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
        |ГДЕ
        |    сНоменклатура.Ссылка = &Номенклатура
        |УПОРЯДОЧИТЬ ПО
        |    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры УБЫВ
        |";

Автор: sava1 01.03.18, 13:09

ВЫБРАТЬ разрешенные

в запросе есть ?

Автор: r1p88@mail.ru 01.03.18, 13:21

sava1 @ Сегодня, 13:09 * ,
нет.
Причем сейчас решил пошагово пройти и как я понял, саму номенклатуру он добавляет и вытаскивает цену и сумму, а потом происходит обход по услугам и ступар. Но только почему он не добавляет эту сумму и скидку в табличную часть.

Автор: Petre 01.03.18, 13:31

r1p88@mail.ru @ Today, 13:21 * ,
faceoff.gif
Ставим точку останова на строке

Выборка = Запрос.Выполнить().Выбрать();

В табло вводим Запрос.Текст, жмем F2, смотрим текст запроса.

Автор: r1p88@mail.ru 01.03.18, 13:38

Petre @ Сегодня, 13:31 * ,

ВЫБРАТЬ ПЕРВЫЕ 1
    ЦеныНоменклатурыСрезПоследних.Цена  КАК Цена,
    ВЫБОР    КОГДА сНоменклатура.Услуга И ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
            ТОГДА сНоменклатура.ЕдиницаХраненияОстатков
            ИНАЧЕ ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения
    КОНЕЦ                               КАК ЕдиницаИзмерения,

    ЦеныНоменклатурыСрезПоследних.Валюта
ИЗ
    РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура = &Номенклатура
       И ТипЦен = &ТипЦен И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)
       ) КАК ЦеныНоменклатурыСрезПоследних

ВНУТРЕННЕЕ СОЕДИНЕНИЕ
    Справочник.Номенклатура КАК сНоменклатура
ПО
    сНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура
ГДЕ
    сНоменклатура.Ссылка = &Номенклатура
УПОРЯДОЧИТЬ ПО
    ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры УБЫВ

Автор: Petre 01.03.18, 13:47

r1p88@mail.ru @ Today, 13:38 * ,
Вместо

ВЫБРАТЬ ПЕРВЫЕ 1

Вставьте
ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1

Автор: r1p88@mail.ru 01.03.18, 13:55

Petre @ Сегодня, 13:47 * ,
та же самая ошибка вылазит

Petre @ Сегодня, 13:47 * ,
всё. Вроде ушла ошибка. Чуть позже буду проверять на рабочей базе, потом скажу что к чему. Пока спасибо за помощь.

Автор: r1p88@mail.ru 01.03.18, 16:42

Теперь появилась другая ошибка.

{ОбщийМодуль.МойПривилигированный.Модуль(338)}: Ошибка при вызове метода контекста (Выполнить)
    РезультатЗапроса = Запрос.Выполнить();
по причине:
Ошибка выполнения запроса
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.

Документ не проводится. Если убрать в настройках пользователя "Не отпускать товар ниже" - Приходной. То всё проводиться. Но нам принципиально оставить это ограничение.

Автор: Vofka 01.03.18, 16:47

r1p88@mail.ru, решение влезть с этим в RLS, на мой взгляд, плохое. Потому что теперь во всех запросах в программе, в которых есть обращение к типам цен, надо будет вставлять РАЗРЕШЕННЫЕ. Я бы это как-то по другому делал.

Автор: r1p88@mail.ru 01.03.18, 17:09

Vofka @ Сегодня, 16:47 * ,
Например?

Автор: Vofka 02.03.18, 10:19

r1p88@mail.ru, если бы вы озвучили задачу, можно было бы подумать. А так не понятно зачем вы сделали то, что здесь описываете.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua