Пример подключения создан для обычной и управляемой формы. Позволяет подключиться «На сервере 1С:Предприятия» и «На данном компьютере или на компьютере в локальной сети», подключение производится через логин/пароль или с помощью аутентификации Windows.
общий концепт подключения такой, если кому нужен только механизм
СтрокаПодключения = "";
Если Не АутентификацияWindows Тогда
Если НЕ ПустаяСтрока(Пользователь) Тогда
СтрокаПодключения = СтрокаПодключения + ";Usr = """ + Пользователь + """";
КонецЕсли;
Если НЕ ПустаяСтрока(Пароль) Тогда
СтрокаПодключения = СтрокаПодключения + ";Pwd = """ + Пароль + """";
КонецЕсли;
КонецЕсли;
СтрокаПодключения = СтрокаПодключения + ";";
//V8 или V81 или V83
ВерсияПлатформы = "V83";
Попытка
ProgID = ВерсияПлатформы +".COMConnector";
COMПодключение = Новый COMОбъект(ProgID);
COMОбъект = COMПодключение.Connect(СтрокаПодключения);
Исключение
СтрокаСообщенияОбОшибке = "При попытке соединения с COM-сервером произошла ошибка:" + Символы.ПС
+ ОписаниеОшибки();
Сообщить(СтрокаСообщенияОбОшибке);
Возврат Неопределено;
КонецПопытки;
Возврат COMОбъект;
далее можно работать с данными подключенной базы, для примера обход документов и запрос по одному из них.
ОбъектПодключения = ПодключитсяКИнформационнойБазе();
Если НЕ ОбъектПодключения = Неопределено Тогда
Сообщить("Подключение выполнено! " + ТекущаяДата());
Для Каждого ЭлМетаданных ИЗ ОбъектПодключения.Метаданные.Документы Цикл
Запрос = ОбъектПодключения.NewObject("Запрос");
Текст = "ВЫБРАТЬ
| КОЛИЧЕСТВО(*) КАК КоличествоДокументов
|ИЗ
| Документ."+ЭлМетаданных.Имя+" КАК Документ";
Запрос.Текст = Текст;
Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
ВсегоДокументов = Выборка.КоличествоДокументов;
Сообщить(ЭлМетаданных.Имя + " - " + ВсегоДокументов);
Прервать;
КонецЦикла;
КонецЕсли;
при ошибке "Ошибка при вызове конструктора (COMОбъект): -2147221005(0x800401F3)" не забываем регистрировать библиотеку, через
regsvr32 bincomcntr.dll
для БСП есть вот такой способ подключения.
БСП, Общий модуль, ОбщегоНазначенияКлиентСервер
Функция УстановитьВнешнееСоединение(Параметры, СтрокаСообщенияОбОшибке = "", ОшибкаПодключенияКомпоненты = Ложь) Экспорт
ps: спасибо комментатору awk
Похоже мамонт по имени COM еще долго не вымрет…
100500 раз об одном и том же. Что здесь нового?
БСП, Общий модуль, ОбщегоНазначенияКлиентСервер
Показать
Занавес…
(4) это для примера.
(3) о, это полезно, об этом я не знал, спасибо.
(5)Дело не в том, «подожгло» или «не подожгло». Вы выкладываете статью. Скорее всего позиционируете ее как обучающую. И скорее всего код, который в статье, используете в своей работе. Есть большая вероятность, что кто-то позаимствует код из вашего примера. Давайте я объясню, что меня «подожгло».
Вы используете очень неэффективную проверку количества объектов в таблице:
Предположим, что у вас SQL-база. Здесь вы выбираете все ссылки на документы из таблицы. Эти данные передаются с сервера БД на сервер 1С. Хорошо, если таблицы по размеру небольшие. Плохо, если в таблицах сотни миллионов или миллиарды записей. Все это кэшируется и память сервера 1С неслабо засирается. Далее вы берете этот дохулион записей и просите платформу посчитать количество.
Правильно будет делать так:
И тогда Выборка.КоличествоДокументов как раз и будет содержать определяемое значение. При этом подходе мы просим СУБД посчитать для нас количество записей в таблице.
(7) Спасибо, за простое разъяснение.
(7) Все ж обучение не в этом, но да правильное замечание, учту.
(1)Просто не вымрут те, у кого при слове WS/HS округляются глаза… зачем что-то новое, когда на коленке все работает
(10)Линукс бы им в помощь ))
Для ускорения процесса изучения нормальных современных методик.
(11)Ага, Slackware, а не какой-то там халявный redhat подобный гыгы
(7) Эх… Махнув перо в г…но, накину и я на вентилятор… :))))
Правильно (а точнее безопастнее) будет:
(13) А в чем опасность?
Запрос на получение количества без выборки каких-либо других данных и без соединений с другими таблицами всегда вернет 1 запись. Даже если строк в таблице нету, то в этой единственной записи будет значение 0.
(14) в типовых кстати такое есть, от ситуации зависит.
(14) Все так, все так…. Пока так… А завтра? Добавили группировку, соединение и вуаля… Выборка.Следующий() = Ложь, а Выборка.КоличествоДокументов = Неопределено…
(16) напишите письмо в фирму 1С, возможно вас послушают.
(17) Вот сейчас не совсем понял. Зачем? Что фирма 1С должна сделать? Если вы думаете, что пример надуман, то нет. Он из жизни… И ошибка: «преобразование к значению типа Число не может быть выполнено», правилась мной на этой неделе.
(16) Это проблема не исходного решения. А того, кто доработал решение, даже не осмыслив, что он дорабатывает и какой объем правок надо сделать.
(19) Эту проблему можно избежать, просто проверив результат запроса. Обнаружить же такую ошибку, не имея модульных тестов , зачастую просто не реально. Но это уже перфекционизм, реакция на ваше:
Сам такой… Прочитал ваш пост, как в зеркало посмотрел.