Имя: Пароль:
1C
1С v8
Ошибка "Встроенная функция может быть использована только в выражении"
0 mik_mihka
 
06.12.14
10:49
Здравствуйте,пишу выражение а оно выдает ошибку, в отладчике значение сравнивает, а при проверки модуля - ошибка.:

{Документ.Мотивация.Форма.ФормаДокумента.Форма(115,4)}: Встроенная функция может быть использована только в выражении. (Дата) ?<<?>>(ДнейОсталось<=0,1,ДнейОсталось);

ДнейОсталось = ((Сред(КонецМесяца(Дата), 1, 2))- ( ?(Месяц(Дата) = Месяц(ТекущаяДата()),Сред(КонецДня(ТекущаяДата()),1,2),Сред(КонецМесяца(Дата), 1, 2)))-4);

а потом это значение сравниваю в условии :

?(ДнейОсталось<=0,1,ДнейОсталось);


ДнейОсталось - Значение:-4 ;Тип: Число
1 ДенисЧ
 
06.12.14
10:50
Я бы за такую формулу коленку прострелил....
2 mehfk
 
06.12.14
10:58
Покажи полностью строку
?(ДнейОсталось<=0,1,ДнейОсталось);
3 mik_mihka
 
06.12.14
11:01
Это и есть всё условие.
пробовал в таком виде -

Если Число(ДнейОсталось)<=0 Тогда
  ДнейОсталось = 1;
Иначе
  ДнейОсталось;
КонецЕсли;

результат тот же (УТ 10.3)
4 mik_mihka
 
06.12.14
11:35
Есть другой способ узнать количество дней в месяце, вычесть из этого значения - количество оставшихся дней и выходных дней?
5 RomanYS
 
06.12.14
11:54
(1) +1, даже обе можно
а что 1с умеет вычитать строки?
6 mik_mihka
 
06.12.14
11:59
(5) Но тем не менее - есть вычисленное значение. Если убрать условие - ошибок нет и считает нормально только пока значение в минус не уйдет.
ПланНаДень = Формат(((Строка.Объем - Сегодня)/ ДнейОсталось),"ЧДЦ=2") ;

а в условии ошибка.
7 RomanYS
 
06.12.14
12:06
покажи целиком строку модуля с ошибкой (в (0) строка №135) и текст ошибки целиком
8 mik_mihka
 
06.12.14
12:12
Ошибка;
{Документ.Мотивация.Форма.ФормаДокумента.Форма(115,4)}: Встроенная функция может быть использована только в выражении. (Дата)
        ?<<?>>(ДнейОсталось<=0,1,ДнейОсталось); (Проверка: Толстый клиент (обычное приложение))


Ругается на строку №115. Это и есть вся строка:

?(ДнейОсталось<=0,1,ДнейОсталось);
9 RomanYS
 
06.12.14
12:15
(8) это не вся строка, а ее окончание
скопируй предыдущие строки, начиная с предыдущей ";"
10 wertyu
 
06.12.14
12:18
(4) если ты хочешь определить количество оставшихся рабочих дней в месяце, то во-первых тебе надо завести регистр календаря, потому как в УТ 10.3 нет производственного календаря
11 mik_mihka
 
06.12.14
12:30
(10) Это понятно, поэтому и пытаюсь обойтись без календаря (+-день)
12 mik_mihka
 
06.12.14
12:31
(9)
ДнейОсталось = ((Сред(КонецМесяца(Дата), 1, 2))- ( ?(Месяц(Дата) = Месяц(ТекущаяДата()),Сред(КонецДня(ТекущаяДата()),1,2),Сред(КонецМесяца(Дата), 1, 2)))-4);
    
        ?((ДнейОсталось<=0),1,ДнейОсталось);
        ОбластьСтрокаПлан.Параметры.ПланНаДень = Формат(((Строка.Объем - Сегодня)/ ДнейОсталось),"ЧДЦ=2") ;
13 wertyu
 
06.12.14
12:36
(11) это же несложно, скопируй его из зупа например, а потом просто запросом определишь

если без календаря
Если КонецМесяца(Дата) = КонецМесяца(ТекущаяДата()) Тогда
    КоличествоВыходных = 0;
    Сутки = 24 * 60 * 60;
    Для НН = 0 По 4 Цикл
        // сб
        Если КонецМесяца(КонецНедели(Дата) + 7 * Сутки * НН - Сутки) = КонецМесяца(ТекущаяДата()) Тогда
            КоличествоВыходных = КоличествоВыходных + 1;
        КонецЕсли;
        // вс
        Если КонецМесяца(КонецНедели(Дата) + 7 * Сутки * НН) = КонецМесяца(ТекущаяДата()) Тогда
            КоличествоВыходных = КоличествоВыходных + 1;
        КонецЕсли;
    КонецЦикла;
    // сам день не входит
    ДнейОсталось = ДеньГода(КонецМесяца(Дата)) - ДеньГода(Дата) - КоличествоВыходных;
Иначе
    ДнейОсталось = 0;
КонецЕсли;
14 RomanYS
 
06.12.14
12:37
(12) закомментируй эту строку - она ничего не дает кроме ошибки
а первую формулу распечатай и повесь в рамочке-она ШЕДЕВР!
15 wertyu
 
06.12.14
12:37
+(13) если конечно зуп есть )
16 wertyu
 
06.12.14
12:38
+(13) но праздники, тебе как-то специально надо будет описывать, чтобы их вычесть
17 RomanYS
 
06.12.14
12:39
А 1С действительно умеет вычитать строки)))
Угадайте, чему равно
"1"+"0"-"1"-"0"?
18 wertyu
 
06.12.14
12:41
(17) 9
19 mik_mihka
 
06.12.14
12:44
Заменил на ;

        Если ДнейОсталось<=0 Тогда
            ДнейОсталось = 1;
        Иначе
            ДнейОсталось = ДнейОсталось;
        КонецЕсли;

работает :)
20 wertyu
 
06.12.14
12:46
(19) а Иначе зачем?
21 mik_mihka
 
06.12.14
12:48
(20) Поправил :)
22 mik_mihka
 
06.12.14
12:48
Всем спасибо!
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой