Когда понадобился новый оператор

18.03.24

Разработка - Рефакторинг и качество кода

Когда понадобился новый оператор, но его нет в синтакс-помощнике, что делать?

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

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

Способы обхода:

  1. Операторы присваивания и "Пока".
    ПовторятьЦикл = Истина;
    Пока ПовторятьЦикл Цикл
    	// Операторы
    	ПовторятьЦикл = <Логическое выражение>;
    КонецЦикла;
  2. Операторы "Пока", "Если" и "Прервать".
    Пока Истина Цикл
    	// Операторы
    	Если <Логическое выражение> Тогда
    		Прервать;
    	КонецЕсли;
    КонецЦикла;
  3. Операторы вызова процедуры, "Пока", "Если" и "Возврат".
    Процедура ЦиклСПостусловием()
    	Пока Истина Цикл
    		// Операторы
    		Если <Логическое выражение> Тогда
    			Возврат;
    		КонецЕсли;
    	КонецЦикла;
    КонецПроцедуры
    ЦиклСПостусловием();
  4. Операторы " Если", "Перейти" и метка.
    ~ПовторятьЦикл:
    // Операторы
    Если <Логическое выражение> Тогда
    	Перейти ~ПовторятьЦикл;
    КонецЕсли;

     

И так, вопросы?

А зачем он вообще нужен в 1С?

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

А что уже есть переводы с других языков программирования на язык 1С?

Возможно есть один с шарпа.

А с языка 1С на другие языки программирования?

Возможно есть один на языки питон, си плюс плюс и т.д.

А какой, по вашему, должен выглядеть новый оператор цикл с постусловием в 1С?

Примерно так:

Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
Пока <Логическое выражение> КонецЦикла;

Но лучше так:

Цикл
// Операторы
[Прервать;]
// Операторы
[Продолжить;]
// Операторы
До <Логическое выражение> КонецЦикла;

А что пишет чат гпт?

Давайте спросим.

 

 

Чат гпт не знает, что оператор "Пока" с постусловием не существует в 1С, немного путает с циклами и отсутствует конец блока цикла "КонецЦикла".

Если нет вопросов, то спасибо всем за внимание!

Не забудьте поддержать плюсиками.

С вами был безумный Макс!

Вступайте в нашу телеграмм-группу Инфостарт

См. также

HighLoad оптимизация Рефакторинг и качество кода Программист Бесплатно (free)

Рассказываем о том, как не ухудшить производительность интеграционного решения в процессе разработки и рефакторинга, когда новых фич в коробке все больше, а требования по производительности все выше. На живом примере покажем реализованный подход с использованием таких инструментов, как Docker, Redash, Vanessa Automation.

02.09.2025    1580    user1827916    1    

3

Рефакторинг и качество кода Программист Россия Бесплатно (free)

GRASP-паттерны в 1С: меньше хаоса, больше архитектуры.

28.08.2025    7863    lapinio    46    

55

Рефакторинг и качество кода Программист 1С v8.3 1С:ERP Управление предприятием 2 Россия Бесплатно (free)

Недавно наша команда завершила разработку (на несколько тысяч часов) на проекте по внедрению ERP. Заказчик на этом проекте настоял на том, чтобы вся разработка была выполнена в расширениях. Расскажу, с чем столкнулись на 24-25-ых версиях платформы и какие выводы сделали.

19.08.2025    2795    ovetgana    0    

12

Тестирование QA Рефакторинг и качество кода Программист Бесплатно (free)

За два года ручного тестирования решений на базе платформы 1С я столкнулся с огромным количеством ошибок. Глубокий анализ их причин позволил выделить ТОП-5 наиболее частых источников сбоев в 1С-разработке. Понимание этих коренных причин – первый шаг к их предотвращению. В этой статье я делюсь своими наблюдениями и предлагаю практические пути снижения рисков для каждого типа ошибок.

12.08.2025    2236    Lagger117    3    

3

Рефакторинг и качество кода Программист Бесплатно (free)

Рассказываем о практике Code Review: ее целях, преимуществах и подводных камнях. Автор делает обзор существующих инструментов, а также подробно описывает собственную разработку для анализа правок и комфортного взаимодействия по замечаниям. Инструмент Git Code Review позволяет оставлять ручные комментарии с указанием важности и автоматически проверять код с помощью BSL Language Server. С его помощью можно не только детально изучать измененный код, но и отслеживать трансформацию структуры метаданных в наглядном формате. А главное – Code Review можно проводить как в 1С:Предприятии, так и через специализированный веб-интерфейс, интегрированный с GitHub и GitLab. Статья будет интересна и тем, кто уже практикует Code Review, и тем, кто к этому только подступается.

31.07.2025    5005    salexdv    9    

36

Рефакторинг и качество кода Обновление 1С Программист 1С v8.3 Бесплатно (free)

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

02.07.2025    4689    1c-izh    9    

13

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

Представьте ситуацию: вы пишете обработку для отправки email-уведомлений клиентам. Чтобы подключиться к серверу почты, вам нужны: логин, пароль, SMTP-адрес. Что делает большинство программистов?

1 стартмани

23.06.2025    3323    markbraer    8    

3

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

Обработка позволяет анализировать структуру методов в модуле и легко составлять её структуру, канонизировать, используя стандарты 1С.

3 стартмани

20.06.2025    2051    21    MikeLetto    3    

10
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. SerVer1C 987 18.03.24 09:32 Сейчас в теме
Вы меня, конечно, извините, но про что статья?
Jeka44; unknown181538; Dementor; ixijixi; +4 Ответить
2. Dementor 1058 18.03.24 13:18 Сейчас в теме
(1) видимо про то, что:
1. Ни новых операторов, ни синтаксического сахара не было со времен 8.0 и не будет
2. ЧатГПТ галлюцинирует, да и в принципе не особо шарит в 1С
3. Реклама предыдущей статьи, где говорилось о том, что инструкции препроцессору - альтернатива обычным комментариям, но с подсветкой синтаксиса.
ixijixi; DrAku1a; ZhokhovM; +3 Ответить
3. DrAku1a 1772 02.04.24 04:09 Сейчас в теме
Давайте ещё как в Пайтоне:
Для каждого Строка из Товары Цикл
	Строка.Стоимость = Строка.Цена * Строка.Количество;
ИначеДля
	Сообщить("Вы не ввели ни одной строки кода");
	Отказ = Истина;
	Возврат;
КонецЦикла;
блок, который выполняется только в том случае, если тело цикла ни разу не выполнилось.
VladimirSil; ZhokhovM; +2 Ответить
4. ZhokhovM 776 03.04.24 23:48 Сейчас в теме
(3)
блок, который выполняется только в том случае, если тело цикла ни разу не выполнилось.

давайте, вот список чего не хватает:
1.оператор Цикл ... До ... КонецЦикла
2.оператор Выбор ... Когда ... Тогда ... Иначе ... КонецВыбора
3.оператор Для Каждого ... Из ... Цикл ... Иначе ... КонецЦикла
4.оператор Попытка ... Исключение ... Иначе ... КонецПопытки
5. ZhokhovM 776 07.06.24 11:18 Сейчас в теме
(4)и еще один оператор цикл без предусловия и постусловия как на языке Перфолента
Цикл ... КонецЦикла
7. Perfolenta 207 10.02.25 00:28 Сейчас в теме
(5) в Перфоленте цикл по пункту 1 можно так записать:
Цикл 
            ....
            а=Истина
            ....
        ПрерватьЕсли а  КонецЦикла

на красивее так:
 Цикл 
            ....
            а=Истина
            ....
            ПрерватьЕсли а  
       КонецЦикла


Пункт 2 в Перфоленте реализован...
Пункт 4 выглядит как: Попытка ... Исключение ... Завершение ... КонецПопытки
По пункту 3 блок Иначе не реализован, но мне понравился, значит реализую в ближайшее время... Спасибо Вам за подсказку... Вот вроде бы знаю Питон, а чего-то не подумал об этом варианте цикла...
Как пункт 5 могу добавить из Перфоленты цикл:
Цикл КоличествоИтераций
        ....
    КонецЦикла
ZhokhovM; +1 Ответить
8. Perfolenta 207 06.06.25 15:44 Сейчас в теме
(7) В последней версии Перфоленты циклы были усовершенствованы:

1) Во всех видах циклов, кроме бесконечного, появился блок Иначе, который выполняется, если ни одной итерации не произошло:
Для Каждого Элемент Из Коллекция Цикл
    Сообщить("Элемент: "+Элемент);
Иначе
    Сообщить("В коллекции нет элементов!");
КонецЦикла;


2) В цикле Для Каждого появились не обязательные опции Обратный, Первые, Пропустить
//Цикл по коллекции, который берет 4 элемента с конца, начиная с предпоследнего
Для Каждого Элемент Из Коллекция Обратный Первые 5 Пропустить 1 Цикл
    Сообщить("Элемент: "+Элемент);
КонецЦикла;
6. maksa2005 375 05.09.24 07:33 Сейчас в теме
Привет. пишу тебе в личное, не отвечаешь*
Для отправки сообщения требуется регистрация/авторизация