Получаем TObject; по Button3Click(Sender: ' ViborToMemo(Vibor3); str1:=Vibor2.Сделка.Номер;
Телефон службы поддержки:
+7(903)756-28-61
  [ Промышленный дизайн - www.MainCrafT.org ]  •••  [ Размещение статьи на этом сайте: 100р = 1год ]

 
Назад в раздел:

1С предприятие OnLine


Реклама:
 

ICQ консультации:

149 807 234 



Temple более Windows, ввести Variant; str2:=Vibor2.ВалютаДокумента.Наименование; Variant;
 
www.shleg.ruwww.digitalvita.ru
www.phototitle.ru
Locations of visitors to this page
www.people-exe.maincraft.org
oldmaincraft_2009-10-28
www.people-exe.narod.ru
clan-dn
 

Мотиватор:
+40
-23
ВНИМАНИЕ!!!
MainCrafT НЕ MineCrafT
Данный сайт не имеет отношения к игре http://www.minecraft.net/
Подробности: http://www.google.ru/search?q=minecraft
MainCrafT NOT MineCrafT
This site has no relation to the game http://www.minecraft.net/
Details: http://www.google.com/search?q=minecraft

 
"Реализация Товаров и Услуг." из 1С на сайт, продолжение «POST загрузка на сайт»

Code Delphi 5 (+ обработка POST на сокетах)

unit Unit1;

interface

uses
  ComObj,
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls, StdCtrls, Buttons, ComCtrls, ScktComp;

type
  TMyArray = array [0..6] of string;
  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;
    Button3: TButton;
    Button4: TButton;
    Edit1: TEdit;
    Label5: TLabel;
    ClientSocket1: TClientSocket;
    Edit2: TEdit;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);

  private
    { Private declarations }
  public
    { Public declarations }
    Connect1C: OleVariant;
    HTTP_POST   : String;
  end;

const
// Sets UnixStartDate to TDateTime of 01/01/1970
  UnixStartDate: TDateTime = 25569.0;
  sLineBreak: String = #13#10;

var
  Form1: TForm1;
  NetOrder: array of TMyArray;
    FContent    : String;
    FResult     : String; // Эта переменная будет содержать ответ сервера
    WebServer: String;
    WebPort: Integer;
    PostAddr: String;
    HTTP_DATA: String;

implementation

{$R *.DFM}

{ Эти функции сделают некоторое url-кодирование }  
{ Например.   'John Smith' => 'John+Smith'  }
function HTTPTran(St : String) : String;
var i : Integer;  
begin  
 Result:='';  
 for i:=1 to length(St) do  
   if St[i] in ['a'..'z','A'..'Z','0','1'..'9'] then  
     Result:=Result+St[i]  
   else if St[i]=' ' then  
     Result:=Result+'+'
     //Result:=Result+'%20'
   else  
     Result:=Result+'%'+IntToHex(Byte(St[i]),2);  
end;
// Чтение данных из сокета на Delphi
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 // Получаем результат
 FResult:=FResult+Socket.ReceiveText;
 Form1.Memo1.Text:=FResult;
 Form1.Memo2.Lines.add('Read');
end;
// Запись данных в сокет на Delphi
procedure TForm1.ClientSocket1Write(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 // Постим данные
 Socket.SendText(HTTP_POST);
 Form1.Memo2.Lines.add('Write');
end;
// Обработка ошибок сокета на на Delphi
procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
 Form1.Memo2.Lines.add('Error'+IntToStr(ErrorCode));
 ErrorCode := 0; // Игнорируем ошибки
end;
// Отсоединение от сокета на Delphi
procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
 // ЗДЕСЬ МОЖНО ОБРАБОТАТЬ FResult //
 Form1.Memo2.Lines.add('Disconnect');
 ClientSocket1.Active := False;
end;
// Соединение на сокетах на Delphi
procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  Form1.Memo2.Lines.add('Connecting');
end;
// Соединение на сокетах на Delphi
procedure TForm1.ClientSocket1Connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
   Form1.Memo2.Lines.add('Connect');
end;
// А эта для постинга данных формы.
// Отправка на сервер
procedure TForm1.Button4Click(Sender: TObject);
begin
// Очищаем результаты
        FResult:='';
        HTTP_POST:='';
// Вы можете ввести поля формы, которые необходимы
// Вот некоторые примеры:
        FContent:='action=1C_to_Web&'+
        'Password=&'+
        'Content='+HTTPTran(Form1.Memo1.Text)+'&'+
        'EndContent=true&'+
        'B1=Submit'+sLineBreak;
// Вычисляем длину содержимого
        FContent:='Content-Length: '+IntToStr(Length(FContent))+sLineBreak+sLineBreak+FContent;
// Соединение напрямую
        Form1.ClientSocket1.Host := 'www.'+Edit2.Text;
        Form1.ClientSocket1.Port := 80;
///////////////////////// Сам запрос
        HTTP_POST:='POST http://'+Edit2.Text+Edit1.Text+' HTTP/1.0'+sLineBreak+
        'Host: www.'+Edit2.Text+sLineBreak+
        'Referer: http://'+Edit2.Text+'/'+sLineBreak+
        'Cookie: income=1'+sLineBreak+
        'Content-Type: application/x-www-form-urlencoded'+sLineBreak+FContent;
// Пытаемся открыть соединение
        Form1.Memo2.Text:=HTTP_POST;
        Form1.ClientSocket1.Active := True;
        //Form1.ClientSocket1.Open;
end;

// Функции для работы с временем в стиле 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 ViborToMemo(Vibor2 : Variant);
var
    str1: string;
    str2: string;
    str3: string;
begin
    str1:=Vibor2.Номер;
    str2:=Vibor2.Дата;
    Form1.Memo1.Lines.Add('Реализация товаров и услуг №'+ str1 +' от '+ str2);
    str1:=Vibor2.СуммаДокумента;
    str2:=Vibor2.ВалютаДокумента.Наименование;
    if(Vibor2.СуммаВключаетНДС=-1)then Form1.Memo1.Lines.Add('На '+str1+str2+' НДС -1')
    else Form1.Memo1.Lines.Add('На '+str1+str2+' НДС ?');
    str1:=Vibor2.Контрагент.Наименование;
    Form1.Memo1.Lines.Add('От контрагента: '+str1);
    str1:=Vibor2.Сделка.Номер;
    str2:=Vibor2.Сделка.Дата;
    Form1.Memo1.Lines.Add('Документ основание №'+str1+' от '+str2);
    str1:=Vibor2.Ответственный.Наименование;
    Form1.Memo1.Lines.Add('Ответственный: '+str1);
    str1:=Vibor2.Комментарий;
    Form1.Memo1.Lines.Add('Комментарий: '+str1);
    Form1.Memo1.Lines.Add('           ');
end;

// Массив в мемо
procedure ArrayToMemo(Vibor2 : TMyArray);
begin
    Form1.Memo1.Lines.Add(Vibor2[0]);
    Form1.Memo1.Lines.Add(Vibor2[1]);
    Form1.Memo1.Lines.Add(Vibor2[2]);
    Form1.Memo1.Lines.Add(Vibor2[3]);
    Form1.Memo1.Lines.Add(Vibor2[4]);
    Form1.Memo1.Lines.Add(Vibor2[5]);
    Form1.Memo1.Lines.Add(Vibor2[6]);
end;

// Variant в массив
function ViborToArray(Vibor2 : Variant): TMyArray;
var
    str1: string;
    str2: string;
    str3: string;
begin
    str1:=Vibor2.Номер;
    str2:=Vibor2.Дата;
    Result[0]:='Реализация товаров и услуг №'+ str1 +' от '+ str2;
    str1:=Vibor2.СуммаДокумента;
    str2:=Vibor2.ВалютаДокумента.Наименование;
    if(Vibor2.СуммаВключаетНДС=-1)then Result[1]:='На '+str1+str2+' НДС -1'
    else Result[1]:='На '+str1+str2+' НДС ?';
    str1:=Vibor2.Контрагент.Наименование;
    Result[2]:='От контрагента: '+str1;
    str1:=Vibor2.Сделка.Номер;
    str2:=Vibor2.Сделка.Дата;
    Result[3]:='Документ основание №'+str1+' от '+str2;
    str1:=Vibor2.Ответственный.Наименование;
    Result[4]:='Ответственный: '+str1;
    str1:=Vibor2.Комментарий;
    Result[5]:='Комментарий: '+str1;
    Result[6]:=Vibor2.Номер;
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
  oDate : Longint;
  sDate, eDate : TDateTime;
begin
   oDate:=(DateTimeToUnix(now())-60*60*24*4);
   sDate:=now();
   eDate:=UnixToDateTime(oDate);
if Memo2.Text='' then
   Memo2.Lines.Add('ВЫБРАТЬ');
   Memo2.Lines.Add('*');
   Memo2.Lines.Add('ИЗ');
   Memo2.Lines.Add('Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг');
   Memo2.Lines.Add('ГДЕ');
   Memo2.Lines.Add('РеализацияТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ('+FormatDateTime('yyyy,mm,dd',eDate)+'), День) И КОНЕЦПЕРИОДА(ДАТАВРЕМЯ('+FormatDateTime('yyyy,mm,dd',sDate)+'), День)');
   Memo2.Lines.Add('И РеализацияТоваровУслуг.Проведен');
   Memo2.Lines.Add('Упорядочить по РеализацияТоваровУслуг.Дата');
end;

// Состыковка с базой 1С
procedure TForm1.Button1Click(Sender: TObject);
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;

// Обработка реализаций на интернет
procedure TForm1.Button3Click(Sender: TObject);
var
  i : Integer;
  SprKontr: Variant;
  Query: Variant;
  Vibor3: Variant;
  ViborStrok: Variant;
  num: integer;
  oDate : Longint;
  sDate, eDate : TDateTime;
  NumT: Real;
  str3: string;
  str4: string;
begin
   oDate:=(DateTimeToUnix(now())-60*60*24*4);
   sDate:=now();
   eDate:=UnixToDateTime(oDate);
if(Length(NetOrder)>0)then begin
   Form1.Memo1.Clear;
   for i := 0 to (Length(NetOrder)-1) do begin
//////////////////////// В зависимости от конфигурации поля могут иметь другое наименование!!!
      Query:=Connect1C.NewObject('Запрос');
      Query.Text:='ВЫБРАТЬ'+sLineBreak+
'    РеализацияТоваровУслуг.Номер КАК Номер,'+sLineBreak+
'    РеализацияТоваровУслуг.Дата КАК Дата,'+sLineBreak+
'    РеализацияТоваровУслуг.Контрагент КАК Контрагент,'+sLineBreak+
'    РеализацияТоваровУслуг.СуммаДокумента КАК СуммаДокумента,'+sLineBreak+
'    РеализацияТоваровУслуг.ВалютаДокумента КАК ВалютаДокумента,'+sLineBreak+
'    РеализацияТоваровУслуг.СуммаВключаетНДС КАК СуммаВключаетНДС,'+sLineBreak+
'    РеализацияТоваровУслуг.Ответственный КАК Ответственный,'+sLineBreak+
'    РеализацияТоваровУслуг.Комментарий КАК Комментарий,'+sLineBreak+
'    РеализацияТоваровУслуг.Сделка КАК Сделка,'+sLineBreak+
'    РеализацияТоваровУслуг.Проведен,'+sLineBreak+
'    РеализацияТоваровУслуг.Товары.('+sLineBreak+
'        Количество КАК КоличествоПозиций,'+sLineBreak+
'        КоличествоМест,'+sLineBreak+
'        Коэффициент,'+sLineBreak+
'        Сумма,'+sLineBreak+
'        Номенклатура,'+sLineBreak+
'        ЕдиницаИзмерения,'+sLineBreak+
//'        ЕдиницаИзмеренияМест,'+sLineBreak+
'        Цена'+sLineBreak+
')'+sLineBreak+
'ИЗ'+sLineBreak+
'    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг'+sLineBreak+
'ГДЕ'+sLineBreak+
//'    РеализацияТоваровУслуг.Номер = '+NetOrder[i][6]+sLineBreak+
'    РеализацияТоваровУслуг.Номер = &ТНомер'+sLineBreak+
'    И РеализацияТоваровУслуг.Дата МЕЖДУ НАЧАЛОПЕРИОДА(ДАТАВРЕМЯ('+FormatDateTime('yyyy,mm,dd',eDate)+'), День) И КОНЕЦПЕРИОДА(ДАТАВРЕМЯ('+FormatDateTime('yyyy,mm,dd',sDate)+'), День)'+sLineBreak+
//число(год(НачалоПериода))
//'    РеализацияТоваровУслуг.Номер = число('+NetOrder[i][6]+')'+sLineBreak+
'    И РеализацияТоваровУслуг.Проведен = ИСТИНА';
//запрос1.УстановитьПараметр("ИФ",Перечисления.ИФ.ОМС);
//запрос1.УстановитьПараметр("год", число(год(НачалоПериода)));
//запрос1.УстановитьПараметр("Проведен", Истина);
      Query.УстановитьПараметр('ТНомер', NetOrder[i][6]);
      Form1.Memo2.Clear;
      Form1.Memo2.Text:=Query.Text;
      SprKontr := Query.Выполнить();
      Vibor3 := Unassigned;
      Vibor3 := SprKontr.Выбрать();
      while (Vibor3.Следующий()) do begin
          Memo1.Lines.Add(' --'+IntToStr(i+1)+'-- ');
          ViborToMemo(Vibor3);
          ViborStrok:=Vibor3.Товары.Выбрать();
          num:=0;
          while (ViborStrok.Следующий()) do begin
              //Form1.Memo1.Lines.Add(ViborStrok.Номенклатура.Наименование);
              str3:=ViborStrok.Номенклатура.Код;
              str4:='['+str3+'] ';
              str3:=ViborStrok.Номенклатура.Наименование;
              str4:=str4+str3+': ';
              str3:=ViborStrok.КоличествоПозиций;
              str4:=str4+str3;
              str3:=ViborStrok.ЕдиницаИзмерения.Наименование;
              str4:=str4+str3+' x ';
              str3:=ViborStrok.Цена;
              str4:=str4+str3+' = ';
              str3:=ViborStrok.Сумма;
              Form1.Memo1.Lines.Add(str4+str3);
              NumT:=StrToFloat(ViborStrok.Количество);
          num:=num+1;
          end;
          Form1.Memo1.Lines.Add('Колличество строк: '+FloatToStr(NumT)+' ('+IntToStr(num)+')');
      end;
   end;
end else ShowMessage('Реализации на интернет не обнаружено!');
end;

// Отсылание запроса к базе 1С
procedure TForm1.Button2Click(Sender: TObject);
var
    sprNomen: Variant;
    sprNomenGr: Variant;
    SprKontr: Variant;
    Query: Variant;
    Vibor: Variant;
    num: integer;
    str1: string;
begin
    Query:=Connect1C.NewObject('Запрос');
    Query.Text:=Form1.Memo2.Text;
    SprKontr := Query.Выполнить();
    Vibor := SprKontr.Выбрать();
    num:=1;
    Form1.Memo1.Clear;
    while (Vibor.Следующий()) do begin
        Memo1.Lines.Add(' -'+IntToStr(num)+'- ');
        ViborToMemo(Vibor);
        str1:=Vibor.Контрагент.Наименование;
        if(str1='Интернет')then begin
            SetLength(NetOrder,Length(NetOrder)+1);
            NetOrder[High(NetOrder)]:=ViborToArray(Vibor);
        end;
        //if num = 10 then break;
        num:=num+1;
    end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
   ClientSocket1.Active := False;
end;

end.




Code PHP

function ProcessingExchange($content){
    $text=$content;
    $path='1c_catalog/';
    $date=date("Y-m-d_H:i:s");
    $fname = $path.'1cv8_'.$date.'.tpl';
    // Обработка данных
    
    
    // Запись лог файла
    $fh = fopen($fname,"a+");
    if(fwrite($fh, $text)){echo "LogFile record\n";}else{echo "LogFile ERROR!\n";}
    fclose($fh);
    // Удаление старых логов
    $cdir = @opendir($path);
    if ($cdir){
        while (($efile=readdir($cdir)) !== false){
            if(preg_match("/^1cv8_(\d{4}-\d{2}-\d{2})_\d{2}:\d{2}:\d{2}\.tpl$/i",$efile,$ctime)){
                //1cv8_2013-02-28_16_29_37.tpl
                $ftime1=$ctime[1].' '.str_replace("-",":",$ctime[2]);
                $ftime2=strtotime($ftime1);
                if((time()-$ftime2)>(60*60*24*30)){
                    if(unlink($path.$efile)){
                        echo "LogFile ".$efile." delete\n";
                    }else{
                        echo "LogFile ".$efile." delete ERROR!\n";
                    }
                }
            }
        }
    }
}
// Проверка запроса
if(isset($_POST)){
    if(isset($_POST['action'])&&$_POST['action']=='1C_to_Web'){
        if(isset($_POST['Password'])&&$_POST['Password']==''){
            if(isset($_POST['EndContent'])&&$_POST['EndContent']=='true'){
                if(isset($_POST['Content'])&&$_POST['Content']!=''){
                    ProcessingExchange($_POST['Content']);
                }else{
                    echo 'Content empty';
                }
            }else{
                echo 'Content lost';
            }
        }else{
            echo 'Password failed';
        }
    }else{
        echo 'action failed';
    }
}





Повторюсь: Извиняюсь за индусский код
есть к чему стремится... есть что переделать, оптимизировать

Главное что теперь можно спокойно выгружать что угодно из 1С на сайт

В планировщике задач поставить загрузку по расписанию и вперёд, хоть прайс лист, хоть заказ в письме покупателю, да что угодно
...

Edit_1C8_Name.Text = V82.Application (V81.Application или V8.Application);
Edit_Init.Text = Srvr=***;Ref=***;Usr="***";Pwd="***"; 
Edit2.Text = anyhost.ru; // Сайт получатель
Edit1.Text = /anypath/anyphpfile.php; // PHP скрипт получатель запроса

(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.

система комментирования CACKLE

Реклама:

http://www.valuehost.ru/ Хостинг Номер 1: Valuehost 25GB План А • Если вдруг закажите что-то у валуехоста, скажите им номер по партнёрской программе 44877 (Для плательщика 300044877), а то у них она работает непонятно, пока сам не скажешь, не добавят бонусов. Мне будет приятно :) Спасибо!

...
Сайт разработан для продвижения идей клуба "Основное ремесло"
© MainCrafT.org 2005-2017гг. © Клуб "Основное ремесло" 2005-2017гг. © Shleg A.V.
© people-exe.org (закрыт) 1998-2006гг. © red-brick.org (закрыт) 2004-2005гг. © propeopleclub.org (закрыт) 2004-2005гг.


Внимание!!! Данный интернет-сайт носит исключительно информационный характер и ни при каких условиях не является публичной офертой, определяемой положениями ч. 2 ст. 437 Гражданского кодекса Российской Федерации. Информацию о стоимости и сроках выполнения услуг, можно получить по контактам указанными далее. с 10-00 до 19-00, Пн-Пт по телефону: +7 (903) 756-28-61, через сайт: круглосуточно, без выходных. Для подтверждения заказа через сайт менеджер свяжется с Вами в самый короткий срок. Написать нам на почту: support@maincraft.org, При возникновении вопросов, Вы можете связаться с нами по телефону либо получить ICQ консультации, ICQ№149-807-234, С администратором ресурса можно связаться по e-mail: admin@maincraft.org
// to НДС РеализацияТоваровУслуг.Ответственный // хоть Vibor
  [ Промышленный дизайн - www.MainCrafT.org ]  •••  [ Размещение статьи на этом сайте: 100р = 1год ]
Rambler's Top100 Яндекс цитирования Яндекс.Метрика
раскрутка сайта, оптимизация сайта Сео анализ сайта Проверка сайта

© MainCrafT.org 2005-2017гг. © Клуб "Основное ремесло" 2005-2017гг. © Shleg A.V.
число('+NetOrder[i][6]+')'+sLineBreak+ url-кодирование FormCreate(Sender: array Variant; St[i]=' Эти