Цитата:
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.