В печатной форме счета-фактуры в спецификации встречаются одинаковые МЦ, но с разной ценой,
Наименование товара
(описание выполненных работ, оказанных услуг), имущественного права Единица
измерения Количество
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
Как сложить кол-во???
Посчитать количество в internal
Модераторы: m0p3e, edward_K, Модераторы
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
По Вашему алгоритму могут быть косяки, если спецификация неотсортирована. Если отсортирована, то тогда можно через переменные, если нет, то одними переменными не обойдетесь в данном случае, Выход :
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
Коряво может, но должно работать...
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
Коряво может, но должно работать...