функц опции, права и доступ

  1. 10 г. назад

    Господа, поздравьте я начал сходить с ума с этой 8.2

    есть в базе БП 3.0 польз со стандартной ролью Бухгалтер. проверяю все под ним
    он может создавать ручные операции. создаются и записываются без проблем.
    если же их создавать программно, под этим пользователем, из внешней обработки:

    &НаКлиенте
    Процедура СоздатьОперацию(Команда)
    	СоздатьОперациюНаСервере();
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Процедура СоздатьОперациюНаСервере()
    	Док = документы.ОперацияБух.СоздатьДокумент();
    	Док.Дата = текущаяДата();
    	Док.Записать();
    КонецПроцедуры

    то вываливается с ошибкой доступа чтения какой-то служебной константы. константа эта - в функциональных опциях, которые проверяются при записи документа. права на эту константу - только у полных прав.

    при том, при интерактивном создании документа - эта ФО и константа прекрасно считываются, при программном - валится на ошибке доступа на чтение. это какой-то [...]

  2. Отладчег украли?

    Ответы: (2)
  3. (1) ачо отладчег?
    при интерактивном создании бухоперации, грит что

    ПолучитьФункциональнуюОпцию("АктуальнаяДатаОбновленияПовторноИспользуемыхЗначенийМРО") - значение Дата, все дела

    при программном - не могу грит прочитать

  4. разобралсо

  5. + кому интересно - ставьте внешней обработке небезопасный режим.
    тогда она сможет выполнять все привилегированные модули

    Ответы: (5)
  6. (4) С небезопасным сексом режимом тоже не все так просто. Ставлю режим при запуске внешней обработки программно (из справочника внешних отчетов, который самопальный), а он не ставится. Если запускать из меню, то работает.

    Ответы: (6)
  7. (5) это явно прописано в документации

    Ответы: (8)
  8. (5) подозреваю, что действие

    tsr Ставлю режим при запуске внешней обработки программно

    нужно также выполнять в привилигированном режиме

  9. (6) Походу пропустил. Где такое прочитать?

    Ответы: (9)
  10. (8) где-то в ЖКК. не помню номер страницы

    Ответы: (10)
  11. (9) Я вот так юзаю

    &НаКлиенте
    Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    	Если Не Элемент.ТекущиеДанные.ЭтоГруппа Тогда
    		СтандартнаяОбработка = Ложь;
    		ФормаВнешнегоОтчета=ОткрытьФормуОтчета(Элемент.ТекущиеДанные.Ссылка);
    		Если ЗначениеЗаполнено(ФормаВнешнегоОтчета) Тогда
    			ОткрытьФорму(ФормаВнешнегоОтчета.Расширение+ ФормаВнешнегоОтчета.ВыбФормаОтчета +".Форма");
    		КонецЕсли; 		
    	КонецЕсли;
    КонецПроцедуры
    
    &НаСервере
    Функция ОткрытьФормуОтчета(стр)
    	Расширение=Прав(стр.ИсточникОтчета,3);
    	ИмяФайла = Строка(ПараметрыСеанса.ТекущийПользователь)+"."+Расширение;
    	ВнешнийОтчет = стр.Хранилище.Получить();
    	АдресВременногоХранилища=ПоместитьВоВременноеХранилище(ВнешнийОтчет);
    	
    	Если ВнешнийОтчет=Неопределено Тогда
    		Сообщить("Файл не найден в базе");			
    		Возврат Неопределено;
    	КонецЕсли; 
    	Если Расширение="mxl" ИЛИ Расширение="mxl" Тогда			
    		Если НЕ ЗначениеЗаполнено(ИмяФайла) Тогда
    			ИмяФайла="tmp_mxl.mxl";
    		КонецЕсли;
    		ФайлВнешнегоОтчета=КаталогВременныхФайлов()+ИмяФайла;
    		ВнешнийОтчет.Записать(ФайлВнешнегоОтчета);
    		ТаблДокумент = Новый ТабличныйДокумент();
    		ТаблДокумент.Прочитать(ФайлВнешнегоОтчета);
    		ТаблДокумент.Показать(ФайлВнешнегоОтчета, ФайлВнешнегоОтчета);
    		Возврат Неопределено;
    	ИначеЕсли Расширение = "txt" Тогда
    		Если НЕ ЗначениеЗаполнено(ИмяФайла) Тогда
    			ИмяФайла="tmp_txt.txt";
    		КонецЕсли;
    		ФайлВнешнегоОтчета=КаталогВременныхФайлов()+ИмяФайла;
    		ВнешнийОтчет.Записать(ФайлВнешнегоОтчета);
    		ТекстДокумент = Новый ТекстовыйДокумент();
    		ТекстДокумент.Прочитать(ФайлВнешнегоОтчета);
    		ТекстДокумент.Показать(ФайлВнешнегоОтчета, ФайлВнешнегоОтчета);
    		Возврат Неопределено;
    	Иначе
    		Если Расширение = "epf" Тогда
    			ВыбФормаОтчета=Новый Структура("Расширение,ВыбФормаОтчета","ВнешняяОбработка.",ВнешниеОбработки.Подключить(АдресВременногоХранилища),,стр.БезопасныйРежим);
    		ИначеЕсли Расширение = "erf" Тогда							
    			ВыбФормаОтчета=Новый Структура("Расширение,ВыбФормаОтчета","ВнешнийОтчет.",ВнешниеОтчеты.Подключить(АдресВременногоХранилища),,стр.БезопасныйРежим);
    		КонецЕсли;
    		Возврат ВыбФормаОтчета;
    	КонецЕсли;
    	Возврат Неопределено;	
    КонецФункции
    
    
    Ответы: (11)
  12. (10) БезопасныйРежим =Истина; не отрабатывает.
    В чем косяк?

  13. Обратите внимание на третий параметр метода Подключить() (с помощью этого метода подключается ваша обработка). Третьим параметром задается значение параметра "Безопасный режим". Установите этому параметру значение "Ложь". Теперь вашей обработке будут доступны все возможности встроенного языка. А ты его куда запихнул?

    ВыбФормаОтчета=Новый Структура("Расширение,ВыбФормаОтчета","ВнешняяОбработка.",ВнешниеОбработки.Подключить(АдресВременногоХранилища),,стр.БезопасныйРежим);

    Скобочку перенеси.

    Ответы: (13) (14)
  14. (12) ВнешниеОтчеты.Подключить(АдресВременногоХранилища),,стр.БезопасныйРежим)
    стр.БезопасныйРежим либо Истина, либо Ложь. Монопенисно

  15. (12) Пардон, не из той конфигурации скопипастил. Это УПП, в БП 3.0 сейчас гляну

  16. Да со скобкой явно нелады

или зарегистрируйтесь чтобы ответить!