BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 18 июн 2025, 19:54

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 18 ] 
Автор Сообщение
СообщениеДобавлено: 14 май 2009, 12:50 
При работе с модулем bill возникают некоторые сложности, предлагаю внести некоторые изменения:
1. При создании счетов и счет-фактур из сторонних программ, например из 1с, возникают проблемы из-за того что документ в биллинге создается асинхронно.
Напрмер отправляю запрос:

Код:
module=bill&m=3&date=30.4.2009&action=GenerateBills&y=2009&
bills=
<?xml version="1.0" encoding="windows-1251"?>
<bills>
   <bill id="140" type="2" cid="36080" summ="95.94" account_id="1">
      <pos name="Местные телефонные соединения за апрель" summ="95.94" position_id="2" quantity="1" unit="шт.">
      </pos>
   </bill>
</bills>&

И получаю ответ еще до того момента как счет создастся в базе.
Вобщемто при решении стандартной задачи "создать счет и определить его id" возникают проблемы. Конечто перед определением id счета можно поставить задержку, но это прохой вариант.
Такие проблемы не наблюдалисть с вер. 4.4
Предлагаю сделать создание счета синхронным, т.е. сервер не отвечает на запрос создания счета до тех пор пока счет не создаться в базе.

2. Почему поле "Количество" в позиции документа должно быть целым числом? Это наклатывает определенные ограничения, что неудобно.
Проше сделать возможным указывать количество дробным числом.

3. Нумерация документов, это вообще беда...
Зачем такие сложности с нумерацией?
Почему бы не ввести просто поле номер документа? Пусть это поле генерируется автоматически по вашей логике, но необходимо дать возможность указать произвольный номер. У нас нумерация документов происходит в 1с-ке и потом приходится лесть в базу биллинга и править номер документа. Все это очень сложно и не удобно.

Прошу разработчиков прислушаться к моим замечаниям, и сделать модуль bill более удобным в использовании.

Спасибо.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 май 2009, 16:00 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
1. Такого не должно быть. Нужен контрольный пример какой-нибудь, что вы делаете подробнее и как определяете, что счета нет.

2. В 4.6 оно может быть дробным.
http://www.bgbilling.ru/v4.6/doc/ch10s0 ... l#d0e15327
Цитата:
bill.pos.<код позиции>.qtynums=<число знаков после запятой для количества>


3. Беда, согласен. Просто редактировать номер дать не можем сейчас, т.к. номер генерируется из 3х других последовательных номеров. Будем что-нибудь придумывать с нумерацией.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 15 май 2009, 17:49 
Цитата:
2. В 4.6 оно может быть дробным.
http://www.bgbilling.ru/v4.6/doc/ch10s0 ... l#d0e15327

3. Беда, согласен. Просто редактировать номер дать не можем сейчас, т.к. номер генерируется из 3х других последовательных номеров. Будем что-нибудь придумывать с нумерацией.


Ок.



Цитата:
1. Такого не должно быть. Нужен контрольный пример какой-нибудь, что вы делаете подробнее и как определяете, что счета нет.


С 1с-ой, насколько я понимаю, вы не дружите, сделал тестовый скрипт на перле:
Код:
#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;
use XML::Simple;
use LWP::Simple;
use Data::Dumper;
use Encode;

my $BGBURL = 'http://127.0.0.1:8080/bgbilling/executer?';
my $BGBUsername = '1c';
my $BGBPassword = 'password';

my $cid = '36080';
my $mid = '8';
my $mm = '4';
my $yy = '2009';
my $doc_type = '2';

my %h_new;
$h_new{'module'} = 'bill';
$h_new{'action'} = 'GenerateBills';
$h_new{'mid'} = $mid;
$h_new{'m'} = $mm-1;
$h_new{'y'} = $yy;
$h_new{'date'} = '1.'.$mm.'.'.$yy;
$h_new{'bills'} = '<?xml version="1.0" encoding="windows-1251"?>
<bills>
  <bill id="140" type="'.$doc_type.'" cid="'.$cid.'" summ="95.94" account_id="1">
    <pos name="Местные телефонные соединения за апрель" summ="95.94" position_id="2" quantity="1" unit="шт.">
    </pos>
  </bill>
</bills>';

my %h_get;
$h_get{'module'} = 'admin';
$h_get{'action'} = 'SQLEditor';
$h_get{'page'} = '1';
$h_get{'pageSize'} = '1000000';
$h_get{'sql'} = "SELECT id FROM bill_data_$mid WHERE cid='$cid' AND type='$doc_type' AND mm='".($mm-1)."' AND yy='$yy'";

print "Ищем счет\n";
print Dumper(BGBPost(\%h_get));

print "Создаем счет\n";
print Dumper(BGBPost(\%h_new));

print "Ищем счет\n";
print Dumper(BGBPost(\%h_get));

########################################################################
sub BGBPost{
  my %data = %{$_[0]};
  $data{'user'} = $BGBUsername;
  $data{'pswd'} = $BGBPassword;
  my $browser = LWP::UserAgent->new;
  my $response = $browser->post( $BGBURL , \%data);
  if ($response->content !~ /\<\?xml version\=\"1\.0\" encoding\=\"windows\-1251\"\?\>/){
    #ошибка
    exit;
  };
  my $xsimple = XML::Simple->new();
  my $h = $xsimple->XMLin($response->content ,KeyAttr => { xml_id => 'id', xml_name => 'name', xml_key =>'key' });
  if (defined($h) && exists($h->{'status'})){
    $h = HashDecoder($h);
  }else{
  };
  return $h;
}
########################################################################
sub Get{
  my %data = %{$_[0]};
  my $url = $BGBURL.'user='.$BGBUsername.'&pswd='.$BGBPassword.'&';
  foreach (keys %data){
    $url .= $_.'='.$data{$_}.'&';
  };
  my $xml_doc = get($url);
  my $xsimple = XML::Simple->new();
  my $h = $xsimple->XMLin($xml_doc,KeyAttr => { xml_id => 'id', xml_name => 'name', xml_key =>'key' });
  if (defined($h) && exists($h->{'status'})){
    $h = HashDecoder($h);
  }else{
  };
  return $h;
}
########################################################################
sub HashDecoder{
  my $h = $_[0];
  if (ref($h) eq "HASH"){
    foreach (keys %$h){
      $h->{$_} = HashDecoder($h->{$_});
    };
    return $h;
  }elsif (ref($h) eq "ARRAY"){
    foreach (@$h){
      $_ = HashDecoder($_);
    };
    return $h;
  }else{
    $h = Encode::encode('cp1251',$h);
    return $h;
  }
}
########################################################################



Запускаю его не тестовом сервере. Вывод:
Код:
root@bgbilling:~/lda/test_bill# ./bill.pl
Ищем счет
$VAR1 = {
          'status' => 'ok',
          'table' => {
                     'head' => {
                               'record_count' => '0',
                               'column_count' => '1',
                               'row0' => {
                                         'title' => 'id'
                                       },
                               'pageCount' => '0'
                             },
                     'data' => {}
                   }
        };
Создаем счет
$VAR1 = {
          'status' => 'ok'
        };
Ищем счет
$VAR1 = {
          'status' => 'ok',
          'table' => {
                     'head' => {
                               'record_count' => '1',
                               'column_count' => '1',
                               'row0' => {
                                         'title' => 'id'
                                       },
                               'pageCount' => '1'
                             },
                     'data' => {
                               'row' => {
                                        'row0' => '2154'
                                      }
                             }
                   }
        };

Как видно счет создался и я смог определить его id.


Запускаю архивирование большого файла, что бы сервер работал под нагрузкой и запускаю скрипт.

Получаю:
Код:
root@bgbilling:~/lda/test_bill# ./bill.pl
Ищем счет
$VAR1 = {
          'status' => 'ok',
          'table' => {
                     'head' => {
                               'record_count' => '0',
                               'column_count' => '1',
                               'row0' => {
                                         'title' => 'id'
                                       },
                               'pageCount' => '0'
                             },
                     'data' => {}
                   }
        };
Создаем счет
$VAR1 = {
          'status' => 'ok'
        };
Ищем счет
$VAR1 = {
          'status' => 'ok',
          'table' => {
                     'head' => {
                               'record_count' => '0',
                               'column_count' => '1',
                               'row0' => {
                                         'title' => 'id'
                                       },
                               'pageCount' => '0'
                             },
                     'data' => {}
                   }
        };


В этом случае я не смог определить id.


Последний раз редактировалось lda 19 май 2009, 14:33, всего редактировалось 1 раз.

Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 12:37 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
У вас случаем Slave база не подключена?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 12:39 
Нет. У нас версия биллинга 4.5.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 13:31 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
http://bgbilling.ru/patch/bill.jar - положите в BGBillingServer/lib вместо существующего и прогоните снова ваш тест.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 13:45 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Перевыложил файл, по ошибке для 4.6 выложил.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 14:44 
Подменил библиотеку, заново прогнал тест несколько раз.
Ничего не изменилось, время от времени я не могу получить id счета.

Заметил такую особенность, если запустить тест после перезапуска сервера биллинга, то я всегда не могу определить id счета.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 15:09 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
А попробуйте сделать запрос напрямую в БД, не через SQL Редактор. Вы перед каждым тестом удаляете счета договора?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 15:10 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Можно сделать еще, чтобы давало несколько запросов в БД? Какая задержка перед появлением записи?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 15:45 
Цитата:
А попробуйте сделать запрос напрямую в БД, не через SQL Редактор.


Переписал скрипт:
Код:
#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;
use XML::Simple;
use LWP::Simple;
use Data::Dumper;
use Encode;
use DBI;

my $BGBURL = 'http://127.0.0.1:8080/bgbilling/executer?';
my $BGBUsername = '1c';
my $BGBPassword = 'Password';
my $DBUsername = 'root';
my $DBPassword = 'Password';

my $cid = '36080';
my $mid = '8';
my $mm = '4';
my $yy = '2009';
my $doc_type = '2';

my $db = DBI->connect('dbi:mysql:database=bgbilling;host=localhost;port=3306',$DBUsername,$DBPassword);
if ($db){
  $db->do('SET CHARACTER SET cp1251');
  $db->do('SET NAMES cp1251');
};

my %h_new;
$h_new{'module'} = 'bill';
$h_new{'action'} = 'GenerateBills';
$h_new{'mid'} = $mid;
$h_new{'m'} = $mm-1;
$h_new{'y'} = $yy;
$h_new{'date'} = '1.'.$mm.'.'.$yy;
$h_new{'bills'} = '<?xml version="1.0" encoding="windows-1251"?>
<bills>
  <bill id="140" type="'.$doc_type.'" cid="'.$cid.'" summ="95.94" account_id="1">
    <pos name="Местные телефонные соединения за апрель" summ="95.94" position_id="2" quantity="1" unit="шт.">
    </pos>
  </bill>
</bills>';

my %h_get;
$h_get{'module'} = 'admin';
$h_get{'action'} = 'SQLEditor';
$h_get{'page'} = '1';
$h_get{'pageSize'} = '1000000';
$h_get{'sql'} = "SELECT id FROM bill_data_$mid WHERE cid='$cid' AND type='$doc_type' AND mm='".($mm-1)."' AND yy='$yy'";

#print "Ищем счет\n";
#print Dumper(BGBPost(\%h_get));
my $res = Select(
  "Get bill",
  ">=0",
  "SELECT id FROM bill_data_$mid WHERE cid='$cid' AND type='$doc_type' AND mm='".($mm-1)."' AND yy='$yy'"
);
print "Кол-во найденых счетов: ".$res->rows."\n";
print "Создаем счет\n";
print Dumper(BGBPost(\%h_new));

#print "Ищем счет\n";
#print Dumper(BGBPost(\%h_get));
$res = Select(
  "Get bill",
  ">=0",
  "SELECT id FROM bill_data_$mid WHERE cid='$cid' AND type='$doc_type' AND mm='".($mm-1)."' AND yy='$yy'"
);
print "Кол-во найденых счетов: ".$res->rows."\n";


########################################################################
sub Select{
  my ($header, $condition, $SQL_QUERY) = @_;
  if (!$header) {return -1};
  if (!$condition) {return -1};
  if (!$SQL_QUERY) {return -1};
  my $res = $db->prepare($SQL_QUERY);
  if (!$res->execute){
    print("Error. Can't $SQL_QUERY");
    print(DBI::errstr);
  }else{
    my $ntuples = $res->rows;
    my $op = '$ntuples'."$condition";
    my $condition_stat = eval $op;
    if (!$condition_stat){
      print("Error result (ntuples: $ntuples, condition: $condition) for $SQL_QUERY");
    };
  };
  return $res;
}
########################################################################
sub BGBPost{
  my %data = %{$_[0]};
  $data{'user'} = $BGBUsername;
  $data{'pswd'} = $BGBPassword;
  my $browser = LWP::UserAgent->new;
  my $response = $browser->post( $BGBURL , \%data);
  if ($response->content !~ /\<\?xml version\=\"1\.0\" encoding\=\"windows\-1251\"\?\>/){
    #ошибка
    exit;
  };
  my $xsimple = XML::Simple->new();
  my $h = $xsimple->XMLin($response->content ,KeyAttr => { xml_id => 'id', xml_name => 'name', xml_key =>'key' });
  if (defined($h) && exists($h->{'status'})){
    $h = HashDecoder($h);
  }else{
  };
  return $h;
}
########################################################################
sub Get{
  my %data = %{$_[0]};
  my $url = $BGBURL.'user='.$BGBUsername.'&pswd='.$BGBPassword.'&';
  foreach (keys %data){
    $url .= $_.'='.$data{$_}.'&';
  };
  my $xml_doc = get($url);
  my $xsimple = XML::Simple->new();
  my $h = $xsimple->XMLin($xml_doc,KeyAttr => { xml_id => 'id', xml_name => 'name', xml_key =>'key' });
  if (defined($h) && exists($h->{'status'})){
    $h = HashDecoder($h);
  }else{
  };
  return $h;
}
########################################################################
sub HashDecoder{
  my $h = $_[0];
  if (ref($h) eq "HASH"){
    foreach (keys %$h){
      $h->{$_} = HashDecoder($h->{$_});
    };
    return $h;
  }elsif (ref($h) eq "ARRAY"){
    foreach (@$h){
      $_ = HashDecoder($_);
    };
    return $h;
  }else{
    $h = Encode::encode('cp1251',$h);
    return $h;
  }
}
########################################################################


Результат:
Код:
root@bgbilling:~/lda/test_bill# ./bill2.pl
Кол-во найденых счетов: 0
Создаем счет
$VAR1 = {
          'status' => 'ok'
        };
Кол-во найденых счетов: 0


Вобщем при обращении напрямую в базу практически всегда счет не успевает создаться.

Цитата:
Вы перед каждым тестом удаляете счета договора?

Удаляю когда накопится много счетов. Иначе неудобно смотреть.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 15:51 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Цитата:
Вобщем при обращении напрямую в базу практически всегда счет не успевает создаться.

А через сколько появляется? У вас движок таблиц какой, ОС и файловая система?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 19 май 2009, 16:09 
Цитата:
А через сколько появляется?


Дописал скрипт:
Код:
#!/usr/bin/perl -w

use strict;
use LWP::UserAgent;
use XML::Simple;
use LWP::Simple;
use Data::Dumper;
use Encode;
use DBI;

my $BGBURL = 'http://127.0.0.1:8080/bgbilling/executer?';
my $BGBUsername = '1c';
my $BGBPassword = 'Password';
my $DBUsername = 'root';
my $DBPassword = 'Password';

my $cid = '36080';
my $mid = '8';
my $mm = '4';
my $yy = '2009';
my $doc_type = '2';

my $db = DBI->connect('dbi:mysql:database=bgbilling;host=localhost;port=3306',$DBUsername,$DBPassword);
if ($db){
  $db->do('SET CHARACTER SET cp1251');
  $db->do('SET NAMES cp1251');
};

my %h_new;
$h_new{'module'} = 'bill';
$h_new{'action'} = 'GenerateBills';
$h_new{'mid'} = $mid;
$h_new{'m'} = $mm-1;
$h_new{'y'} = $yy;
$h_new{'date'} = '1.'.$mm.'.'.$yy;
$h_new{'bills'} = '<?xml version="1.0" encoding="windows-1251"?>
<bills>
  <bill id="140" type="'.$doc_type.'" cid="'.$cid.'" summ="95.94" account_id="1">
    <pos name="Местные телефонные соединения за апрель" summ="95.94" position_id="2" quantity="1" unit="шт.">
    </pos>
  </bill>
</bills>';

my %h_get;
$h_get{'module'} = 'admin';
$h_get{'action'} = 'SQLEditor';
$h_get{'page'} = '1';
$h_get{'pageSize'} = '1000000';
$h_get{'sql'} = "SELECT id FROM bill_data_$mid WHERE cid='$cid' AND type='$doc_type' AND mm='".($mm-1)."' AND yy='$yy'";

#print "Ищем счет\n";
#print Dumper(BGBPost(\%h_get));
my $res = Select(
  "Get bill",
  ">=0",
  "SELECT id FROM bill_data_$mid WHERE cid='$cid' AND type='$doc_type' AND mm='".($mm-1)."' AND yy='$yy'"
);
my $begin_count = $res->rows;
print "Кол-во найденых счетов: $begin_count\n";

print "Создаем счет\n";
print Dumper(BGBPost(\%h_new));
my $begin_time = time;
foreach my $i (1..1000000){
  #print "Ищем счет\n";
  #print Dumper(BGBPost(\%h_get));
  $res = Select(
    "Get bill",
    ">=0",
    "SELECT id FROM bill_data_$mid WHERE cid='$cid' AND type='$doc_type' AND mm='".($mm-1)."' AND yy='$yy'"
  );
  my $end_count = $res->rows;
  print "Шаг: $i Кол-во найденых счетов: $end_count\n";
  if ($end_count != $begin_count){
    my $end_time = time;
    print "Время поиска (сек.): ".($end_time-$begin_time)."\n";
    last;
  };
};


########################################################################
sub Select{
  my ($header, $condition, $SQL_QUERY) = @_;
  if (!$header) {return -1};
  if (!$condition) {return -1};
  if (!$SQL_QUERY) {return -1};
  my $res = $db->prepare($SQL_QUERY);
  if (!$res->execute){
    print("Error. Can't $SQL_QUERY");
    print(DBI::errstr);
  }else{
    my $ntuples = $res->rows;
    my $op = '$ntuples'."$condition";
    my $condition_stat = eval $op;
    if (!$condition_stat){
      print("Error result (ntuples: $ntuples, condition: $condition) for $SQL_QUERY");
    };
  };
  return $res;
}
########################################################################
sub BGBPost{
  my %data = %{$_[0]};
  $data{'user'} = $BGBUsername;
  $data{'pswd'} = $BGBPassword;
  my $browser = LWP::UserAgent->new;
  my $response = $browser->post( $BGBURL , \%data);
  if ($response->content !~ /\<\?xml version\=\"1\.0\" encoding\=\"windows\-1251\"\?\>/){
    #ошибка
    exit;
  };
  my $xsimple = XML::Simple->new();
  my $h = $xsimple->XMLin($response->content ,KeyAttr => { xml_id => 'id', xml_name => 'name', xml_key =>'key' });
  if (defined($h) && exists($h->{'status'})){
    $h = HashDecoder($h);
  }else{
  };
  return $h;
}
########################################################################
sub Get{
  my %data = %{$_[0]};
  my $url = $BGBURL.'user='.$BGBUsername.'&pswd='.$BGBPassword.'&';
  foreach (keys %data){
    $url .= $_.'='.$data{$_}.'&';
  };
  my $xml_doc = get($url);
  my $xsimple = XML::Simple->new();
  my $h = $xsimple->XMLin($xml_doc,KeyAttr => { xml_id => 'id', xml_name => 'name', xml_key =>'key' });
  if (defined($h) && exists($h->{'status'})){
    $h = HashDecoder($h);
  }else{
  };
  return $h;
}
########################################################################
sub HashDecoder{
  my $h = $_[0];
  if (ref($h) eq "HASH"){
    foreach (keys %$h){
      $h->{$_} = HashDecoder($h->{$_});
    };
    return $h;
  }elsif (ref($h) eq "ARRAY"){
    foreach (@$h){
      $_ = HashDecoder($_);
    };
    return $h;
  }else{
    $h = Encode::encode('cp1251',$h);
    return $h;
  }
}
########################################################################



Вывод:
Код:
Кол-во найденых счетов: 0
Создаем счет
$VAR1 = {
          'status' => 'ok'
        };
Шаг: 1 Кол-во найденых счетов: 0
Шаг: 2 Кол-во найденых счетов: 0
Шаг: 3 Кол-во найденых счетов: 0
Шаг: 4 Кол-во найденых счетов: 0
Шаг: 5 Кол-во найденых счетов: 0
...
Шаг: 21441 Кол-во найденых счетов: 0
Шаг: 21442 Кол-во найденых счетов: 0
Шаг: 21443 Кол-во найденых счетов: 0
Шаг: 21444 Кол-во найденых счетов: 0
Шаг: 21445 Кол-во найденых счетов: 1
Время поиска (сек.): 3

Иногда время поиска счета доходит до 5 сек.

Цитата:
У вас движок таблиц какой, ОС и файловая система?

Движек: MyISAM
ОС: Slackware 12
FS: ext3


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 01 июн 2009, 16:04 
up


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июн 2009, 11:32 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Доступ ССШ организуете? Будем смотреть на месте что и как.. По коду понять не могу, в чем дело.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июн 2009, 11:55 
да, организуем, но только на следующей неделе. Все данные пришлю в личку.


Вернуться к началу
  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 июн 2009, 13:01 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Ок, жду. Там же скрипт ваш положите, плз..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 16 июн 2009, 11:40 
Не в сети
Разработчик

Зарегистрирован: 27 ноя 2006, 20:36
Сообщения: 5715
Карма: 93
Обновление выложено. Тема закрыта.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 18 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.071s | 35 Queries | GZIP : On ]