Как вы делаете несколько транзакций в одном I-дескрипторе?
В настоящее время у меня есть IDescriptor, который извлекает Sales из другого ФАЙЛА за период 1,2,3. Я хочу иметь возможность получать затраты из периода 1,2,3 и вычитать итоговые суммы, чтобы получить прибыль.
Текущий оператор I-дескриптора:
TRANS(SAS1,ITEM,4,'X');@1<1,1,1>+@1<1,1,2>+@1<1,1,3>
- 4 = Продажи
- 3 = Стоимость
- @ 1<1,1,1> = период 1
- @ 1<1,1,2> = период 2
- @ 1<1,1,3> = период 3
- @ 1<1,1,4> = период 4
2 ответа
Ты ищешь EXTRACT
Итак, попробуйте следующий атрибут loc:
TRANS(SAS1,ITEM,4,'X');EXTRACT(@1,1,1,1)+EXTRACT(@1,1,1,2)+EXTRACT(@1,1,1,3)
Следующая часть вопроса не совсем понятна для меня, поэтому дайте мне знать, если я сделал неверное предположение.
Затраты поступают из текущего файла (того, к которому относится этот словарь) из атрибута (поля) 3. Он имеет тот же формат, что и данные для продаж (<1,1,1 до 3>). В этом случае вам нужно будет использовать @RECORD.
TRANS(SAS1,ITEM,4,'X');EXTRACT(@1,1,1,1)+EXTRACT(@1,1,1,2)+EXTRACT(@1,1,1,3);EXTRACT(@RECORD,1,1,1)+EXTRACT(@RECORD,1,1,2)+EXTRACT(@RECORD,1,1,3);@2-@3
Итак, давайте разберемся с этим:
- Считать атрибут 4 из записи ITEM в файле SAS1. Вернуть пустую строку, если элемент не существует. Держите это в положении 1 (@1):
TRANS(SAS1,ITEM,4,'X');
- Извлеките многозначные значения от 1 до 3 из значения в позиции 1, затем сложите их вместе (). Держите это в положении 2:
EXTRACT(@1,1,1,1)+EXTRACT(@1,1,1,2)+EXTRACT(@1,1,1,3);
- Извлеките мульти-значения от 1 до 3 из текущей записи и сложите их вместе. Держите это в положении 3:
EXTRACT(@RECORD,1,1,1)+EXTRACT(@RECORD,1,1,2)+EXTRACT(@RECORD,1,1,3);
- Наконец, вычтите значение в позиции 3 (общие затраты) из значения в позиции 2 (общие продажи). Поскольку это последняя позиция, верните результат:
@2-@3
Единственное, чего не хватает в ответе Дэна, это то, что вам нужен еще один TRANS, чтобы получить поле COST, следовательно, TRANS(SAS1,ITEM,3,'X');
после первых операций по выписке.