Имя: Пароль:
1C
1C 7.7
v7: Глюк при вызове глобальной функции со значениями "по умолчанию" или...?
0 wopot
 
20.04.21
12:35
Ситуация следующая: в табличной части документа есть реквизит "ДатаКон" типа "Дата", рядом с ним есть колонка с функцией ДеньНеделиКраткоПоДате(ДатаКон), в колонку рядом с датой выводится день недели "пн", "вт" и т.д.

Функция в глобальном модуле очень простая

Функция ДеньНеделиКраткоПоДате(ПромДата,Заглавными=0) Экспорт
    ....
    ....
    Если Заглавными=0 Тогда
        Возврат ДниНедели[НомерДняНедели(ПромДата)];
    ИначеЕсли Заглавными=1 Тогда
        Возврат Врег(ДниНедели[НомерДняНедели(ПромДата)]);
    КонецЕсли;
КонецФункции

Всё бы ничего, и работает уже десятилетие, но сегодня увидел очень странную вещь. В некоторых строках, причём довольно бессистемно день недели был не строчными (пн, вт, ср), а заглавными буквами (ПН, ВТ, СР), будто функция вызывалась как ДеньНеделиКраткоПоДате(ДатаКон, 1). Первый раз такое вижу, что бы это могло быть не знаю. Windows Server 2016, 1c 7.7.027, FormEX 2.0.5.147
1 Злопчинский
 
20.04.21
12:38
(0) начать надо с того, что функция написано говнокодисто.
2 wopot
 
20.04.21
12:40
В чем "говнокодистость" заключается? ;)
3 Злопчинский
 
20.04.21
12:41
плюс к этому верхнйи регистр по данному коду - не обязательно следствие работы функции, а вполне возможно что уже загнано в массив ВРЕГами
.
    Если Заглавными=0 Тогда
        Возврат НРег(ДниНедели[НомерДняНедели(ПромДата)]);
4 wopot
 
20.04.21
12:42
Функция ДеньНеделиКраткоПоДате(ПромДата,Заглавными=0) Экспорт
    Перем ДниНедели[7];
    Если ПустоеЗначение(промДата)=1 Тогда
        Возврат "  ";
    КонецЕсли;
    ДниНедели[1]="пн";
    ДниНедели[2]="вт";
    ДниНедели[3]="ср";
    ДниНедели[4]="чт";
    ДниНедели[5]="пт";
    ДниНедели[6]="сб";
    ДниНедели[7]="вс";
    Если Заглавными=0 Тогда
        Возврат ДниНедели[НомерДняНедели(ПромДата)];
    ИначеЕсли Заглавными=1 Тогда
        Возврат Врег(ДниНедели[НомерДняНедели(ПромДата)]);
    ИначеЕсли Заглавными=2 Тогда
        пром=ДниНедели[НомерДняНедели(ПромДата)];
        Возврат врег(лев(пром,1))+сред(пром,2);
    КонецЕсли;    
КонецФункции // ДеньНеделиПоДате
5 Злопчинский
 
20.04.21
12:42
(2) в том, что "я знаю что на вход не будет ничего кроме 0 и 1"
а тут внезапно 2!
6 wopot
 
20.04.21
12:44
Если обратили внимание, то там ещё и ... было, которое заменяло массив и часть кода. Собственно, сути эти, наверное, не меняет :)

В экранной форме было так
01.05.2021 сб
01.05.2021 сб
03.05.2021 ПН - то есть понедельник почему-то пошёл заглавными
05.05.2021 ср

После выхода и входа в 1С, всё стало работать, как и прежде
7 1Сергей
 
20.04.21
12:46
Случаем не оп ОЛЕ соединение с базой?
8 wopot
 
20.04.21
12:48
Нет
9 Злопчинский
 
20.04.21
12:50
(6) "После выхода и входа в 1С, всё стало работать, как и прежде"
- ну так и надо было проверить не выходя...
код вроде прсотой, траблов быть не должно...
10 wopot
 
20.04.21
12:53
Десять лет и не было :)
Если бы своими глазами не увидел, то словам пользователя бы не поверил.
В табличной части даже раскраска не используется.

Формула в "свойствах текста" формула ДеньНеделиКраткоПоДате(ДатаНач)

А такое впечатление, что 1С отрабатывала как ДеньНеделиКраткоПоДате(ДатаНач,1) только места выбирала случайным образом.
Сейчас сколько не пробовал воспроизвести это у себя, ничего такого не получается.
11 Злопчинский
 
20.04.21
13:04
(10) догадки можно строить бесконечно...
12 Kigo_Kigo
 
20.04.21
13:39
Серека еще сырая! :)
13 Злопчинский
 
20.04.21
13:59
(12) Может дело в прокладке?!
14 wopot
 
20.04.21
14:22
(13) Всякое бывает

Но в конкретной ситуации, именно этой функции лет 10, а конфигурации скоро 20...
Поэтому явно стечение обстоятельств, но какое и каких?
15 Злопчинский
 
20.04.21
17:05
Никогда такого не было и вот - опять!
16 SleepyHead
 
гуру
20.04.21
17:54
(2) А что, если в параметр "Заглавными" передать 2 ?
17 Cthulhu
 
21.04.21
03:27
афигеть...
Сред("пнвтсрчтптсбвс",НомерДняНедели(ПробДата)*2-1,2);
18 Андрей_Андреич
 
naïve
21.04.21
05:25
(17) Если тебе платить за строчки кода - с голода помрешь :=)
19 Андрей_Андреич
 
naïve
21.04.21
06:06
(17) Код нечитаемый - у ТС лучше :)
20 wopot
 
21.04.21
06:26
(17) Кратко и лаконично!
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.