Имя: Пароль:
LIFE
 
OFF: Темпоральная ловушка 7.70.24 (фантастический рассказ)
0 romix
 
11.04.05
03:43
Штуман, ругаясь, как 1С-ник, совершил вынужденную посадку. Холмистая долина была покрыта вечерним туманом. На какое-то время затихнув от звука не самой мягкой посадки (больше похожей на падение какого-то метеорита), снова засвиристели насекомые. Капитан справился с показаниями приборов.

   стр=Формат(1, "ДДДММГГГГ");
   Сообщить(стр);//Этот код выводит: "12.31.-471"

Машина времени дала сбой, и рейсовый темпоаэробус с 1С-никами на борту попал в 471 год до н.э. Причем, что характерно, в 12 мартобря... Пути назад уже не было...

   стр=Формат(1, "ДДДММММГГГГ");
   Сообщить(стр);//Выводит: "12 XГкsО -471 г."

* * *

...Археологи обнаружили загадочную надпись на древнем склепе 1С-ника... Надпись гласила: "12 XГкsО -471 г.". "Переполнение буфера" - догадались археологи...

   стр=Формат(7, "ДНННН");
   Сообщить(стр);//Понедельник

...Археологи долго удивлялись загадкам календаря древних 1С-ников...

   д='01.03.2005';
   н=НомерДняНедели(д);
   Сообщить(н);//2

"2- это вторник, не так ли?" подумал главный археолог. А почему же тогда 7 день - это понедельник? "Видимо, это опять что-то с типами данных", подумал археолог и продолжил исследование памятников древней цивилизации.

   д=Дата(20050,03,01);
   Сообщить(д);//Этот код выводит: "30.00.05"

Видимо, месяц с номером 00 называется ""мерцедоний"" (был такой месяц у древних римлян), решил главный археолог.

Древние 1С-ники научились не только строить величественные храмы, но и сдвигать (вправо) время:

   стр=Формат('01.01.2005', ""Ч>1"");
   Сообщить(стр);//245337.2
   //Дата, сдвинутая на 1 разряд вправо :-)

Археологи были поражены открытым древними 1С-никами законом зависимости времени и денег, когда время, минуя какие-либо преобразования, сразу превращается в деньги:

   стр=Формат('01.01.2005', "ЧПДС");
   Сообщить(стр); //Выводит: "Два миллиона четыреста пятьдесят три тысячи триста семьдесят два рубля 00 копеек"

После открытия этого закона и была, согласно древнему пророчеству, изобретена машина времени.

   стр=Формат('01.01.0000', "ЧПДС");
   Сообщить(стр);
//Выводит: "Один миллион семьсот двадцать одна тысяча шестьдесят один рубль 00 копеек"

... Причем, на перемещение в самую древнюю эпоху, в качестве темпорального горючего, требовалось не так много рублей...

...А особенно удивились археологи той глубокой философии, с которой древние 1С-ники считали свои (и чужие) деньги...

   стр=Формат(123456, ""Ч5.2"");
   Сообщить(стр);//Выводит: 99.99

1С - ники попрали глубиной экономической и программистской мысли не только темпоральные законы, но и законы сохранения, подумал археолог, углубляясь в свои расчеты.

   стр=Формат(12345678901234567890, "ЧПДС");
   Сообщить(стр);//Выводит: "Сто двадцать три триллиона четыреста пятьдесят шесть миллиардов семьсот восемьдесят девять миллионов двенадцать тысяч триста сорок пять долларов 78 центов"

"...Квинтильоном больше - секстильоном меньше - все равно так много денег не заработать" - думали 1С-ники, выпуская 24 релиз 1С:Предприятие. Но археологи так и не поняли, откуда в этом расчете взялись 78 центов, хотя число на входе алгоритма - целое...

"Видимо, опять переполнение буфера" - решил главный археолог, и загнал кирку поглубже в породу.

Из скалы выглянул краешек ключа защиты 1С. "Культовый предмет древней цивилизации" - подумал археолог, и осторожно, опасаясь, что ключ защиты окажется все-таки не найденным, стал освобождать предмет защитного ритуала древних 1С-ников из толщи горной породы.
1 insider
 
11.04.05
04:05
LOL
неужели все так хорошо в релизе?
2 romix
 
11.04.05
04:12
(1) Все примеры протестил. Может, и в 25 релизе то же самое (у меня щас под рукой его просто нет).
3 insider
 
11.04.05
04:17
Господи, храни бета-тестеров :)
4 Зуекщмшср
 
11.04.05
04:20
Маладец, приятно написано
5 Злобный Фей
 
11.04.05
04:31
Супер lol
6 romix
 
11.04.05
04:32
thanxx :-)
Вообще-то я писал дополнения (примеры) к ALS для 7.7.
Стока всего блин нарыл. :-)
В 8-ке кстати подобных ошибок почти не осталось, или же совсем не осталось.

И там правильно генерят исключения, если, например, я пишу
   ч=Число("121кабан мимо пролетал");
   Сообщить(ч);//Выводит: "121"

и правильно отрабатываются запятые, если я пишу:
   ч=Число(""9,99"");
   Сообщить(ч);//Выводит: "9"
В 7.7 же поврежденное значение - ну и пох, будет поврежденное или нулевое число, безо всяких там RaiseException...
7 Волшебник
 
11.04.05
05:06
Отлично!
8 Полосатый Мух
 
11.04.05
05:51
Класс! Книги писать не пробовал?
В тему, а может и нет ?:) - при обработке дат местами проскакивает х...нь, например дата рождения сотр. вывожу на печатную форму в формате хх.хх.хххх -> некоторые значения обрабатываются -> исх("хх.хх.84") на вых ("хх.хх.2084")
Выход нашел. Но вопрос остался. Это глюк из разряда "Темпоральных ловушек"?:)
10 GrayT
 
11.04.05
08:54
(0)Вах! Как чудненько
11 yarosha
 
11.04.05
09:04
romix
в 25 то же самое
12 Нормальный программи
 
11.04.05
09:14
В этих случаях должны возбуждаться исключительные ситуации
13 durachok
 
11.04.05
09:15
(0)Отлично! Просто плакал! Когда 1с начнут типизировать переменные?
14 Нормальный программи
 
11.04.05
09:17
(13) Никогда

Когда в VBScript/JScript начнут типизировать переменные? - никогда
15 romix
 
11.04.05
13:06
(14) Встроенный проблемно-ориентированный язык Flash кстати улучшается:
"во Flash MX 2004, появилась концепция ООП, добавилась возможность строгой типизации, поддержка полной чувствительности идентификаторов к регистру и ..."

var i:Number=10;
i="aaa"; //исключение

В 1С 7.7:
   x=10;
   x=x*"aaa";
   Сообщить(x);//0

В 1С 8.0:
{ВнешняяОбработка.ВнешняяОбработка1(2)}: Преобразование значения к типу Число не может быть выполнено
   x=x*"aaa";

В JS

var wsh = WScript.CreateObject("WScript.Shell");
var x=10;
x=x*"aaa";
wsh.Popup(x); //-1#Und
16 romix
 
11.04.05
13:09
(9) Я что-то не нашел ошибок на эту же тему в 8.0.

//Код 7.7
   стр=Формат("100 дятлов", "ЧПДС");
   Сообщить(стр);//Сто долларов 00 центов
     //Внимание, вопрос: сколько стоит 1 (один) дятел? :-)
17 Керниган мимо пробег
 
11.04.05
15:41
А предшественник языка C - язык B тоже был бестиповым...
18 Кабан мимо пробеган
 
11.04.05
16:16
(6)
Нас 8 рыл всего. Летать мы не умеем.
ЗЫ
(0) эт хорошо.
19 Dies
 
11.04.05
20:47
(17) Ты еще про А вспомни.
22 romix
 
12.04.05
02:44
(19) Вот что пишут Керниган и Ритчи насчет "кусочков пуха" в программе:

"Язык "C" не является языком со строгими  типами в смысле паскаля или алгола 68. Он сравнительно снисходителен к преобразованию данных, хотя и не будет автоматически преобразовывать  типы данных с буйной непринужденностью языка PL/1. Существующие компиляторы не предусматривают никакой проверки во время выполнения программы индексов массивов,  типов  аргументов и т.д. В тех ситуациях, когда желательна строгая проверка типов, используется специальная версия компилятора. Эта программа называется LINT очевидно потому, она выбирает кусочки пуха из вашей программы.

Программа LINT не генерирует машинного кода, а делает очень строгую проверку всех тех сторон программы, которые можно проконтролировать во время компиляции и загрузки.

Она определяет несоответствие  типов , несовместимость аргументов, неиспользованные или очевидным образом неинициализированные переменные, потенциальные трудности переносимости и т.д. Для программ,которые благополучно проходят через LINT, гарантируется отсутствие ошибок  типа примерно с той же полнотой, как и для программ, написанных, например, на АЛГОЛЕ-68." (с)
23 Доныч
 
12.04.05
18:33
(0)
стр=Формат(123456, ""Ч5.2"");
Сообщить(стр);//Выводит: 99.99

Это вроде как фича. Длина числа - это с учетом десятичной точки и знака. Т.е. для -12345 было бы наверное -9.99
24 romix
 
13.04.05
01:34
(23) Ну если число не влезло, типа надо его слегка покоцать? :0)
Имхо это исключительная ситуация, которую надо отрабатывать. Ёксель например показывает такие числа значками ####. Если сложить в Ёкселе несколько чисел и, например, строку "ххх", то он выдаст ошибку, а не попытается все чохом просуммировать, проигнорировав проблему. Так что имхо такие ошибки нельзя отнести к правильному стилю работы с числами (и хорошо что их, возможно, нет, например, на транспорте; хотя, от российского транспорта, в т.ч. атомных подлодок, можно ожидать, наверное, чего угодно). :-)
25 Доныч
 
13.04.05
18:31
(24) Я не спорю. Пост (23) к тому, что это не проблема конкретного релиза, а фича 1С. То есть такое было и в других релизах.