Skip to content

Аннотации переменных #1652

Closed

Description

@Mr-Rm

Если за ключевым словом Перем объявляются несколько переменных

&Аннотация 
Перем  Перем1, Перем2; 

то аннотация применяется только к первой из них.

Возможные варианты:

  1. Так и нужно - следует задокументировать
  2. Применять аннотацию ко всем переменным из списка
  3. Разрешить объявлять только одну переменную после аннотации
  4. Разрешить указывать аннотации для второй и следующих переменных после запятой на новой строке:
&Аннотация 
Перем  Перем1,
&Аннотация анн2
Перем2; 
  1. ??

Activity

  1. nixel2007 commented on Jan 23, 2026

    @nixel2007
    Collaborator

    Надо будет этот кейс в бсл лс тоже проверить...

  2. EvilBeaver commented on Jan 26, 2026

    @EvilBeaver
    Owner

    Интересный вопрос :) C# считает атрибут примененным к обеим переменным, если верить подсказке.

    Image

    Ну и в целом, оно скорее так и выглядит и так читается, если просто смотреть на строчку, то это кажется наименее магическим поведением.

    Мне кажется, правильный ответ - 2

  3. nixel2007 commented on Jan 26, 2026

    @nixel2007
    Collaborator

    Можно проверить в 1с через &НаКлиенте

  4. EvilBeaver commented on Jan 26, 2026

    @EvilBeaver
    Owner

    Можно проверить в 1с через &НаКлиенте

    в 1С intellisense и реальный компилятор работают по разному.
    в конечном счете, аннотация применена к обеим переменным

  5. Mr-Rm commented on Jan 26, 2026

    @Mr-Rm
    CollaboratorAuthor

    Тут... это...

    &Аннотация( 
    Для А = 0 По 1 Цикл
    	Начало = '0001-01-01'
    КонецЦикла
    А также любые константы либо слова, кроме "и или не"
    тогда продолжить, пока будет закрывающая скобка 
    из символов исключение = 1 для запятой иначе возврат ошибки
    если будет присваивание = "(в строке - что угодно!)" это перем аннотации со знач 
    )
    Перем Скомпилировано;
    // и в аннотации, к примеру, 2 параметра "А", один со значением 0, другой без 
  6. Macegor commented on Jan 26, 2026

    @Macegor

    Я настаиваю на втором варианте!!!)

  7. nixel2007 commented on Jan 26, 2026

    @nixel2007
    Collaborator

    Мне в целом тоже кажется логичным вариант 2

  8. nixel2007 commented on Jan 26, 2026

    @nixel2007
    Collaborator

    Тут... Это...

    Эт чо же, можно прям КОД В АННОТАЦИИ писать? Прям как лямбда? :D может быть он ещё и выполнится магически? :D

  9. Mr-Rm commented on Jan 26, 2026

    @Mr-Rm
    CollaboratorAuthor

    Это всего лишь аннотация с 37-ю параметрами, некоторые из них со значениями.
    Но кажется, что этим можно уронить Рефлектор

  10. EvilBeaver commented on Jan 27, 2026

    @EvilBeaver
    Owner

    Чето мне уже стыдно за этот компилятор

  11. nixel2007 commented on Jan 27, 2026

    @nixel2007
    Collaborator

    Да огонь компилятор, ты чего!

  12. EvilBeaver commented on Jan 27, 2026

    @EvilBeaver
    Owner

    Да огонь компилятор, ты чего!

    Баги лютые

  13. dmpas commented on Jan 28, 2026

    @dmpas
    Collaborator

    Фичи лютые

  14. Mr-Rm commented on Jan 28, 2026

    @Mr-Rm
    CollaboratorAuthor

    Компилятор хорошо справляется с правильным кодом. А неправильный иногда или пропускает, порой со странными эффектами, или неверно диагностирует.
    Раз здесь речь об аннотациях:
    1.

    Процедура Проц1()
     &Аннотация
     // далее правильный код
    КонецПроцедуры
    Процедура Проц2()
     // далее правильный код
    КонецПроцедуры

    Аннотация будет добавлена к Проц2()

    // возможно, много правильного кода  
    Процедура Последняя_в_модуле()
     &Аннотация
     // много правильного кода
     Сообщить("Закончили Проц1")
    КонецПроцедуры
      
    Сообщить("Начали");
    // много правильного кода
    Сообщить("Закончили");

    {Модуль <string 5EE34E1C> / Ошибка в строке: 10,22 / Неожиданный конец модуля}
    Сообщить("Закончили");<<?>>

  15. Mr-Rm commented on Jan 29, 2026

    @Mr-Rm
    CollaboratorAuthor
    1. Вариант, похожий на параметры,
    &Аннотация 
    Перем &Аннотация1 Перем1, &Аннотация2 Перем2; 

    когда Перем1 имеет аннотации Аннотация и Аннотация1, а Перем2 имеет аннотации Аннотация и Аннотация2 - отвергаем?

    1. Аннотации локальных переменных методов
    Процедура Проц1()
      &Аннотация
      Перем Перем1;
    КонецПроцедуры

    запрещаем? Рефлектор их всё равно не видит.

  16. EvilBeaver commented on Jan 30, 2026

    @EvilBeaver
    Owner

    Мне кажется, пункт 1 должен быть синтаксической ошибкой. Пункт 2 скорее всего тоже.

    Итого, ответ - "да"

  17. added a commit that references this issue on Feb 2, 2026
    59cca19
  18. added a commit that references this issue on Feb 4, 2026
    2f1e9a3
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions