Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 апр 2024, 02:28

Обработка для Контрагента(доступ к справочнику номенклатура)

Автор c_andrey, 15 сен 2015, 16:19

0 Пользователей и 1 гость просматривают эту тему.

c_andrey

В отчете все получилось.:zebzdr:

Нашел ошибку. Под админом все Ок.
А под пользователем ругается. У меня каждый пользователь имеет "Группу доступа к контрагенту. Каждый к своему"
А при этом коде получается пытается записать к запрешеному...
Как можно исправить чтоб только Разрешенным он обращелся и изменял их же...?
Спасибо.

{Отчет.НеактивныеПокупателиПоРайону.Форма.ФормаОтчета.Форма(25)}: Ошибка при вызове метода контекста (Записать)
      КонтрагентОбъект.Записать();
по причине:
У пользователя недостаточно прав на исполнение операции над базой данных.

vitasw

Вариант1. Использовать конструкцию "попытка... исключение..."
Варинат2. Писать запрос используя конструкцию "Выбрать Разрешенные..."

c_andrey

 Спасибо vitasw за ответ.
Первый вариант кажется легче.
Как пример можете кинуть использования данной конструкции..

vitasw

Попытка
//Писать какой-то код
//Если в результате выполнения кода возникла критическая ошибка, дальнейшее выполнение кода прекращается
// и начинает выполняться код после слова "Исключение"
Исключение
//Писать сообщение, что возникла непредвиденная ошибка
//Можно вообще ничего не писать
КонецПопытки;



c_andrey

Спасибо Вам за помощь vitasw

Измененный код с "Попыткой №5" работает отлично  :zebzdr:  :zebzdr: :zebzdr:



Попытка 
Спр = Справочники.Контрагенты.Выбрать();

Пока Спр.Следующий() Цикл
КонтрагентОбъект = Спр.ПОлучитьОбъект();
текущий = (ТекущаяДата())-5184000;

ПредыщущийМесяц = текущий;

Если КонтрагентОбъект.ДатаПоследнегоЗаказа <=ПредыщущийМесяц
    Тогда
       КонтрагентОбъект.тест= "Нет"
   иначе
      КонтрагентОбъект.тест= "Да"
         конецесли;
   
КонтрагентОбъект.Записать();

КонецЦикла;

Исключение

КонецПопытки;

vitasw

Если у вас в середине выборки возникнет ошибка на каком-то одном элементе дальше обработка не пойдет поэтому надо делать:
Спр = Справочники.Контрагенты.Выбрать();
Пока Спр.Следующий() Цикл

текущий = (ТекущаяДата())-5184000;
ПредыщущийМесяц = текущий;
Если КонтрагентОбъект.ДатаПоследнегоЗаказа <=ПредыщущийМесяц
    Тогда
       ТестКонтрагент= "Нет"
   иначе
      ТестКонтрагент = "Да"
         конецесли;
Попытка
КонтрагентОбъект = Спр.ПолучитьОбъект();   
КонтрагентОбъект.тест=ТестКонтрагент;
КонтрагентОбъект.Записать();
Исключение

КонецПопытки;
КонецЦикла;

В этом случае, если возникнет ошибка то обработка продолжить свою работу дальше и необработанным будет гораздо меньшее число элементов.

c_andrey

Ок. Ясно. Спасибо.
Пойду гляну распечатку под админом и пользователем
При вашем коде ругается на строку т.к неможет найти "КонтрагентОбъект" которая идет неже этой строки...

{Обработка.НеактивныеПокупатели.Форма.Форма.Форма(82,6)}: Переменная не определена (КонтрагентОбъект)
Если <<?>>КонтрагентОбъект.ДатаПоследнегоЗаказа <=ПредыщущийМесяц  (Проверка: Толстый клиент (обычное приложение))
{Обработка.НеактивныеПокупатели.Форма.Форма.Форма(84,8)}: Переменная не определена (КонтрагентОбъект)
       <<?>>КонтрагентОбъект.АктивныйКлиент= "Нет" (Проверка: Толстый клиент (обычное приложение))
{Обработка.НеактивныеПокупатели.Форма.Форма.Форма(86,7)}: Переменная не определена (КонтрагентОбъект)
      <<?>>КонтрагентОбъект.АктивныйКлиент = "Да"  (Проверка: Толстый клиент (обычное приложение))

vitasw

:) Я думаю, что вы сами вполне справитесь с исправлением ошибок. Условия в коде нужно проверять с ссылкой.

c_andrey

Я правильно понял. В условии  Ссылкой на справочник (Контрагенты) к реквизиту(ДатаПоследнегоЗаказа)
Верно?

vitasw

Вместо
Цитата: vitasw от 17 сен 2015, 09:29Если КонтрагентОбъект.ДатаПоследнегоЗаказа
нужно
Спр.ДатаПоследнегоЗаказа

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск