Основы разработки на платформе 1С:Предприятие 8.3

Настоящая публикация является незавершенной и может содержать ошибки и неточности!

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

Основные сведение о программном коде

Платформа 1С:Предприятие 8.2 реализует исполнение трех основных видов программного кода:

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

Описание процедур и функций в программных модулях, выполненные в соответствии с регламентом, отображаются в справочной системе и синтаксическом конструкторе конфигуратора.
Регламент описания подробно описан на //its.1c.ru

Модули

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

  • Модуль обычного приложения
  • Модуль управляемого приложения
  • Модуль сеанса
  • Модуль внешнего соединения
  • Общие модули
  • Модули менеджера значения
  • Модули объекта
  • Модули менеджера
  • Модули форм
  • Модули команд
  • Модули набора записей

Подробно модули описаны в публикации Разработка модулей на платформе 1С:Предприятие 8.3

Типы

Любой программный объект данных обладает значением определенного типа, и этот тип может быть выражен специальным объектом типа Тип, у которого есть имя. Официальный глоссарий 1С определяет различает три вида типов:

  • Простые типы: Булево, Строка, Дата, Число, Неопределено, Null. Их имена предопределены платформой.
  • Коллекции значений (или Универсальные коллекции): Массив, Структура, Соответствие, СписокЗначений, ТаблицаЗначений
  • Прикладные типы: все остальные Константы, Справочники, Документы, Модули и другие, имена и свойства которых определяются в Конфигураторе.

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

В то же время Реквизит, который предназначен для хранения значения, характеризует не Тип, а ОписаниеТипов, которое шире, чем Тип. Тип ОписаниеТипов реквизита характеризует набор и вариации типов допустимых для значений реквизита. Как программные объекты и Тип и ОписаниеТипов - это объекты разных типов, которые не заменяют друг друга и не конвертируются друг в друга по умолчанию, хотя в справочной системе конфигуратора это не всегда понятно, так если для метода указан параметр <Тип>, то на самом деле может подразумеваться <ОписаниеТипов>.

Типы значений

Набор возможных объектов Тип предопределен платформой и прикладными типами определенными в конфигураторе.

  • Тип(<имя типа>) позволяет получить/создать объект Типа для указанно типа по его имени (не объект указанного типа, а именно Тип его типа);
    • Тип("Строка"), Тип("Число"), Тип("Дата"), Тип("Булево"), Тип("Null") возвращают простые Типы;
    • Тип("Массив"), Тип("Структура"), Тип("Соответствие") возвращают тип коллекции значений;
    • существует большое число прикладных типов, которые можно условно классифицировать
      • прикладные типы объектов ИБ конфигурации, которые образуют семейства
        • тип <тип>Ссылка - определяет конкретный объект, который хранится в ИБ и может быть получен для использования, существует и на Клиенте и на Сервере.
        • тип <тип>Объект - это объект ИБ находящийся в памяти и доступный для использования, существует только на Сервере.
        • тип <тип>Выборка - это объект набора объектов ИБ этого семейства.
        • Тип("СправочникСсылка.<имя справочника>") возвращает прикладной тип ссылки справочника;
        • Тип("ДокументОбъект.<имя документа>") возвращает прикладной тип объекта документа;
      • прикладные типы системы, объекты которых всегда находятся в памяти
        • типы для оперирования Данными на Сервере
        • типы для оперирования Данными на Клиенте
        • типы элементов графического интерфейса
  • ТипЗнч(<значение>)  позволяет получить/создать объект Типа для указанного значения;
  • Строка(<Тип>) позволяет получить краткое имя типа, создать прикладной объект по краткому имени нельзя;
  • ТипЗнч(<значение>) = Тип("<полное имя проверяемого типа>") - правильное сравнение соответствия типа;
    • Ссылка.Метаданные().Имя = "ПоступлениеТоваровУслуг" - неправильное сравнение типа;
  • <прикладнаяСсылка>.Метаданные().ПолноеИмя() возвращает полное имя прикладного типа объекта, включающее семейство
    • Метаданные.НайтиПоТипу(<Тип объекта>).ПолноеИмя() другой способ получить полное имя типа по Типу без объекта
  • <прикладной тип Менеджер>.ТипВсеСсылки() семейство подтипов Ссылка, Объект, Выборка прикладного типа
    • <прикладной тип Менеджер>.ТипВсеСсылки().СодержитТип(ТипЗнч(<объект>)) проверяет принадлежность типа объекта к семейству типов прикладного типа

Описание типов реквизитов

Объекты ОписаниеТипов определяются в конфигурации и могут создаваться динамически в модулях с произвольными наборами Типов:

  • Новый ОписаниеТипов(<Типы>, <ДобавляемыеТипы>, <ВычитаемыеТипы>, <КвалификаторыЧисла>, <КвалификаторыСтроки>, <КвалификаторыДаты>, <КвалификаторыДвоичныхДанных>) создает объект описания типов
    • <Типы> допустимо указать строковое <имя типа>
      • ОписаниеТипов(ТипЗнч(<значение>),... недопустимо в параметре <Типы> использовать объект Тип
      • ОписаниеТипов(Строка(ТипЗнч(<значение>)),... можно получить имя типа из Типа и функцией Строка(), если это простой тип или тип коллекции
        • функция Строка() не пригодна для Типа прикладного объекта, поскольку возвращает короткое имя без имени семейства
      • допустимо использовать подготовленный массив из одного или нескольких Типов: ОписаниеТипов(ТипыМассив,...
        • набор типов может быть произвольным и включать простые и прикладные типы
    • ДобавляемыеТипы
    • ВычитаемыеТипы
    • Квалификаторы уточняют свойства простых типов включаемых в ОписаниеТипов
      • КвалификаторыЧисла(<длина>,<точность>, <ДопустимыйЗнак>)
      • КвалификаторыСтроки(<ДлинаСтроки>, <ДопустимаяДлина>)
      • КвалификаторыДаты(<ЧастиДаты>)
      • КвалификаторыДвоичныхДанных(<Длина>, <ДопустимаяДлина>)
  • Новый ОписаниеТипов(<ИсходноеОписаниеТипов>, <ДобавляемыеТипы>, <ВычитаемыеТипы>, <Квалификаторы...) создает новое ОписаниеТипов на основании исходного
  • <реквизит>.ТипЗначения.Типы() - массив допустимых типов реквизита
    • <реквизит>.ТипЗначения.Типы().СодержитТип(<Тип>)=Истина - проверяет допустимость указанного Типа в качестве значения реквизита

///
Пример простого назначения описания типов в колонках таблицы значений:

Примеры:

///

///

Источник: Тип реквизита и тип значения на //kb.mista.ru

Прикладные типы

Приведенная конструкция позволяет получить ОбъектМетаданные прикладного типа и полное имя типа:

Массив

Массив 1С является упорядоченной коллекцией произвольных значений...

Структура

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

Пример итератора элементов структуры:

Соответствие

Соответствие 1С является коллекцией элементов типа КлючИЗначение аналогично Структуре с тем отличием, что ключу не предъявляется требований по типу и значению.

СписокЗначений

...

ТаблицаЗначений

Таблица значений служит программным средством организации и обработки табличных данных. Сама таблица значений является коллекцией элементов типа СтрокаТаблицыЗначений, состав колонок таблицы значений определяется коллекцией Колонки. Для ускорения выполнения методов таблица значения может использовать индексы в коллекции Индексы.

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

Таблица значений может быть передана в запрос через параметр:


...

ДеревоЗначений

Дерево значений напоминает Таблицу значений, у которой каждая строка дополнительно имеет коллекцию Строки, содержащую ее подчиненные строки, у которых также имеется коллекция Строки!!!

...

ТабличныйДокумент

Табличный документ - это объект серверного размещения, который только отображается на Клиенте, поэтому оперировать табличным документом следует кодом на сервере.

  • Линия(ТипЛинииЯчейкиТабличногоДокумента.Сплошная,2)

///

Уникальный Идентификатор

Всякий объект данных хранимый в ИБ обладает своим уникальным идентификатором, у которого есть символическое представление вида xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Для использования уникального идентификатора существует специальный тип УникальныйИдентификатор

  • ДанныеОбъект.Ссылка.УникальныйИдентификатор() извлекает объект идентификатора из ссылки объекта данных
  • код Новый УникальныйИдентификатор создает объект нового идентификатора с уникальным значением в произвольном коде модуля
  • код Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000") создает объект нового пустого идентификатора, который можно использовать в критерии для поиска не инициированных значений идентификатора
  • код Новый УникальныйИдентификатор("954f76c4-8ec3-11ea-88x8-dx5x9947e11a") создает объект нового идентификатора с заданным значением
  • значение уникального идентификатора не позволяет определить тип идентифицируемого им объекта, поэтому для поиска объект следует обойти все коллекции типов ИБ.

Для любого объекта ИБ можно создать и присвоить новый УникальныйИдентификатор со случайным или определенным значением:

Присвоение объектам УникальногоИдентификатора гарантирует фактическую уникальность только в пределах прикладного типа. Если идентификатор будет присвоен нескольким объектам разных типов, то подобная коллизия может быть выявлена только при Тестирования ИБ или специальными программными средствами.

Общие элементы конфигурации

Подсистемы

Функциональные опции

...

Параметры сеанса

...

.

Прикладные элементы конфигурации

 

Справочники

  • Стандартные реквизиты справочника включают:
    • Ссылка
    • Код
    • Наименование
    • Владелец
    • Родитель
    • ЭтоГруппа
    • ПометкаУдаления
    • Предопределенный
    • ИмяПредопределенныхДанных
  • Формы справочника могут относится к видам:
    • Форма элемента справочника
    • Форма группы справочника
    • Форма списка справочника
    • Форма выбора справочника
    • Форма выбора группы справочника
    • Произвольная форма

 Примеры использования: Справочники в языке 1С 8.3, 8.2 (в примерах) //helpme1c.ru

Документы

 Примеры использования: Документы в языке 1С 8.3, 8.2 (в примерах) //helpme1c.ru

Перечисления

Способ доступа к перечислениям в коде зависит от места исполнения кода:

Перечисления в языке 1С 8.3, 8.2 (в примерах) //helpme1c.ru

Отчеты

Обработки

Планы видов характеристик

Регистры сведений

В модуле набора записей данные доступны через объект Запись

Пример кода записи в регистр сведений в процедуре проведения документа:

Пример кода добавления с перезаписью одной записи в независимый регистр сведений (подробней на на //its.1c.ru):

Пример кода модификации записей подчиненного регистра сведений на //its.1c.ru

Регистры сведений в языке 1С 8.3, 8.2 (в примерах) //helpme1c.ru

Бизнес-процессы

...

Задачи

...

Внешние источники данных

Внешние источники позволяют настроить соединение с источниками данных, для которых в системе установлены драйвера...

Временное хранилище

Информационная база 1С 8.x предоставляет программную возможность продолжительного хранения произвольных объектов вне всяких определенных прикладных типов во временном хранилище:

Прочие дополнения

///.

Leave a Reply