Вход | Регистрация
 

OFF: Темпоральная ловушка 7.70.24 (фантастический рассказ)

OFF: Темпоральная ловушка 7.70.24 (фантастический рассказ)
Я
   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С-ников из толщи горной породы.
   insider
 
1 - 11.04.05 - 04:05
LOL
неужели все так хорошо в релизе?
   romix
 
2 - 11.04.05 - 04:12
(1) Все примеры протестил. Может, и в 25 релизе то же самое (у меня щас под рукой его просто нет).
   insider
 
3 - 11.04.05 - 04:17
Господи, храни бета-тестеров :)
   Зуекщмшср
4 - 11.04.05 - 04:20
Маладец, приятно написано
   Злобный Фей
 
5 - 11.04.05 - 04:31
Супер lol
   romix
 
6 - 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")
Выход нашел. Но вопрос остался. Это глюк из разряда "Темпоральных ловушек"?:)
   GrayT
 
10 - 11.04.05 - 08:54
(0)Вах! Как чудненько
   yarosha
11 - 11.04.05 - 09:04
romix
в 25 то же самое
   Нормальный программи
12 - 11.04.05 - 09:14
В этих случаях должны возбуждаться исключительные ситуации
   durachok
 
13 - 11.04.05 - 09:15
(0)Отлично! Просто плакал! Когда 1с начнут типизировать переменные?
   Нормальный программи
14 - 11.04.05 - 09:17
(13) Никогда

Когда в VBScript/JScript начнут типизировать переменные? - никогда
   romix
 
15 - 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
   romix
 
16 - 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) эт хорошо.
   Dies
 
19 - 11.04.05 - 20:47
(17) Ты еще про А вспомни.
   romix
 
22 - 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
   romix
 
24 - 13.04.05 - 01:34
(23) Ну если число не влезло, типа надо его слегка покоцать? :0)
Имхо это исключительная ситуация, которую надо отрабатывать. Ёксель например показывает такие числа значками ####. Если сложить в Ёкселе несколько чисел и, например, строку "ххх", то он выдаст ошибку, а не попытается все чохом просуммировать, проигнорировав проблему. Так что имхо такие ошибки нельзя отнести к правильному стилю работы с числами (и хорошо что их, возможно, нет, например, на транспорте; хотя, от российского транспорта, в т.ч. атомных подлодок, можно ожидать, наверное, чего угодно). :-)
   Доныч
 
25 - 13.04.05 - 18:31
(24) Я не спорю. Пост (23) к тому, что это не проблема конкретного релиза, а фича 1С. То есть такое было и в других релизах.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.