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

Посчитать количество в internal

Добавлено: 01 фев 2008, 13:52
Yulia_mgn
В печатной форме счета-фактуры в спецификации встречаются одинаковые МЦ, но с разной ценой,
Наименование товара
(описание выполненных работ, оказанных услуг), имущественного права Единица
измерения Количество

1 2 3
Ус.-р. 6115064 Л52 Агрегат №1 непрерыв Ролик Л52-в-12 штука 12
Ус.-р. 6115064 Л52 Агрегат №1 непрерыв Ролик Л52-в-12 штука 8
Ус.-р. 6115079-12 Л52 Агрегат №1 непрерыв Ролик ф=1500*2500*3935 Л52-в-13 штука 1
Нужно МЦ c одним наименованием объединить в одну строку, ну и количество соответственно посчитать общее
с помощью Internal собираю одинаковые наименования МЦ, а вот количество никак не получается

.begin
If Sp_1=Spname
{
Vyvod:=false;
}
Else {
Sp_1:= Spname;
Vyvod:=true;
}
Kol:=kol+spkol;
End.
.{?internal; (Vyvod=true)
.fields
Sp_1
#f_(if (SpPrMC = 3, '', SpOtpEd))
kol
.endfields
^ ^ ^
.}
.begin
Kol:=0;
End.

В результате :
Наименование товара
(описание выполненных работ, оказанных услуг), имущественных прав Единица
измерения Количество

1 2 3
Ус.-р. 6115064 Л52 Агрегат №1 непрерыв Ролик Л52-в-12 штука 12
Ус.-р. 6115079-12 Л52 Агрегат №1 непрерыв Ролик ф=1500*2500*3935 Л52-в-13 штука 1
Как сложить кол-во???

Добавлено: 01 фев 2008, 14:19
edward_K
выводить нужно предыдущю когда появляется новая мц, а не новую :). соотв. после цикла нужно сделать еще один internal - чтобы последнюю схватить. А там где то вроде галочка была объединять однот. позиции? смотреть влом :).

Добавлено: 01 фев 2008, 14:27
Den
По Вашему алгоритму могут быть косяки, если спецификация неотсортирована. Если отсортирована, то тогда можно через переменные, если нет, то одними переменными не обойдетесь в данном случае, Выход :
1 Массив
2 Временная таблица

А так (в случае если отсортирована...) :

.var
first :integer
oldname :string
totkol: double
.endvar
.begin
first:=1;
end.
.{ //основной цикл вывода из прототипа
.begin
If Sp_1<>Spname
{
Vyvod:=true;
Sp_1:=Spname ;
}
Else Vyvod:=false;

End.
.{?internal; (Vyvod=true and first<>1)
.fields
oldname
totkol
.endfields
^ ^
.begin
totkol:=0;
end.
.}
.begin
first:=0;
totkol:=tokol+kol;
oldname :=sp_name;
End.

.}
и в конце еще в самой последней итерации выводим поля после всех циклов :
.fields
oldname
totkol
.endfields

Коряво может, но должно работать...

Добавлено: 06 фев 2008, 16:31
Yulia_mgn
Спасибо большое, все получилось:)