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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Yulia_mgn
Сообщения: 12
Зарегистрирован: 14 ноя 2005, 11:33
Контактная информация:

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

Сообщение 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
Как сложить кол-во???
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5188
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Сообщение edward_K »

выводить нужно предыдущю когда появляется новая мц, а не новую :). соотв. после цикла нужно сделать еще один internal - чтобы последнюю схватить. А там где то вроде галочка была объединять однот. позиции? смотреть влом :).
Den
Местный житель
Сообщения: 1844
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Сообщение 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

Коряво может, но должно работать...
Yulia_mgn
Сообщения: 12
Зарегистрирован: 14 ноя 2005, 11:33
Контактная информация:

Сообщение Yulia_mgn »

Спасибо большое, все получилось:)
Ответить