Имя: Пароль:
1C
1С v8
В бухгалтерии 3.0 не получается записать документы внешней обработкой
0 Леонид_ПС
 
25.06.13
08:16
Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.21.14)

Для загрузки кассовых документов написана внешняя обработка. Под пользователем с полными правами выполняется нормально, а под пользователем с включенным профилем "Главный бухгалтер" + профиль, в котором включено использование внешних обработок, права ко всем организациям, выдается ошибка

Вот это выдается пользователю.
============================
Проблема Приходный кассовый ордер  от 03.06.2013 8:03:17 {ВнешняяОбработка.ДополнительныеВозможностиБухТЭСК_Управляемая.МодульОбъекта(104)}: Ошибка при вызове метода контекста (Записать): Ошибка при выполнении обработчика - 'ПередЗаписью': {ОбщийМодуль.ОбновлениеИнформационнойБазы.Модуль(822)}: Ошибка при вызове метода контекста (Выполнить): Недостаточно прав для работы с таблицей "РегистрСведений.ВерсииПодсистем"


Вот это пишется в журнал
==========================
{ОбщийМодуль.ОбменДаннымиВызовСервера.Модуль(95)}: Ошибка при вызове метода контекста (ПолучитьФункциональнуюОпцию)
       АктуальнаяДата = ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО");
по причине:
Ошибка при получении значения функциональной опции "АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО".
Нет доступа: объект: 'Константа.ДатаОбновленияПовторноИспользуемыхЗначенийМРО'
Таблица: 'Const10560', SDBL-команда: 'SELECT'.

Часть кода внешней обработки

// это в модуле формы
&НаСервере
Процедура СоздатьДокументПоСтрокеТаблицы(стрД)
   докПКООбъект=Документы.ПриходныйКассовыйОрдер.СоздатьДокумент();
   докПКООбъект.Дата=стрД.ДатаПлатежа;
   докПКООбъект.Организация=ОрганизацияДокумента;
   докПКООбъект.СчетКасса=?(стрД.Агентский,ПланыСчетов.Хозрасчетный.КассаПлатежногоАгента,ПланыСчетов.Хозрасчетный.КассаОрганизации);
   докПКООбъект.СтавкаНДС=Перечисления.СтавкиНДС.НДС18;
   стРасшифровка=докПКООбъект.РасшифровкаПлатежа.Добавить();
   стРасшифровка.ДоговорКонтрагента=стрД.Договор;
   Если стрД.КорСчет=ПланыСчетов.Хозрасчетный.РасчетыСПокупателями    // 62.1
       или стрД.КорСчет=ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным    // 62.2
       или стрД.КорСчет=ПланыСчетов.Хозрасчетный.РасчетыСПрочимиПоставщикамиИПодрядчиками    // 76.5
       Тогда
       докПКООбъект.ВидОперации=Перечисления.ВидыОперацийПКО.ОплатаПокупателя;
       стРасшифровка.СуммаПлатежа=стрД.Сумма;
       стРасшифровка.СуммаВзаиморасчетов=стрД.Сумма;
       стРасшифровка.СтавкаНДС=докПКООбъект.СтавкаНДС;
       стРасшифровка.СуммаНДС=стрД.Сумма*18/100;    // пусть пока так, если понадобится другой, сделаю в настройках
       стРасшифровка.СтатьяДвиженияДенежныхСредств=стрД.ДДС;
       Если стрД.КорСчет=ПланыСчетов.Хозрасчетный.РасчетыСПокупателями    // 62.1
           или стрД.КорСчет=ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным    // 62.2
           Тогда
           стРасшифровка.СчетУчетаРасчетовПоАвансам=ПланыСчетов.Хозрасчетный.РасчетыПоАвансамПолученным;    // 62.2
           стРасшифровка.СчетУчетаРасчетовСКонтрагентом=ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;    // 62.1
       Иначе
           стРасшифровка.СчетУчетаРасчетовПоАвансам=стрД.КорСчет;
           стРасшифровка.СчетУчетаРасчетовСКонтрагентом=стрД.КорСчет;
       КонецЕсли;
       стРасшифровка.СпособПогашенияЗадолженности=Перечисления.СпособыПогашенияЗадолженности.Автоматически;
   Иначе
       докПКООбъект.ВидОперации=Перечисления.ВидыОперацийПКО.ПрочийПриход;
       докПКООбъект.СчетУчетаРасчетовСКонтрагентом=стрД.КорСчет;
       докПКООбъект.СубконтоКт1=стрД.СубконтоКт1;
       докПКООбъект.СубконтоКт2=стрД.СубконтоКт2;
       докПКООбъект.СубконтоКт3=стрД.СубконтоКт3;
   КонецЕсли;
   докПКООбъект.Контрагент=стрД.Контрагент;
   докПКООбъект.ДоговорКонтрагента=стрД.Договор;
   Попытка
       докПКООбъект.ВалютаДокумента=стрД.Договор.ВалютаВзаиморасчетов;
   Исключение
   КонецПопытки;
   Если не ЗначениеЗаполнено(докПКООбъект.ВалютаДокумента) Тогда
       докПКООбъект.ВалютаДокумента=Константы.ВалютаРегламентированногоУчета.Получить();
   КонецЕсли;
   докПКООбъект.СуммаДокумента=стрД.Сумма;
   докПКООбъект.ПринятоОт=стрД.ПринятоОт;
   докПКООбъект.Основание=стрД.Основание;
   докПКООбъект.Комментарий=стрД.Комментарий;
   докПКООбъект.СтатьяДвиженияДенежныхСредств=стрД.ДДС;
   докПКООбъект.ПодразделениеОрганизации=стрД.Касса;
   стРасшифровка.КратностьВзаиморасчетов=1;
   стРасшифровка.КурсВзаиморасчетов=1;
   стРасшифровка.СтатьяДвиженияДенежныхСредств=стрД.ДДС;    // всегда в проводку берется здесь
   ОбработкаОбъект=РеквизитФормыВЗначение("Объект");
   ОбработкаОбъект.ЗаписатьИПровестиДокумент(докПКООбъект);    
КонецПроцедуры

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

Интерактивно этот пользователь документы создавать может.
1 IamAlexy
 
25.06.13
08:25
и ? сам же написал.


Недостаточно прав для работы с таблицей "РегистрСведений.ВерсииПодсистем"

исправь права и грузи
2 el-gamberro
 
25.06.13
08:26
(1) ЛОЛ :)
3 НаборДанных
 
25.06.13
08:27
Лол в том, что буху придется давать права администратора.
4 el-gamberro
 
25.06.13
08:27
Я использую свой спец модуль для записи объекта.
Запись происходит при установленном привилегированном режиме.
5 el-gamberro
 
25.06.13
08:28
(3) Не рекомендуются. Хотя я все таки дал. ибо система прав не очень разумна.
6 НаборДанных
 
25.06.13
08:30
(5)Тут интересно, а ручками пользователь с профилем Главный бухгалтер тоже не может провести ПКО что ли?
7 el-gamberro
 
25.06.13
08:46
(6) Непонятный вопрос. Там вывоз перед записью, а не при проведении доков.
Если мне не изменяет память вот в чем косяк: Из формы внешней обработины не видны параметры сеанса и соот-но на куче всякой хрени обработки падают.
8 Леонид_ПС
 
25.06.13
09:01
Я в первом сообщении писал:
Интерактивно этот пользователь документы создавать может.

Похоже что (7) прав.
Поищу в этом направлении.
А вообще там в процедурах, где выпадает ошибка стоит
УстановитьПривилегированныйРежим(Истина)

но оно не срабатывает, хотя модули выполняются на сервере в тонком клиенте.
9 Зойч
 
25.06.13
09:12
(8) во внешней так нельзя
10 el-gamberro
 
25.06.13
09:16
(8)
Ну проверь что безопасный режим ложь, плюс я все таки пишу объект в отдельной общем модуле.
Причем функция универсальная. она просто делает запись объекта и все, ес-но в привилегированном режиме
11 Леонид_ПС
 
25.06.13
09:24
Процедуры, о которых я писал в (8) - родные 1С-овские.
Привилегированный режим почему-то не устанавливается.
В конфигурацию вмешиваться - табу, только внешними обработками.
12 el-gamberro
 
25.06.13
10:27
(11) Почему табу? Никаких проблем с обновлением, ведь конфа на поддержке. а общий модуль он твой, отдельно от поставки.
13 Леонид_ПС
 
25.06.13
10:50
Сейчас на тестовой БД проверил. Не изменял ничего, просто включил обработку в конфигурацию и дал на нее права. Все работает.
Похоже, что когда серверные процедуры/функции вызываются из внешней обработки, тогда не работает установка привилегированного режима. То ли ошибка, то ли так задумано.
14 acsent
 
25.06.13
10:51
(13) я же тебе в еще в (9) написал