Яндекс.Метрика

1С 8 базы данных, хранимые процедуры

Приветствую! Сегодня хочу сказать пару слов о работе 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. Запускаем на выполнение.
Вот в кратце все. С удовольствием постараюсь ответить на ваши вопросы.
Ваше имя

Отзыв

Отправить

photo

Всем привет,  меня зовут Тимур. Я работаю программистом 1С.

Хочу поблагодарить моего друга Александра,
благодаря которому появился на свет этот блог

создание сайтов в симферополе