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

Публикация № 1537889 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С...

 

 

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

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

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

Специальные предложения

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

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

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

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

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

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

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


В общем, статья хорошая - но немного не полная, так как нет низкоуровневого анализа опКодов 1С
2. CyberCerber 882 21.10.21 16:45 Сейчас в теме
Мы радовались появлению инкремента, так еще долгожданный модуль появился, точно!
?(?<0,-?,?)
Scorpion4eg; letzteKraft; user1269637; daodezi; DrAku1a; Student1C; kser87; SeiOkami; Nuki4; maksa2005; Shmell; ipoloskov; BaphoBush; +13 Ответить
3. L0z4 37 21.10.21 16:56 Сейчас в теме
(2) это уже не модуль, это какая-то регулярка :)
4. CyberCerber 882 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 27 27.10.21 11:30 Сейчас в теме
(16)Вы не правы. Вернее правы - он так и создавался, наверное. Но в итоге данный язык открыл целый класс Эзотерических языков программирования (не знаю, был ли он первым, но явно стал одним из самых известных и популяризующих тему ЯП), которые внесли вклад в развитие современных ЯП, компиляторов и даже криптовалют. Так же данные языки применяются для обучения в вузах (при углублённом изучении компьютерной логики), и применяются на олимпиадах по программированию
Созинов; +1 Ответить
30. tormozit 6441 24.10.21 09:20 Сейчас в теме
5. TipsyKID 21.10.21 17:13 Сейчас в теме
Ну, зачем же Вы, теперь пофиксят... кого я обманываю
cheburashka; SuhoffGV; Fox-trot; bulpi; cleaner_it; Sikh; +6 Ответить
6. DitriX 2001 21.10.21 17:20 Сейчас в теме
Помню в первых версиях ЕДТ был баг, когда параметр в табличном документе назначаешь, там можно было сделать перенос строки.
И конфигуратор это хавал.
И получалось, что для заполнения параметра - надо было его так и указывать с переносом строки. Типо ТабДок["Пер" + Символы.ПС] = 123
Ох, сколько я тогда убил времени чтобы вычислить этот прикол.
Но тогда я понял одно - 1С реально просто работает с моделью языка на лету, не особо вдаваясь в какие то контроли, ожидая, что все что сожет быть сделано - сделано только в конфигураторе.
BaphoBush; +1 Ответить
7. SerVer1C 419 21.10.21 17:40 Сейчас в теме
Забавно! :-) Видимо, эсный лексический анализатор глупит при разборе.
А = ?;
в байткоде, действительно, выглядит как
А = А;
8. Sikh 21.10.21 18:05 Сейчас в теме
лучше бы инкремент с декрементом добавили, чем такой ерундой с вопросом страдать. Это скорей всего баг, чем фича.
ivanov660; +1 Ответить
9. Fragster 1076 21.10.21 18:26 Сейчас в теме
(8) может вам еще инициализацию массива через [1, 2, 3]?
YanTsys; Yashazz; Fox-trot; brr; yatec; mrChOP93; +6 Ответить
10. CyberCerber 882 21.10.21 20:12 Сейчас в теме
(9) За этим всем в Исполнитель
11. CheBurator 3378 21.10.21 22:22 Сейчас в теме
Пора иcследовать $
bulpi; rujiy_kot; +2 Ответить
13. CyberCerber 882 21.10.21 23:24 Сейчас в теме
(11) Не, ну у нас же php какое-то забугорное. Нужно проверить наш родной ₽
unknown181538; acsent; SkyHunter; +3 Ответить
36. Darklight 27 27.10.21 11:32 Сейчас в теме
(11)Это не управляющий символ в 1С Предприятие 8. Но есть ещё ~ : %
37. Yashazz 4120 28.10.21 17:04 Сейчас в теме
(36) С тильдой были забавные фишки в 7.7, а вот на восьмерке не наблюдал никаких "спецэффектов"...
12. biimmap 317 21.10.21 23:23 Сейчас в теме
Поржал. Отправь это братьям нашим старшим... Нуралиевым. Пусть пояснят)
14. Rustig 1293 21.10.21 23:43 Сейчас в теме
(0) раньше в платформе надо было писать идентификаторы со скобками: например,
Мас = Новый Массив();


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


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

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

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

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

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

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

Учитывая инструменты для разработчика в Конфигураторе :)
Оставьте свое сообщение

См. также

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С Промо

Математика и алгоритмы Практика программирования v8 v8::blocking 1cv8.cf Бесплатно (free)

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    45352    ids79    46    

Управление платформенными обработками (расширение для типовых)

Универсальные обработки v8 1cv8.cf Абонемент ($m)

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

1 стартмани

07.10.2021    3692    6    SeiOkami    23    

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

Математика и алгоритмы Анализ учета v8 v8::DataMining Бесплатно (free)

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

31.08.2021    2200    dusha0020    8    

Практическое применение операции копирования массива

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

Решение задачи https://projecteuler.net/problem=250 из Project Euler средствами 1C.

02.08.2021    980    scientes    2    

Как работает серверный вызов в 1С Промо

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

Клиент-серверная архитектура заложена в платформе изначально — со времен «1С:Предприятие 8.0». Однако при разработке на 8.0 и 8.1 о разделении кода на клиентскую и серверную часть можно было не заботиться, поскольку на клиенте (на толстом клиенте) был доступен тот же функционал, что и на сервере. Всё изменилось с выходом платформы «1С:Предприятие 8.2», когда появился тонкий клиент. Теперь на клиенте доступен один функционал, на сервере — другой. Клиент и сервер «общаются» между собой с помощью серверного вызова. Конечно, это усложнило процесс разработки, но с другой стороны – можно создавать более оптимальные (быстрые) решения, поскольку все сложные задачи выполняются на сервере.

18.11.2017    68059    pahich    84    

Запрос всей номенклатуры с характеристиками

Математика и алгоритмы v8 ERP2 УТ11 КА2 Бесплатно (free)

Сравнение различных вариантов запроса всей номенклатуры с характеристиками (УТ11.4, КА 2.4, ERP 2.4).

1 стартмани

30.07.2021    966    Daemonold    3    

Распределенные алгоритмы РИБ 1С

Распределенная БД (УРИБ, УРБД) Математика и алгоритмы v8 Бесплатно (free)

Небольшое исследование на тему применимости классических распределённых алгоритмов репликации и синхронизации данных между узлами обмена РИБ 1С.

02.07.2021    1288    zhichkin    1    

Чем воспользоваться для распознавания котиков в 1С?

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

На митапе по инструментам для расширения возможностей 1С выступил Олег Филиппов. Он сравнил подходы Native API, COM, Docker и Serverless, и рассказал, как упростить использование в 1С алгоритмов, реализованных на других языках, с помощью облачной технологии «Функция как сервис».

12.04.2021    3486    comol    10    

История формирования отчетов (расширение для типовых конфигураций) Промо

Журнал регистрации v8::УФ v8::СКД ДО ERP2 БП3.0 УТ11 ЗУП3.x Абонемент ($m)

Подсистема для хранения, использования и анализа истории формирования отчетов пользователями

5 стартмани

28.11.2017    19217    33    SeiOkami    2    

Флаг "Использовать ПОЧТИ всегда", или Нюанс динамических списков

Практика программирования v8 Платформа 1C v8.2 1cv8.cf Бесплатно (free)

Небольшая пятничная история по программной работе со строкой динамического списка.

11.02.2021    6070    SeiOkami    36    

Рекурсия для начинающих

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

Рассмотрен подход к пониманию рекурсий. Приведены примеры из реальной практики.

10.02.2021    2723    szv    5    

Сервис регистрации ошибок 1С (пример создания)

Практика программирования v8 1cv8.cf Бесплатно (free)

Разработаем вместе простой сервис регистрации ошибок для 1С на самой 1С =)

13.10.2020    6679    SeiOkami    27    

Будни автоматизации или "мне нужна программка для 3D упаковки" Промо

Математика и алгоритмы Оптовая торговля Оптовая торговля Практика программирования v8 1cv8.cf УУ Бесплатно (free)

Автоматизация отечественных предприятий, которой приходиться заниматься, это нужная и высокооплачиваемая, но довольно нервная работа. Выручает юмор. Например, при общении с требовательным клиентом можно вспомнить анекдот: "Держась руками за стену, на ногах еле стоит мужик. К нему пристает ребенок: "Ну, папа, пожалуйста, сделай мне кораблик!", папа отвечает: "Ага! - Сейчас все брошу и пойду делать тебе кораблик!". Про один такой сделанный для клиента "кораблик" и хочется рассказать. Надеюсь, совместное погружение в теплое ламповое (то есть клиентоориентированное) программирование доставит Вам положительные эмоции, да и задача попалась интересная. Поплыли?

24.03.2014    46876    ildarovich    117    

Серверные вызовы, которые нельзя вызывать

Практика программирования v8 v8::УФ 1cv8.cf Бесплатно (free)

Не баян, а классика. Рассмотрим особенность платформы настолько же древнюю, как сами УФ.

12.05.2020    9511    SeiOkami    34    

Партионный учет по двум количественным показателям

Математика и алгоритмы Учет ТМЦ v8 1cv8.cf Оптовая торговля, дистрибуция, логистика Россия УУ Бесплатно (free)

Особенности учета партионной системы при наличии двух количественных показателей.

26.03.2020    4547    lastcontra    5    

Получение значений всех полей в иерархии структуры отчета

Математика и алгоритмы Практика программирования v8::СКД Россия Бесплатно (free)

При обработке расшифровки данных в отчете (да и не только отчете), основанном на СКД, может потребоваться получить значения всех полей, находящихся в текущей группировке и её родителях. Представляю вашему вниманию алгоритм, выполняющий эту задачу. Как говорится, "просто оставлю это здесь".

28.02.2020    2570    real_MaxA    1    

Приемы обработки больших данных в 1С Промо

Универсальные обработки Математика и алгоритмы Перенос данных из 1C8 в 1C8 v8 1cv8.cf Бесплатно (free)

Рассказ об эффективных приемах организации обработок больших объемов данных на платформе 1С

07.08.2015    71518    tormozit    29    

Treemapping — способ визуализации данных древовидной структуры. Карта-схема дерева

Математика и алгоритмы Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

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

18.02.2020    6576    randomus    20    

[После]Новогодние задачи

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

Совсем немного времени осталось до того момента, когда отзвучат куранты, шампанское будет выпито, мандарины съедены, и даже оливье закончится. Возникнет вопрос: чем бы занять неожиданно появившееся свободное время?

30.12.2019    3443    Alxby    23    

Регистры бухгалтерии. Общая информация

Математика и алгоритмы Практика программирования v8 v8::БУ БУ Бесплатно (free)

Общая информация о внутреннем устройстве регистров бухгалтерии.

05.09.2019    47532    YPermitin    25    

XDTO - это просто Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

С появлением платформы 8.1 фирма “1С” представила механизм, носящий интригующее название XML Data Transfer Objects или, если коротко - XDTO. По традиции, документирование механизма составлял тот, кто хорошо разбирался в вопросе, а стало быть опустил “и так понятные” с его точки зрения моменты. Целью данной статьи (или цикла статей, как получится) стало желание поделиться накопленным опытом. Мне кажется, многие неочевидные вещи в механизме XDTO необходимо осветить получше.

24.12.2012    332529    Evil Beaver    184    

"Хочу универсально!" [Часть 1]

Математика и алгоритмы Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

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

02.09.2019    10745    SeiOkami    35    

Иерархия без "В ИЕРАРХИИ"

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

Говорится о том, как эффективно представлять иерархию в СУБД, как получать и использовать эти представления при решении задач в запросной технике. Уточняются и дополняются запросы из статьи "Уровни, глубина, прародители, циклы и аналоги запросом" [https://infostart.ru/public/160707/].

22.08.2019    15192    ildarovich    24    

EnterpriseData – часть 3. Загрузка данных, идентификация объектов

Математика и алгоритмы Перенос данных из 1C8 в 1C8 Инструментарий разработчика Практика программирования v8 v8::УФ 1cv8.cf Бесплатно (free)

Основные этапы загрузки данных через EnterpriseData. Идентификация объектов загружаемых полностью и по ссылке. Приведены схемы процессов загрузки данных. Описание основных операций и обработчиков. Перечень процедур БСП, используемых при загрузке данных, структура «КомпонентыОбмена».

22.08.2019    18859    ids79    8    

Самоучитель языка запросов 1С. Промо

Решение задач на 1С:Специалист Математика и алгоритмы Практика программирования v8 v8::Запросы Бесплатно (free)

Сервис для изучения запросов 1С: "Консоль изучения запросов 1С:Предприятие 8". Теперь и с конструктором запросов!

07.05.2013    115592    bpc222    327    

Обработчики событий при записи объектов. Зачем и что за чем?

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

Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта.... Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.

25.07.2019    115906    AlbinaAAA    49    

Как проводятся документы в типовых конфигурациях от 1С

Математика и алгоритмы Инструментарий разработчика Практика программирования v8::ОУ ERP2 УТ11 Россия УУ Бесплатно (free)

В свое время, когда только начинал шаги в 1С и изучал, как проводятся документы в конфигурациях на платформе 1С по книге "Разработка управляемого интерфейса" (Хрусталева Е.Ю.), и там были представлены примеры совсем далекие от того, как сейчас проводятся документы в современных конфигурациях от 1С.

24.07.2019    37080    skv_79    37    

FizzBuzz на 1С. Чем короче, тем веселее. Варианты принимаются...

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

Мне было скучно, я не мог себя заставить написать ничего полезного. И читал статью на Хабре. Потом я читал комментарии, а потом... нет я не ушел смотреть котиков на ютюбе. Я решил сделать несколько решений задачки FizzBuzz на 1С, с целью "чем короче, тем лучше". Прошу сильно не пинать, это просто развлечение для вечера.

24.07.2019    6077    vandalsvq    19    

Решение транспортной задачи запросом Промо

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

Списание по двум последовательностям партий запросом (без программной обработки)

1 стартмани

30.04.2014    36124    bforce    22    

Управление качеством кода

Математика и алгоритмы Рефакторинг и качество кода SonarQube EDT v8 Бесплатно (free)

О SonarQube, АПК, EDT. Какие преимущества дает их использование. Для каких команд подходит.

22.07.2019    19671    Stepa86    40    

Что делает "В ИЕРАРХИИ" в запросе?

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

Описание действий платформы 1С при использовании конструкции "В ИЕРАРХИИ" в запросах.

16.07.2019    47976    YPermitin    34    

Создание отчетов с помощью СКД - основные понятия и элементы

Математика и алгоритмы v8 v8::СКД Бесплатно (free)

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    77378    ids79    28    

Парсер запросов 1С. Часть 1: Введение, разбор математических выражений Промо

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

Рано или поздно становится скучно решать типичные задачи, для которых придумана 1С. Голова пухнет от бухгалтерских терминов и очередных "хотелок" пользователей. Именно в такие моменты хочется гордо поднять голову, воскликнуть "Но я же программист!" и заняться чем-то интересным. В цикле статей я постараюсь доступно описать, как устроены парсеры в целом и на примере парсера языка запросов 1С. Требования к навыкам читающего: основы языка 1С, основы алгоритмизации.

1 стартмани

04.12.2013    31317    juntatalor    49    

Реализуем Стек, Очередь и Приоритетную очередь в 1С

Математика и алгоритмы Практика программирования v8 1cv8.cf Россия Бесплатно (free)

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

24.06.2019    16551    RonX01    66    

Почему вообще работает мой запрос? или Ещё раз о планах запросов

Математика и алгоритмы Инструментарий разработчика Практика программирования v8::Запросы Бесплатно (free)

Другие статьи на эту тему объясняют, что такое план выполнения запроса, но не рассказывают о том, как его получить. Эта заметка призвана заполнить этот пробел. Её цель - популяризировать общедоступные инструменты получения плана запроса среди разработчиков, которые ещё не начали их использовать.

10.06.2019    10309    DataReducer    12    

Организация хранения промежуточных данных

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

Организация хранения промежуточных данных в процедуре сверки.

29.05.2019    4582    scientes    1    

Сервис для изучения методов платформы 1С:Предприятие 8. Бесплатно! Промо

Решение задач на 1С:Специалист Математика и алгоритмы v8 Бесплатно (free)

Бесплатный ON-Line сервис изучения методов платформы 1С:Предприятие 8. Подготовка к аттестации 1С:Специалист on-line! Тестовые задания по различным видам учета! Подсказки для оптимального решения!

27.06.2013    51334    bpc222    54    

Вычисление 200 тысяч знаков числа pi

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

В статье рассматриваются возможности платформы выполнять сверхточные вычисления без использования сложных алгоритмов и внешних компонент на примере вычисления числа pi.

28.05.2019    9390    Oleg_nsk    97    

Регистры накопления. Виртуальные таблицы. Часть №1: Обороты

Математика и алгоритмы Инструментарий разработчика Практика программирования v8 1cv8.cf Бесплатно (free)

Описание работы платформы 1С:Предприятие 8.2 с виртуальной таблицей "Обороты" регистров накопления.

20.05.2019    47107    YPermitin    8    

Даем названия переменным: как префиксы экономят наше время

Математика и алгоритмы Инструментарий разработчика Практика программирования v8 Бесплатно (free)

Понятные названия переменных экономят время и силы разработчика : в начале, когда мы даём названия переменным, в процессе развития разработки, когда мы "на лету" понимаем назначение той или иной переменной, в конце, когда мы передаём разработку на поддержку других программистов, сами переходя к новым разработкам

06.05.2019    9165    Designer1C    81    

v8: Концепция минимального изменения конфигурации для легкого обновления Промо

Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

"Лучше день потерять потом за пять минут долететь" ((с) "Крылья, ноги и хвосты") или как сделать так чтобы обновление конфигурации проходило с минимальными трудозатратами.

28.01.2013    38797    MarSeN    57    

Заметки по SQL: Срез последних - аналог запроса

Математика и алгоритмы Практика программирования v8 1cv8.cf Россия Бесплатно (free)

В статье описывается создание среза последних данных средствами классического языка запросов. Причем метод построения запроса был разработан еще во времена, когда автор работал с СУБД Oracle 9i и программировал на PL SQL. Основная идея заключается преобразовании запроса с подзапросом, в запрос без подзапроса (в примерах описывается преобразование до двух вложенных подзапросов). Запросы тестировались на реальных базах данных. Платформа - 1С:Предприятие 8.3 (8.3.10.2561).

15.01.2019    14532    IVC_goal    16    

Многопоточное восстановление последовательностей

HighLoad оптимизация Математика и алгоритмы Универсальные функции Практика программирования v8 Бесплатно (free)

Универсальный алгоритм многопоточного фонового восстановления любой последовательности.

05.12.2018    15395    _ASZ_    33    

Пример выбора несколько обработчиков событий записи объекта для решения одной задачи Промо

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

Данная публикация предназначена для начинающих разработчиков и является продолжением статьи "Обработчики событий при записи объектов. Зачем и что за чем?" (ссылка далее). Содержит пример использования несколько обработчиков событий для решения одной задачи и объясняется почему выбраны именно они.

27.09.2012    197115    AlbinaAAA    65    

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C

Математика и алгоритмы Практика программирования v8 Россия Бесплатно (free)

У многих начинающих 1С программистов часто возникают вопросы про клиент-серверное взаимодействие в 1С и чтобы разобраться в непростых механизмах платформы, необходимо понять, что же такое контекст, для чего предназначены директивы компиляции, что представляют собой контекстные/внеконтекстные вызовы и как наиболее оптимально описывать прикладные задачи в модулях управляемых форм.

23.08.2018    49142    Rain88    49    

Преобразование запросов

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

Использование математических методов для языка запросов.

15.03.2018    12509    vasilev2015    24    

"Взлом" теста "1С:Профессионал" методом машинного обучения

Математика и алгоритмы Практика программирования v8 1cv8.cf Бесплатно (free)

Нейронные сети – не единственная модель, реализующая принципы машинного обучения. Есть еще байесовская модель, которая математически строже и определеннее, поскольку построена на надежном фундаменте теории вероятностей. Применению байесовского вывода к решению интересной теоретической задачи и посвящена данная статья. Слово "взлом" в заголовке использовано для привлечения внимания. Речь идет исключительно о математическом методе, показанном на примере знакомой всем задачи. 

12.03.2018    21109    ildarovich    19    

Альтернативные способы работы с XML. Часть 2: Введение в xPath или запросы к XML Промо

Обмен через XML Математика и алгоритмы v8 1cv8.cf Бесплатно (free)

В предыдущей статье "Введение в DOM или объектная модель документа" было описано понятие объектной модели документа (DOM), раскрыты плюсы и минусы использования модели при разборе файлов XML, приведено сравнение с построчным последовательным разбором. Были представлены варианты выборки данных с помощью объекта 1С ДокументDOM. Теперь настало время познакомить читателей с самым, на мой взгляд, интересным способом извлечения данных из XML - при помощи языка запросов xPath.

09.08.2012    43317    1cspecialist    13    

Введение в CI для 1С

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

Значение роли тестирования при разработке ПО трудно переоценить, его применение позволяет повысить надёжность продукта и улучшить качество кода. Для продуктов для платформы 1С:Предприятие существует ряд инструментов для проведения тестирования, в том числе и от самого вендора. Но, также появились открытые инструменты, реализующие мировые практики проведения тестирования (проверки продукта), поддерживаемые сообществом. В этой статье описаны базовые принципы, которые необходимо понимать перед началом применения этих инструментов.

21.11.2017    24830    real_MaxA    22