Ответить

 

Опции темы
Старый 01.10.2010, 14:25   #1
belov-evgenii
Модератор раздела
 
Аватар для belov-evgenii
 
Регистрация: 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
raus
Модератор ФССП
 
Аватар для raus
 
Регистрация: 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
belov-evgenii
Модератор раздела
 
Аватар для belov-evgenii
 
Регистрация: 03.03.2009
Сообщений: 151
Благодарности: 0
Поблагодарили 45 раз(а) в 45 сообщениях

Обратиться по нику
Цитата выделенного
По умолчанию

В коде вместо ibec_CloseConnection() было ibec_CloneConnection(). Надо же, одна буква. Исправил.
 
В Минюст Цитата Спасибо
Старый 01.10.2010, 18:19   #4
raus
Модератор ФССП
 
Аватар для raus
 
Регистрация: 16.01.2009
Адрес: Россия / /
Сообщений: 3,373
Благодарности: 153
Поблагодарили 548 раз(а) в 528 сообщениях

Обратиться по нику
Цитата выделенного
По умолчанию

да я еще не пробовал. Нет времени.... При примерно такой задаче - скидывал две таблицы Ексель - потом макросом брал значение ячейки из одной таблицы и сравнивал со всеми ячейками в другой таблице, потом брал другое значение и т.д. - редкостное извращение получилось... но работало....
__________________
Yo Way Yo, Home Va-Ray,
Yo Ay-Rah, Jerhume Brunnen-G
 
В Минюст Цитата Спасибо


Быстрый ответ

Сообщение:
Опции


Ваши права в разделе