01.10.2010, 14:25 | #1 |
Модератор раздела
Регистрация: 03.03.2009
Сообщений: 151
Благодарности: 0
Поблагодарили 45
раз(а) в 45 сообщениях
Обратиться по нику Цитата выделенного |
Подкинули задачку - налоговая предоставила несколько файлов Excel с одинаковой структурой. В файлах фио, адрес, сумма, дата проплаты госпошлины. Требуется выявить совпадения из этих файлов с базой, чтобы в дальнейшем окончить производства, по которым оплата уже прошла.
[codebox]execute ibeblock returns (npp integer, name_d varchar(1000), sum_ numeric(10,2), datedoc date) as begin /* начало времени выполнения */ StartTime = ibec_GetTickCount(); /* соединение с БД */ FBCon = ibec_CreateConnection(__ctFirebird, 'DBName=localhost:C:\Files\ex_prod\19_29 _EX_PROD.FDB; Clientlib=C:\Files\IBExpert\fbclient213. dll;User=SYSDBA; Password=masterke; Names=WIN1251;SQLDialect=1;'); /* путь к файлам */ files_path = 'C:\Files\ex_prod\pay\'; /* получаем количество файлов для обработки (files_count), заносим полный путь в список (files_list) */ files_count = ibec_getfiles(files_list, files_path, '*.xls', __gfFullName); /* счетчик */ i = 0; /* цикл перебора всех файлов */ while (i < ibec_high(files_list)) do begin /* получаем имя текущего файла из списка */ file_name = files_list[i]; /* создаем коннект к файлу Excel */ OdbcCon = ibec_CreateConnection(__ctODBC, 'Driver={Microsoft Excel Driver (*.xls)};DriverId=790;Dbq=' || file_name || ';DefaultDir=' || files_path); /* показываем прогресс выполнения (файл в обработке) */ ibec_progress('Searching in file ' || file_name); /* директива использования соединения для выполнения операций */ ibec_UseConnection(OdbcCon); /* Выполняем запрос к файлу Excel. Поля в первой строке, раздел from - лист. В квадратных скобках и оканчинвается $. Помещаем значения полей в переменные. for - выполняем проход по полученному списку записей от начала до конца */ for execute statement 'select name, adr, sum_, datedoc from [Учет госпошлины, уплаченной по$]' into :name, :adr, :sum_, :dated do begin /* выходная переменная (см. returns) */ datedoc = :dated; /* директива использования соединения с БД */ ibec_UseConnection(FBCon); /* Теперь выполняем запрос к БД FB. Получаем список записей и выводим их в таблицу */ for select ip.npp, --№ п/п ip.name_d --должник from ip where ip.name_d = :name --должник из БД = имя из Excel and ip.sum_id = :sum_ --сумма по ИД = сумма из Excel and ip.date_ip_out is null --Не окончено and ip.sisp_key = '/1/13/32/' --Госпошлина into :npp, :name_d do suspend; --помещаем в переменные и выводим (suspend) end /* Закрываем соединение с текущим файлом Excel */ ibec_CloseConnection(OdbcCon); /* приращаем счетчик (переходим к следующему файлу в списке files_list) */ i = i + 1; end /* Закрываем соединение с БД */ ibec_CloseConnection(FBCon); /* конец времени выполнения */ FinishTime = ibec_GetTickCount(); /* Общее время выполнения в секундах */ ElapsedTime = (FinishTime - StartTime) / 1000; /* показываем общее время выполнения */ ibec_ShowMessage('Time elapsed: ' || ElapsedTime || ' seconds'); end [/codebox] |
В Минюст Цитата Спасибо |
01.10.2010, 14:40 | #2 |
Модератор ФССП
Регистрация: 16.01.2009
Адрес: Россия / /
Сообщений: 3,373
Благодарности: 153
Поблагодарили 548
раз(а) в 528 сообщениях
Обратиться по нику Цитата выделенного |
однако.... Не знал что IBExpertом можно такие вещи делать....
Очень своевременно... Примерно такие же задача стоят.... Попробую разобраться в коде....
__________________
Yo Way Yo, Home Va-Ray, Yo Ay-Rah, Jerhume Brunnen-G |
В Минюст Цитата Спасибо |
01.10.2010, 17:11 | #3 |
Модератор раздела
Регистрация: 03.03.2009
Сообщений: 151
Благодарности: 0
Поблагодарили 45
раз(а) в 45 сообщениях
Обратиться по нику Цитата выделенного |
В коде вместо ibec_CloseConnection() было ibec_CloneConnection(). Надо же, одна буква. Исправил.
|
В Минюст Цитата Спасибо |
01.10.2010, 18:19 | #4 |
Модератор ФССП
Регистрация: 16.01.2009
Адрес: Россия / /
Сообщений: 3,373
Благодарности: 153
Поблагодарили 548
раз(а) в 528 сообщениях
Обратиться по нику Цитата выделенного |
да я еще не пробовал. Нет времени.... При примерно такой задаче - скидывал две таблицы Ексель - потом макросом брал значение ячейки из одной таблицы и сравнивал со всеми ячейками в другой таблице, потом брал другое значение и т.д. - редкостное извращение получилось... но работало....
__________________
Yo Way Yo, Home Va-Ray, Yo Ay-Rah, Jerhume Brunnen-G |
В Минюст Цитата Спасибо |
|
|
«Закония» в соц. сетях