Имена: регистр не создаёт вторую переменную

Учебные задачи

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

Где и как запускать

Полный серверный общий модуль учебной базы. Собственные значения в памяти, без чтения или записи рабочих данных.

Подготовка

  1. В отдельной учебной базе 8.5.1.1343 создайте общий модуль УчебныйЯзык: Сервер=Истина, Глобальный=Ложь, ВызовСервера=Ложь, Привилегированный=Ложь. Клиентские и внешнее соединение отключены; ПовторноеИспользованиеВозвращаемыхЗначений=НеИспользовать.

  2. Вставьте весь приведённый текст в этот общий модуль. ВыполнитьПример — экспортная точка входа; остальные процедуры и функции располагаются рядом, а не внутри неё.

  3. В своей внешней учебной обработке создайте управляемую форму, команду Выполнить и кнопку. Клиентский обработчик Выполнить(Команда) вызывает свою процедуру ВыполнитьНаСервере(); она имеет директиву &НаСервереБезКонтекста и одну строку УчебныйЯзык.ВыполнитьПример();. Это серверный вызов общего модуля, а не разрешение клиенту прямо обращаться к серверной библиотеке.

  4. Все товары, количества и строки придуманы в этом модуле. Запись документов, подключение к чужой базе, файлы, сеть и печать не используются. В рабочие общие модули текст не вставляйте.

  5. HTML только показывает BSL. Код в 1С не запускался; перечисленные результаты и отрицательные опыты проверяйте самостоятельно в собственном стенде.

Процедура ВыполнитьПример() Экспорт
    ЦенаЗаКнигу = 250;
    цЕНАзаКНИГУ = цЕнАзАкНиГу + 50;
    Количество_2 = 3;
    _ЛимитЗаказа = 1000;
    Сумма_Заказа = Рассчитать_Книги(ЦЕНАЗАКНИГУ, количество_2);
    Сообщить(ЦенаЗаКнигу = 300);
    Сообщить(Сумма_Заказа = 900);
    Сообщить(сумма_заказа <= _лимитзаказа);
    Название = "Азбука";
    Сообщить(НАЗВАНИЕ);
    Сообщить(ВРег(Название) = "АЗБУКА");
    Сообщить(Название = "Азбука");
КонецПроцедуры

Функция Рассчитать_Книги(Знач Цена_1, Знач Количество_1)
    Возврат цена_1 * КОЛИЧЕСТВО_1;
КонецФункции

Разбор по шагам

  1. Имя начинается с буквы или подчёркивания; цифра допустима дальше. Поэтому Количество_2, _ЛимитЗаказа и Рассчитать_Книги — осмысленные допустимые имена.

  2. Первое присваивание задаёт цену 250. Следующее, хотя написано другим регистром, обращается к той же переменной и повышает цену до 300.

  3. Передать цену и количество в свою функцию; имена параметров тоже распознаются без учёта регистра. Итог 300×3=900 укладывается в лимит 1000.

  4. Название и НАЗВАНИЕ — один идентификатор. Само сохранённое строковое значение всё ещё Азбука.

  5. ВРег возвращает отдельную строку АЗБУКА; без присваивания она не меняет исходное значение. Регистр идентификаторов и регистр данных — разные вопросы.

  6. Если, If, Процедура и другие зарезервированные слова нельзя выбирать именами. Непосредственно доступные свойства текущего контекста тоже не следует перекрывать; список допустимых имён зависит от места модуля.

Как проверить результат

  1. Пять логических проверок Истина и строка Азбука. Цена не 250, а 300; сумма 900.

  2. Поменяйте второе присваивание на НоваяЦена = ЦенаЗаКнигу + 50: это уже другое имя, исходная цена останется 250, сумма заказа 750. Обновите проверки новой версии.

Ожидаемый результат

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

На что обратить внимание

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

  2. Цена и ЦЕНА не могут обозначать две независимые величины в одном контексте. Для старой и новой цены нужны разные содержательные имена.

  3. Одинаковое написание в разных модулях не доказывает общий контекст. Этот пример специально находится в одном серверном общем модуле.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.