Импорт данных: счета и начальные условия



Posted by Анатолий Анимица (195.91.169.58) on November 06, 2001 at 13:45:52:

In Reply to: счета и начальные условия posted by Татьяна on November 06, 2001 at 05:58:16:

Татьяна пишет:

: Хочу в 2002 году красивый справочник товаров с красивой кодировкой. Справочник есть и кодировка тоже(формат dbf или txt), а как мне эту красоту закинуть в счета и начальные условия, используя не руки, а голову ? И еще бы к этому новому справочнику привязать старые остатки было бы вообще великолепно.

Отличный вопрос, поздравляю. Есть очень простой способ решения задачи. Не нужно НИЧЕГО. Только сервер ФБП, клиент, например, clw32.exe и маленькая программка - строк эдак на 20.
Назовем ее creator.rpt, например.
Допустим, ваши входные данные для импорта записаны в файле import.txt и имеют такой формат в кодировке CP866 (ДОС):


(строка)
(строка)
....
(строка)

где (строка) - это а)(обозначение счета - до 6 символов разделитель наименование счета 100 символов разделитель тип счета ) или б) (обозначение субсчета - до 9 символов разделитель наименование субсчета до 100 символов разделитель остаток). Строки заканчиваются ВКПС ([ch 10]+[ch 13]). Пусть файл для определенности расположен в каталоге данных сервера - или путь известен.

Алгоритм creator.rpt. Создать пустой файл accmaker.rpt. Открыть файл import.txt
Читать строку за строкой. Выделить подстроки строк. Если строка счет - проверить существование. Если есть - разрешить ввод субсчетов, иначе - написать строку с запросом а на создание счета в хвост файла maker.rpt. Если строка субсчет проверить существование. Если есть и наименование не совпадает - выдать предупреждение. Иначе написать строку запроса на создание субсчета. Тоже в хвост файла maker.rpt.
Когда все кончится, полюбоваться на maker.rpt. Если не понравится, подкорректируйте creator.rpt - там все замечательно видно.
Создать РЕЗЕРВНУЮ КОПИЮ acnt.a3p.
Запустить на выполнение maker.rpt.
Полюбоваться результатом.


В комплекте 2001R есть несколько таких простых создателей - они таскают операции и счета от сервера к серверу, например, консолидируя операции предприятий или подразделений в сводную базу холдинга. БЕЗ ВНЕШНИХ УТИЛИТ И НАДСТРОЕК.

Чтобы долго не думать - вот один примерчик. Он переносит счета из базы 1 в базу 2. Отличие в Вашем случае - вместо чтения счетов из acnt.a3p функциями [n1] [n2] [ba] [ea] нужно это же прочесть из файла import.txt по вашему формату.
Все остальное как в примере.


* счета базы 1 - в файл переноса в базу 2
************************************************************************************************
pk=[ch 254];mo=0;do=0;k=' ';ky=[strip [ct 'MODOKEY']] контекст операции, если нет - пробел
if [length ky]>2 mo=[vl [cp ky,1,2]];do=[vl [cp ky,3,2]] месяц и день
k=[ch 64+mo]+[cp ky,5,3]+'-'+[cp ky,8,3];endif штамп 3
uu=[ch 254];pp=[ch 250];ys=[intsn yc];t1=df;t2=mf
if [length ky]>2 t1=1;t2=1;t3=do;t4=mo;else t3=dl;t4=ml;endif
if t1=0 t1=1;endif;if t3=0 if t4=12 t3=31;else t3=[da 1,t4+1,yc]-[da 1,t4,yc];endif;endif
t5=t1+t2/100;t6=t3+t4/100;t7=[cp [intsn 100+t1],2,2]+'.'+[cp [intsn 100+t2],2,2]
t7=t7+'..'+[cp [intsn 100+t3],2,2]+'.'+[cp [intsn 100+t4],2,2]+' '+ys
t8=t2+t1/100;t9=t4+t3/100;ta=[ta t2,t4];rd=[sf 0,99]
************************************************************************************************
p3=[ch 250]+[ch 250]+[ch 250];p4=p3+[ch 250];p5=0;lx=0;ap=[ch 39];tc='.';xl=0;ng=0
so='{';sc='}' скобки
******************************************************************** константы
tl=31;if t4 in 2..11 tl=[da 1,t4+1,yc]-[da 1,t4,yc];endif
********************************************************************
ib='B' имя целевой базы ','A','B','C','D','E','F','G','H','I','J','K','L','M','...']
fj=[intsn yc*100+t4]+ib
array a,b,c,d,e,f,g,h,u,y,z;array %
e1=0;sr=' ';mi=t8;ma=t9;nm=0;oa=[ch 13]+[ch 10]
fi=[strip [is 'имя файлов переноса ',fj+'.RPT',12]] установка имени файла
* заголовок программы передачи операций
fl=' файл: '+fi+' банки: '+sr;fi=[dir 0]+fi;
*jh=jf+' '+fl;hh=jh
Все операции и счета к проверке/созданию/записи ИНН
call storea создать файл переноса счетов
stop
**************************************************************
:storea генератор переноса счетов
fi=[dir 0]+fj+'A.RPT' имя файла программы создания счетов
s='* программа переноса счетов '+fi+oa заголовок программы создания счетов
* вывод в обнуленный или новый файл (все такие строки)
printstr s to > file fi
s=' '+oa пустая строка
printstr s to file fi
s='счет попытка (0-счет был, <10 создан, =10 не создан, повторить программу)'+oa шапка отчета
printstr s to file fi
s=' '+oa
printstr s to file fi
# План
a=[n1 #];as=[as *a]
if as
for i=1 to as
n1=[sa *a,i];call n2;in=[strip [ged n1+'+inn']];call an1n2
endfor
endif
#
return
*
:an1n2 вход n1 выход - строки файла создания счета и передачи ИНН
*
n1=[strip n1];call n2;n2=[strip n2];in=[strip [ged n1+'+inn']];s='i=0;n1='+ap+n1+ap+oa
printstr s to file fi
s='if ([ex *n1]=0)&(i<10)'+oa
printstr s to file fi
s='i=i+1'+oa
printstr s to file fi
pa=[pa *n1];s='n:auto:a ·'+pa+'·'+n1+'·'+n2+'·'+oa
printstr s to file fi
s='endif'+oa
printstr s to file fi
s='if ~[ex *n1]'+oa
printstr s to file fi
s='субсчет ^^^^^^^^^^^^n1 не создан, повторите ввод операции'+oa
printstr s to file fi
s='else'+oa
printstr s to file fi
s='n2=[n2 *n1]'+oa
printstr s to file fi
if in+'.'<>' .'
s='ge=[ged n1+'+ap+'+inn'+ap+']'+oa
printstr s to file fi
s='if ge=0 [sed n1+'+ap+'+inn'+ap+','+ap+in+ap+'];endif'+oa
printstr s to file fi
endif
s='^^^^^^^n1 ^^i ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^n2 ^^^^^^^^^^in'+oa
printstr s to file fi
s='endif'+oa
printstr s to file fi
return
********************************************************************

ААА



Пpишедшие ответы: