Создание выгрузки документов "Реализация Товаров и Услуг." из 1С на сайт через DELPHI
unit Unit1;
interface
uses
ComObj,
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Buttons, ComCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Label2: TLabel;
Edit_1C8_Name: TEdit;
Edit_Init: TEdit;
Memo1: TMemo;
Memo2: TMemo;
Button2: TButton;
Label3: TLabel;
Label4: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
Connect1C: OleVariant;
end;
const
// Sets UnixStartDate to TDateTime of 01/01/1970
UnixStartDate: TDateTime = 25569.0;
var
Form1: TForm1;
implementation
{$R *.DFM}
// Функции для работы с временем в стиле UNIX
function DateTimeToUnix(ConvDate: TDateTime): Longint;
begin
//example: DateTimeToUnix(now);
Result := Round((ConvDate - UnixStartDate) * 86400);
end;
function UnixToDateTime(USec: Longint): TDateTime;
begin
//Example: UnixToDateTime(1003187418);
Result := (Usec / 86400) + UnixStartDate;
end;
// Проверка к конекту 1С
function YesLinkToVariant(HandleAny : Variant) : boolean;
//Проверяет, корректна ли ссылка (HandleAny)
begin
Result:=FALSE;
if not VarIsEmpty(HandleAny) then Result:=TRUE;
end;
// К процедуре PrintArrayOfVar
function VariantType(varVar: Variant): Integer;
begin
Result:=(VarType(varVar));
end;
// Вывод вариантного массива в мемо
procedure PrintArrayOfVar(aVar:Variant);
var
i,i2:Integer;
begin
if VariantType(aVar) <> VarArray then
begin
i2:=VarArrayDimCount(aVar);
for i:=VarArrayLowBound(aVar,i2) to VarArrayHighBound(aVar,i2) do
begin
case VariantType(aVar[i]) of
varString: Form1.Memo1.Lines.add(Format('aVar[%d] String: %s',[i,aVar[i]]));
varInteger: Form1.Memo1.Lines.add(Format('aVar[%d] Integer: %s',[i,IntToStr(aVar[i])]));
end;
end;
end;
end;
// Формирование запроса при загрузке
procedure TForm1.FormCreate(Sender: TObject);
var
cDate, oDate : Longint;
sDate, eDate : TDateTime;
begin
//cDate:=DateTimeToUnix(now);
oDate:=(DateTimeToUnix(now())-60*60*24*4);
//sDate:=UnixToDateTime();
sDate:=now();
eDate:=UnixToDateTime(oDate);
if Form1.Memo2.Text='' then
Form1.Memo2.Lines.Add('ВЫБРАТЬ');
Form1.Memo2.Lines.Add('*');
Form1.Memo2.Lines.Add('ИЗ');
Form1.Memo2.Lines.Add('Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг');
Form1.Memo2.Lines.Add('ГДЕ');
Form1.Memo2.Lines.Add('РеализацияТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ('+FormatDateTime('yyyy,mm,dd',eDate)+'), День) И КОНЕЦПЕРИОДА(ДАТАВРЕМЯ('+FormatDateTime('yyyy,mm,dd',sDate)+'), День)');
Form1.Memo2.Lines.Add('И РеализацияТоваровУслуг.Проведен');
Form1.Memo2.Lines.Add('Упорядочить по РеализацияТоваровУслуг.Дата');
end;
// Состыковка с базой 1С
procedure TForm1.Button1Click(Sender: TObject);
var
sprNomen: Variant;
sprNomenGr: Variant;
SprKontr: Variant;
Query: Variant;
Vibor: Variant;
num: integer;
begin
if Edit_1C8_Name.Text <> '' then begin
if Edit_Init.Text <> '' then begin
Connect1C := CreateOleObject(Edit_1C8_Name.Text);
Connect1C.Connect(Edit_Init.Text);
if YesLinkToVariant(Connect1C) then begin
ShowMessage('Есть OLE соединение');
end else begin
ShowMessage('Ошибка OLE соединения');
end;
end else begin
ShowMessage('Ошибка, пустое поле инициализации');
end;
end else begin
ShowMessage('Ошибка, пустое поле типа соединения');
end;
end;
{
Запись документа в 1Сv8.1 из Delphi
nn1:= s1C8_ole.Справочники.Организации;
SbCnt_ole := s1C8_ole.Документы.СчетНаОплатуПокупателю.СоздатьДокумент();
SbCnt_ole.Дата := Date;
SbCnt_ole.Организация:= nn1.НайтиПоНаименованию('Конфетпром');
SbCnt_ole.УстановитьВремя();
SbCnt_ole.УстановитьНовыйНомер();
SbCnt_ole.Записать();
}
// Отсылание запроса к базе 1С
procedure TForm1.Button2Click(Sender: TObject);
var
sprNomen: Variant;
sprNomenGr: Variant;
SprKontr: Variant;
Query: Variant;
Vibor: Variant;
num: integer;
str1: string;
str2: string;
str3: string;
begin
//sprNomen := Connect1C.Справочники.Номенклатура;
//sprNomenGr := sprNomen.СоздатьГруппу();
//sprNomenGr.Наименование := '***** COM ******';
//sprNomenGr.Записать;
//SprKontr := Connect1C.Справочники.Контрагенты;
// Error SprKontr := Connect1C.ЖурналыДокументов.ДокументыПокупателей; Error
// 2 вариант
Query:=Connect1C.NewObject('Запрос');
//Query.Text:='Выбрать Документы.РеализацияТоваровУслуг ИЗ Документы.РеализацияТоваровУслуг как РеализацияТоваровУслуг';
Query.Text:=Form1.Memo2.Text;
SprKontr := Query.Выполнить();
// 1 вариант
//SprKontr := Connect1C.Документы.РеализацияТоваровУслуг;
//Документы.РеализацияТоваровИУслуг.Выбрать(НачДата,КонДата);
Vibor := SprKontr.Выбрать();
num:=1;
while (Vibor.Следующий()) do begin
//Документы.РеализацияТоваровУслуг error Memo1.Lines.Add(Vibor.Наименование);
//Memo1.Lines.Add(Vibor.Дата);
Memo1.Lines.Add(' -'+IntToStr(num)+'- ');
str1:=Vibor.Номер;
str2:=Vibor.Дата;
Memo1.Lines.Add('Реализация товаров и услуг №'+ str1 +' от '+ str2);
//Memo1.Lines.Add(Vibor.Номер);
//Memo1.Lines.Add(Vibor.СуммаВключаетНДС);
//Memo1.Lines.Add(Vibor.СуммаДокумента);
//Memo1.Lines.Add(Vibor.ВалютаДокумента.Наименование);
str1:=Vibor.СуммаДокумента;
str2:=Vibor.ВалютаДокумента.Наименование;
if(Vibor.СуммаВключаетНДС=-1)then Memo1.Lines.Add('На '+str1+str2+' НДС -1')
else Memo1.Lines.Add('На '+str1+str2+' НДС ?');
//Memo1.Lines.Add(Vibor.Контрагент.Наименование);
str1:=Vibor.Контрагент.Наименование;
Memo1.Lines.Add('От контрагента: '+str1);
// error Memo1.Lines.Add(Vibor.Сделка);
//Memo1.Lines.Add(Vibor.Сделка.Номер);
str1:=Vibor.Сделка.Номер;
str2:=Vibor.Сделка.Дата;
Memo1.Lines.Add('Документ основание №'+str1+' от '+str2);
//Memo1.Lines.Add(Vibor.Ответственный.Наименование);
//Memo1.Lines.Add(Vibor.Комментарий);
str1:=Vibor.Ответственный.Наименование;
Memo1.Lines.Add('Ответственный: '+str1);
str1:=Vibor.Комментарий;
Memo1.Lines.Add('Комментарий: '+str1);
Memo1.Lines.Add(' ');
//PrintArrayOfVar(Vibor);
if num = 10 then break;
num:=num+1;
end;
end;
end.
Может кому пригодится
Edit_1C8_Name.Text = V82.Application (V81.Application или V8.Application);
Edit_Init.Text = Srvr=***;Ref=***;Usr="***";Pwd="***";
(CopyLeft) MainCrafT.org 2013г. Данная программа является свободным программным обеспечением. Вы вправе распространять ее и/или модифицировать в соответствии с условиями версии 2 либо по вашему выбору с условиями более поздней версии Стандартной Общественной Лицензии GNU, опубликованной Free Software Foundation.
Мы распространяем эту программу в надежде на то, что она будет вам полезной, однако НЕ ПРЕДОСТАВЛЯЕМ НА НЕЕ НИКАКИХ ГАРАНТИЙ, в том числе ГАРАНТИИ ТОВАРНОГО СОСТОЯНИЯ ПРИ ПРОДАЖЕ и ПРИГОДНОСТИ ДЛЯ ИСПОЛЬЗОВАНИЯ В КОНКРЕТНЫХ ЦЕЛЯХ.Для получения более подробной информации ознакомьтесь со Стандартной Общественной Лицензией GNU.
Вместе с данной программой вы должны были получить экземпляр Стандартной Общественной Лицензии GNU. Если вы его не получили, сообщите об этом в Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Внимание!!! Данный интернет-сайт носит исключительно информационный характер и ни при каких условиях не является публичной офертой, определяемой положениями ч. 2 ст. 437 Гражданского кодекса Российской Федерации. Информацию о стоимости и сроках выполнения услуг, можно получить по контактам указанными далее. с 10-00 до 19-00, Пн-Пт по телефону: +7 (903) 756-28-61, через сайт: круглосуточно, без выходных. Для подтверждения заказа через сайт менеджер свяжется с Вами в самый короткий срок. Написать нам на почту: support@maincraft.org, При возникновении вопросов, Вы можете связаться с нами по телефону либо получить ICQ консультации, ICQ№149-807-234, С администратором ресурса можно связаться по e-mail: admin@maincraft.org
вам end StdCtrls, полезной, i2:=VarArrayDimCount(aVar); от then