Для связи нашей программы с учетными системами рекомендуем брать данные напрямую из нашей базы данных.
Структура базы данных:
Вложение:
СтруктураЗаказа.xls [17 КБ]
Скачиваний: 90
Как сделать выборку по заказу:
1. Найти соответствующий заказ в таблицу offers
например select * from offfers where znotext = "123-24"
2. Найти все позиции заказа
например select * from constructions where pid = [offers.id]
3. Получить спецификацию заказа
select * from calcrep where pid = [constructions.id]
Выполнить запрос можно подключившись к базе напрямую (например
http://www.google.com.ua/search?q=firebird+1c) или выполнить запрос через OLE объект программы.
Пример как выполнить запрос через OLE:
1. Создание COM объекта и запуск программы:
Код:
Процедура ЗапуститьПрограммуWinCalc
Попытка
// проверка активного Оле соединения
ПрограммаРасчетаСтартована=OLEСоединениеWinCalc.Started(); // вызов любого метода программы для проверки
Исключение
ПрограммаРасчетаСтартована = Ложь;
КонецПопытки;
WCObject="wincalc.wincalcsrv";
Если НЕ ПрограммаРасчетаСтартована Тогда
Попытка
// создание COM объекта
OLEСоединение = Новый COMОбъект(WCObject);
OLEСоединениеWinCalc = Новый COMОбъект(WCObject);
// установка пользователя и пароля
OLEСоединениеWinCalc.SetLoginData("Пользователь","Пароль");
// строка подключения сервер
OLEСоединениеWinCalc.SetServerName(Константы.спкОПСервер.Получить());
Исключение
Предупреждение("Не возможно создать объект оконной программы. "+ИнформацияОбОшибке().Описание, 10, "Оконная программа");
Возврат;
КонецПопытки;
OLEСоединениеWinCalc = Неопределено;
КонецЕсли;
// запуск программы
OLEСоединениеWinCalc.Start();
// ожидание запуска программы
Пока НЕ OLEСоединениеWinCalc.Started() Цикл
OLEСоединениеWinCalc.Wait(100);
КонецЦикла;
конецпроцедуры;
2. Выполнение запросы:
Код:
// выполнение запроса в базу wcoffers.fdb
// Результат - ComSafeArray
// 1 элемент равен 0 если запрос не удался, 1 если все ок
// 2 элемент равен количеству строк в результате запроса
// 3 элемент - ComfaseArray срок результата, каждый также является ComSafeArray, каждый элемент которого является значением колонки в выборке.
Запрос = OLEСоединениеWinCalc.ExecQueryO(" select ID, ZSUM from constructions where pid = 3 ");
// если запрос выполнен
если Запрос.getValue(1) = 1 тогда
// получим массив записей
Записи = Запрос.GetValue(3);
// цикл по количеству записей
КоличествоЗаписей = Запрос.GetValue(2);
для й = 1 по КоличествоЗаписей цикл
// поулчим й-ую запись
Запись = Записи.GetValue(й);
// 1 поле текущей записи
сообщить(Запись.getValue(1)); // ID
// 2 поле текущей записи
сообщить(Запись.getValue(2)); // ZSUM
конеццикла;
конецесли;
3. Чтобы выполнить запрос к базе wcglobal.fdb нужно использовать функцию ExecQueryG
4. Вот функция, которая преобразовывает результат функции ExecQuery в ТаблицуЗначений:
Код:
функция ЗапросВинКалкВТаблицуЗначений(ЗапросВинКалк) Экспорт
Если ЗапросВинКалк.GetValue(1) = 1 тогда
ТЗ = Новый ТаблицаЗначений;
для й = 1 по ЗапросВинКалк.GetValue(3).GetValue(0).GetUpperBound() цикл
ТЗ.Колонки.Добавить(ЗапросВинКалк.GetValue(3).GetValue(0).GetValue(й));
КонецЦикла;
для ц = 1 по ЗапросВинКалк.GetValue(2) цикл
Строка = ТЗ.Добавить();
для й = 1 по ЗапросВинКалк.GetValue(3).GetValue(0).GetUpperBound() цикл
Строка[й - 1] = ЗапросВинКалк.GetValue(3).GetValue(ц).GetValue(й);
КонецЦикла;
КонецЦикла;
возврат ТЗ;
иначе
возврат Неопределено;
конецесли;
конецфункции
_________________
Как правильно задавать вопросы на форуме поддержкиПредоставление услуг с 1.01.2020Если я пишу "исправил", "сделал" и т.д., это значит что собрана новая сборка и выложена на сайт. Нужно обновить программу чтобы получить исправления.