Имя: Пароль:
1C
1С v8
Программно записать элементы справочников в БП3.0
0 Masi4
 
15.05.14
16:46
БП 3.0
Тонкий клиент
Права: группа ролей Бухгалтер

Необходимо выполнить создание элемента справочника "Договоры контрагентов", но при попытке выполнить нижеприведённый код возникает ошибка : "Не удалось записать "Договор Контрагента"!".
&НаСервере
Процедура КомандаСоздатьДоговорНаСервере()
    Договор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент ();
    Договор.Владелец                = Справочники.Контрагенты.НайтиПоКоду ("000027477");
    Договор.Наименование            = "0100059144";
    Договор.Организация                = Справочники.Организации.НайтиПоКоду ("000000001");
    Договор.ВидДоговора                = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем;
    Договор.ВалютаВзаиморасчетов = Справочники.Валюты.НайтиПоКоду ("978");
    Договор.РасчетыВУсловныхЕдиницах = Истина;
    Договор.Валютный = Истина;
    Договор.Записать ();
КонецПроцедуры


Тот же вариант со справочником "Номенклатура" возваращает "Нарушение прав доступа.
&НаСервере
Процедура КомандаСоздатьТоварНаСервере()
    СпрТовары = Справочники.Номенклатура.СоздатьЭлемент ();
    СпрТовары.Наименование = "123456789";
    СпрТовары.Записать ();
КонецПроцедуры


Если тоже самое выполнить с полными права - всё работает. Подскажите, как создавать элементы справочников под ролями Бухгалтеров в БП3.0?

ПС. Не посылайте в яндекс или гугл.
1 Wobland
 
15.05.14
16:47
дать прав пробовал?
2 salvator
 
15.05.14
16:49
А в чем глубинный смысл создавать один договор программно?
3 Masi4
 
15.05.14
17:02
(1) Если тоже самое выполнить с полными права - всё работает. (2) Договора, как и товары создаются пачками в мегамодулях. Я всего лишь привёл простой пример проблемного кода.
4 xXeNoNx
 
15.05.14
17:04
Рлс глянь, права дай
5 salvator
 
15.05.14
17:04
(3) Кури настройки ролей.
6 Naumov
 
15.05.14
17:05
После ругни смотришь на что ругается и добавляешь в права.
7 Wobland
 
15.05.14
17:05
(3) а от нас чего хочешь?
8 Ymryn
 
15.05.14
17:05
Если не изменяет память там есть отдельная роль на работу/запись с Нормативно справочной информаций (или просто Справочной информацией). Дай пользователю эту роль.
9 xXeNoNx
 
15.05.14
17:06
УстановитьПревилигированныйрежим
10 Naumov
 
15.05.14
17:06
*смотришь в журнале регистрации
11 Wobland
 
15.05.14
17:06
(9) фу. ты этим ртом потом хлебушек будешь кушать
12 xXeNoNx
 
15.05.14
17:07
(11) Какой вопрос, такой ответ...
13 Masi4
 
15.05.14
17:11
(4) Давал разные права, но работает только с полными правами.
14 Masi4
 
15.05.14
17:12
(7) От вас лично ничего. Но вопрос я задал вполне конкретно: "Подскажите, как создавать элементы справочников под ролями Бухгалтеров в БП3.0?"
15 Wobland
 
15.05.14
17:14
(14) лично я не знаю, и мне поровну. а сам найти ответ не хочешь
16 Wobland
 
15.05.14
17:14
+(15) ?
17 Masi4
 
15.05.14
17:16
(15) (16) Понятно, что всем или многим поровно. Искал, читал, у 1С спрашивал (и они даже ответили через 3 часа). Нигде ничего...
18 Wobland
 
15.05.14
17:17
только разве вЖР не ходил
19 acsent
 
15.05.14
17:18
установить привилегированный режим
20 Masi4
 
15.05.14
17:19
(8) Роли выданные пользователю: "Добавление и изменение базовой нормативно-справочной информации", "Добавление и изменение общей базовой нормативно-справочной информации", "Добавление и изменение общей бухгалтерской нормативно-справочной информации"
21 Masi4
 
15.05.14
17:21
(9) (19) Не помогло
22 Masi4
 
15.05.14
17:22
(18) а ЖР это вкуда?
23 Ymryn
 
15.05.14
17:22
(20) установлено ли ограничение доступа по уровням записей? Если да, то были ли запущены регламентная обработка после этого и были ли установлены соответствующие разрешения?
24 Ymryn
 
15.05.14
17:22
(22) журнал регистрации я так предполагаю.
25 acsent
 
15.05.14
17:24
(21) во внешней обработке конечно не поможет
26 Masi4
 
15.05.14
17:26
(5) Курил, только в теории получается что все права уже есть: у пользователя установлена роль "Добавление и изменение данных бухгалтерии", а у этой роли есть и создание и изменение элементов справочника.
27 Masi4
 
15.05.14
17:32
(10) (24) ЖР - оказывается полезная весчь. Вот что он мне сказал:

{ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль(87)}: Ошибка при получении значения атрибута контекста (ДатаОбновленияПовторноИспользуемыхЗначенийМРО)
        Если ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО <> АктуальнаяДата Тогда
по причине:
Нарушение прав доступа!
28 Wobland
 
15.05.14
17:33
(27) можешь не благодарить
29 Masi4
 
15.05.14
17:36
(28) Не, не. За это спасибо! Я и не думал что от него такая польза...
30 Masi4
 
15.05.14
17:39
(27) Вот только зайти туда дебагером не смогу. С ограниченными правами туда не пустят в конфигуратор, а с полными ошибка не появляется...
31 Wobland
 
15.05.14
17:50
(30) надо как-то заставить запустить отладку от имени ущербного юзера
32 Masi4
 
15.05.14
17:58
(31) Дал пользователю много прав. Запустил конфигуратор из под него. Отнял права. Запустил тонкий клиент. Дал права - подключил клиента к отладке. Он выдал много новых сообщений, но мои точки остановка в обоначенных местах продинамил.


{Форма.Форма.Форма(155)}: Ошибка при вызове метода контекста (Записать)
    СпрТовары.Записать ();
по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль(477)}: Ошибка при получении значения атрибута контекста (ИспользуемыеПланыОбмена)
    СпрТовары.Записать ();
по причине:
Нарушение прав доступа!

по причине:
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
{ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль(477)}: Ошибка при получении значения атрибута контекста (ИспользуемыеПланыОбмена)

по причине:
Нарушение прав доступа!
{ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль(477)}: Ошибка при получении значения атрибута контекста (ИспользуемыеПланыОбмена)
    Если ПараметрыСеанса.ИспользуемыеПланыОбмена.Количество() > 0 Тогда
по причине:
Нарушение прав доступа!
Нарушение прав доступа!
33 batmansoft
 
15.05.14
18:03
Попробуй создать роль, где всем справочникам, регистрам и документам назначить только права на программную запись и чтения. Таким образом, интерактивно шаловливыми ручками он не сможет что либо натворить, а программа под его правами сможет сделать.
34 Masi4
 
15.05.14
18:39
(33) Мне нельзя править конфу. Ни под каким предлогом. Это как бы условие обязательное.
35 Masi4
 
16.05.14
11:27
(31) Запустил от ущербного пользователя. Создал файловую локальную базу. Дал права администратора. Запустил конфигуратор. Отнял права администратора. Запустил толстый клиент (управляемое приложение). И уже 10 минут тыкаю F11.
36 Wobland
 
16.05.14
11:36
37 Masi4
 
16.05.14
11:43
(36) Это я итак знаю и сделал. Но спасибо за участие.
38 Masi4
 
16.05.14
11:46
(35) В итоге я нашел источник ошибки. Я правда не знаю пока почему туда входит выполнение.

Насколько я понял у пользователя нет прав сюда:

Если ПараметрыСеанса.ИспользуемыеПланыОбмена.Количество() > 0 Тогда
39 Wobland
 
16.05.14
11:47
>Нарушение прав доступа! Ошибка при получении значения атрибута контекста (ИспользуемыеПланыОбмена)

кажется, да. но я не уверен
40 Masi4
 
16.05.14
11:49
(39) Именно на этом месте деббагер останавливается и появляется ошибка. Теперь думаю какие из стандартных прав позволят обойти это.
41 Wobland
 
16.05.14
12:01
ну расскажи, каким ролям это позволено, не молчи ;)
42 Masi4
 
16.05.14
12:04
(41) Кто знает в БП 3.0 весь доступ поделён на кучу ролей в конфигураторе, а в конфигурации (режим предприятие) есть пять групп ролей. Это предыстория. Так вот единственная более менее безвредная роль - это администрирование. Я не знаю как и где смотреть доступ к переменной "ПараметрыСеанса", так что могу только предполагать.
43 Wobland
 
16.05.14
12:07
(42) а это совсем ни разу не переменная. даже напротив: это параметры сеанса
44 Masi4
 
16.05.14
12:09
(43) Да, я это уже посмотрел) Оказывается не параметрах сеанса дело... Потому что у роли Администрирование тоже нет доступа к "Параметрам сеанса".
45 hhhh
 
16.05.14
12:13
(44) то что "Потому что у роли Администрирование тоже нет доступа к "Параметрам сеанса"." ничего не следует.
46 Masi4
 
16.05.14
12:17
(45) Возможно, но с этой ролью в дополнение к группе ролей Бухгалтер - всё работает.
47 hhhh
 
16.05.14
12:25
что за группа ролей такая?
48 Masi4
 
16.05.14
12:31
Проблема не в Параметрах сеанса. Что-то другое мешает. С простыми правами я получаю отказ на изменение данных в процедуре "ПередЗаписью". С дополнением роли Администрирование  - не получаю отказа...
49 Masi4
 
16.05.14
12:43
Я нашёл (надеюсь) место проблемное:

ОбменДаннымиВызовСервера.ПроверитьКэшМеханизмаРегистрацииОбъектов ();

Здесь возникает первая ошибка и здесь я получаю отказ. Почему - не знаю...
50 Wobland
 
16.05.14
12:43
а ЖР знает?
51 Masi4
 
16.05.14
12:56
(50) Нет. ЖР знает только это:

{ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль(87)}: Ошибка при получении значения атрибута контекста (ДатаОбновленияПовторноИспользуемыхЗначенийМРО)
        Если ПараметрыСеанса.ДатаОбновленияПовторноИспользуемыхЗначенийМРО <> АктуальнаяДата Тогда
по причине:
Нарушение прав доступа!

Целых 5 раз.
52 Masi4
 
16.05.14
12:59
А вот когда выполнение сваливается в исключение как можно посмотреть описание ошибки кроме функции "ОписаниеОшибки ()"? Функция возвращает пусто...
53 Masi4
 
16.05.14
13:08
Я дал пользователю все права кроме "Полных" и "Административных"... и всё равно не получается.
54 Masi4
 
16.05.14
13:08
Плакать хочется... %-)
55 hhhh
 
16.05.14
13:15
но вообще у вас настроен обмен? Всё четко там? Он работает?
56 Masi4
 
16.05.14
13:20
(55) Прошу прощения, но я не совсем понял какой обмен... У нас только одна база, и задача стоит: создавать из внешней обработки товары и договора...
57 hhhh
 
16.05.14
13:25
(56) ну и? не видите, что у вас обмен данными? Если хотите чтобы бухгалтер обмены фигачил между базами, настройте ему обмен.
58 Masi4
 
16.05.14
13:28
(57) Ещё раз. У нас 1 база 1С. В этой базе нужно создать (не загружать, не обмениваться), просто создать по кнопке из внешней обработки договор или товар.
59 Masi4
 
16.05.14
13:31
Вопрос в другом. Почему некоторые элементы параметров сеанса (ПараметрыСеанса) доступны при обращении из внешней обработке, а другие нет? Как не вводя обработку в конфу позволить ей делать всё то, что может делать пользователь, под которым обработка запустилась?
60 Поpyчик-4
 
16.05.14
13:40
(0) УстановитьПривилегированныйРежим(Истина) в вашей обработке ещё не предлагали?
61 Masi4
 
16.05.14
13:44
(60) Вот здесь (9) и здесь (19) ...
62 singlych
 
16.05.14
13:47
УстановитьПривилегированныйРежим не будет работать в обработках, которые открываются через файл-открыть и в дополнительных с безопасным режимом, вроде. А следовательно, записать договор не судьба без полных прав. Попробуй поставь небезопасный.
63 Masi4
 
16.05.14
13:48
(62) Прошу прощение: поставить небезопасный что?
64 singlych
 
16.05.14
13:49
(63) режим. Ты же вроде дополнительную обработку пишешь?
65 Masi4
 
16.05.14
13:51
(64) {Форма.Форма.Форма(142)}: Ошибка при вызове метода контекста (УстановитьБезопасныйРежим)
    УстановитьБезопасныйРежим (Ложь);
по причине:
В данной процедуре/ функции не был установлен безопасный режим
66 Masi4
 
16.05.14
13:52
(64) Угу - дополнительную пишу...
67 singlych
 
16.05.14
13:58
(66) если ты будешь открывать ее через файл-открыть, он не установится никогда. устанавливай в СведенияОВнешнейОбработке() и регистрируй в базе.
68 Masi4
 
16.05.14
14:06
(67) Прошу не бить ногами, но как обработку зарегистрировать в базе?
69 Поpyчик-4
 
16.05.14
14:07
(68) Искать в гугле. Вопрос уже давно обсосан до дыр.
70 Masi4
 
16.05.14
14:42
(69) Не помогло...
71 Поpyчик-4
 
16.05.14
14:55
(70) Триста рублей. Вот пример http://files.mail.ru/CFFA42B0FB804C8FBAE9DC6849E43EC1
72 Masi4
 
16.05.14
14:56
Конкретизирую.

Функция СведенияОВнешнейОбработке() Экспорт
    РегистрационныеДанные = Новый Структура();
    РегистрационныеДанные.Вставить ("Наименование", "Установка");
    РегистрационныеДанные.Вставить ("БезопасныйРежим", Истина);
    РегистрационныеДанные.Вставить ("Версия", "v 1.4");
    РегистрационныеДанные.Вставить ("Информация", "v 1.0");
    РегистрационныеДанные.Вставить ("Вид", "ДополнительнаяОбработка");
    
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить ("Справочник.*");
    РегистрационныеДанные.Вставить ("Назначение", МассивНазначений);

    тз = Новый ТаблицаЗначений;
    тз.Колонки.Добавить("Идентификатор");
    тз.Колонки.Добавить("Использование");
    тз.Колонки.Добавить("Представление");

    НоваяСтрока = тз.Добавить();
    НоваяСтрока.Идентификатор = "ОткрытьОбработку";
    НоваяСтрока.Использование = "ОткрытиеФормы";
    НоваяСтрока.Представление = "Открыть";

    РегистрационныеДанные.Вставить("Команды", тз);

    Возврат РегистрационныеДанные;
КонецФункции


&НаСервере
Процедура Команда1НаСервере()
    //УстановитьБезопасныйРежим (Ложь);
    
    УстановитьПривилегированныйРежим (Истина);
    
    СпрТовары = Справочники.Номенклатура.НайтиПоКоду ("0085991").ПолучитьОбъект ();
    СпрТовары.Записать ();
КонецПроцедуры


Подключил к базе. Запустил. Та же ошибка.
73 Masi4
 
16.05.14
14:57
(71) Это вы мне предлагаете за 300 рублей решить мою проблему? :) Или за 300 рублей вы мне пароль для файла дадите? :)
74 singlych
 
16.05.14
15:02
(73) эмм.. кому я что говорил..
убери уже УстановитьПривилегированныйРежим и сделай РегистрационныеДанные.Вставить ("БезопасныйРежим", Ложь);
75 Masi4
 
16.05.14
15:15
(74) Тестовая обработка отработала. Сейчас перенесу всё в мегамодуль и проверю.
76 Masi4
 
16.05.14
15:28
Получилось! Спасибо всем за помощь!