Количество языков для конструктора строк на разных языках

Обновлено: 08.05.2024

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

Содержание

Возникновение новых языков, языковые платформы

До сих пор не создано такого языка программирования, который бы одинаково хорошо решал все задачи программных систем. Уже существует большое количество языков и новые продолжают появляться. Устаревшие языки не спешат уйти со сцены, на них написаны программы, и они продолжают работать, а значит, по ним нужны специалисты для сопровождения и развития существующих программ. Возможно, не стоит ориентироваться на устаревшие или не получившие достаточного распространения языки, но, например, если вы вдруг надумаете устроиться программистом в компанию Боинг, то вам придется изучить язык достаточно прогрессивный для своего времени и не очень распространенный в наше - язык Ада.

Текущее представление языков примерно выглядит так:

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

Следующая таблица демонстрирует, что несмотря на наличие существующих языков, решающих сходные задачи, известные ИТ компании создают собственные языки, а не переиспользуют готовые.

Таблица 1. Новые языки, появившиеся в последнем десятилетии от известных ИТ-компаний

язык общего назначения на замену Objective C

язык реализации веб-приложений

более надежная и производительная замена JavaScript

JetBrains (СПб, Россия)

простая и эффективная замена Java

«улучшенный» JavaScript (аннотация типов, классы)

язык реализации алгоритмов для многоядерных архитектур

Однако язык не может существовать сам по себе. Языку требуется активное сообщество, которое использует язык, популяризирует его, участвует в его развитии. В современных условиях язык без возможности интеграции с существующими библиотеками не имеет будущего. Действительно, никто не будет писать с нуля на новом языке, каков бы он не был хорош изначально, алгоритмы, которые уже написаны и проверены временем на других языках. Как минимум новый язык должен поддерживать вызов библиотечных функций, написанных в формате языка C.

С появлением таких языковых платформ как JVM и CLR задача интеграции библиотек кода на различных языках была решена на качественно новом уровне. Код, написанный на платформе, автоматически становится интегрированным в общую многоязычную среду. Платформа обеспечила не только интеграцию на этапе исполнения, но и переносимость как аппаратную, так и программную под различные операционные системы. Отладка и написание многоязычных проектов стала возможной в единой среде разработки. Последнее обстоятельство привело к новому видению использования различных языков в одном проекте - созданию многоязычных проектов.

Структурирование многоязычных приложений

Пирамида Ола Бини (Ola Bini)

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

Системный архитектор и разработчик Ола Бини (Ola Bini) интересуется языками программирования. В своей статье

Быстрая прикладная разработка

1С, SQL, XML, XAML, веб-шаблонизаторы

Быстрая продуктивная, гибкая разработка

JavaScript, Python, Clojure

Стабильный, высокопроизводительный, хорошо протестированный функционал

Рисунок 1. Пирамида Бини

Разделение языков по уровню типизации


Системный архитектор и идейный вдохновитель компании

Рисунок 2. Языки по типизации: сильная-слабая, статическая-динамическая с выделением слоев Бини

Функциональное деление (будущее языков)

В развитии своей теории многоязычного программирования Нил Форд выдвинул идею того, что в классификации слоев Бини стабильные языки будут развиваться в сторону увеличения поддержки функционального стиля. Уже сейчас в моду входит функциональный стиль программирования и, хотя программы бухгалтерского учета пока еще не пишут на Haskell, многие языки начинают поддерживать операции с функциями высшего порядка. Такие понятия, как «декларативный», «чистые функции», «каррирование» потихоньку начинают проникать в лексикон все большего количества программистов.

Распространению идей функционального программирования в немалой степени способствуют успехи в области создания многоядерных архитектур с одной стороны и проблемы создания программ, использующих параллельные вычисления на императивных языках с другой. Дело в том, что параллельные вычисления очень сложно поддаются программированию в императивном стиле и в тоже время очень органично и проще решаются в функциональных языках. Кроме того, функциональным языкам присущ высокий уровень абстракции, благодаря которому становится возможным решение сложных задач.

В будущем по Форду типизация уже не будет играть такую большую роль, а определяющим будет чистота реализации функциональной парадигмы. Типизация останется, однако будет прерогативой самого программиста.

Форд также обращает внимание на распространение поддержки создания DSL средствами самого языка. В таких языках как Scala и Clojure встроенная поддержка создания собственных DSL позволяют просто и компактно формализовать важные концепции предметной области. По Форду языки будущего помимо мультипарадигмальности будут также поддерживать DSL во всех сло ях.

Мультипарадигмальные языки

Современные языки идут по пути поддержки мультипарадигмальности. Языки, исторически поддерживающие парадигму процедурного и ОО программирования, начинают вводить элементы поддержки парадигмы функционального стиля. Функциональные языки наоборот расширяют свои возможности, вводя поддержку ОО парадигмы.

Такое развитие имеет как свои плюсы, так и минусы. Если поддержка функционального стиля - это, как правило, расширение возможностей языка, то добавление в функциональный язык ОО парадигмы - это улучшение интеграции с другими языками с ОО парадигмой. Сравните: язык Scala - продвинутый язык Java с элементами функционального стиля и Clojure - чисто функциональный язык с поддержкой ОО парадигмы для совместимости с Java.

Мультипарадигмальность увеличивает мощь языка, но может и привести к проблемам. Так, когда один проект разрабатывается разными командами с использованием различных парадигм, то существует риск разработки несовместимых библиотек. Разработка в ОО парадигме стимулирует использование структур, а в функциональной - композицию и функции высшего порядка. В результате смешения парадигм могут получиться существенно различающиеся алгоритмы, которые не смогут работать без взаимной адаптации, а значит, внесения дополнительного усложнения в проект. Подобные проблемы команды разработчиков уже испытывали при переходе с Java на Ruby или с C на C++.

Рисунок 3. Распределение языков по слоям приложения по функциональному признаку

Выбор языков

В сложившейся ситуации программисту недостаточно знать только один язык программирования. Работая сегодня над проектом на одном языке, возможно, уже в следующем проекте или в этом же, придется писать код на другом языке, выбранном для решения соответствующих задач. Так какой же язык имеет смысл знать или изучать? Однозначного ответа на этот вопрос нет. Однако есть нечто общее во всех языках и есть различия. Знание общего позволят сэкономить время вхождения в новый язык, сконцентрировавшись лишь на различиях.

Общим для всех языков является синтаксис, а различие, в основном, кроется в семантике. Так, в любом языке могут быть структурные синтаксические конструкции, условия, вызовы, структуры данных, классы и т.д. Несмотря на кажущуюся одинаковость синтаксических конструкций наличие семантических различий может привести к неверной интерпретации работы алгоритмов и к ошибкам.

В общем случае профессионально-ориентированному программисту необходимо владеть знаниями компьютерных наук, различных парадигм и быть в курсе последних тенденций развития языков. Можно рекомендовать знать несколько языков из различных слоев приложений (см. Слои Бини) или одного слоя - в количестве 3-4 языков. Ниже приведены варианты выбора языков исходя из целей.

Выбор для образования

Узнать, как устроен и работает компьютер

Научиться работать со сложными структурами данных

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

Научиться строить большие и сложные сайты

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

Выбор для работы

Нужна быстрая и эффективная программа?

трудно писать; трудно поддерживать

Быстро написать и получить работающую программу или сайт?

JavaScript, Python, Ruby

работает медленно, часто ломается (зависает), пока происходит поиск ошибок

Быстро небольшой веб-сайт?

для дальнейшего улучшения веб-сайта может потребоваться много усилий

Выбор для проекта

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

  • какова кривая освоения языка?
  • насколько эффективны существующие фреймворки?
  • насколько развито сообщество языка?
  • насколько быстро можно найти нужных разработчиков?
  • насколько легко язык интегрируется в многоязычную среду?

Встроенный язык 1С как DSL

Несмотря на то, что в заголовке этого абзаца язык 1С обозначен как DSL, это утверждение не всеми разделяется. Действительно, на языке уже написана масса прикладных решений в самых разнообразных сценариях использования и это не только учетные задачи. В самом языке есть встроенные объекты для работы с файлами даже на уровне байтов. Все это может представляться как написанное на языке общего назначения. Сам Мартин Фаулер, который ввел понятие DSL, в своем труде отмечал, что порой очень сложно отнести возможности языка именно к DSL и существует тонкая грань, где язык выходит за рамки только одной предметной области и уже может рассматриваться как язык общего назначения. Но давайте рассмотрим, что же представляет собой встроенный язык платформы 1С.

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

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

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

Из определения языка 1С как DSL следует вывод о возможном его развитии. Собственно, сам язык, начиная с версии 1С7, не сильно изменился. Все, что меняется для языка - это расширение встроенных объектов и появление дополнительных встроенных функций. И, скорее всего, так и будет продолжаться: в платформе продолжат появляться новые объекты, потребность в которых будет обозначена сложными реализациями на встроенном языке. Например, недавно появились объекты, с помощью которых можно работать с историей хранения, когда похожая функциональность была реализована ранее средствами встроенного языка и потребность в простом решении на уровне платформы назрела.

Заключение

Практика показала безуспешность поиска единого универсального языка программирования. Новые языки продолжат появляться. Каждый новый язык будет по-своему находить компромисс между скоростью разработки, производительностью и надежностью. Кроме того, большое разнообразие предметных областей гарантирует неисчерпаемую потребность в предметно-ориентированных языках, как наиболее адекватно описывающих её задачи. Платформы JVM и CLR, изначально созданные для решения задачи переносимости, а в последствии и унификации моделей программирования, будут только способствовать появлению новых языков.

В сложных приложениях найдут применение многоязычные проекты. Такие проекты в рамках одной платформы JVM или CLR будут включать алгоритмы, написанные на разных языках, однако на уровне байт-кода это будут единые приложения с разделяемыми данными.

Универсальные языки продолжат развиваться в сторону мультипарадигмальности. Исторически такие языки начинали работать в процедурной парадигме, затем в ОО и теперь набирает популярность функциональная парадигма. Постепенно функциональный стиль будет становиться основным, а императивный вспомогательным. Ответственные приложения будут делаться на функциональных языках, сфера применения императивных языков останется для задач ввода/вывода, необратимых операций, разработки интерактивных интерфейсов пользователя.

Наряду с мультипарадигмальностью языки начнут поддерживать создание DSL. Останутся также и внешние DSL как самые приближенные к предметной области языки. Эти языки будут иметь самый низкий порог вхождения и будут доступны даже для непрограммистов.

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

Материал этой статьи был представлен ранее в сокращенном варианте новостного формата. Там же есть опросник "Сколько языков программирования вы знаете?". Новость получила живой отклик. Тема мне показалась интересной, и я решил выложить полный вариант статьи, получившейся в результате моего исследования.

Вопрос 04.24 экзамена 1С:Профессионал по платформе. Каким образом можно задать текст надписей для элементов управления на выбранном языке?

  1. В палитре свойств элемента управления в свойстве Заголовок нажать на кнопку "Кнопка открытия". В появившемся окне "Строки на разных языках" ввести надпись
  2. Сменить язык редактирования конфигурации, а потом ввести надпись в свойстве Заголовок (или Синоним)
  3. Нет правильного ответа
  4. Верны ответы 1 и 2

Для отдельных элементов управления можно задать наименование, переключив язык редактирования конфигурации в целом (Конфигурация -> Язык редактирования конфигурации):

Вопрос 04.25 экзамена 1С:Профессионал по платформе. Конструктор строк на разных языках может использоваться для.

  1. определения строковых представлений интерфейса на разных языках
  2. определения нескольких форматных строк под разные языки
  3. перевода данных базы на разные языки
  4. верно утверждение 1 и 2
  5. верны все утверждения

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

Вопрос 04.26 экзамена 1С:Профессионал по платформе. Для открытия окна конструктора строк на разных языках необходимо.

  1. нажать кнопку открытия в палитре свойств элемента управления формы в свойстве Формат
  2. установить курсор в текст модуля и выбрать пункт "Текст – Конструктор строк на разных языках"
  3. находясь в палитре свойств элемента управления формы в свойстве Формат, выбрать пункт "Текст – Конструктор строк на разных языках"
  4. верно утверждение 1 и 2

Правильный ответ четвертый, разбор см.выше.

Вопрос 04.27 экзамена 1С:Профессионал по платформе. Количество языков для конструктора строк на разных языках.

  1. предопределено в платформе и неизменно
  2. задается настройками конфигуратора
  3. определяется в конфигурации и ограничено набором языков
  4. определяется в конфигурации и может расширяться программно

Правильный ответ четвертый. Языки редактирования конфигурации задаются в соответствующей ветке дерева объектов, см. пост Мультиязычность.

10 комментариев:

Этот комментарий был удален автором.

Вопрос 04.25 экзамена 1С:Профессионал по платформе. Конструктор строк на разных языках может использоваться для.

определения строковых представлений интерфейса на разных языках
определения нескольких форматных строк под разные языки

Объясните, пожалуйста, как Конструктор строк на разных языках может использоваться для определения нескольких форматных строк под разные языки? И что под этим вообще подразумевается? Форматная строка и так определяется под конкретный язык, указанный в ней самой.

Конструктор строк на разных языках позволяет создать или отредактировать строки на разных языках, которые используются в функции встроенного языка НСтр().

  1. для определения строковых представлений интерфейса на разных языках;
  2. определения нескольких форматных строк под разные языки.

На перевод данных базы действие конструктора не распространяется.


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

Языки редактирования конфигурации задаются в соответствующей ветке дерева объектов "Язык". В конфигурацию можно добавить несколько различных языков. Поскольку все тексты конфигурации и базы данных хранятся в формате UNICODE, разработчик может указывать для одной и той же надписи различные варианты ее отображения на каждом из этих языков.

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

Для открытия окна конструктора строк на разных языках необходимо:

  1. нажать кнопку открытия в палитре свойств элемента управления формы в свойстве "Формат" (не нашел в 8.3); нашел вот это:

открытие окна конструктора строк на разных языках

Пункт контекстного меню "Конструктор строк на разных языках. ":

Вызов конструктора строк на разных языках

Пункт меню "Текст – Конструктор строк на разных языках. ":

Конструктор строк на разных языках.

Для того, чтобы задать текст надписей для элементов управления на выбранном языке, необходимо:

  1. В палитре свойств элемента управления в свойстве "Заголовок" (или "Синоним") нажать на кнопку "Кнопка открытия". В появившемся окне "Строки на разных языках" ввести надпись.
  2. Сменить язык редактирования конфигурации, а потом ввести надпись в свойстве "Заголовок" (или "Синоним").

В палитре свойств элемента управления в свойстве "Заголовок" (или "Синоним") нажать на кнопку "Кнопка открытия". В появившемся окне "Строки на разных языках" ввести надпись:


Сменить язык редактирования конфигурации, а потом ввести надпись в свойстве "Заголовок" (или "Синоним"):


Функция встроенного языка НСтр()

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

Например, в результате выполнения следующего кода:


будет получен такой результат:


Механизм редактирования текстов интерфейса 1С


Механизм

Механизм "Редактирование текстов интерфейса" позволяет искать тексты интерфейсов:

  1. в основной конфигурации, в конфигурации базы данных;
  2. в открытых документах;
  3. во внешних файлах;
  4. в модулях в функциях "НСтр".

Для функции НСтр предусмотрена отдельная опция:


Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Конструктор форматной строки позволяет разработчику составить текст форматной строки исключительно визуальными средствами и предназначен для настроек правил отображения значений типа "Число", "Дата", или "Булево" в выводных формах или полях ввода данных.

Форматная строка представляет собой строковое значение, включающее параметры форматирования. Используются в конструкциях встроенного языка для того, чтобы сформировать нужное представление отображаемых данных (см. также справку 1С: Глобальный контекст (Global context) Формат (Format)).

Формирует удобное для чтения представление значений. Полезно использование в отчетах и при прочем визуальном отображении значений.

Параметры форматирования перечисляются через символ ";". Наличие параметра означает отличие форматирования от стандартного.

Если параметр не задан, то применяется стандартное форматирование, которое в основном соответствует преобразованию значения к строке. Однако для значений типа Число и Дата по умолчанию (0 и 01.01.0001 00:00:00 соответственно) будет выдаваться пустая строка.

  • en Английский
  • en_US Английский (Соединенные Штаты Америки)
  • ru Русский
  • ru_RU Русский (Россия)
  • ru_UA Русский (Украина)
  • uk Украинский
  • uk_UA Украинский (Украина)
  • zh Китайский
  • zh_CN Китайский (Китай)

Остальные языки можно посмотреть в справке 1С.

  • ЧЦ (ND) - общее число отображаемых десятичных разрядов целой и дробной частей. Исходное число округляется при этом в соответствии с правилами округления Окр15как20 (при округлении 1.5 будет округлено до 2). Если указан этот параметр, то для отображения дробной части числа обязательно указание параметра ЧДЦ, иначе дробная часть отображаться не будет.
  • ЧДЦ (NFD) - число десятичных разрядов в дробной части. Исходное число округляется при этом в соответствии с правилами округления Окр15как20.
  • ЧС (NS) - сдвиг разрядов: положительный - деление, отрицательный - умножение. Другими словами, это означает, что исходное число будет умножено или поделено на 10*С, где С - значение параметра по модулю.
  • ЧРД (NDS) - символ-разделитель целой и дробной части.
  • ЧРГ (NGS) - символ-разделитель групп целой части числа. Если в качестве разделителя использовать пустую строку, то в этом случае разделителем будет символ неразрывного пробела.
  • ЧН (NZ) - строка, представляющая нулевое значение числа. Если не задано, то представление в виде пустой строки. Если задано "ЧН=", то в виде "0". Не используется для числовых полей ввода.
  • ЧВН (NLZ) - если параметр указан, лидирующие нули выводятся. Если не указан - лидирующие нули не выводятся. Значение параметра игнорируется.
  • ЧГ (NG) - порядок группировки разрядов числа. В качестве значения указываются числа, через запятую, обозначающие количество группируемых разрядов справа налево. Имеют смысл только два первых числа. Первое из них указывает первичную группировку, то есть ту, которая будет использована для наименее значимых разрядов целой части числа. Если второе число не указано, то будут сгруппированы только наименее значимые разряды. Если в качестве второго числа задан 0, то для всех разрядов целой части числа будет применено значение указанное для первичной группировки. Если в качестве второго числа используется значение, отличное от 0, то это значение будет использовано для группировки всех разрядов, кроме уже сгруппированных наименее значимых.
  • ЧО (NN) - представление отрицательных чисел.
    • 0 (0) - строка вида "(1,1)";
    • 1 (1) - строка вида "-1,1";
    • 2 (2) - строка вида "- 1,1";
    • 3 (3) - строка вида "1,1-";
    • 4 (4) - строка вида "1,1 -".
    • д (d) - день месяца (цифрами) без лидирующего нуля;
    • дд (dd) - день месяца (цифрами) с лидирующим нулем;
    • ддд (ddd) - краткое название дня недели *);
    • дддд (dddd) - полное название дня недели *);
    • М (m) - минута без лидирующего нуля;
    • ММ (mm) - минута с лидирующим нулем;
    • МММ (MMM) - краткое название месяца *);
    • ММММ (MMMM) - полное название месяца *);
    • к (q) - номер квартала в году;
    • г (y) - номер года без века и лидирующего нуля;
    • гг (yy) - номер года без века с лидирующим нулем;
    • гггг (yyyy) - номер года с веком;
    • ч (h) - час в 12-часовом варианте без лидирующих нулей;
    • чч (hh) - час в 12-часовом варианте с лидирующим нулем;
    • Ч (H) - час в 24-часовом варианте без лидирующих нулей;
    • ЧЧ (HH) - час в 24-часовом варианте с лидирующим нулем;
    • м (m) - минута без лидирующего нуля;
    • мм (mm) - минута с лидирующим нулем;
    • с (s) - секунда без лидирующего нуля;
    • сс (ss) - секунда с лидирующим нулем;
    • вв (tt) - отображение половины дня AM/PM (действительно только для языков конфигурирования, поддерживающих 12 часовой вариант представления времени).

    Примечание: *) - не используется для форматной строки поля ввода даты.

    • ДЛФ (DLF) - локальный формат даты. Указывается вариант отображения частей даты.
      • Д (D) - дата (цифрами);
      • ДД (DD) - длинная дата (месяц прописью);
      • В (T) - полное время, дата может объединяться со временем;
      • ДВ (DT) - дата время.

      Пример: выражение Формат('20051120140323',"ДЛФ=ДДВ") имеет значение "20 ноября 2005 г. 14:03:23".

      Важно! Порядок следования опций форматной строки для ДЛФ (ДВ или ДДВ) не может быть изменен.

      • ДП (DE) - строка, представляющая пустую дату (например, Формат('00010101000000' ,"ДП=""пустая дата""") вернет строку "пустая дата").
      • БЛ (BF) - строка, представляющая логическое значение Ложь.
      • БИ (BT) - строка, представляющая логическое значение Истина.
      • ЧФ (NF) - шаблон форматирования числа. В строке можно использовать символ Ч(N) для указания позиции, в которую нужно вывести число. Число выводится с учетом остальных параметров, заданных в форматной строке. Остальные символы выводятся как есть. Символы, находящиеся между двойными или одинарными кавычками выводятся как есть. Шаблон форматирования не применяется к числу 0 (за исключением случая наличия в формате строки параметра "ЧН text-align: justify;"> Примечание. Использование параметров для поля ввода:

      1. параметр ДП (DE) не используется;
      2. параметр ДЛФ (DLF) используется только со значениями Д (D), В(T) и ДВ (DT).

      Конструктор форматной строки можно:

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

      Конструктор форматной строки поддерживает формирование форматных строк:

      1. для числовых значений;
      2. для логических значений;
      3. для значений типа "Дата".

      Конструктор форматной строки

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

      Конструктор позволяет редактировать уже имеющиеся в модуле форматные строки, для чего достаточно установить курсор внутри существующей форматной строки и вызвать конструктор.

      Имеющаяся форматная строка будет проанализирована и представлена в конструкторе в виде соответствующих параметров форматирования.

      Вызов конструктора форматной строки:

      1. через свойство "Формат" соответствующего элемента (объекта);
      2. через меню "Текст" - "Конструктор форматной строки. ";
      3. через контекстное меню модуля командой "Конструктор форматной строки. ".

      Вызов конструктора форматной строки

      Через меню "Текст" - "Конструктор форматной строки. " (после установки курсора в текст модуля):

      Особенности использования строк интерфейса конфигурации на разных языках

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

      Языки конфигурации

      Набор доступных для пользователей языков определяется объектами метаданных "Язык". Каждый язык помимо стандартных свойств "Имя", "Синоним" и "Комментарий" имеет свойство "Код языка". Это свойство представляет собой строку , которую рекомендуется определять в соответствии с международным стандартом двухбуквенных кодов языков ISO-639. Это требование не обязательное, однако исключительно важно, чтобы в пределах конфигурации данные коды были уникальны. Как мы увидим, в отличие от других объектов метаданных, именно код, а не имя является основным идентификатором языка.

      Отображение строк на разных языках

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

      Хранение строк на разных языках и связь с языками конфигурации

      Строка на разных языках представляет собой набор пар код-строка. То есть привязка к конкретному языку осуществляется именно по коду, а не по имени или внутреннему идентификатору (данное замечание касается именно строк, поскольку, например, свойство конфигурации "Основной язык" для привязки использует внутренний идентификатор, и редактирование имени и кода языка на него никак не влияет). Что же происходит со строками при изменении кода языка? Ничего. Автоматическая "перепривязка" строк не производится. Таким образом, все строки, привязанные к старому коду, будут недоступны.

      Редактирование строк на разных языках

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

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

      Программное формирование строк на разных языках

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

      То есть оформить ее в одинарных кавычках. Можно воспользоваться и двойными, но при этом все внутренние двойные кавычки следует удвоить:

      Разумеется, подобная константа не очень наглядна (хотя результат будет тот же, что и в предыдущем варианте). Если же "механически" обрамить строку в двойные кавычки:

      то получится ошибочный шаблон. Причем, особенность реализации функции НСтр() состоит в том, что ни при синтаксической проверке модулей, ни при исполнении, никакой ошибки выдано не будет. Функция просто вернет пустую строку.

      В целом, для редактирования сложных строк, заключенных в НСтр() , надежнее воспользоваться механизмом "Редактирование текстов интерфейса". Однако следует учитывать, что, по умолчанию, поиск НСтр() не производится, для его включения требуется включить соответствующий флажок в диалоге настройки редактирования текстов интерфейса.

      Форматирование модулей, содержащих НСтр()

      Следует обратить внимание еще на одну особенность работы с НСтр() . Если необходимо сформировать сложную строку как результат нескольких вызовов НСтр() , то рекомендуется располагать эти вызовы на разных строках модуля. Например вместо

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

      Читайте также: