форум поддержки VSGroup https://forum.vsgroup.ua/ |
|
Связь программы с учетными системами https://forum.vsgroup.ua/viewtopic.php?f=60&t=6246 |
Страница 1 из 1 |
Автор: | Николай@VSGroup [ 27 дек 2013, 16:04 ] |
Заголовок сообщения: | Связь программы с учетными системами |
Для связи нашей программы с учетными системами рекомендуем брать данные напрямую из нашей базы данных. Структура базы данных: Вложение: Как сделать выборку по заказу: 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(й); КонецЦикла; КонецЦикла; возврат ТЗ; иначе возврат Неопределено; конецесли; конецфункции |
Автор: | Деркач Женя [ 27 дек 2013, 16:44 ] |
Заголовок сообщения: | Re: Связь программы с учетными системами |
В запросе - Запрос = OLEСоединениеWinCalc.ExecQueryO(" select ID, ZSUM from constructions where pid = 3 "); как задать номер заказа, что такое ZSUM? |
Автор: | Николай@VSGroup [ 27 дек 2013, 16:51 ] |
Заголовок сообщения: | Re: Связь программы с учетными системами |
Деркач Женя писал(а): как задать номер заказа Код: select constructions.* from constructions, offers where constructions.pid = offers.id and offers.znotext = "123-45" Деркач Женя писал(а): что такое ZSUM? описание полей таблицы constructions можно глянуть в файле который приложил в первом сообщении |
Автор: | Деркач Женя [ 27 дек 2013, 18:40 ] |
Заголовок сообщения: | Re: Связь программы с учетными системами |
Что такое в запросе - where pid = 3 |
Автор: | Деркач Женя [ 27 дек 2013, 18:41 ] |
Заголовок сообщения: | Re: Связь программы с учетными системами |
Я имею в виду что такое - 3 |
Автор: | Деркач Женя [ 27 дек 2013, 18:46 ] |
Заголовок сообщения: | Re: Связь программы с учетными системами |
как воткнутся в таблицу wcoffers.constructions по конкретному номеру заказа? |
Автор: | Деркач Женя [ 27 дек 2013, 19:13 ] |
Заголовок сообщения: | Re: Связь программы с учетными системами |
Те примеры запросов которые вы написали на форуме не работают в конфигурации , выдает ошибку - {Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(3152)}: Ошибка при вызове метода контекста (ExecQueryO) Запрос = OLEСоединение.ExecQueryO(" select ID, ZSUM from constructions where pid = 3 "); по причине: Произошла исключительная ситуация (wincalc.WinCalcSRV): use Open for a Select Statement |
Автор: | Николай@VSGroup [ 27 дек 2013, 22:05 ] |
Заголовок сообщения: | Re: Связь программы с учетными системами |
Деркач Женя писал(а): как воткнутся в таблицу wcoffers.constructions по конкретному номеру заказа? select constructions.* from constructions, offers where constructions.pid = offers.id and offers.notext = "[НомерЗаказа]" Деркач Женя писал(а): Те примеры запросов которые вы написали на форуме не работают в конфигурации , выдает ошибку - {Документ.ЗаказПокупателя.Форма.ФормаДокумента.Форма(3152)}: Ошибка при вызове метода контекста (ExecQueryO) Запрос = OLEСоединение.ExecQueryO(" select ID, ZSUM from constructions where pid = 3 "); по причине: Произошла исключительная ситуация (wincalc.WinCalcSRV): use Open for a Select Statement уберите первый пробел в строке запроса, т.е. Запрос = OLEСоединение.ExecQueryO("select ID, ZSUM from constructions where pid = 3 "); ошибку в программе исправил в 22 сборке P.S. В первое сообщение добавил функцию преобразования запроса WinCalc в ТаблицуЗначений |
Страница 1 из 1 | Часовой пояс: UTC + 2 часа [ Летнее время ] |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |