Какие символы нельзя использовать в именах объектов 1с
В этой статье перечислены специальные символы, которые следует избегать использования при работе с именами объектов базы данных или именами полей во всех версиях Access.
Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.
Исходный номер КБ: 826763
Эта статья применяется либо к файлу базы данных Microsoft Access (.mdb), либо к файлу базы данных Microsoft Access (.accdb), а также к файлу проекта Microsoft Access (.adp).
Симптомы
При использовании специальных символов в Access вы испытываете одну из следующих проблем.
Проблема 1
В имени настольного поля используется один из следующих специальных символов:
- Accent grave (')
- Восклицательный знак (!)
- Период (.)
- кронштейн ([])
- Ведущее пространство
- Непечатаемые символы
Имя поля не допустимо.
Убедитесь, что имя не содержит периода (.), восклицательный знак (!), кронштейна ([]), ведущего пространства или непечатного символа, например возврата вагона. Если вы вклеили имя из другого приложения, попробуйте нажать кнопку ESC и введите имя еще раз.
Имя объекта 'TableName', в которое вы ввели, не следует Microsoft Office правил именования объектов Access.
Проблема 2
Введенное выражение содержит недопустимый синтаксис.
Возможно, вы ввели операнд без оператора
Введенное выражение имеет недействительные строки.
Строка может быть длиной до 2048 символов, включая открытие и закрытие кавычков.
Введенное выражение имеет недействительное значение даты.
Если имя поля содержит знак процента (%), tilde (
Введенное выражение содержит недопустимый синтаксис.
Вы опущены операнд или оператор, вы ввели недействительный символ или запятую или ввели текст, не окружав его кавычками.
Malformed GUID в выражении запроса 'ObjectName'
В выражении, в который вы ввели, отсутствует закрываемая скобка, скобка (]) или вертикальная планка (|).
Проблема 3
У вас есть запрос, содержащий выражения запросов. Выражения запросов включают поля, содержащие специальные символы. При запуске запроса вам будет назначено ввести значение параметра. Как правило, эта проблема возникает при использовании следующих специальных символов:
- знак «больше» (>);
- знак «меньше» (<);
- Период (.)
- Звездочка (*)
- Двоеточие (:)
- Caret (^)
- Плюс знак (+)
- Обратная косая черта (\)
- Равный знак (=)
- амперсанд (&);
- Метка slash (/)
Обходной путь
Чтобы решить эту проблему, не используйте специальные символы. Если необходимо использовать специальные символы в выражениях запросов, заключив специальные символы в скобки ([]). Например, если вы хотите использовать больше, чем знак (>), используйте [>].
Дополнительные сведения
При работе с Access или с каким-либо другим приложением, например Visual Basic Microsoft или приложением ASP (ASP), следует избегать следующих специальных символов:
Доступ к соглашениям именования
Корпорация Майкрософт рекомендует не использовать период (.), восклицательный знак (!), серьезный акцент ('), скобку ([]), пробел () или кавычка () в именах функций, именах переменных, именах полей или именах объектов базы данных, таких как таблицы и формы.
Известны проблемы, которые возникают при использовании следующих специальных символов в Access. В следующих сценариях описывается, когда не следует использовать специальные символы:
Строка считается одним из простых типов реквизита в 1С Бухгалтерия. Этот тип используется практически везде в системе и потому для удобного обращения с ним, было добавлено большое количество инструментов, которые помогают нам при работе со строкой.
В данном случае мы поговорим о спецсимволах 1С для строк.
Строка может быть как однострочная, так и многострочная, все зависит от настроек программы 1С и необходимости в разрезе задачи.
Итак, что такое спецсимволы 1С? Это особые методы глобального действия «Символы», имеющие свой список выполняемых символов:
2. Расшифровка спецсимволов в программе 1С Бухгалтерия Предприятия
Далее поговорим подробнее о каждом. И начнем мы со спецсимвола «ВК». Он используется для возврата каретки (или курсора) на начало строки. Вполне удобно, если, например, идет отправка электронного письма из программы 1С Бухгалтерия Предприятия - в таком случае пользователь может добавить какой-то текст с новой строки, не заданный программой.
«ВТаб» - это спецсимвол, относящийся к табуляции. Если в коде имеется такой символ, то создается строка с вертикальной табуляцией для движения по строкам вниз, которые находятся в одной колонке.
«НПП» – это всего лишь неразрывный пробел. Его часто используют в строках числового типа, для разделения знаков в больших числах пробелом.
Мой любимый и довольно часто используемый метод – «ПС». Это символ переноса строки 1С. К примеру, у нас есть большая по длине строка, которую корректнее было бы частично перенести на новую строку. В таких случаях и используется «ПС». Кроме того, его можно использовать и с другими методами, например, с «ВК». При их совместном использовании каретка будет установлена в начале строки. И это всего лишь один из примеров применения «ПС».
Далее – «ПФ». За что отвечает этот инструмент? Все просто: этот метод отвечает за печать с нового листа. То есть если в коде есть этот метод, а именно в печати, то печать начинает выполняться заново и с нового листа.
И вот мы подошли к последнему в списке спецсимволу – «Таб». Этот метод аналогичен методу «ВТаб», но отвечает за горизонтальную табуляцию согласно определенному шагу в строке.
В 1С довольно много инструментов для работы с типом Строка. Очень полезно подробно изучить их и ак5тивно использовать, так как они существенно облегают работу специалисту.
Возникновение ошибки при обновлении платформы 1С до версии 8.3.17
Такое явление происходит из-за того, что разработчики 1С добавили в платформу 8.3.17 картинки с такими же именами, что и были использованы в типовой конфигурации.
Можно действовать разными способами:
· Если Ваша конфигурация находится на поддержке с запретом на изменение, тогда надо просто дождаться обновление от разработчиков, в котором они переименуют картинки (спасибо разработчикам платформы – с такой ошибкой можно продолжить работу);
· Вернуться на платформу 8.3.16 и провести обновление;
2. При переходе на платформу 8.3.12
Переход на платформу 8.3.12 ознаменовался тем, что тоже стали повторяться картинки, вшитые в платформу и в типовых конфигурациях. Это было связано с вводом системы версионирования объектов в платформу и приводило к невозможности обновления конфигурации.
Поэтому пользователям, столкнувшимся с этой ошибкой программы 1С, оставалось только переименовывать картинки, если была возможность редактирования, или откатываться на предыдущую версию платформы 1С Предприятие.
3. При обновлении модифицированных конфигураций информационной базы
Если используется модифицированная конфигурация версии программы 1С:Предприятие 8, при обновлении имена добавленных объектов могут также совпадать, что тоже вызывает ошибку конфигурации информационной базы.
Ошибка также может возникать при обновлении доработанных решений 1С
В этом случае остается только переименовать добавленные объекты.
Совет: при добавлении в типовую конфигурацию своих объектов в имени используйте свой оригинальный префикс. Например, назовите константу «НРТ_ДополнительныйЯзык1».Так Вы минимизируете вероятность совпадения имен при обновлении.
Этот же принцип используется при создании и работе с расширением конфигурации. Только не надо использовать типовой префикс «Расш1_».
Сколько же всего сложного и таинственного нас окружает.
Черные дыры и сновидения. Темная материя и подсознание. Корпускулярно-волновой дуализм и 1С.
И ведь думаешь, что знаешь эту "1Ску" как свои пять пальцев, но стоит случайно копнуть глубже. И очередная багофича. Да ешё и какая!
В этой статье рассмотрим секретный оператор ?
О нём мало кто знает, хоть он и существует как минимум с версии 8.0.
В последнее время я публикую на своём телеграм-канале разные хитрые задачки с подвохом для программистов 1С. Какие-то беру "по памяти", а какие-то "рождаю" в результате экспериментов. Об этом скоро выйдет отдельная статья. И вот в очередном тесте адекватности платформы случайно натыкаюсь на такую конструкцию:
Синтаксис-проверка прошла успешно. Никаких ошибок не высветилось. И, казалось бы, ошибка тогда должна произойти в момент выполнения.
Код успешно выполнился. Удивительно, но сработало! И тут меня понесло.
Как оказалось, знак ? ведёт себя крайне странно. Давайте посмотрим ещё раз прошлый пример.
Мы создаём новую переменную и назначаем ей значение - ?. И в переменной находится Неопределенно. И, казалось бы, это и есть ответ на вопрос. Знак ? означает Неопределено.
Но что же тогда это:
В данном коде сначала идёт объявление переменной "А". И в А установлено числовое значение "1". А далее идёт наше сравнение с ?. Если бы под знаком вопроса скрывалось Неопределено, то мы бы не попали внутрь условия. А по скрину видно, что попали.
Очень странная ошибка. "Переменная не определена (Сообщить)". Ну допустим. Добавим тогда такую переменную:
Данный код компилируется без ошибок. И при выполнении в 1С сообщает "ТЕСТ". То есть значение переменной Сообщить
Выходит, что символ ? указывает на предыдущее слово в коде. В данном случае, перед ? было слово Сообщить. И поэтому 1С изначально поругалась, что такая переменная не определена. А когда мы добавили переменную Сообщить, то всё стало на свои места.
То есть наш код для 1С выглядит так:
А теперь вернемся к нашим предыдущим примерам и разберём что и как сработало.
В данном коде предыдущее слово перед ? - Если. Но оно является ключевым для 1С. Как "Цикл", "Процедура" и так далее. Поэтому, его оператор ? не учитывает и берет в качестве источника значения переменную А.
Скорректируем же этот код так, как его видит 1С:
Теперь всё логично. А = А и поэтому условие выполняется.
А что с нашим самым первым примером?
На самом деле всё так же. Просто заменяем знак вопроса на предыдущее слово.
Да, такой код тоже странный, но в рамках 1С всё логично. Сначала объявляется переменная и в ней Неопределено. А затем происходит присвоение переменной значения из её самой. То есть опять же Неопределено. Можете проверить такой код - это хоть и выглядит странно, но работает. А почитать чуть подробнее можно в статье на ИТС: МояПеременная = 0; МояПеременная = ? + 1; //1 МояПеременная = ? + 1; //2 МояПеременная = ? * 5; //10 МояПеременная = ? / 2; //5 МояПеременная = ? - 6; //-1
А самое интересное, что такая возможность существовала как минимум ещё с версии 8.0 . Специально скачал старую платформу и проверил.
На самом деле такой код можно ещё упросить:
Но такой вариант становится менее надежным. Ведь всё работает до тех пор, пока перед ? находится МояПеременная. Если же вставить после этого какое-то другое "слово", то всё порушится.
Но вот ещё пример:
Мы же помним, что знак ? берет предыдущее слово. Так вот в нашей строке кода это слово "А". Именно так - без "Структура".
Поэтому 1С в таком коде вместо знака вопроса вставит "А"
Но зато появляется новая возможность применения:
В данном коде мы создали структуру и наполнили её объявленными ранее переменными. Тоже бывает удобно, когда нужно передать какой-то набор переменных метода в другой метод через структуру.
А вот ещё пример. Можно передать в какой-то метод или конструктор одно значение несколько раз:
Передавать знак ? можно даже в условный тернарный оператор. Например, этот код приводит отрицательные числа к 0:
А этот приводит отрицательные числа к положительным:
Подобным образом можно присваивать дефолтные значения необязательным параметрам:
Главное помнить, что знак ? берет именно предыдущее слово, поэтому вот так работать НЕ будет:
1С поругается, что Переменная не определена (Структура). Ведь перед последним знаком ? слово Структура
Но что если использовать символ ? в параметрах?
Сделаем процедуру с параметром ? :
Такую процедуру действительно возможно создать. И можно вызывать. Причем 1С понимает, что параметр обязательный и его необходимо передать.
Но мы можем сделать его необязательным:
И параметр не обязан быть единственным. Можно делать разными способами:
А можно использовать Знач
Но вот незадача, ? в параметре метода не использует предыдущее слово (как во всех других случаях). Как обратиться к этому параметру - неизвестно.
В стеке вызовов он отображается:
А попробуем добавить второй параметр ?
1С ругается так:
Формальный параметр с указанным именем уже определен (?)
Опираясь на текст ошибки, мы можем предположить, что 1С объявляет параметр с именем "?"
И когда мы пытаемся добавить ещё один такой параметр, то платформа ругается.
Как обратиться к параметру с именем "?" - неизвестно. Методы Вычислить() и Выполнить() не помогли.
Но, возможно, это всё те вопросы, которые нам ещё предстоит разгадать. Секреты и загадки этой таинственной платформы под кодовым названием 1С.
Понравилась статья?
Поставьте лайк плюс. Пишите свои идеи и комментарии по теме. Статья будет дополняться.
Читайте также: