Класс в 1с это
Встроенный язык является важной частью технологической платформы «1С:Предприятия 8», поскольку позволяет разработчику описывать собственные алгоритмы функционирования прикладного решения.
Встроенный язык имеет много общих черт с другими языками, такими как Pascal, Java Script, Basic, что облегчает его освоение начинающими разработчиками. Однако он не является прямым аналогом какого-либо из перечисленных языков.
- предварительная компиляция — перед исполнением модули, содержащие текст на встроенном языке, преобразуются во внутренний код;
- кэширование скомпилированных модулей в памяти;
- мягкая типизация — тип переменной определяется типом значения, которое она содержит, и может изменяться в процессе работы;
- отсутствие программного описания объектов конфигурации — разработчик может использовать либо встроенные в платформу объекты, либо объекты, созданные системой в результате визуального конструирования прикладного решения.
Событийная ориентированность встроенного языка
Назначение встроенного языка в системе 1С:Предприятие определяется идеологией создания прикладных решений. Прикладные решения в 1С:Предприятии 8 не кодируются целиком. Большая часть прикладного решения создается разработчиком путем визуального конструирования — создания новых объектов конфигурации, задания их свойств, форм представления, взаимосвязей и пр. Встроенный язык используется лишь для того, чтобы определить поведение объектов прикладного решения, отличное от типового, и создать собственные алгоритмы обработки данных.
По этой причине модули, содержащие текст на встроенном языке, используются системой в конкретных, заранее известных ситуациях, которые могут возникнуть в процессе работы прикладного решения. Такие ситуации называются событиями. События могут быть связаны с функционированием объектов прикладного решения или с самим прикладным решением, как таковым.
Например, с функционированием объекта прикладного решения Справочник связан ряд событий, среди которых есть событие ПередЗаписью:
Это событие возникает непосредственно перед тем, как данные элемента справочника должны быть записаны в базу данных. Разработчик, используя встроенный язык, может описать алгоритм, который, например, будет проверять корректность данных, введенных пользователем. Разместив этот алгоритм в соответствующем модуле, разработчик обеспечит то, что каждый раз, как пользователь будет выполнять запись элемента справочника, система будет выполнять созданный разработчиком алгоритм и проверять, не забыл ли пользователь заполнить обязательные реквизиты справочника.
Таким образом можно сказать, что встроенный язык является скриптовым языком для программирования бизнес-логики, а использование модулей на встроенном языке является событийно-зависимым, т. е. выполнение модулей происходит при возникновении определенных событий в процессе функционирования прикладного решения.
Универсальные коллекции значений
Встроенный язык поддерживает работу с большим количеством разнообразных объектов. Безусловно, основную группу объектов составляют прикладные объекты, позволяющие описывать алгоритмы функционирования бизнес-логики.
Однако не менее важной группой являются объекты, предназначенные для хранения временных наборов данных в течение сеанса работы пользователя. Как правило, они служат для вспомогательного сбора, группировки, анализа и обработки информации:
Перечислим кратко их возможности:
Массив
Представляет собой пронумерованную коллекцию значений произвольного типа. К элементу массива можно обращаться по его индексу. В качестве элементов массива могут выступать, в частности, другие массивы. Это позволяет создавать многомерные массивы.
Структура
Представляет собой поименованную коллекцию, состоящую из пар ключ — значение. Ключ может быть только строковым, значение — произвольного типа. К элементу структуры можно обращаться по значению его ключа, т. е. по имени. Обычно используется для хранения небольшого количества значений, каждое из которых имеет некоторое уникальное имя.
Соответствие
Также как и структура, представляет собой коллекцию пар ключ — значение. Однако, в отличие от структуры, ключ может быть практически любого типа.
Список значений
Используется, как правило, для решения интерфейсных задач. Позволяет строить динамические наборы значений и манипулировать ими (добавлять, редактировать, удалять элементы, сортировать). Он может содержать значения любого типа, кроме того, в одном списке типы хранимых значений могут быть разными.
Например, список значений может использоваться для выбора конкретного документа из списка возможных документов, сформированного по сложному алгоритму.
Таблица значений
Таблица значений позволяет строить динамические наборы значений и манипулировать ими. Она может быть наполнена значениями любого типа, и в одной таблице типы хранимых значений могут быть разными.
Одним из примеров использования таблицы значений может служить организация представления в форме списка элементов справочника, отобранных по сложному алгоритму.
Дерево значений
Дерево значений представляет собой динамически формируемый набор значений любого типа, похожий на таблицу значений. В отличие от таблицы значений, строки дерева значений могут образовывать иерархические структуры: каждая строка дерева может иметь набор подчиненных строк, каждая из подчиненных строк, в свою очередь, также может иметь набор подчиненных строк и так далее. При этом поиск значений, сортировка, получение итогов могут осуществляться либо по текущему уровню иерархии, либо включая все подчиненные.
COMSafeArray
Представляет собой объектную оболочку над многомерным массивом SAFEARRAY из COM. Позволяет создавать и использовать SAFEARRAY для обмена данными между COM-объектами.
Фиксированный массив
Неизменяемый массив. Массив заполняется системой при инициализации объектов данного типа или разработчиком, с помощью конструктора.
Редактор текстов и модулей
Для создания и изменения текстов на встроенном языке разработчик может использовать редактор текста и модуля, обладающий удобными средствами создания, редактирования и синтаксической проверки модулей. Подробнее…
Хочу рассказать о том, как я использую объектно-ориентированное программирование в 1С. Вернее его имитацию, т.к. в самом встроенном языке таких возможностей нет. Тем не менее, возможность создавать логически независимые, обособленные, самодостаточные фрагмены кода (да еще с инкапсулированными в них данными), весьма полезна.
— использовать повторно внутри одного и того же проекта;
— легко и просто (не задумываясь) переносить из одного проекта в другой;
— передать кому-то еще, или выложить в Интернете для всеобщего использования как самостоятельное средство решения определенной задачи, которое соответственно также легко может быть кем-то скопировано и вставлено в собственный проект);
— имея класс, можно создать сразу несколько объектов (строить из них массивы, коллекции, списки и т.д.);
— еще какие-то плюсы, о которых я не знаю…
В этой статье будет показаны приемы имитации ООП средствами процедурно-ориентированного языка 1С.
Как известно, встроенный язык 1С не поддерживает ООП в полной мере. Есть стандартные встроенные классы платформы со своими полями, свойствами и методами. Можно создавать объекты этих классов:
и пользоваться ими так, как это делается в обычных универсальных языках программирования. Однако определять и реализовывать собственные классы во встроенном языке нельзя. В принципе, можно сказать, что платформа 1С не поддерживает объектно-ориентированное программирование.
Впрочем, в данной статье речь пойдет не о модулях.
Итак, как же все-таки можно средствами структурного программирования реализовать хотя бы часть основных парадигм ООП?
С полиморфизмом и свойствами типа
ничего не выйдет (их вообще-то тоже можно сделать, но синтаксически это будет выглядеть слишком наворочено, некрасиво и соответственно неудобно и неочевидно в применении). Про разграничение доступа (private, protected, public) тоже придется забыть. А вот инкапсуляцию и наследование (в режиме доступа public) можно сделать вполне прилично.
Идея в общем не нова, и ее можно почерпнуть, например, в архитектуре такого мощного суперпроекта из мира Unix, как графическая библиотека GTK+. Эта библиотека реализована на языке Си, но тем не менее по факту своей архитектуры является объектно-ориентированной (см. пример инициализации библиотеки GTK+ из вышеуказанной статьи в Википедии – из него станет понятно, что имеется в виду). Возможность реализовать ООП средствами языка, который ООП не поддерживает, кроется в принятии особых соглашений о кодировании исходников.
Ведь что такое класс? Класс – это определение данных и методов их обработки «в одном флаконе». А объект – это, по сути динамически созданный набор данных, который неявно передается в качестве параметра методам класса для того, чтобы методы могли обрабатывать эти самые данные. И если средствами языка, данные и методы запихнуть в «один флакон» не получится, то воспользуемся для этого условной надстройкой над возможностями языка – соглашениями о кодировании (Code Conventions).
Будем в качестве хранилища полей объекта использовать структуры (в Си – это встроенный тип данных, в 1С – встроенный класс – хеш-таблица).
В качестве методов будем использовать процедуры и функции, используя следующие соглашения об их наименовании:
Как видно вместо неявной передачи параметра-указателя на набор полей объекта, он переда-ется явно 1-м параметром. Следом идет обычный набор параметров метода.
Рассмотрим следующий пример:
Это был пример инкапсуляции. Наследование выглядит чуть более коряво.
Естественно никаких виртуальных методов и полиморфизма здесь нет. Только переопределение одноименных методов в потомках. Одноименными они опять же являются с точки зрения логики разработки.
Как мы видим, описанный прием оформления исходников на языке 1С, расширяет возможности написанных таким образом фрагментов кода в плане наглядности, универсальности и переносимости.
В дальнейших публикациях я планирую рассказать о некоторых полезных штуках (можно сказать, инструментах), которые можно сразу взять и использовать в своих 1С-программах. Их код будет оформлен как раз в виде таких вот классов.
Всем удачи. До встречи.
P.S.: В процессе подготовки этой статьи наткнулся на описание аналогичного подхода на портале «Инфостарт». Написано, кажется в 2012-м году — примерно в это же время данный метод стал использовать и я. Поскольку в указанной статье есть существенные отличия (автор предлагает унифицировать вызов методов и доступ к свойствам класса через функции-обертки, что как бы более технологично, но на мой взгляд менее наглядно), то я решил опубликовать и собственный вариант технологии.
Привет, Хабр!
В этой статье мы начнем рассказ о том, как устроена внутри платформа «1С:Предприятие 8» и какие технологии используются при ее разработке.
Нативные приложения
- STL (в частности, строки, контейнеры и алгоритмы)
- множественное наследование, в т.ч. множественное наследование реализации
- шаблоны
- исключения
- умные указатели (собственная реализация)
Компоненты
- Разделение способствует лучшему проектированию, в частности лучшей изоляции кода
- Из набора компонентов можно гибко собирать разные варианты поставки:
- Например, инсталляция тонкого клиента будет содержать wbase, но не будет backend
- а на сервере wbase, наоборот, не будет
- оба варианта будут, конечно, содержать nuke и bsl
- Предоставляет фабричные методы, позволяющие создать класс из другой компоненты зная только его название (без раскрытия реализации)
- Предоставляет инфраструктуру умных указателей с подсчетом ссылок. За временем жизни SCOM-класса не нужно следить вручную
- Позволяет узнать реализует ли объект конкретный интерфейс и автоматически привести указатель на объект к указателю на интерфейс
- Создать объект-сервис, всегда доступный через метод get_service и т.д.
Этот макрос опишет специальный статический класс-регистратор, конструктор которого будет вызван при загрузке компоненты в память.
После это можно создать его экземпляр в другой компоненте:Для поддержки сервисов SCOM предлагает дополнительную, достаточно сложную инфраструктуру. Центральным в ней является понятие SCOM-процесса, который служит контейнером для запущенных сервисов (т.е. выполняет роль Service Locator), а также содержит привязку к локализуемым ресурсами. SCOM процесс привязывается к потоку ОС. Благодаря этому внутри приложения можно вот так получать сервисы:
Более, того переключая логические (SCOM) процессы привязанные к потоку, можно получить практически независимые с точки зрения информационного пространства приложения, выполняющиеся в рамках одного потока. Так устроен наш тонкий клиент, работающий с файловой базой — внутри одного процесса ОС находятся два SCOM-процесса, один связан с клиентом, а второй — с сервером. Такой подход позволяет унифицировать написания кода, который будет работать как на локальной файловой базе, так и в «настоящем» клиент-серверном варианте. Цена за такое единообразие — накладные расходы, но практика показывает, что они того стоят.
На основе компонентной модели SCOM реализована и бизнес-логика и интерфейсная часть 1С: Предприятия.
Пользовательский интерфейс
Кстати, об интерфейсах. Мы не используем стандартные контролы Windows, наши элементы управления реализованы напрямую на Windows API. Для Linux-версии сделана прослойка, работающая через библиотеку wxWidgets.
Библиотека элементов управления не зависит от других частей «1С:Предприятия» и используется нами еще в нескольких небольших внутренних утилитах.За годы развития 1С:Предприятие внешний вид контролов менялся, но серьезное изменение принципов произошло только один раз, в 2009 году, с выходом версии 8.2 и появлением «управляемых форм». Помимо изменения внешнего вида, фундаментально изменился принцип компоновки формы — произошел отказ от попиксельного позиционирования элементов в пользу flow-компоновки элементов. Кроме того, в новой модели элементы управления работают не напрямую с доменными объектами, а со специальными DTO (Data Transfer Objects).
Эти изменения позволили создать веб-клиент «1С:Предприятия», повторяющий С++ логику контролов на JavaScript. Мы стараемся поддерживать функциональную эквивалентность между тонким и веб клиентами. В том случае, когда это невозможно, например, из-за ограничений доступных из JavaScript API (например, возможности работы с файлами очень ограничены), мы часто реализуем нужную функциональность при помощи расширений браузеров, написанных на C++. На данный момент мы поддерживаем Internet Explorer и Microsoft Edge (Windows), Google Chrome(Windows), Firefox (Windows и Linux) и Safari (MacOS).Кроме того, технология управляемых форм используется для создания интерфейса мобильных приложений на платформе 1С. На мобильных устройствах отрисовка контролов реализована с использованием «родных» для операционной системы технологий, но уже для логики компоновки формы и реакции интерфейса используется тот же код, что и в «большой» платформе «1С:Предприятие».
Интерфейс 1С на ОС Linux
Интерфейс 1С на мобильном устройстве
Интерфейс 1С на ОС Windows
Интерфейс 1С — веб-клиентOpen source
Заключение
В статье мы коснулись нескольких основных аспектов разработки платформы «1С: Предприятие». В ограниченном объеме статьи мы затронули лишь некоторые интересные, на наш взгляд, аспекты.
Общее описание различных механизмов платформы можно посмотреть тут.
Какие темы были бы интересны Вам в следующих статьях?Как реализована мобильная платформа 1С?
Описание внутреннего устройства веб-клиента?
Или, может быть, Вам интересен процесс выбора фич для новых релизов, разработки и тестирования?(3) Речь шла про Классы, Валуе типы и перечисления.
Обертка позволяет работать с классами, а для 1С это будут объекты.
В 1С есть классы. Например Документы.Реализация это класс
У него есть статические методы (методы Менеджера) и Методы объекта, свойства (реквизиты). У него есть тип.
Так, что Денис ты не прав.(6) проф разработка с 157
так как различные классы объектов конфигурации предназначены
для решения различных прикладных задач.(6) Ту суслика видишь? А он есть. Если ЖКК не написано, это не значит, что классов нет. Просто они названы по другому
МенеджерСправочник, МенеджерСсылка,МенеджерОбъект(3) не придирайся к словам/фразам вырванным из контекста
(0) выглядит очень не плохо, только недавно сокрушался что в 1с нет регулярок.
но боюсь что в массы не зайдет, т.к. надо "думать" и знать синтаксис шарпа. те кто умеет думать - давно уже занимаются чем-то более серьезным, а тех кто остался в 1с все устраивает)
Кстати посмотрел я на пример где синхронно вызывается ассинхронный метод и решил написать классы, которые вызывали события по окончании работы задачи
Шеф, в linux можно сделать sudo apt-get install mono-devel
Во-первых, хорошо бы ссылку на статью на ИС, а не на каталоге мисты. Я для этого "оборачиваю" ссылки на ИС с помощью goo.gl
Во-вторых, в статье говорится "поможет сильно увеличить возможности 1С без написания COM объектов или ВК" - хотелось бы увидеть конкретный краткий список (либо в начале статьи - типа будет рассмотрено (или оглавление), либо в конце статьи, как итог), а не бегать по статье и кодуили в статье сразу обозначь минимально требуемый уровень квалификации для использования сабжа/понимания статьи
(31) Там как раз и написано про пространство имен
Каждый класс характеризуется именем класса, пространством имен и сборкой (размещение Dll, Exe).
Представляет текст как последовательность знаков Юникода.
Кто работал с ФабрикаXDTO, то там тоже есть простанство имен и типы.
(40) Извини не понял.
Если ты имел ссылки на форуме мисты, то я показал все статьи на инфостарте. Просто все ссылки на инфостарте перефодятся на каталог мисты.А что касается "Во-вторых, в статье говорится "поможет сильно увеличить возможности 1С без написания COM объектов или ВК" - хотелось бы увидеть конкретный краткий список (либо в начале статьи - типа будет рассмотрено (или оглавление), либо в конце статьи, как итог), а не бегать по статье и коду"
(26) Я сейчас 20 подправлю что бы можно было отлавливать ошибки и передавать данные о задаче. И сделаю отчет где расскажу как асинхронно выполнять методы
(41) "в ссылке на разработку куча примеров использования .Net классов" // Вот каждый пример Я и предлагаю озаглавить и оформить получившийся список
где добавил асинхронное выполнение методов
Сейчас в .Net широко применяют оператор await. Он применяется к методам возвращающие Task или Task.
Task это задача представляет асинхронную операцию. Доступ к результату осуществляется через свойство Result.
В 1С можно использовать либо синхронный вариант например
ДанныеРесурса=Клиент.GetStringAsync("https://msdn.microsoft.com/ru-ru/library/hh551745(v=vs.118).aspx").Result;Но для того, что бы этот метод выполнить асинхронно я создал класс с помощью которого легко использовать эти методы асинхронно.
Вторым параметром можно передавать любые данные, что бы понять какая задача выполнена и что с ней делать, так одновременно может работать множество задач
(45) Я описываю все примеры в
NetObjectToIDispatch.docx
АсинхронноеВыполнениеМетодовВ1С.docx
ОберткаДляНетовскихСобытий.docx
1СMessenger.docx(47) Я тебе про статью на ИС - сделать для примеров, описанных в ней, заголовки и список/навигацию. Надеюсь, с третьего раза ты все-таки въедешь.
а классы это что?
(52) И жабу учим, только вот Нетовские легче использовать в 1С без обертки.
(54) В 1С классы это документы, справочники и соответственно их наследники конкретные классы.(59)
в с++ можно вызвать метод печать класса
а можно вызвать этот же метод родительского классаЦифры в записи многозначных чисел разбивают справа налево на группы по три цифры в каждой. Эти группы называют классами. В каждом классе цифры справа налево обозначают единицы, десятки и сотни этого класса:
Названия классов многозначных чисел справа налево:
- первый — класс единиц,
- второй — класс тысяч,
- третий — класс миллионов,
- четвёртый — класс миллиардов,
- пятый — класс триллионов,
- шестой — класс квадриллионов,
- седьмой — класс квинтиллионов,
- восьмой — класс секстиллионов.
Для удобства чтения записи многозначного числа, между классами оставляется небольшой пробел. Например, чтобы прочитать число 148951784296, выделим в нём классы:
148 951 784 296
и прочитаем число единиц каждого класса слева направо:
148 миллиардов 951 миллион 784 тысячи 296.
При чтении класса единиц в конце обычно не добавляют слово единиц .
Разряды чисел
Каждая цифра в записи многозначного числа занимает определённое место — позицию. Место (позицию) в записи числа, на котором стоит цифра, называют разрядом.
Разряд числа — это позиция (место) цифры в записи числа.
Счёт разрядов идёт справа налево. То есть, первая цифра справа в записи числа называется цифрой первого разряда, вторая цифра справа — цифрой второго разряда и т. д. Например, в первом классе числа 148 951 784 296, цифра 6 является цифрой первого разряда, 9 — цифра второго разряда, 2 — цифра третьего разряда:
Единицы, десятки, сотни, тысячи и т. д. иначе ещё называют разрядными единицами:
- Единицы называют единицами первого разряда (или простыми единицами) и пишутся на первом месте справа.
- Десятки — единицами второго разряда и пишутся в числе на втором месте справа.
- Сотни — единицами третьего разряда и пишутся на третьем месте справа.
- Единицы тысяч — единицами четвёртого разряда и пишутся на четвёртом месте справа.
- Десятки тысяч — единицами пятого разряда и пишутся на пятом месте справа.
- Сотни тысяч — единицами шестого разряда и пишутся в числе на шестом месте справа и так далее.
Каждые три разряда, следующие друг за другом, составляют класс. Первые три разряда: единицы десятки и сотни — образуют класс единиц (первый класс). Следующие три разряда: единицы тысяч, десятки тысяч и сотни тысяч — образуют класс тысяч (второй класс). Третий класс будут составлять единицы, десятки и тысячи миллионов и так далее.
Пример. Запишите цифрами число, которое содержит:
1) 37 единиц второго класса и 565 единиц первого класса;
2) 450 единиц второго класса и 9 единиц первого класса;
3) 8 единиц второго класса и 50 единиц первого класса.
Все разрядные единицы, кроме простых единиц, называются составными единицами. Так, десяток, сотня, тысяча и т. д. — составные единицы. Каждые 10 единиц любого разряда составляют одну единицу следующего (более высокого) разряда:
10 единиц = 1 десяток; 10 десятков = 1 сотня; 10 сотен = 1 тысяча; 10 тысяч = 1 десяток тысяч; 10 десятков тысяч = 1 сотня тысяч; 10 сотен тысяч = 1 тысяча тысяч (1 миллион); Любая составная единица по сравнению с другой единицей, меньшей её называется единицей высшего разряда, а по сравнению с единицей, большей её, называется единицей низшего разряда. Например, сотня является единицей высшего разряда относительно десятка и единицей низшего разряда относительно тысячи.
Чтобы узнать, сколько в числе заключается всех единиц какого-либо разряда, надо отбросить все цифры, означающие единицы низших разрядов и прочитать число, выражаемое оставшимися цифрами.
Например, требуется узнать, сколько всего сотен содержится в числе 6284, т. е. сколько сотен заключается в тысячах и в сотнях данного числа вместе.
В числе 6284 на третьем месте в классе единиц стоит цифра 2, значит в числе есть две простые сотни. Следующая влево цифра — 6, означает тысячи. Так как в каждой тысяче содержится 10 сотен то, в 6 тысячах их заключается 60. Всего, таким образом, в данном числе содержится 62 сотни.
Цифра 0 в каком-нибудь разряде означает отсутствие единиц в данном разряде.
Например, цифра 0 в разряде десятков означает отсутствие десятков, в разряде сотен — отсутствие сотен и т. д. В том разряде, где стоит 0, при чтении числа ничего не произносится:
Читайте также: