|
|||
Fenomen
27.04.12 — 17:10 |
Добрый вечер, пытаюсь выгрузить в Эксель 2010, но при подключении пишет ошибку. СтрокаПодключения = » |Provider=Microsoft.ACE.OLEDB.12.0; |Data Source=» + ПутьКФайлам + «; |Extended Properties=»»Excel 12.0;HDR=NO;IMEX=1;»»;»; Catalog = Новый COMОбъект(«ADOX.Catalog»); Попытка Catalog.ActiveConnection = СтрокаПодключения; Исключение Сообщить(«Ошибка подключения: » + ОписаниеОшибки()); КонецПопытки; Пишет ошибку «Ошибка при установке значения атрибута контекста (ActiveConnection): Произошла исключительная ситуация (ADOX.Catalog): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.» Поставил http://www.microsoft.com/en-us/download/details.aspx?id=13255 , но ничего не изменилось. Как узнать какой поставщик установлен? (ОС Win 7 64) |
||
Fragster
1 — 27.04.12 — 17:15 |
ActiveConnection — разве должен быть типа строка а не чем-нибудь типа ADODB/Connection? |
||
Ахиллес
2 — 27.04.12 — 17:18 |
глянь сюда http://infostart.ru/public/65045/ |
||
КМ155
3 — 27.04.12 — 17:19 |
(0) найди 10 отличий: MyCon = Новый COMОбъект («ADODB.Connection»); MyCon.Open («Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:1.xls;Extended Properties=»»Excel 8.0;HDR=No;IMEX=1″»»); MyCat=Новый COMОбъект («ADOX.Catalog»); MyCat.ActiveConnection = MyCon; |
||
Fenomen
4 — 27.04.12 — 17:24 |
С такой строкой у меня всё ОК. Provider=Microsoft.Jet.OLEDB.4.0;Data Source=»+ПутьКФайлам+»;Extended Properties=»»Excel 8.0;HDR=No;IMEX=1;»»;»; Но вот Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» + ПутьКФайлам + «;Extended Properties=»»Excel 12.0;HDR=NO;IMEX=1;»»;»; Отличается Excel 8.0, а мне нужно Excel 12.0. |
||
Fragster
5 — 27.04.12 — 17:27 |
(4) -> (1) !!! |
||
ll13
6 — 27.04.12 — 17:28 |
СтрокаПодключения = «Provider=Microsoft.ACE.OLEDB.12.0; |Data Source=» + ИмяФайлаЭксель + «; |Extended Properties=»»Excel 12.0 Xml;HDR=» + ?(ЧитатьЗаголовок,»Yes»,»No») + «;IMEX=1″»;»; |
||
Ахиллес
7 — 27.04.12 — 17:30 |
В закладочки положи себе http://www.connectionstrings.com/excel#p84 |
||
Fenomen
8 — 28.04.12 — 11:14 |
ll13, Ахиллес. Я не понимаю, чем строка пожключения (0) отличается от (6) и (7). КМ155, Делаю Connection = Новый COMОбъект(«ADODB.Connection»); Connection.Open(«Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» + ПутьКФайлам + «;Extended Properties=»»Excel 12.0 Xml;HDR=NO;IMEX=1;»»;»); Пишет ошибку » Ошибка при вызове метода контекста (Open) Connection.Open(«Provider=Microsoft.ACE.OLEDB.12.0;Data Source=» + ПутьКФайлам + «;Extended Properties=»»Excel 12.0 Xml;HDR=NO;IMEX=1;»»;»); по причине: Произошла исключительная ситуация (ADODB.Connection): Не удается найти указанный поставщик. Вероятно, он установлен неправильно.» Что еще ему не нравится? Не могу понять. |
||
Fragster
9 — 28.04.12 — 11:39 |
короче, создаешь пустой файл с расширением .udl, открываешь его двойным кликом, настраиваешь как тебе надо, проверяешь — всё ок. потом открываешь блокнотом и смотришь на строку. |
||
Fenomen
10 — 28.04.12 — 15:21 |
Проблема решилась установкой |
||
Fenomen 11 — 28.04.12 — 15:24 |
Проблема решилась установкой на мою Win 7 x64 провайдера http://www.microsoft.com/download/en/details.aspx?id=23734 , а не как я ставил http://www.microsoft.com/en-us/download/details.aspx?id=13255. |
TurboConf — расширение возможностей Конфигуратора 1С |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Установка соединения:
DRIVER = MYSQL ODBC 5.1 Driver; SERVER = localhost; DataBase = *****; UID = user; PWD = ****
Всё работало и подключалось, когда использовался MS Server 2003. После переноса на MS Server 2008 стала выдаваться следующая ошибка:
{ОбщийМодуль.Petrol.Модуль(7798)}: Ошибка при установке значения
атрибута контекста (ActiveConnection) Command.ActiveConnection =
Connection; по причине: Произошла исключительная ситуация
(ADODB.Command): Для требуемой операции необходим объект OLE DB
Session, не поддерживаемый текущим поставщиком.
В чём может быть проблема?
0xdb
51.2k194 золотых знака56 серебряных знаков227 бронзовых знаков
задан 26 окт 2017 в 20:51
Странно, что с драйвером от MySQL работало. У меня, в зависимости от версии MSSQL отрабатывали следующие строки:
DRIVER = {SQL Server}; SERVER = localhost; DataBase = *****; UID = user; PWD = ****
Provider=SQLOLEDB.1; User ID= user; Pwd=********; Data Source=localhost; Initial Catalog= *****
Попробуйте подобрать подходящую строку подключения на https://www.connectionstrings.com/sql-server-2008/
ответ дан 27 окт 2017 в 6:22
mickey.devmickey.dev
5142 серебряных знака5 бронзовых знаков
ПРАКТИЧЕСКОЕ ПОСОБИЕ РАЗРАБОТЧИКА: Метод «MS ADODB» (ADODB.Connection).
Поддерживаемые типы: *.xls,*.xlsx.
В данной статье приведен функционал, с помощью которого в обработке
«Импорт из EXCEL и др.источников (xls,xlsx,ods,sxc,dbf,mxl,csv,sql) в 1С»: //infostart.ru/public/120961
производится считывание данных из файлов табличного типа *xls, *.xlsx.
Методы загрузки из внешнего источника:
— Метод «MS ADO» (Чтение файлов xls, xlsx средствами Microsoft ADO): //infostart.ru/public/163640/
— Метод «MS EXCEL» (Чтение файлов xls, xlsx с картинками средствами Microsoft Office): //infostart.ru/public/163641/
— Метод «LO CALC» (Чтение файлов xls, xlsx, ods, sxc с картинками средствами LibreOffice): //infostart.ru/public/163642/
— Метод «NativeXLSX» (Чтение файлов xlsx с картинками средствами 1С. ПостроительDOM): //infostart.ru/public/300092/
— Метод «NativeXLSX». Предыдущий вариант (Чтение файлов xlsx средствами 1С. ЧтениеXML)://infostart.ru/public/225624/
— Метод «Excel1C» (Загрузка на платформе 8.3.6 с картинками. Чтение файлов xls, xlsx, ods): //infostart.ru/public/341855/
— Список листов файла: //infostart.ru/public/163724/
Публикаций на тему загрузки из EXCEL — множество, но
«
— Вам билетёр нужен?
— Был нужен, да уже взяли.
— Может и я на что сгожусь?
— Может и сгодишься, если скалиться не будешь …
«
«НЕУЛОВИМЫЕ МСТИТЕЛИ» (1966).
// Метод "Microsoft ADODB"/
//
// Параметры:
// ФайлEXCEL - Полное имя файла (путь к файлу с именем файла и расширением).
// ИмяЛиста - Имя выбранного листа файла EXCEL.
// СтрокаЗаголовка (по умолчанию = 1) - Номер строки EXCEL, в которой расположены заголовки колонок.
// Не используется, т.к. в СтрокеСоединения указано HDR=YES, а не HDR=NO.
/ / В обработке 1-я строка анализируется для сопоставления колонок EXCEL с реквизитами 1С (справочники, докуметны, регистры).
// НачСтрока (по-умолчанию = 0) - Номер начальной строки, начиная с которой считываются данные из EXCEL.
// КонСтрока (по-умолчанию = 0) - Номер конечной строки, которой заканчиваются считываемые данные из EXCEL.
// Если НачСтрока=0 и КонСтрока=0, то считывается вся таблица, находящаяся на листе EXCEL.
// КолвоСтрокExcel - Количество строк на листе "ИмяЛиста" EXCEL. Возвращается в вызываемую процедуру.
// ПодключениеADODB - тип драйвера ADODB для подключения к EXCEL.
//
// Возвращаемые значения:
// ТаблицаРезультат - Результат считывания с листа "ИмяЛиста" EXCEL.
//
Функция ЗагрузитьМетодом_MSADODB(Знач ФайлEXCEL, Знач ИмяЛиста, Знач СтрокаЗаголовка = 1, НачСтрока = 0, КонСтрока = 0, КолвоСтрокExcel,
Знач ПодключениеADODB = "MicrosoftJetOLEDB40") Экспорт
Перем СonnectionString, ADODBConnection, ADODBRecordset, ТекстЗапроса;
Перем КолвоКолонокExcel, Поле, Колонка, ИмяКолонки;
Перем НоваяСтрока, НомерСтроки;
Перем ТаблицаРезультат;// Нумерация MS ADODB начинается с 1.
// Переменная "СтрокаЗаголовка", не используется, т.к. HDR=YES, а не HDR=NO.
// HDR=YES:
// 1. Считывание заголовков колонок с 1-ой строки.
// 2. Считываемые данные со 2-ой и последующих строк типизированы. Для варианта HDR=NO: считываемые данные - строка.// Строка соединения - определение драйвера, который будет использован для подключения к файлу EXCEL.
Если ПодключениеADODB = "MicrosoftACEOLEDB12" Тогда// ACE.OLEDB.12.0 - Для использования данного подключения необходимо дополнительное ПО:
// Microsoft Access Database Engine 2010 Redistributable 32/64 bit.
СonnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""Excel 12.0;HDR=YES;IMEX=1;""";// Еще один вариант.
//СтрокаСоединения = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + СокрЛП(ФайлEXCEL) + ";";Иначе
// Jet.OLEDB.4.0 - Стандартное подключение, как правило, не требующее установки дополнительного ПО.
// Рекомендуется установить последний Service Pack Windows.
СonnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + СокрЛП(ФайлEXCEL) + ";Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""";// Еще один вариант.
//СтрокаСоединения = "Driver={Microsoft Excel Driver (*.xls)};Dbq=" + СокрЛП(ФайлEXCEL) + ";";КонецЕсли;
Попытка
// Инициализация основного объекта ADODB.Connection. Открытие соединения.
ADODBConnection = Новый COMОбъект("ADODB.Connection");
ADODBConnection.ConnectionString = СonnectionString;
ADODBConnection.Open();
// Импирически определенный параметр для правильного определения количества строк листа.
ADODBConnection.CursorLocation = 3; // По-умолчанию 2.
Исключение
Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений.
КонецПопытки;ТекстЗапроса = "SELECT * FROM [" + ИмяЛиста + "$]";
// Создание Recordset. Дочерний объект ADODBConnection. Набор записей по запросу.
Попытка
ADODBRecordset = Новый COMОбъект("ADODB.Recordset");
ADODBRecordset.Open(ТекстЗапроса, ADODBConnection);// Проверка заполненности листа.
Если (ADODBRecordset.EOF ИЛИ ADODBRecordset.BOF) Тогда
КолвоСтрокExcel = 0;
Сообщить(НСтр("ru = '" + ИмяЛиста + ": не содержит данных.'"), СтатусСообщения.Внимание);// Завершение работы.
// Закрытие Объектов.
ADODBRecordset.Close();
ADODBConnection.Close();
ADODBRecordset = Неопределено;
ADODBConnection = Неопределено;Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений.
КонецЕсли;// Импирически определенные параметры для правильного определения количества строк листа.
ADODBRecordset.AbsolutePage = 1;
ADODBRecordset.AbsolutePosition = 1;
Исключение
Сообщить(НСтр("ru = '"+ОписаниеОшибки()+"'"), СтатусСообщения.Внимание);
Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений.
КонецПопытки;// Параметр, возвращаемый в вызывающую процедуру.
КолвоСтрокExcel = ADODBRecordset.RecordCount + 1; // (+1) - учет Строки-Заголовока, которая "съедается".
КолвоКолонокExcel = ADODBRecordset.Fields.Count;// Проверка заполненности листа.
Тогда
Если КолвоСтрокExcel <= 2
КолвоСтрокExcel = 0;
Сообщить(НСтр("ru = '" + ИмяЛиста + ": не содержит данных.'"), СтатусСообщения.Внимание);
// Завершение работы.
// Закрытие Объектов.
ADODBRecordset.Close();
ADODBConnection.Close();
ADODBRecordset = Неопределено;
ADODBConnection = Неопределено;
Возврат Новый ТаблицаЗначений; // В случае ошибки возвращаем пустую таблицу значений.
КонецЕсли;
// Создание результирующей таблицы, в которую будут записываться считанные из EXCEL данные.
ТаблицаРезультат = Новый ТаблицаЗначений;
// Формирование колонок результирующей таблицы.
// "НомерСтроки" - для наглядности и удобства.
// В зависимости от разрабатываемой обработки.
// "Сопоставлено" - может быть другим.
// Здесь же могут быть добавлены другие колонки, не формируемые из содержимого файла EXCEL.
ТаблицаРезультат.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"), "№", 4);
ТаблицаРезультат.Колонки.Добавить("Сопоставлено", Новый ОписаниеТипов("Булево"), "Сопоставлено", 1);
Для ит = 1 ПО КолвоКолонокExcel Цикл
Поле = ADODBRecordset.Fields.Item(ит - 1);
ИмяКолонки = "К_" + ит;
Колонка = ТаблицаРезультат.Колонки.Добавить(ИмяКолонки, , СокрЛП(СтрЗаменить(Поле.Name, "#", ".")));
// Замена "#" на ".", т.к. при считывании ADODB "." в имени колонки заменяется на "#".
КонецЦикла;
// ТаблицаРезультат: 1-я строка - Строка-Заголовок.
// Добавление этой строки обусловлено исключительно из соображений идентичности содержимого файла EXCEL и ТаблицыЗначений,
// выводимой на форме Обработки, и дальнейшей обработки строки заголовка
// с целью сопоставления колонок EXCEL и реквизитов 1С: для Справочников, ПВХ, Регистров, Документов.
// Если в Вашей обработке в результирующей таблице в качестве 1-ой строки не нужна Строка-Заголовок, то
// следует закомментировать следующий цикл:
НоваяСтрока = ТаблицаРезультат.Добавить();
НоваяСтрока.НомерСтроки = 1;
Для ит = 1 ПО КолвоКолонокExcel Цикл
ИмяКолонки = "К_" + ит;
Колонка = ТаблицаРезультат.Колонки.Найти(ИмяКолонки);
НоваяСтрока[ИмяКолонки] = Колонка.Заголовок;
КонецЦикла;
// ТаблицаРезультат: Формирование строк по указанному диапазону: НачСтрока - КонСтрока.
НомерСтроки = 1;
Пока ADODBRecordset.EOF() = 0 Цикл
НомерСтроки = НомерСтроки + 1;
Если НомерСтроки < НачСтрока Тогда // Номер строки вне диапазона считываемых строк.
ADODBRecordset.MoveNext(); // Следующая строка.
Продолжить;
КонецЕсли;
Если КонСтрока > 0 И НомерСтроки > КонСтрока Тогда // Номер строки вне диапазона считываемых строк.
Прервать;
КонецЕсли;
НоваяСтрока = ТаблицаРезультат.Добавить();
НоваяСтрока.НомерСтроки = НомерСтроки;
Для ит = 1 ПО КолвоКолонокExcel Цикл
Поле = ADODBRecordset.Fields.Item(ит - 1);
Если Поле.ActualSize = 0 Тогда // Пустое поле EXCEL.
Продолжить;
КонецЕсли;
ЗначениеЯчейки = Поле.Value; // Учитывая параметр HDR=YES в строке соединения, данные считываются в соответствии с их типом.
ИмяКолонки = "К_" + ит;
НоваяСтрока[ИмяКолонки] = ЗначениеЯчейки;
// Используется при формировании таблицы на форме обработки.
ШиринаКолонки = ТаблицаРезультат.Колонки[ИмяКолонки].Ширина;
ДлинаСтроки = СтрДлина(СокрЛП(ЗначениеЯчейки));
ТаблицаРезультат.Колонки[ИмяКолонки].Ширина = ?(ШиринаКолонки < ДлинаСтроки, ДлинаСтроки, ШиринаКолонки);
КонецЦикла;
ADODBRecordset.MoveNext(); // Следующая строка.
КонецЦикла;
//УдалитьКолонкиСНулевойШириной(ТаблицаРезультат);
// Завершение работы.
// Закрытие Объектов.
ADODBRecordset.Close();
ADODBConnection.Close();
ADODBRecordset = Неопределено;
ADODBConnection = Неопределено;
Возврат ТаблицаРезультат;
КонецФункции
Преимущества:
1.«В общем случае» метод «Microsoft ADODB» работает и в файловом и в клиент-серверном варианте.
2. Самый быстрый из трех рассматриваемых.
Особенности и Ограничения:
1.Для функционирования метода «Microsoft ADODB» необходимо:
Драйвер подключения Provider=Microsoft.Jet.OLEDB.4.0:
- Установленный Microsoft MDAC, как правило специальная установка не требуется, достаточно последнего Service Pack-а операционной системы..
Microsoft MDAC 2.8 SP1 10.05.2005: http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=5793Драйвер подключения Provider=Microsoft.ACE.OLEDB.12.0:
- Установленный Microsoft Access Database Engine 2010 Redistributable (16/12/2010) 32 и 64 - разрядные версии:
Microsoft ADE 2010 16/12/2010: http://www.microsoft.com/en-us/download/details.aspx?id=13255
2. 1-я строка файла EXCEL - строка, содержащая заголовки колонок. Можно изменить, изменив HDR=YES на HDR=NO + некоторые изменения в функции.
С уважением к сообществу МА!
При запуске обработки в режиме предприятие на компе где работает агент сервера срабатывает без ошибок. При работе кода в фоновом задании выходит ошибка: {ВнешняяОбработка.ЗагрузкаДанныхОПосещенияхМагазиновRSTAT.МодульОбъекта}: Ошибка при установке значения атрибута контекста (ActiveConnection): Произошла исключительная ситуация (ADODB.Command): Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом. где собака зарыта?
пользователю под которым работает сервер прав дать
Поставить доменную учетку для службы 1С
агент запукается от имени системной учетной записи, насколько я знаю у этой учётки и так полные права
2 окей, тогда не давай…
завтра с утра попробую от имени админа домена
нет… сабжу не хватает прав «пользователь DCOM»… по этому я обычно под сервер 1с создаю отдельную учетку и ее уже терзаю… варианты запуска под админом или изменение правт системной довольно нехорошие….
Тэги: 1С 8
Комментарии доступны только авторизированным пользователям
1С:Предприятие 8.2 (8.2.17.169)
При запуске обработки в режиме предприятие на компе где работает агент сервера срабатывает без ошибок.
При работе кода в фоновом задании выходит ошибка:
{ВнешняяОбработка.ЗагрузкаДанныхОПосещенияхМагазиновRSTAT.МодульОбъекта(155)}: Ошибка при установке значения атрибута контекста (ActiveConnection): Произошла исключительная ситуация (ADODB.Command): Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.
СтрокаСоединения = «Provider=SQLOLEDB;Persist Security Info=True;Password=» + SQL_password + «;User ID=» + SQL_Login + «;Extended Properties=»»Connection Timeout=10″»;»;
СтрокаСоединения = СтрокаСоединения + «Initial Catalog=» + SQLDB + «;»;
СтрокаСоединения = СтрокаСоединения + «Data Source=» + SQLServer;
Соединение = Новый COMОбъект(«ADODB.Connection»);
Соединение.ConnectionTimeOut = 10;
Соединение.CursorLocation = 3;
Соединение.CommandTimeOut = 0; //Ожидание завершения команды 0 — бесконечно//10000;
Соединение.Open(СтрокаСоединения);
Команда = Новый COMОбъект(«ADODB.Command»);
Команда.CommandType =1;
ЗаписьЖурналаРегистрации(«ЗагрузкаДанныхОПосещенияхМагазиновRSTAT»,УровеньЖурналаРегистрации.Информация,,,ИмяКомпьютера()+ » «+ Команда.CommandType);
Команда.ActiveConnection=Соединение;
//{ВнешняяОбработка.ЗагрузкаДанныхОПосещенияхМагазиновRSTAT.МодульОбъекта(155)}:
//Ошибка при установке значения атрибута контекста (ActiveConnection): Произошла исключительная ситуация (ADODB.Command):
//Аргументы имеют неверный тип, выходят за пределы допустимого диапазона или вступают в конфликт друг с другом.
Результат = Команда;
где собака зарыта?
Установка соединения:
DRIVER = MYSQL ODBC 5.1 Driver; SERVER = localhost; DataBase = *****; UID = user; PWD = ****
Всё работало и подключалось, когда использовался MS Server 2003. После переноса на MS Server 2008 стала выдаваться следующая ошибка:
{ОбщийМодуль.Petrol.Модуль(7798)}: Ошибка при установке значения
атрибута контекста (ActiveConnection) Command.ActiveConnection =
Connection; по причине: Произошла исключительная ситуация
(ADODB.Command): Для требуемой операции необходим объект OLE DB
Session, не поддерживаемый текущим поставщиком.
В чём может быть проблема?
0xdb
51.5k195 золотых знаков56 серебряных знаков233 бронзовых знака
задан 26 окт 2017 в 20:51
Странно, что с драйвером от MySQL работало. У меня, в зависимости от версии MSSQL отрабатывали следующие строки:
DRIVER = {SQL Server}; SERVER = localhost; DataBase = *****; UID = user; PWD = ****
Provider=SQLOLEDB.1; User ID= user; Pwd=********; Data Source=localhost; Initial Catalog= *****
Попробуйте подобрать подходящую строку подключения на https://www.connectionstrings.com/sql-server-2008/
ответ дан 27 окт 2017 в 6:22
mickey.devmickey.dev
5142 серебряных знака5 бронзовых знаков
Установка соединения:
DRIVER = MYSQL ODBC 5.1 Driver; SERVER = localhost; DataBase = *****; UID = user; PWD = ****
Всё работало и подключалось, когда использовался MS Server 2003. После переноса на MS Server 2008 стала выдаваться следующая ошибка:
{ОбщийМодуль.Petrol.Модуль(7798)}: Ошибка при установке значения
атрибута контекста (ActiveConnection) Command.ActiveConnection =
Connection; по причине: Произошла исключительная ситуация
(ADODB.Command): Для требуемой операции необходим объект OLE DB
Session, не поддерживаемый текущим поставщиком.
В чём может быть проблема?
Содержание:
1. Ошибка при установке значения атрибута контекста
2. Ошибка при получении значения атрибута контекста
Одной из наиболее частых ошибок исполнения кода 1С являются ошибки, связанные с установкой реквизита либо получением реквизита через точку, либо ошибка при вызове функции или процедуры через точку. Все данные объекты являются атрибутами информационных объектов-владельцев, к которым они принадлежат. Рассмотрим примеры таких ошибок и причины их возникновения.
1. Ошибка при установке значения атрибута контекста
Ошибка при установке значения атрибута контекста говорит нам о невозможности присвоить выбранное значение определенному атрибуту информационного объекта. Вызвано это либо несовпадением типа атрибута и присваиваемого ей значения, отсутствием возможности присвоить значение выбранному атрибуту, так как его можно только читать, но не записывать в него, отсутствием прав у текущего пользователя на запись значений в данный атрибут. Например, в реквизит «ДатаДокумента» с типом «Дата» пытаемся записать строку, в реквизит с типом данных ссылки на документ пытаемся записать не ссылку, а объект, полученный по ссылке, что невозможно из-за несоответствия типов, что приводит к ошибке установки значения атрибута.
Другой пример – проходя циклом выборку запроса, пытаемся в колонку выборки записать значение, что невозможно, так как значения выборки запроса можно только считывать, а для того, чтобы можно было полученные из запроса данные изменять в коде, нужно пользоваться не выборкой, а выгружать результат запроса в таблицу значений, в таком случае в цикле по ней можно будет менять значения в колонках, но только на значения, соответствующие типу колонки. Либо у пользователя, под которым выполняется код, нет прав на изменение даты документа, при попытке записать в данный реквизит новую дату, будет выведено сообщение об ошибке установке значения, но в причине будет указано отсутствие прав у пользователя.
2. Ошибка при получении значения атрибута контекста
Ошибка при получении значения атрибута контекста указывает на невозможность прочитать значение атрибута объекта в силу его отсутствия, либо отсутствия прав на его чтение. Например, обращение к несуществующему реквизиту объекта, несуществующему полю выборки из запроса, несуществующему свойству элемента формы и т.п. Так же как пример можно рассмотреть получение текущего пользователя из параметров сеанса — если данный параметр сеанса не установлен, то тоже будет выведена ошибка получения значения атрибута контекста, но в причине будет указана попытка получения неинициализированного значения параметра сеанса.
При возникновении данных ошибок значения атрибута в 1Св первую очередь следует проверить существование атрибута, к которому обращаются, затем проверить совпадение типов значений атрибута и присваиваемого ему значения, затем уже проверить права на установку либо чтение значения. Проверить, является ли дело в правах либо дать права на действия с атрибутом, можно, установив привилегированный режим для совершения действия с данным атрибутом, прописав перед строчкой с ошибкой УстановитьПривилегированныйРежим(Истина), после строчки — УстановитьПривилегированныйРежим(Ложь).
Специалист компании «Кодерлайн»
Александр Суворов