Страница 1 из 1

Суммы из ГТД и ПС в одном отчете

Добавлено: Пн окт 22, 2012 13:32
LevZabudko
Добрый день!
Самостоятельно разработали отчет для подсчета сумм проехавших ГТД по паспорту сделки.
Сейчас столбцы выглядят примерно так: Номер ПС, количество ГТД, сумма по ГТД.

Есть ли возможность из этого отчета "залезть" в ПС и вытащить оттуда сумму ПС, при условии, что ПС привязан к ГТД только через номер в 44 графе ГТД?
В итоге хотим получить отчет из 4х столбцов: Номер ПС, количество ГТД, сумма по ГТД, сумма ПС.

Проблема в том, что в отчете указывается DocType = GTD либо PS1. Т.е. пока мне кажется, что нельзя "пробежать" сразу по двум типам документов и вытащить из них все что надо... Только отдельный отчет для каждого типа документа.

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Вс окт 28, 2012 23:59
Sergey
LevZabudko писал(а):Добрый день!
Проблема в том, что в отчете указывается DocType = GTD либо PS1. Т.е. пока мне кажется, что нельзя "пробежать" сразу по двум типам документов и вытащить из них все что надо... Только отдельный отчет для каждого типа документа.
Да, Вы правы "пробежать" сразу по двум документам нельзя. Отчет строится по документам определенного типа.
Но вытащить документ другого типа в самом отчете можно.
Для работы, с так называемыми "взаимосвязанными" (т.е. документы связаны по номеру, например ДТС, Опись, КТС и т.д.) документами, есть несколько функций:
FindDoc(DocType:String):Boolean и OpenDoc(Doc:TDoc,DocType:String):TDoc
Например:
[info]
...
DocType = GTD
...
[Discribe]
Var
KTSExist:Boolean;
KTSDoc:TDoc;
Begin
// Ищем КТС
IF FindDoc('KTS') Then
Begin
KTSExist:=OpenDoc(KTSDoc,'KTS');
IF KTSExist Then
Begin
......
// Закрываем КТС.
KTSDoc.CloseDoc;
End;
End;
End;

В Вашем же случае документы ГТД и ПС не взаимосвязанные, вам подойдут вот эти функции:
FindNumDoc(DocType,DocNum:String):Boolean и OpenNumDoc(Doc:TDoc,DocType,DOcNum:String):TDoc
Например:
[info]
...
DocType = GTD
...
[Discribe]
Var
PSSExist:Boolean;
PSDoc:TDoc;
PSNum:String;
Begin
PSNum:=Get44Doc(0,'','03031','44.Num',True);
IF FindNumDoc('PS1',PSNum) Then
Begin
PSExist:=OpenNumDoc(PSDoc,'PS1',PSNum);
IF PSExist Then
Begin
PSSum:=PSDoc.GetField('3_5');
......
// Закрываем
PSDoc.CloseDoc;
End;
End;
End;

Для доступа к полям воспользуйтесь функциями:
TDoc.GetField(FName:String):String и TDoc.GetNumField(FName:String):Extdended

ЭД документ, который привязан к ГТД через опись, можно получить с помощью функции:
Function GetOpnDoc(Doc:TDoc;Code,DocNum,DocDate:String):Boolean;

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Вт окт 30, 2012 11:49
LevZabudko
Спасибо! Действительно все нашлось и заработало, очень полезные функции.

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Вт окт 30, 2012 14:52
Sergey
LevZabudko писал(а):Спасибо! Действительно все нашлось и заработало, очень полезные функции.
Не за что!
Будут вопросы, пишите, постараюсь ответить.

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Вт янв 22, 2013 13:04
LevZabudko
Добрый день!
Возникла необходимость выгружать RailwayBill из БД (Ж/Д Накладные). Сделал отчет, который через опись находит номера накладных и по номеру пытается их открыть. Но, при попытке доступа к полю накладной выскакивает ошибка "Документ такой-то, Произошла ошибка в алгоритме расчета: Access violation at address и т.д.".

Сделал ручную проверку. Я знаю что в БД есть Накладная с номером "51116226", пытаюсь открыть этот документ. Он открывается, потому что сообщение "1" выскакивает на экран. А после возникает ошибка, описанная выше.

IF GetField('7_1.Num')='0000020' Then Begin
NaklNum := '51116226';
IF FindNumDoc('RailwayBill',NaklNum) Then
Begin
NaklExist:=OpenNumDoc(NaklDoc,'RailwayBill',NaklNum);
IF NaklExist Then
Begin
ShowMessage('1');
ShowMessage(NaklDoc.GetField('Number'));
End;

End;
End;

П.С. проблема возникает только с некоторыми типами документов. Например, тот же E2I работает нормально.

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Вт янв 22, 2013 17:59
Sergey
LevZabudko писал(а): Произошла ошибка в алгоритме расчета: Access violation at address и т.д.".
Да, спасибо, будем разбираться

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Ср янв 23, 2013 11:07
LevZabudko
То же самое для CMR документов типа E3CMR. Отчет не выгружает ничего... Начальство хочет отчеты, а достать их никак нельзя :(
Скажите, пожалуйста, примерные сроки устранения этих ошибок...

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Ср янв 23, 2013 22:26
Sergey
LevZabudko писал(а):То же самое для CMR документов типа E3CMR. Отчет не выгружает ничего... Начальство хочет отчеты, а достать их никак нельзя :(
Скажите, пожалуйста, примерные сроки устранения этих ошибок...
Подправил, была ошибочка в обработке эд2 документов.
Исправленная версия будет на днях.

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Пт янв 25, 2013 11:33
LevZabudko
Sergey писал(а):
LevZabudko писал(а):То же самое для CMR документов типа E3CMR. Отчет не выгружает ничего... Начальство хочет отчеты, а достать их никак нельзя :(
Скажите, пожалуйста, примерные сроки устранения этих ошибок...
Подправил, была ошибочка в обработке эд2 документов.
Исправленная версия будет на днях.
Обновил Альту. Ошибка пропала, но документы все равно не открываются. Например, пробую запустить отчет по документу E3CMR, а он ничего не выдает. 0 документов как будто бы. Вы можете исправить эти ошибки? По документу ДО1 отчет так же не работает, если запустить отчет именно по нему. Вызов ДО1 по номеру не пробовал.

Вызов E3CMR по номеру так же не работает. Документ находит, а открыть не открывает. Вот пример кода:
PSNum := OPNDoc.GetField('Doc.Num');
PSExist:=FALSE;
IF FindNumDoc('E3CMR',PSNum) Then
Begin
ShowMessage('Документ существует');
PSExist:=OpenNumDoc(PSDoc,'E3CMR',PSNum);
IF PSExist Then
BeginShowMessage('Документ открыт');
ShowMessage(PSDoc.GetField('RegistrationDocument_RegID'));
PSDoc.CloseDoc;
End;
End;

Сообщение "Документ существует выводится", а вот остальные - нет.

П.С.: еще у вас ошибка в отчете Report125.dat - он не работает. Во-первых там тип документа DO1, а не DO1Report стоит, а во-вторых даже если поменять на DO1Report я вижу, что он находит 196 документов, но ни один из них не обрабатывает. Выводит в таблицу 0 записей.

Скажите, пожалуйста, сможете ли вы поправить модуль Отчеты так, чтобы он нормально работал хотя бы с документами DO1Report, E3CMR и RailwayBill (ЖД накладная) ?

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Пн янв 28, 2013 12:20
Sergey
LevZabudko писал(а): Скажите, пожалуйста, сможете ли вы поправить модуль Отчеты так, чтобы он нормально работал хотя бы с документами DO1Report, E3CMR и RailwayBill (ЖД накладная) ?
Необходимо посмотреть непосредственно на вашем компьютере, что происходит.
Не могли бы Вы написать письмо по адресу spb<гав>alta.ru с указанием своих контактных данных.

Re: Суммы из ГТД и ПС в одном отчете

Добавлено: Пн янв 28, 2013 12:22
Sergey
LevZabudko писал(а): П.С.: еще у вас ошибка в отчете Report125.dat - он не работает. Во-первых там тип документа DO1, а не DO1Report стоит, а во-вторых даже если поменять на DO1Report я вижу, что он находит 196 документов, но ни один из них не обрабатывает. Выводит в таблицу 0 записей.
Нет, ошибки нету. Этот отчет строится не по ЭД2-ДО1, а по ДО1 (см. Прочие, СВХ).