Что за ? в коде, или Секретный оператор в 1С

21.10.21

Разработка - Математика и алгоритмы

Инкремент, модуль и прочая магия, которая скрыта под символом "?"

 

ДИСКЛЕЙМЕР

ВСЁ ОПИСАННОЕ НИЖЕ - НЕДОКУМЕНТИРОВАНОЕ ПОВЕДЕНИЕ!

ИСПОЛЬЗОВАНИЕ В РЕАЛЬНОМ КОДЕ ЗАПРЕЩЕНО!

АВТОР НЕ НЕСЁТ НИКАКОЙ ОТВЕТСТВЕННОСТИ И ВООБЩЕ БАКА!

 

Сколько же всего сложного и таинственного нас окружает. 

Черные дыры и сновидения. Темная материя и подсознание. Корпускулярно-волновой дуализм и 1С...

 

И ведь думаешь, что знаешь эту "1Ску" как свои пять пальцев, но стоит случайно копнуть глубже... И очередная багофича. Да ешё и какая!

В этой статье рассмотрим секретный оператор ?

О нём мало кто знает, хоть он и существует как минимум с версии 8.0.

 

В последнее время я публикую на своём телеграм-канале разные хитрые задачки с подвохом для программистов 1С. Какие-то беру "по памяти", а какие-то "рождаю" в результате экспериментов. Об этом скоро выйдет отдельная статья. И вот в очередном тесте адекватности платформы случайно натыкаюсь на такую конструкцию:

А = ?;

 

Синтаксис-проверка прошла успешно. Никаких ошибок не высветилось. И, казалось бы, ошибка тогда должна произойти в момент выполнения...

 

 

Код успешно выполнился. Удивительно, но сработало! И тут меня понесло...

 

 

Как оказалось, знак ? ведёт себя крайне странно. Давайте посмотрим ещё раз прошлый пример.

А = ?;

Мы создаём новую переменную и назначаем ей значение - ?. И в переменной находится Неопределенно. И, казалось бы, это и есть ответ на вопрос. Знак ? означает Неопределено.

Но что же тогда это: 

 

 

В данном коде сначала идёт объявление переменной "А". И в А установлено числовое значение "1". А далее идёт наше сравнение с ?. Если бы под знаком вопроса скрывалось Неопределено, то мы бы не попали внутрь условия. А по скрину видно, что попали.

Ну ладно, значит "?" есть что-то другое. Попробуем вывести его в сообщение:

 

 

Очень странная ошибка. "Переменная не определена (Сообщить)". Ну допустим. Добавим тогда такую переменную:

Сообщить = "ТЕСТ";
Сообщить(?); //Сообщит "ТЕСТ"

Данный код компилируется без ошибок. И при выполнении в 1С сообщает "ТЕСТ". То есть значение переменной Сообщить

Выходит, что символ ? указывает на предыдущее слово в коде. В данном случае, перед ? было слово Сообщить. И поэтому 1С изначально поругалась, что такая переменная не определена. А когда мы добавили переменную Сообщить, то всё стало на свои места.

То есть наш код для 1С выглядит так:

Сообщить = "ТЕСТ";
Сообщить(Сообщить);

 

А теперь вернемся к нашим предыдущим примерам и разберём что и как сработало. 

А = 1;
Если ? = А Тогда
    Сообщить(А);
КонецЕсли;

В данном коде предыдущее слово перед ? - Если. Но оно является ключевым для 1С. Как "Цикл", "Процедура" и так далее. Поэтому, его оператор ? не учитывает и берет в качестве источника значения переменную А.

Скорректируем же этот код так, как его видит 1С:

А = 1;
Если А = А Тогда
    Сообщить(А);
КонецЕсли;

Теперь всё логично. А = А и поэтому условие выполняется.

 

А что с нашим самым первым примером?

А = ?;

На самом деле всё так же. Просто заменяем знак вопроса на предыдущее слово.

А = А;

Да, такой код тоже странный, но в рамках 1С всё логично. Сначала объявляется переменная и в ней Неопределено. А затем происходит присвоение переменной значения из её самой. То есть опять же Неопределено. Можете проверить такой код - это хоть и выглядит странно, но работает. А почитать чуть подробнее можно в статье на ИТС: Предварительная инициализация локальных переменных

 

Но вернемся к нашим вопросам. И так, символ ? в коде означает обращение к предыдущему слову. Даже если это слово - название метода. Почему? Зачем? Скорее всего случайно. Какая-то лазейка в коде интерпретатора 1С. И вряд ли мы об этом узнаем. Но:

 

Использовать это в реальном коде нельзя!

Ведь мало ли когда это исправят. И неизвестно где это может аукнуться. Но раз уж мы эту багофичу нашли, то давайте уже и придумаем как её применить 😁🎉   Возможно, вы уже догадались...

 

Представляю вам инкремент на 1С!

МояПеременная = 0;

МояПеременная = ? + 1; //1
МояПеременная = ? + 1; //2
МояПеременная = ? * 5; //10
МояПеременная = ? / 2; //5
МояПеременная = ? - 6; //-1

Да, мы так долго ждали и вот он😅

А самое интересное, что такая возможность существовала как минимум ещё с версии 8.0 . Специально скачал старую платформу и проверил.

На самом деле такой код можно ещё упросить:

МояПеременная = 0;

? = ? + 1; 
? = ? + 1; 
? = ? * 5; 
? = ? / 2; 
? = ? - 6; 

Но такой вариант становится менее надежным. Ведь всё работает до тех пор, пока перед ? находится МояПеременная. Если же вставить после этого какое-то другое "слово", то всё порушится.

 

Но вот ещё пример:

А = 1;

Структура = Новый Структура("А", 0);
Структура.А = ? + 1;

Сообщить(Структура.А); //Будет 2

Мы же помним, что знак ? берет предыдущее слово. Так вот в нашей строке кода это слово "А". Именно так - без "Структура". 

Поэтому 1С в таком коде вместо знака вопроса вставит "А"

А = 1;

Структура = Новый Структура("А", 0);

Структура.А = А + 1;

Сообщить(Структура.А); //Будет 2

Выходит, инкремент хоть и есть, но с особенностями 😁

 

Но зато появляется новая возможность применения:

МояПеременная1 = 1;
МояПеременная2 = 2;
МояПеременная3 = 3;

Структура = Новый Структура("МояПеременная1,МояПеременная2,МояПеременная3");
Структура.МояПеременная1 = ?;   //1
Структура.МояПеременная2 = ?;   //2
Структура.МояПеременная3 = ?;   //3

В данном коде мы создали структуру и наполнили её объявленными ранее переменными. Тоже бывает удобно, когда нужно передать какой-то набор переменных метода в другой метод через структуру.

 

 

А вот ещё пример. Можно передать в какой-то метод или конструктор одно значение несколько раз:

ПустаяДата = '00010101';
Структура  = Новый Структура("Д1,Д2,Д3,Д4,Д5",ПустаяДата,?,?,?,?)

 

Передавать знак ? можно даже в условный тернарный оператор. Например, этот код приводит отрицательные числа к 0: 

МояПеременная = -5;
МояПеременная = ?(?>0,?,0);

Сообщить(МояПеременная); //Будет 0

 

А этот приводит отрицательные числа к положительным:

МояПеременная = -5;
МояПеременная = ?(?<0,-?,?);

Сообщить(МояПеременная); //Будет 5

 

Подобным образом можно присваивать дефолтные значения необязательным параметрам:

Процедура МояПроцедура(ДополнительныеПараметры = Неопределено) Экспорт
	
	ДополнительныеПараметры = ?(? <> Неопределено, ?, Новый Структура);
	
КонецПроцедуры

Главное помнить, что знак ? берет именно предыдущее слово, поэтому вот так работать НЕ будет:

ДополнительныеПараметры = ?(? = Неопределено, Новый Структура, ?);

1С поругается, что Переменная не определена (Структура). Ведь перед последним знаком ? слово Структура

 

Но что если использовать символ ? в параметрах?

Сделаем процедуру с параметром ? :

Процедура МояПроцедура(?)
		
КонецПроцедуры

МояПроцедура(1); //Выполнится
МояПроцедура();  //Будет ошибка: Недостаточно фактических параметров (МояПроцедура)

 

Такую процедуру действительно возможно создать. И можно вызывать. Причем 1С понимает, что параметр обязательный и его необходимо передать. 

Но мы можем сделать его необязательным:


Процедура МояПроцедура(? = Неопределено)
		
КонецПроцедуры

МояПроцедура(1);
МояПроцедура();  //Теперь и здесь ОК

И параметр не обязан быть единственным. Можно делать разными способами:

Процедура МояПроцедура(А, ?)
	
КонецПроцедуры

Процедура МояПроцедура(А, ?, Б)
	
КонецПроцедуры

Процедура МояПроцедура(?, А, Б)
	
КонецПроцедуры

 

А можно использовать Знач

Процедура МояПроцедура(А, Знач ?)
	
КонецПроцедуры

 

Но вот незадача, ? в параметре метода не использует предыдущее слово (как во всех других случаях). Как обратиться к этому параметру - неизвестно. 

В стеке вызовов он отображается:

 

 

А попробуем добавить второй параметр ?

Процедура МояПроцедура(?, ?)
			
КонецПроцедуры

1С ругается так:

Формальный параметр с указанным именем уже определен (?)

Опираясь на текст ошибки, мы можем предположить, что 1С объявляет параметр с именем "?"

И когда мы пытаемся добавить ещё один такой параметр, то платформа ругается.

 

Как обратиться к параметру с именем "?" - неизвестно. Методы Вычислить() и Выполнить() не помогли. 

 

Но, возможно, это всё те вопросы, которые нам ещё предстоит разгадать. Секреты и загадки этой таинственной платформы под кодовым названием 1С...

 

 

Понравилась статья? 

Поставьте лайк плюс. Пишите свои идеи и комментарии по теме. Статья будет дополняться.

И переходите к другим публикациям от автора:

Баг Фича Инкремент Декремент Секрет Оператор Формальный Параметр Лайфхак Пасхалка Недокументированное Особенность

См. также

Метод Дугласа-Пойкера для эффективного хранения метрик

Математика и алгоритмы Платформа 1C v8.2 Конфигурации 1cv8 Россия Абонемент ($m)

На написание данной работы меня вдохновила работа @glassman «Переход на ClickHouse для анализа метрик». Автор анализирует большой объем данных, много миллионов строк, и убедительно доказывает, что ClickHouse справляется лучше PostgreSQL. Я же покажу как можно сократить объем данных в 49.9 раз при этом: 1. Сохранить значения локальных экстремумов 2. Отклонения от реальных значений имеют наперед заданную допустимую погрешность.

1 стартмани

30.01.2024    1753    stopa85    12    

33

Алгоритм симплекс-метода для решения задачи раскроя

Математика и алгоритмы Бесплатно (free)

Разработка алгоритма, построенного на модели симплекс-метода, для нахождения оптимального раскроя.

19.10.2023    4415    user1959478    50    

34

Регулярные выражения на 1С

Математика и алгоритмы Инструментарий разработчика Платформа 1С v8.3 Мобильная платформа Россия Абонемент ($m)

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

1 стартмани

09.06.2023    7449    4    SpaceOfMyHead    17    

56

Модель распределения суммы по базе

Математика и алгоритмы Платформа 1С v8.3 Россия Абонемент ($m)

Обычно под распределением понимают определение сумм пропорционально коэффициентам. Предлагаю включить сюда также распределение по порядку (FIFO, LIFO) и повысить уровень размерности до 2-х. 1-ое означает, что распределение может быть не только пропорциональным, но и по порядку, а 2-ое - это вариант реализации матричного распределения: по строкам и столбцам. Возможно вас заинтересует также необычное решение этой задачи через создание DSL на базе реализации текучего интерфейса

1 стартмани

21.03.2022    7848    7    kalyaka    11    

44

Изменения формата файлов конфигурации (CF) в 8.3.16

Математика и алгоритмы Платформа 1С v8.3 Бесплатно (free)

Дополнение по формату файлов конфигурации (*.cf) в версии 8.3.16.

16.12.2021    4443    fishca    13    

36

Интересная задача на Yandex cup 2021

Математика и алгоритмы Бесплатно (free)

Мое решение задачи на Yandex cup 2021 (frontend). Лабиринт. JavaScript.

12.10.2021    8829    John_d    73    

46

Управление платформенными обработками (расширение + обработка выгрузки) [update 8.3.24]

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".

07.10.2021    13762    25    SeiOkami    27    

108

Механизм анализа данных. Кластеризация.

Математика и алгоритмы Анализ учета Платформа 1С v8.3 Анализ и прогнозирование Бесплатно (free)

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

31.08.2021    7796    dusha0020    8    

70
Отзывы
20. tormozit 7136 22.10.21 09:08 Сейчас в теме
Опубликовал этот баг на партнерской конференции https://partners.v8.1c.ru/forum/t/2024936/m/2024936 и отправил в 1С
mark_oilbass; sviriduk; Hobbit_Jedi; letzteKraft; Drivingblind; dmpas; zqzq; DoctorRoza; DrAku1a; ubnkfl; Leon75; VAAngelov; CSiER; Student1C; PowerBoy; awk; SerVer1C; shunk; Shmell; SeiOkami; +20 Ответить
2. CyberCerber 852 21.10.21 16:45 Сейчас в теме
Мы радовались появлению инкремента, так еще долгожданный модуль появился, точно!
?(?<0,-?,?)
PowerBoy; FilatovRA; Merkalov; Hobbit_Jedi; Scorpion4eg; letzteKraft; user1269637; daodezi; DrAku1a; Student1C; kser87; SeiOkami; Nuki4; maksa2005; Shmell; ipoloskov; BaphoBush; +17 Ответить
38. tormozit 7136 30.10.21 10:21 Сейчас в теме
(20) ну вот и официальное описание бага https://bugboard.v8.1c.ru/error/000116340 :

Компилятор встроенного языка ошибочно допускает использование символа ? в следующих случаях:
1. В качестве имени формального параметра процедуры/функции
2. В качестве имени объявляемой переменной в операторе Перем
3. В качестве имени переменной, управляющей циклом в операторах Для и Для Каждого
4. В качестве имени переменной верхнего уровня в выражениях

При этом, в качестве фактического имени переменной, может восприниматься или сам ? или последний, встретившийся перед ? идентификатор.
user1878860; LordKim; Созинов; sviriduk; awk; +5 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. BaphoBush 21.10.21 16:28 Сейчас в теме
А смотрел обработкой Андрея Овсянкина как этот прекрасный оператор в байт-коде выглядит и во что разворачивается вообще?
Fragster; +1 Ответить
34. Darklight 32 27.10.21 11:23 Сейчас в теме
(1)Вот вот. Статья интересная. побольше бы таких статей. Но в статье явно не хватает более глубокого анализа опКодово 1С - было бы правильно разместить расшифровку опКодов компилированного байткода стековой машины 1С для каждого примера - чтобы показать - во что это всё реально трансформируется.

Из всех примеров "практического использования" понравились только примеры с тернарным оператором.
Но , конечно же, все примеры лучше реализовать, всё-таки, в виде глобальных функций с короткими именами - например у меня есть такая для значения по умолчанию
//Возвращает значение  ПоУмолчанию, если Значение не задано согласно логике функции и переданным параметрам
функция ЗН(Значение, ПоУмолчанию=неопределено, ТолькоНеопределено=Ложь,ПропускатьПримитивные=Ложь,ВычислитьПоУмолчанию=Ложь) экспорт
	Если ТолькоНеопределено=Истина Тогда
		Если Значение<>неопределено Тогда
			возврат Значение;
		КонецЕсли;
		Если ВычислитьПоУмолчанию Тогда
			возврат Вычислить(ПоУмолчанию); 
		Иначе
			возврат ПоУмолчанию;
		КонецЕсли; 
	ИначеЕсли ТолькоНеопределено=null Тогда
		Если Значение<>неопределено И Значение<>null Тогда
			возврат Значение;
		КонецЕсли;
		Если ВычислитьПоУмолчанию Тогда
			возврат Вычислить(ПоУмолчанию); 
		Иначе
			возврат ПоУмолчанию;
		КонецЕсли;  
	КонецЕсли;
	Если ПропускатьПримитивные Тогда
		Если Значение=0
		 ИЛИ Значение=Ложь
		 ИЛИ Значение=""
		 ИЛИ Значение='00010101'
		Тогда
			возврат Значение;
		КонецЕсли;
	КонецЕсли;
	Попытка    
		Если ЗначениеЗаполнено(Значение) Тогда
			возврат Значение;
		КонецЕсли;	
	Исключение 
		возврат Значение;
	КонецПопытки; 
	Если ВычислитьПоУмолчанию Тогда
		возврат Вычислить(ПоУмолчанию); 
	Иначе
		возврат ПоУмолчанию;
	КонецЕсли;
Конецфункции
Показать

Конечно, тут код длинный и нввороченный и его только в функцию оборачивать.
Но, скажем, модуль числа тоже удобнее делать функцией
//Возвращает абсолютное значение числа (без знака)
функция Абс(Значение) экспорт           
	возврат ?(ТипЗнч(Значение)<>Тип("Число") ИЛИ Значение>=0, Значение, -Значение);
КонецФункции  

Как и функцию инкремента
//Увеличивает на Шаг=1 значение в переданной переменной Переменная и возвращает новое (или предыдущее значение)
функция Инк(Переменная, Шаг=1, ВернутьИсходное=Истина) экспорт
	Если ВернутьИсходное=Истина Тогда 
		Исх = Переменная;
		Переменная = Переменная + Шаг;
		возврат Исх;  
	Иначе  
		Переменная = Переменная + Шаг;
		возврат Переменная;
	КонецЕсли;
КонецФункции
Показать

Жалко, что код ниже не получает имя функции - было бы реально полезное применение
Функция Тест() экспорт
	ИмяФункции = ?;
	сообщить(ИмяФункции);
КонецФункции


В общем, статья хорошая - но немного не полная, так как нет низкоуровневого анализа опКодов 1С
2. CyberCerber 852 21.10.21 16:45 Сейчас в теме
Мы радовались появлению инкремента, так еще долгожданный модуль появился, точно!
?(?<0,-?,?)
PowerBoy; FilatovRA; Merkalov; Hobbit_Jedi; Scorpion4eg; letzteKraft; user1269637; daodezi; DrAku1a; Student1C; kser87; SeiOkami; Nuki4; maksa2005; Shmell; ipoloskov; BaphoBush; +17 Ответить
3. L0z4 37 21.10.21 16:56 Сейчас в теме
(2) это уже не модуль, это какая-то регулярка :)
4. CyberCerber 852 21.10.21 16:57 Сейчас в теме
(3) Ага, а еще говорят, 1С многословный язык... Он еще с brainfuck'ом потягаться может!
cheburashka; bulpi; unknown181538; TitanLuchs; GeraltSnow; +5 Ответить
16. Созинов 22.10.21 06:37 Сейчас в теме
(4)
brainfuck

brainfuck - мне кажется создан для одной цели - вынести мозг.
35. Darklight 32 27.10.21 11:30 Сейчас в теме
(16)Вы не правы. Вернее правы - он так и создавался, наверное. Но в итоге данный язык открыл целый класс Эзотерических языков программирования (не знаю, был ли он первым, но явно стал одним из самых известных и популяризующих тему ЯП), которые внесли вклад в развитие современных ЯП, компиляторов и даже криптовалют. Так же данные языки применяются для обучения в вузах (при углублённом изучении компьютерной логики), и применяются на олимпиадах по программированию
Созинов; +1 Ответить
30. tormozit 7136 24.10.21 09:20 Сейчас в теме
5. TipsyKID 21.10.21 17:13 Сейчас в теме
Ну, зачем же Вы, теперь пофиксят... кого я обманываю
stopa85; starik-2005; Deletex; cheburashka; SuhoffGV; Fox-trot; bulpi; cleaner_it; Sikh; +9 Ответить
6. DitriX 2091 21.10.21 17:20 Сейчас в теме
Помню в первых версиях ЕДТ был баг, когда параметр в табличном документе назначаешь, там можно было сделать перенос строки.
И конфигуратор это хавал.
И получалось, что для заполнения параметра - надо было его так и указывать с переносом строки. Типо ТабДок["Пер" + Символы.ПС] = 123
Ох, сколько я тогда убил времени чтобы вычислить этот прикол.
Но тогда я понял одно - 1С реально просто работает с моделью языка на лету, не особо вдаваясь в какие то контроли, ожидая, что все что сожет быть сделано - сделано только в конфигураторе.
BaphoBush; +1 Ответить
7. SerVer1C 748 21.10.21 17:40 Сейчас в теме
Забавно! :-) Видимо, эсный лексический анализатор глупит при разборе.
А = ?;
в байткоде, действительно, выглядит как
А = А;
8. Sikh 21.10.21 18:05 Сейчас в теме
лучше бы инкремент с декрементом добавили, чем такой ерундой с вопросом страдать. Это скорей всего баг, чем фича.
ivanov660; +1 Ответить
9. Fragster 1138 21.10.21 18:26 Сейчас в теме
(8) может вам еще инициализацию массива через [1, 2, 3]?
YanTsys; Yashazz; Fox-trot; brr; yatec; mrChOP93; +6 Ответить
10. CyberCerber 852 21.10.21 20:12 Сейчас в теме
(9) За этим всем в Исполнитель
11. CheBurator 3119 21.10.21 22:22 Сейчас в теме
Пора иcследовать $
bulpi; rujiy_kot; +2 Ответить
13. CyberCerber 852 21.10.21 23:24 Сейчас в теме
(11) Не, ну у нас же php какое-то забугорное. Нужно проверить наш родной ₽
unknown181538; acsent; SkyHunter; +3 Ответить
36. Darklight 32 27.10.21 11:32 Сейчас в теме
(11)Это не управляющий символ в 1С Предприятие 8. Но есть ещё ~ : %
37. Yashazz 4709 28.10.21 17:04 Сейчас в теме
(36) С тильдой были забавные фишки в 7.7, а вот на восьмерке не наблюдал никаких "спецэффектов"...
12. biimmap 1827 21.10.21 23:23 Сейчас в теме
Поржал. Отправь это братьям нашим старшим... Нуралиевым. Пусть пояснят)
14. RustIG 1351 21.10.21 23:43 Сейчас в теме
(0) раньше в платформе надо было писать идентификаторы со скобками: например,
Мас = Новый Массив();


Затем разрешили без скобок:
Мас = Новый Массив


Я думаю, то же самое с операндом ? - платформа его распознает со скобками (как и было задумано изначально ?(А=В, Х, У) и без скобок (см. абзац выше).

Мы же можем написать так:
Массив = Массив + Массив;
платформа не должна ругаться....
Поэтому можно написать ? = ? + ?;

Я полагаю, что ноги растут отсюда ...
tsmult; Gorus; v3132; +3 Ответить
15. madonov 169 22.10.21 02:10 Сейчас в теме
Спасибо за статью. Взбодрился с утреца.
user958974; maksa2005; Созинов; +3 Ответить
17. Созинов 22.10.21 06:47 Сейчас в теме
Позитивная и интересная статья - поднимает настроение. Автору спасибо! Надеюсь увидеть еще что-то подобное.
18. maksa2005 530 22.10.21 07:39 Сейчас в теме
19. improg 568 22.10.21 08:45 Сейчас в теме
С такими темпами и обфускация кода будет не нужна)
Астиг; +1 Ответить
20. tormozit 7136 22.10.21 09:08 Сейчас в теме
Опубликовал этот баг на партнерской конференции https://partners.v8.1c.ru/forum/t/2024936/m/2024936 и отправил в 1С
mark_oilbass; sviriduk; Hobbit_Jedi; letzteKraft; Drivingblind; dmpas; zqzq; DoctorRoza; DrAku1a; ubnkfl; Leon75; VAAngelov; CSiER; Student1C; PowerBoy; awk; SerVer1C; shunk; Shmell; SeiOkami; +20 Ответить
22. SeiOkami 3423 22.10.21 09:49 Сейчас в теме
(20) классно! Поставил "плюс", пусть поднимается по рейтингу
31. DrAku1a 1679 24.10.21 10:42 Сейчас в теме
(20) Может, это "не баг, а фича"?
32. tormozit 7136 24.10.21 10:58 Сейчас в теме
(31) Представитель 1С четко ответил - баг.
38. tormozit 7136 30.10.21 10:21 Сейчас в теме
(20) ну вот и официальное описание бага https://bugboard.v8.1c.ru/error/000116340 :

Компилятор встроенного языка ошибочно допускает использование символа ? в следующих случаях:
1. В качестве имени формального параметра процедуры/функции
2. В качестве имени объявляемой переменной в операторе Перем
3. В качестве имени переменной, управляющей циклом в операторах Для и Для Каждого
4. В качестве имени переменной верхнего уровня в выражениях

При этом, в качестве фактического имени переменной, может восприниматься или сам ? или последний, встретившийся перед ? идентификатор.
user1878860; LordKim; Созинов; sviriduk; awk; +5 Ответить
42. tormozit 7136 22.02.22 20:17 Сейчас в теме
21. MegasXXX 2 22.10.21 09:22 Сейчас в теме
Забавно.
Надеюсь никто так писать не будет.
23. vld1973 85 22.10.21 10:21 Сейчас в теме
Спасибо. Очень занимательно. Подняли настроение.
24. Jimbo 9 22.10.21 11:47 Сейчас в теме
Где группа телеграм-канала ?
25. SeiOkami 3423 22.10.21 11:48 Сейчас в теме
(24) модератор запретил ссылку указывать. Не по правилам сообщества =(
26. ubnkfl 22.10.21 18:07 Сейчас в теме
Ответ с партнерки, у кого нет туда доступа.
Прикрепленные файлы:
EasyWay; madonov; CyberCerber; +3 Ответить
27. SeiOkami 3423 22.10.21 18:23 Сейчас в теме
(26) раз он так древен, то можно было уже и задокументировать)
mip128; ubnkfl; +2 Ответить
28. caponid 23.10.21 00:00 Сейчас в теме
(26) спс, поржал)))

Особенно умиляет классификация ошибки как "забавная" =)
33. madonov 169 25.10.21 08:21 Сейчас в теме
(26) Ой, исправят они! Насмешили! Ещё в 9.0 работать будет =)) .
7OH; SuhoffGV; nikolav; +3 1 Ответить
29. Lapitskiy 1057 23.10.21 18:53 Сейчас в теме
"английские ученые скрестили слона и слона - просто так, посмотреть на процесс" :)
корум; Serg O.; Darklight; madonov; +4 Ответить
39. ubnkfl 31.10.21 14:42 Сейчас в теме
Ошибка опубликована на баг-трекере.
Прикрепленные файлы:
40. Pavel_Vladivostok 58 13.11.21 07:42 Сейчас в теме
А все-же не хватает инкрементов в 1С, всяких там ++, --, +=, -=, ну и классов мутирующих, структур с методами также мутирующих в новые штаммы классов и структур, представьте только как будет интересно разбираться в БСП с такими штуками в коде :)
41. babys 90 19.11.21 17:40 Сейчас в теме
(40) "классов мутирующих, структур с методами также мутирующих", сейчас то - функция на функции и функцией погоняет. Скоро все 1Сные разработчики уедут в асинхронность и перепишут всё на пост обработчики. А потом сделают их для мутирующих типов. У меня уже волосы шевелится начинают, как представлю что это надо будет анализировать и править ;)

Учитывая инструменты для разработчика в Конфигураторе :)
43. fixin 4252 08.06.22 15:20 Сейчас в теме
Век живи, век учись, ггг
44. Sam13 342 30.01.24 15:36 Сейчас в теме
Оставьте свое сообщение