Приветствую! Сегодня хочу сказать пару слов о работе 1С 8 с другими базами данных на примере Adaptive Server Enteprise (сокращённо ASE или Sybase ASE, ранее известная как Sybase SQL Server). Итак, столкнулся я как-то со следующей задачей. Есть программа от сторонних разработчиков, которая работает с базой Sybase Adaptive Server Enterprise. В базе есть хранимая процедура, для тех кто в танке (Хранимая процедура - объект базы данных, представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере. Хранимые процедуры очень похожи на обыкновенные процедуры языков высокого уровня, у них могут быть входные и выходные параметры и локальные переменные, в них могут производиться числовые вычисления и операции над символьными данными, результаты которых могут присваиваться переменным и параметрам. В хранимых процедурах могут выполняться стандартные операции с базами данных (как DDL, так и DML). Кроме того, в хранимых процедурах возможны циклы и ветвления, то есть в них могут использоваться инструкции управления процессом исполнения.)
Задача состояла в получении некоторых данных (суммы платежа, инн контрагента и назначения платежа) из документа "Платежное поручение" в 1С, подстановка этих значений в качестве аргументов хранимой процедуры и непосредственно запуск этой хранимой процедуры на выполнение.
Привожу код программы, с пояснениями, ниже:
Connection = Новый COMОбъект("ADODB.Connection");
//ПутьКБД = "C:\EDEL\BASE\edel_sb.db";
ПутьБД = форма.ПутьКБД;
Им = форма.Логин;
Пасс = форма.Пароль;
СтрокаСоединения = "Driver=Adaptive Server Anywhere 9.0; DataBase="+ПутьБД+"; UID="+Им+"; PWD="+Пасс+"; ";
Connection.ConnectionString = СтрокаСоединения;
Попытка
Connection.Open();
Сообщить("Подключенно");
Исключение
Сообщить("Ошибка подключения - " + ОписаниеОшибки());
Возврат;
КонецПопытки;
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandType = 4; // 4 - если хранимая процедура, 1 - если, SQL запрос
Command.CommandText = "AddCashlessAdvance"; // название хранимой процедуры
ДокПП = Документы.ПлатежноеПоручениеВходящее.Выбрать(Форма.НачПериода, Форма.КонПериода);
Пока ДокПП.Следующий() Цикл
СтрФ = "AddCashlessAdvance(" + Строка(ПолучитьНомер(ДокПП.НазначениеПлатежа)) + "," + Строка(ДокПП.Контрагент.ИНН) + "," + Строка(ДокПП.СуммаДокумента) + ",Admin)";
Parameter = Command.CreateParameter("@ID", 3, 1, 4, Число(ПолучитьНомер(ДокПП.НазначениеПлатежа)));
Parameter.Precision = 10;
Command.Parameters.Append(Parameter);
Parameter = Command.CreateParameter("@INN", 131, 1, 12, Число(типаИНН));
Parameter.Precision = 20;
Command.Parameters.Append(Parameter);
Parameter = Command.CreateParameter("@Price", 131, 1, 12, Число(ДокПП.СуммаДокумента));
Parameter.Precision = 20;
Parameter.NumericScale = 2;
Command.Parameters.Append(Parameter);
Parameter = Command.CreateParameter("@Name", 200, 3, 10, "Admin");
Command.Parameters.Append(Parameter);
//Command.Parameters.Refresh(); // получить список параметров, а главное их типов, так как они видятся в самой БД
Command.Execute(); // запускаем на выполнение хранимой процедуры
Command.Parameters.Delete("@ID");
Command.Parameters.Delete("@INN");
Command.Parameters.Delete("@Price");
Command.Parameters.Delete("@Name");
Основные моменты:
1. Указываем, что мы будем работать с хранимой процедурой.
2. Указываем имя хранимой процедуры.
3. Описываем каждый параметр входящий в хранимую процедуру.
4. Запускаем на выполнение.
Вот в кратце все. С удовольствием постараюсь ответить на ваши вопросы.