Контролируем типы переменных в выражении



Posted by Анатолий Анимица (194.177.32.69) on January 03, 2001 at 12:11:04:

In Reply to: проблема аналогичная №1901 posted by Юрий Заречный on January 03, 2001 at 05:10:18:

Юрий Заречный пишет:


: В одной из отчетных форм имеется конструкция вида:
: :Loop (1)
: search Z0,?D (2)
: IF [SUCCESS] (3)
: DY=[DA [FACT_D],[FACT_M],[FACT_Y]] (4)
: IF ([DA]-DY<365)&[PS 'G',D] (5)
: ...
: ENDIF ---
: goto Loop
: ENDIF

: Но стоит только ввести хотя бы одну операцию с соответствующим фактом Z0, как в операторе [PS 'G',D] возникает ошибка "Е27 - выражение должно выдавать строку а не число" .
: Попытка "проинитить" переменную D, например D=[CP '',1,0] или D='', перед оператором search, как в примере 1901 никакого эффекта не дает.

: Что бы это значило?


Это значило, что D в строке (5) - не строка, а число. Все остальные элементы безупречны.

Если там и должно быть число - тогда что ищет [ps 'G'....? Если там железно строка и функция [strip D] не испортит значения D - этим все решено. Кроме трех случаев. Там все-таки число, тогда надо преобразовать, там есть важные пробелы слева или справа - надо их как-то признать и сохранить. Можно еще тип D [type D]
проконтролировать.

AAA




Пpишедшие ответы: