Снова Excel!

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Снова Excel!

Сообщение Sytin »

Есть утилита,которая по накладной формирует счет-фактуру в Excele.
Когда выбираем 1 накладную,вызываем печать,получается 1 Excelевский лист.Требуется выбрать несколько накладных,и при вызове печати получить несколько листов с счет-фактурами соответственно.У кого есть какие-нибудь соображения поделитесь.Хотя бы объясните принцип работы печати при выборе нескольких накладных.Насколько я понимаю,она просто запускается для каждой накладной по очереди.
Juve
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение Juve »

А что, разве есть более простой вариант? :)
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Сообщение Sytin »

Juve писал(а):А что, разве есть более простой вариант? :)
А я разве какой-то вариант предложил?
Juve
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение Juve »

...принцип работы печати при выборе нескольких накладных...


может я чего не понимаю?
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

позвольте, а при чем здесь
а)"выбираю накладную, печатаю СФ" - по накладным может быть вообще СФ не сформировано
б) "есть утилита,которая по накладной формирует счет-фактуру в Excele" - это галактический ф-л или нет? если - ДА, то повесьте ее вызов на одну из линк-форм печати реестра накладных в цикл для каждой накладной.. тогда получите искомый результат (но это при условии что ваша утилита работает с параметрами - NRec накладной например, который в нее пихать будут).
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Сообщение Sytin »

СФ печатается просто по данным из накладной,она не обязательно должна быть сформирована.
Код:
.LinkForm 'CrSF' prototype is tovn
.NameInList 'MAPT.СФ по накладной'
.group 'Приходные накладные'
#include summa.frn
.DEFO LANDSCAPE
.p 60
!.O1 8
.Set Filler = '-'
.var
Nom,NomFull,kol1,fixkol1,kol2,fixkol2 :Word;
KolItog, MassaBrItog, MassaNetItog, Sum1Itog, Sum2Itog,Sum3Itog :Double;
KolItogFull, MassaBrItogFull, MassaNetItogFull, Sum1ItogFull, Sum2ItogFull,Sum3ItogFull :Double;
СтНДСНац : double
СтНацБН : double
СтНацСН : double
СпСимвол, strEmpty:string
DoverOrg : string;
.endvar
#include org_decl.frn
#include mfo.frn
#include format.frn
.{
#include sum_calc.frn
.begin
end.
!Организация, выдавшая доверенность
.begin
end.
.if tovn01
.end
.if tovn02
.end
.{
!.[h Skip
.{?Internal;kol1=fixkol1 or kol2=fixkol2
.begin
end.
.}
!.]h
.begin
end.
#include CodeMC.frn
!.[f
.{?Internal;kol1=fixKol1 or kol2=fixkol2
.{?Internal;kol1<количество_SpSopr
.}
.}
!.]f
.}
.{?Internal;kol1>fixKol1 and kol2<fixkol2
.}
.{?Internal;kol1>fixKol1 and kol2<fixkol2 and kol1<количество_SpSopr
.}
.{?Internal;kol1<fixKol1 and kol1=количество_SpSopr
.}
.{ CHECKENTER TOVNUSL
.}
.{
.}
#ifdef __SKYSHOP__
#include sky.inc
#end
.}

.create view TabKpp
as select *
from katsopr,katorg
where (( накладная_нрек==katsopr.nrec and
KatSopr.cOrg == KatOrg.NREC));

.create view TabKppPoluch
as select *
from katorg
where (( Получатель==KatOrg.name));

.create view TabNakl
as select *
from katsopr,katmc,katotped,spsopr,KatParty,Exclassname,Exclassval,Exclassseg,attrval,attrnam,SpDocNal
where (( накладная_нрек/==katsopr.nrec and
KatSopr.Nrec==SpSopr.cSopr and
SpSopr.cmcusl==KatMC.nrec and
spsopr.COTPED == katotped.nrec AND
KatMC.Ced==KatEd.nrec and

SpSopr.cparty==KatParty.nrec and
Katparty.nrec==exclassval.crec and
1430==exclassval.wtable and
2==exclassval.classcode and
exclassval.classcode==exclassname.classcode and
exclassval.cclassseg==exclassseg.nrec and

KatParty.nrec==attrval.crec and
1430==attrnam.wtable and
'ГТД'==attrnam.name and
attrnam.nrec==attrval.cattrnam and
1430==attrval.wtable and

Spsopr.nrec==spdocnal.cspdoc));
.var
MCName:string;
MCed:string;
MCkol:double;
MCCena:double;
StoimBezNal:double;
Country:string;
GTD:string;
curotped:string;
.endvar

.var i,k:integer;
SumNal,SumNalTot:double;
StoimWithNal,StoimWithNalTot:double;
.endvar

.begin
var XlRes : boolean;

i:=0;k:=0;
SumNalTot:=0;
StoimWithNalTot:=0;
XlRes := True;
//XlRes :=xlOpenNewExcel(false);
//xlRes:=xlOpenWorkBook('SchetFact');
//if(xlRes=False)xlCreateExcelWithTemplate('SchetFakt',true);
xlCreateExcelWithTemplate(Номер,true);
//xlAddSheet;
//xlAddSheet;
//xlAddSheet;


XlRes := xlIsExcelValid;
XLCREATEMATRIX(176,100);
end.

.{table TabKpp
.}
.{table TabKppPoluch
.}

.begin
Xlsetfontsize(10,1,1,1,1);
xlSTWriteToMatrix(1,1,'Счет-фактура № от '+Дата);
xlSTWriteToMatrix(2,1,'Продавец: '+Поставщик);
xlSTWriteToMatrix(3,1,'Адрес: '+Поставщик_адрес);

Xlstwritetomatrix(4,1,'инн/кпп продавца '+поставщикунн+'/'+tabKpp.katorg.kodplatnds);
xlSTWriteToMatrix(5,1,'Грузоотправитель и его адрес: '+Грузоотправитель+' '+Грузоотправитель_Адрес);
xlSTWriteToMatrix(6,1,'Грузополучатель и его адрес'+Грузополучатель+' '+Грузополучатель_Адрес);
xlSTWriteToMatrix(7,1,'К платежно-расчетному документу № '+Номер+' от '+Дата);
xlSTWriteToMatrix(8,1,'Покупатель '+Получатель);
xlSTWriteToMatrix(9,1,'Адрес '+Получатель_Адрес);
xlSTWriteToMatrix(10,1,'ИНН/КПП покупателя '+ПолучательУНН+'/'+tabKppPoluch.KatOrg.KodPlatNDS);

xlSTWriteToMatrix(11,12,'валюта "рубли"');

Xlsetrowheight(1,12,1,14,12);
Xlsetrowheight(53,15,1,15,12);
xlAlignCellsEx(3,2,15,1,16,12);
xlWrapText(15,1,15,12);
Xlsetcolumnwidth(1,15,1,15,1);
Xlsetcolumnwidth(24,15,2,15,2);
xlSTWriteToMatrix(15,2,'Наименование товара (описание выполненных работ,оказанных услуг)');
xlSetColumnWidth(10,15,3,15,3);
xlSTWriteToMatrix(15,3,'Единица измерения');
xlSetColumnWidth(6,15,4,15,4);
xlSTWriteToMatrix(15,4,'Количество');
xlSetColumnWidth(8,15,5,15,5);
xlSTWriteToMatrix(15,5,'Цена(тариф)за единицу измерения');
Xlsetcolumnwidth(9,15,6,15,6);
xlSTWriteToMatrix(15,6,'Стоимость товаров(работ,услуг),всего без налога');
Xlsetcolumnwidth(7,15,7,15,7);
xlSTWriteToMatrix(15,7,'В том числе акциз');
Xlsetcolumnwidth(6,15,8,15,8);
xlSTWriteToMatrix(15,8,'Налоговая ставка');
Xlsetcolumnwidth(8,15,9,15,9);
xlSTWriteToMatrix(15,9,'Сумма налога');
xlSetColumnWidth(11,15,10,15,10);
xlSTWriteToMatrix(15,10,'Стоимость товаров(работ,услуг),всего с учетом налога');
xlSetColumnWidth(10,15,11,15,11);
xlSTWriteToMatrix(15,11,'Страна происхождения');
xlSetColumnWidth(22,15,12,15,12);
Xlstwritetomatrix(15,12,'номер грузовой таможенной деклорации');
for(k:=1;k<=11;k:=k+1)
{
Xlstwritetomatrix(16,k+1,k);
}
end.

.{table TabNakl;
.begin
xlSTWriteToMatrix (17+i,2,TabNakl.KatMC.name);
curotped:=TabNakl.KatOtpEd.name;
if(curotped='штука')curotped:='шт';
xlSTWriteToMatrix (17+i,3,curotped);
xlSTWriteToMatrix (17+i,4,TabNakl.SpSopr.kolfact);
xlSTWriteToMatrix (17+i,5,TabNakl.SpSopr.price);
xlSTWriteToMatrix (17+i,6,TabNakl.SpSopr.kolfact*TabNakl.SpSopr.price);

xlSTWriteToMatrix (17+i,8,TabNakl.SpDocNal.Nalog);

SumNal:=TabNakl.SpDocNal.Nalog/100*TabNakl.SpSopr.kolfact*TabNakl.SpSopr.price;
xlSTWriteToMatrix (17+i,9,SumNal);
SumNalTot:=SumNalTot+SumNal;

StoimWithNal:=SumNal+TabNakl.SpSopr.kolfact*TabNakl.SpSopr.price;
xlSTWriteToMatrix (17+i,10,StoimWithNal);
StoimWithNalTot:=StoimWithNalTot+StoimWithNal;

xlSTWriteToMatrix (17+i,11,TabNakl.Exclassseg.name);
Xlstwritetomatrix (17+i,12,tabnakl.attrval.vstring);

i:=i+1;
end.
.}
.begin
Xlframecells(63,2,0,0,15,2,16+i,12);
Xlsetfontsize(8,2,1,23+i,12);
xlMergeCells(17+i,2,17+i,8);
Xlframecells(63,2,0,0,17+i,2,17+i,10);
Xlframecells(63,2,0,0,17+i,9,17+i,9);
Xlstwritetomatrix (17+i,2,'Всего к оплате');
Xlstwritetomatrix (17+i,9,SumNalTot);
Xlstwritetomatrix (17+i,10,StoimWithNalTot);

Xlstwritetomatrix (19+i,1,'Руководитель организации');
Xlstwritetomatrix (21+i,1,'Индивидуальный предприниматель');
Xlstwritetomatrix (23+i,1,'ПРИМЕЧАНИЕ.Первый экземпляр-покупателю,второй продавцу');
Xlstwritetomatrix (20+i,2,'(подпись)');
Xlstwritetomatrix (22+i,2,'(подпись)');
Xlstwritetomatrix (20+i,4,'(ф.и.о)');
Xlstwritetomatrix (22+i,4,'(ф.и.о)');
Xlstwritetomatrix (19+i,6,'Главный бухгалтер');
Xlstwritetomatrix (20+i,8,'(подпись)');
Xlstwritetomatrix (20+i,10,'(ф.и.о)');

end.
.begin
//xlFrameCells(2,6,8,3,12,1,100,11);
xlWriteMatrixToExcel(1,1);
xlFreeMatrix;
xlSaveWorkBookByName(Номер);
xlKillExcel;
//crSF.fexit;
end.

.endform

Когда утилиту запускаешь для печати одной накладной,то она выдает одну СФ в Excele,а когда для печати нескольких накладных,то она выдает последнюю.Возможно надо использовать другую функцию для открытия Excel.
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

А что мешает для каждой накладной (вернее существующего СФ) создавать новый лист с уникальным именем (допустим номер СФ), делать его активным, и в нем уже колбасить все?

в результате поимеете одну книгу, все листы которой - суть набор СФ по выбранным накладным
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Sytin
Постоянный обитатель
Сообщения: 159
Зарегистрирован: 28 сен 2005, 19:48
Откуда: mos
Контактная информация:

Сообщение Sytin »

Собственно в этом и был вопрос,как это сделать?
Может книга каждый раз открывается по новой?
Juve
Постоянный гость
Сообщения: 60
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Москва
Контактная информация:

Сообщение Juve »

Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

точнее - xlAddSheet а потом xlSetActiveSheet(), т.к. все ф-ии работают с текущим (активным листом).

Да, еще следует помнить что
1)нумерация листов начитается не с 0 а с 1 (по басиковски)
2)лист всегда вставляется в позицию ПЕРЕД текущим активным листом (т.е. если текущил лист 5-й, то лист вставится перед 5-м текущим ДО вставки и сл-но сам станет 5-м, а тот на котором были до вставки станет 6-м)
3) если не задавать имени листа, или задать его некорректно, то создастся лист с именем "ЛистN" или "SheetN" (в зависимости от русифицированности вашего Офиса), где N-порядковый номер вставленного листа. В общем подставляет свое системное наименование, так, если бы Вы из Ёкселя выполняли ф-ю "Вставить новый лист"
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Снова Excel!

Сообщение Алексей »

Что то много тем про эксель, задам тут
Как можно в открытом шаблоне экселя вставить строчку пустую, ну или скопированную в буфер со сдвигом данных вниз? Есть функции? в доке не нашел, или может быть старая?
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Снова Excel!

Сообщение Maverick »

Эммм... в Ёкселе есть строчки? Я думал что там ячейки...
Кто мешает вставить регион с пустыми значениями?

Или речь идет о вставке пустой строки в текст ячейки? Тогда это в принципе невозможно - я даже вручную не знаю как в одной и той же ячейке не то что пустой абзац вставить, но даже сделать перевод каретки для начала нового абзаца.

так что рекомендую все-таки экспериментировать с ячейками: 1 горизонтальный регион (N выделенных столбцов и 1 строка) для каждого абзаца
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
Алексей
Местный житель
Сообщения: 2896
Зарегистрирован: 24 июн 2005, 12:12
Откуда: Иркутская область

Re: Снова Excel!

Сообщение Алексей »

вставить ячейки со сдвигом... видимо xlInsertRange
плохо искал :)
hope
Местный житель
Сообщения: 1353
Зарегистрирован: 29 мар 2005, 17:49
Контактная информация:

Re: Снова Excel!

Сообщение hope »

По ALT+ENTER переход на новую строку в ячейке.
Ответить