Как в алгоритме обозначить тип строка 1с
В языке поддерживаются следующие базовые типы данных:
Числовым типом может быть представлено любое десятичное число. Над данными числового типа определены основные арифметические операции.
Строковым типом может задаваться любая последовательность символов, в том числе и пустая.
Типом дата может представляться любая корректная дата.
В процессе работы модуля или вычисления выражений может возникнуть необходимость в преобразовании типов данных отдельных значений. Для базовых типов определены следующие правила преобразования:
Если число не имеет форматных установок, то его строковым представлением является полное представление числа в формате с фиксированной точкой.
Дата преобразованная к строковому типу имеет вид ДД.ММ .Г Г, где ГГ — две цифры года, ММ — числовое обозначение месяца (01, . 12), ДД — день месяца.
Строка преобразуется в число пока это возможно. Получившееся число считается результатом преобразования. (Например, строка «1.22 Glass » будет преобразована к числу 1.22). Если в начале строки не имеется ничего, что могло бы быть проинтерпретировано как число, то результат равен 0.
Результатом данного преобразования является численное представление даты.
Если в начале строки содержится что-то, что может быть проинтерпретировано как строковое представление даты в виде ДД.ММ .Г Г, где ГГ — две цифры года, ММ — числовое обозначение месяца (01, . 12), ДД — день месяца, то будет произведено соответствующее преобразование. В противном случае значение даты будет нулевым.
Делается попытка взять целую часть Числа и проинтерпретировать как численное представление даты. Если число отрицательно, то итогом является нулевая дата.
Агрегатные типы данных
Агрегатные типы данных — это специализированные типы данных системы 1С :П редприятие, суть которых — отражение объектов предметной области и способ работы с ними. Работа с агрегатными типами данных языка напоминает работу с объектными типами в Delphi . Атрибуты агрегатного типа данных аналогичны свойствам, а методы — методам объектного типа.
Замечание. При конфигурировании агрегатных типов данных, например Справочников, Документов, Регистров и т. п. не рекомендуется использовать в качестве идентификаторов создаваемых рекизитов существующие термины названий атрибутов и методов объектов.
Типичная последовательность работы с объектом агрегатного типа данных выглядит следующим образом:
· с помощью функции СоздатьОбъект создается объект агрегатного типа данных, и какой-либо переменной присваивается ссылка на него;
· объект позиционируется на нужном элементе данных;
· производятся различные манипуляции с объектом агрегатного типа данных через вызовы методов и обращения к его атрибутам.
· в случае , если объект агрегатного типа данных больше не нужен, он может быть отсоединен от переменной посредством переприсваивания переменной какого-либо значения базового типа (например, числа 0). Отсоединение объекта выполнять не обязательно.
// Создаем объект типа » справочник .С отрудники «
Сотр = СоздатьОбъект (» Справочник .С отрудники «);
// Позиционируем созданный объект Сотр по известному наименованию
Сотр .Н айтиПоНаименованию («Петров»);
Если Сотр .В ыбран () = 1 Тогда
// если сотрудник найден, отобразим его оклад
Предупреждение(«Оклады» + Сотр .О клад );
Предупреждени е( «Петров не найден» + » . «);
Замечание. Объект, созданный при помощи функции. СоздатьОбъект , изначально не определен , т. е. не содержит никакого конкретного значения. Чтобы начать с ним работать, его предварительно надо позиционировать (установить на конкретный документ или элемент справочника). Для документов позиционирование выполняется при помощи методов НайтиДокумент , НайтиПоНомеру , ПолучитьДокумент . Для справочников позиционирование выполняется при помощи методов НайтиЭлемент , НайтиПоКоду , ПолучитьЭлемент .
Замечание. Следует понимать, что в случае, если значение переменной, содержащей ссылку на объект агрегатного типа данных, присвоить другой переменной, то это не означает создание нового объекта, просто другая переменная будет содержать ссылку на тот же объект. Новые объекты создаются только с помощью обращения к функции СоздатьОбъект . Удаление объекта производится самой системой после того, когда не остается ни одной переменной, содержащей ссылку на объект.
Агрегатными типами данных называются следующие типы данных:
Константа — средство работы с постоянными (или условно постоянными) значениями.
Справочник — средство для ведения списков однородных элементов данных. Перечисление — средство работы с элементами данных, список возможных значений которых жестко задан (например, для перечисления « ФормаОплаты » можно задать возможные значения: « Нал », « Безнал »). В отличие от справочников, списки значений в перечислении задаются в процессе их создания в конфигураторе и при выполнении задачи не могут быть изменены.
Документ — средство для ввода первичной информации о совершаемых хозяйственных операциях.
Регистр — средство обработки и накопления сводной информации оперативного учета, доступны только при наличии компоненты «Оперативный учет».
ПланСчетов является служебным типом данных. Он предназначен для идентификации Плана счетов, созданного в метаданных. В основном он используется для передачи в качестве параметра различным процедурам и функциям компоненты «Бухгалтерский учет» и для выбора плана счетов в формах. Тип значения « ПланСчетов » не поддерживает никаких данных в информационной базе, а список возможных значений этого типа данных определен планами счетов созданными в конфигурации. Значения типа « ПланСчетов » могут выступать как реквизиты диалога формы, как реквизиты документов, справочников и т. д. Для получения значения такого типа данных используется глобальный атрибут ПланыСчетов , который имеет в свою очередь набор атрибутов типа « ПланСчетов » соответсвующих имеющимся в конфигурации планам счетов. Кроме того, глобальный атрибут ПланыСчетов имеет методы для обхода всех существующих планов счетов. (Данные типа ПланСчетов доступны только при наличии компоненты «Бухгалтерский учет»)
Счет — это агрегатный тип данных для доступа к объектам данных — бухгалтерским счетам. Бухгалтерские счета используются компонентой «Бухгалтерский учет» системы 1С :П редприятие для идентификации разрезов синтетического учета наличия и движения средств. В общем виде смысл типа данных «Счет» вполне соответвует общепринятому понятию «Счет» в бухгалтерском учете.
ВидСубконто является служебным типом данных. Он предназначен для идентификации Вида субконто , созданного в метаданных. В основном он используется для передачи в качестве параметра различным процедурам и функциям компоненты «Бухгалтерский учет» и для выбора вида субконто в формах. Список возможных значений этого типа данных определен видами субконто , созданными в конфигурации. Значения типа « ВидСубконто » могут выступать как реквизиты диалога формы, как реквизиты документов, справочников и т. д. Для получения значения такого типа используется глобальный атрибут ВидыСубконто , который имеет в свою очередь набор атрибутов типа « ВидСубконто » соответствующих имеющимся видам субконто . Кроме того, глобальный атрибут ВидыСубконто имеет методы для обхода всех существующих видов субконто . ( Данные типа ВидСубконто доступны только при наличии компоненты «Бухгалтерский учет»)
Операция — средство для манипулирования из встроенного языка данными бухгалтерских операций и проводок формируемых документом. Так как проводки в системе 1С :П редприятие принадлежат операциям, то управление и операциями и проводками выполняется объектом «Операция». (Данные типа Операция доступны только при наличии компоненты «Бухгалтерский учет»)
БухгалтерскиеИтоги — средство для организации доступа к бухгалтерским итогам в различных разрезах, за различные периоды и с разной степенью детализации. При наличии в системе 1С :П редприятие компоненты «Бухгалтерский учет» система автоматически реализует специальный механизм работы с бухгалтерскими итогами. Данный механизм обеспечивает хранение, динамический пересчет бухгалтерских итогов и их извлечение средствами встроенного языка. Система хранения бухгалтерских итогов поддерживается системой 1С :П редприятие автоматически на основе существующих планов счетов. При редактировании планов счетов — в конфигураторе или при работе с системой 1С :П редприятие — для счета могут быть установлены ряд свойств, которые влияют на организацию хранения бухгалтерских итогов: это признаки ведения валютного и количственного учета, а также включение аналитического учета по субконто . Изменение бухгалтерских итогов может производиться только проводками бухгалтерских операций. (Данные типа БухгалтерскиеИтоги доступны только при наличии компоненты «Бухгалтерский учет»)
ЖурналРасчетов — средство для учета расчетных действий по тем или иным объектам расчета. Каждая строка журнала расчетов соответствует одному расчетному действию — акту расчета, выполняемому по определенному алгоритму (виду расчета), в определенном временном интервале и имеющему результат. ( ЖурналыРасчетов доступны только при наличии компоненты «Расчет»)
ВидРасчета — средство для выполнения расчетов по определенным алгоритмам через журнал расчетов. Перечень видов расчета, доступных в конкретной конфигурации, их названия и другие свойства определяются в конфигураторе. ( ВидыРасчета доступны только при наличии компоненты «Расчет»)
ГруппаРасчетов — тип данных, предназначенный для объединения видов расчета по тому или иному признаку. Перечень групп расчетов, доступных в конкретной конфигурации, их названия и другие свойства определяются в конфигураторе. ( ГруппыРасчетов доступны только при наличии компоненты «Расчет»)
Календарь — средство для ведения учета времени по календарным датам. Перечень календарей, доступных в конкретной конфигурации, их названия и другие свойства определяются в конфигураторе. (Календари доступны только при наличии компоненты «Расчет»)
Запрос — средство для выполнения обращения к документам, регистрам, документам, справочникам и журналам расчетов с целью получения сводной информации при формировании выходных отчетов. В программных модулях допускается создавать произвольное число объектов типа Запрос при помощи вызова системной функции СоздатьОбъект .
Текст — средство работы с текстовыми документами. В программных модулях допускается создавать произвольное число объектов типа Те кст пр и помощи вызова системной функции СоздатьОбъект .
Таблица — средство работы с таблицами (отчетами). В программных модулях допускается создавать произвольное число объектов типа Таблица, при помощи вызова системной функции СоздатьОбъект .
СписокЗначений — средство для создания списка значений каких-либо данных и возможности в дальнейшем сортировать и выбирать нужные значения из списка. При добавлении в диалоговых формах полей типа «Список» или «Поле со списком», система автоматически создает объекты СписокЗначений , доступ к которым в языке возможен по идентификатору поля. В программных модулях допускается создавать произвольное число объектов типа СписокЗначений при помощи вызова системной функции СоздатьОбъект .
ТаблицаЗначений — средство для создания списка значений каких-либо данных и возможности в дальнейшем сортировать и выбирать нужные значения из списка. При добавлении в диалоговых формах полей типа «Список» или «Поле со списком», система автоматически создает объекты СписокЗначений , доступ к которым в языке возможен по идентификатору поля. В программных модулях допускается создавать произвольное число объектов типа СписокЗначений при помощи вызова системной функции СоздатьОбъект .
Картинка — средство для работы с графическими файлами. При добавлении в диалоговых формах и в таблицах полей типа «Картинка», система автоматически создает объекты Картинка, доступ к которым в языке возможен по идентификатору поля. В программных модулях допускается создавать произвольное число объектов типа Картинка при помощи вызова системной функции СоздатьОбъект .
Периодический — средство для работы с периодическими реквизитами справочников и периодическими константами. В программных модулях допускается создавать произвольное число объектов типа Периодический при помощи вызова системной функции СоздатьОбъект .
ФС — средство для работы с дисковыми файлами непосредственно из встроенного языка системы 1С :П редприятие. В программных модулях допускается создавать произвольное число объектов типа ФС при помощи вызова системной функции СоздатьОбъект . Кроме того, в глобальном контексте по умолчанию существует один уже созданный объект этого типа с именем ФС (имя объекта совпадает с названием агрегатного типа данных).
XBase — средство для работы с файлами баз данных DBF формата непосредственно из встроенного языка системы 1С :П редприятие. В программных модулях допускается создавать произвольное число объектов типа XBase при помощи вызова системной функции СоздатьОбъект .
Спр = СоздатьОбъект (» Справочник .С отрудники «);
А = Спр .В ыбрать («Выберите объект», 0);
//Выбираем наименование и оклад как атрибуты справочника
Сообщить(«Выбран сотрудник » + Спр .Н аименование );
Сообщить(«Оклад — » + Спр .О клад );
Спр = СоздатьОбъект (» Справочник .С отрудники «);
А = Спр .В ыбрать («Выберите объект», 0);
Док = СоздатьОбъект (» Документ .П риказНаДоплату «);
// Устанавливаем атрибут НомерДок
Док .Н омерДок = «777»;
// Устанавливаем атрибут ДатаДок
Док .Д атаДок = ‘14.04.96’;
Док .Т ипРасчета = ВидРасчета.ДоплатаСуммой ;
Спр = СоздатьОбъект (» Справочник .Т овары «);
А = Спр .В ыбрать («Выберите товар», 0);
Доку = СоздатьОбъект (» Документ .Н аклПрих «);
Доку .Н овый (); // Вызываем метод
Доку .С клад = 22;
Доку .Н омерДок = «777»; // Устанавливаем номер документа
Доку .Д атаДок = ‘14.04.96’; // Устанавливаем дату документа
Доку .А втоВремяОтключить (); // Вызываем метод
Доку .У становитьВремя (17, 30, 00);
Доку .Н оваяСтрока (); // Вызываем метод
Доку .Т овар = Спр.ТекущийЭлемент ();
Доку .К оличество = 100;
Уроки программирования 1С: примитивный тип данных Строка
Строка любой длины представляет собой набор символов, заключенных в кавычки. С помощью типа данных «Строка» можно писать целые предложения.
Далее вы продолжите работу с обработкой «Калькулятор», которую разработали на прошлом занятии. Использование типа данных «Строка» позволит вам добавить в обработку новые функции для работы с текстом.
Способы управления текстовой информацией в 1С
Во-первых, создайте реквизит «Комментарий» имеющий тип «Строка» длинной 150 символов. Затем поместите его на форме в группе «Строка». В свойствах «Основные реквизиты» настройте многострочный режим вывода текста.
Во-вторых, создайте в обработке две команды: «НаписатьТекст» и «СтеретьТекст». Переместите их на форму в группу «Строка».

Далее создайте процедуры-обработчики для этих команд «&НаКлиенте». (Для переноса строки используется символ |).


Для получения более компактного, удобного и лаконичного размещения реквизитов на форме обработки имеет смысл создать панель закладок. С помощью закладок вы организуете реквизиты обработки в соответствии с их типом. Для этого на форме добавьте тип элемента с именем «Страница» («Группа» — «Страницы») и перетащите в нее мышкой ранее сгруппированные реквизиты.

Полный курс программиста «1С» – обучение с нуля до разработчика, способного решать практические учетные задачи в любой области
Как сформировать текст из нескольких реквизитов
Одна из операций, которые можно совершать с примитивным типом данных «Строка» – это сложение, то есть возможность формировать текст последовательно из нескольких реквизитов.
Для иллюстрации сложения строк создайте 4 новых реквизита:
- «Фамилия»;
- «Имя»;
- «Отчество»;
- «ФИО».
Создайте также команду «ПолучитьФИО».
Команду и реквизиты перетащите мышкой на форму.

Затем «&НаКлиенте» напишите процедуру-обработчик команды «ПолучитьФИО». Обратите внимание, что пробел между реквизитами нужно задать в кавычках.

Вы закончили написание внешней обработки 1С и ознакомились с примитивным типом данных «Строка» в среде разработки «1С:Предприятие 8»! Если вы сами пока не готовы писать внешние обработки, вы всегда можете вызвать нашего программиста 1С, который поможет решить любые задачи с настройкой 1С и доработкой 1С
В также можете освоить некоторые навыки программиста 1С на очных специализированных курсах от международного ИТ-интегратора «Первый Бит».
Хотите получать подобные статьи по четвергам?
Быть в курсе изменений в законодательстве?
Подпишитесь на рассылку
Переменные и операторы (бесплатная статья по Программированию 1С)
из цикла статей «Первые шаги в разработке на 1С»
Как правило, изучение любого языка программирования начинается с примера написания первой простейшей программы (“Hello world!”). Делается это для того, чтобы наглядно показать работу с базовыми синтаксическими конструкциями. Мы не будем делать исключение из этого общепринятого способа подачи материала при изучении новой среды разработки и поэтому нашу первую статью следует рассматривать в этом же ключе. В ней мы подробно разберем ответы на следующие вопросы, касающиеся программирования на платформе «1С:Предприятие 8»:
- Где и при помощи чего писать программный код на встроенном языке 1С?
- Что такое программные модули, какие существуют правила работы с ними?
- Что такое переменная, как с ней работать, как и где её объявлять?
- Какие операторы сравнения, присваивания и условий существуют и как их применять?
- Булевы операции – что это и как с ними работать?
- Зачем нужны циклы и как их использовать?
Статья будет полезна всем тем, кто еще не знаком с разработкой на платформе «1С:Предприятие 8», но хочет научиться программировать на 1С.
Применимость
Материал актуален для платформы «1С:Предприятие 8» редакций 8.2. и 8.3.
Переменные и операторы
- Булевы операции
- Оператор присваивания
- Условный оператор
- Циклические операторы
В этой статье мы приступаем к изучению встроенного языка 1С:Предприятие 8. Исполняемый код содержится в программных модулях.
Существует достаточно большое количество модулей, которые предназначены для обработки различных событий.
Так, вход пользователя в систему обрабатывается в одном модуле, а обработка нажатия пользователя на некоторую кнопку – в совершенно другом.
Таким образом, каждый модуль описывает поведение конфигурации в определенной точке. В модуле содержится, прежде всего, раздел описания переменных. Т.е. мы можем объявить в модуле некоторые переменные.
В дальнейшем они могут быть использованы в процедурах и функциях этого модуля. Если переменная определена с ключевым словом Экспорт, то она будет доступна вне данного модуля. Пример строки объявления переменных:
Перем Склад, Подразделение, Кладовщик Экспорт;
После объявления переменных содержится раздел процедур и функций.
За ними располагается раздел основной программы, который будет выполняться в момент обращения к данному модулю.
Например, в разделе основной программы можно осуществить инициализацию переменных, т.е. присвоить им некоторые начальные значения:
Состояние=1;
НовоеВыражение=2;
Результат=3;
Модуль можно представить, как комбинацию различных операторов, которые выполняют разные нужные нам действия.
Разделителем операторов является символ «;» (точка с запятой). Этот знак является признаком окончания оператора. Т.е. оператор может быть записан в таком виде:
Результат=100Х200
+400
-600;
При этом не важно, на скольких строках располагается оператор.
Конечно, чаще удобнее и нагляднее располагать оператор в одной строке, но иногда операторы являются достаточно длинными (число строк обоснованно может достигать нескольких десятков).
Точку с запятой можно не ставить в завершающем операторе данной конструкции, например, процедуры. Т.е. следующий код будет работать:
ИсходноеЗначение = 100;
ПромежуточноеЗначение = ИсходноеЗначение/5;
ИтоговоеЗначение = ИсходноеЗначение+ПромежуточноеЗначение
Однако лучше использовать точку с запятой в завершающем операторе. Не исключено, что со временем конструкция будет продолжена, и завершающий оператор окажется уже не завершающим. Придется специально отслеживать эту ситуацию.
Переменные предназначены для того, чтобы хранить некоторые значения любого типа данных. Они используются для промежуточного хранения информации, для обработки.
Практически в любом программном модуле, который выполняет некоторые действия, есть различные переменные. Типизация переменных по значениям в Платформе 1С:Предприятие 8 мягкая.
Например, переменная может содержать значение одного типа данных, а через несколько строк – другого типа:
Создан = Ложь;
Создан = Истина;
Создан =100;
В первых двух операторах значение переменных булевское, а в третьем оно меняется на числовое значение. Т.е. типизация зависит от того значения, которое присваивается данной переменной.
Описывать переменные можно двумя способами:
- неявный способ (упоминание в левой части оператора присваивания описывает данную переменную, нет предварительного описания переменной со словом Перем, т.е. нет специального раздела описания переменных);
- явное описание переменных (Перем КонтрольныеДанные;). Явное описание переменных используется, например, если предполагается последующая передача этой переменной в функцию.
Для названия переменных используется классическое описание идентификатора. Идентификатор состоит из букв, цифр и знаков подчеркивания. Начинаться идентификатор должен либо с буквы, либо со знака подчеркивания.
При этом название переменной должно отображать смысл данной переменной. Названия переменных из одной буквы (типа А, В, С) являются плохими примерами. Они не отражают суть переменных.
Примеры правильного названия переменных: Счетчик (увеличивающаяся переменная для цикла), Контрагент. Если имя переменной содержит несколько слов, то каждое новое слово, для наглядности, следует начинать с большой буквы.
В названии переменных нельзя использовать зарезервированные слова, такие как Процедура, Функция, Цикл, КонецЦикла и т.д. (эти конструкции выделяются в программном модуле красным цветом).
Зарезервированные слова – это операторы встроенного языка и их достаточно небольшое количество. Все они представлены в Синтакс-помощнике.

Следует отметить, что типы данных к зарезервированным словам не относятся (например, Массив, Булево, Истина, Ложь). Система такие имена переменных воспримет корректно.
Для написания программного кода регистр не имеет никакого значения. Например, слово Процедура можно писать как с большой, так и с маленькой буквы. Более того, большие и маленькие буквы можно чередовать внутри слова.
Для Платформы это не имеет никакого значения. Тем не менее, по правилам хорошего тона начало слова нужно писать с большой буквы, все остальные буквы маленькими.
По поводу языка. Можно использовать и русский язык, и английский, и комбинацию двух языков. Если кому-то удобно, можно спокойно использовать английский язык для написания программного кода, а также комбинировать русский и английский языки. Для Платформы это не важно.
Но существуют рекомендации использовать русский язык, потому что в системе достаточно большое количество объектов, которые имеют длинные названия.
Многие названия на английском языке довольно сложно помнить. При использовании комбинации двух языков ухудшается читаемость программного кода.
Булевы операции
В операторах сравнения очень часто используется булевская логика, которая возвращает значение Истина или Ложь.
Например, в условном операторе можно сравнивать: Если Событие = Продажа Тогда алгоритм пойдет по одной ветке (т.е. при значении Истина), по условию Ложь выполняется другая ветка алгоритма.
Условия могут быть достаточно сложными, они могут комбинироваться, при этом применяются следующие операторы: И, ИЛИ, и НЕ. Так, для оператора И:
Истина И Истина = Истина;
Истина И Ложь = Ложь;
Ложь И Истина = Ложь;
Ложь И Ложь = Ложь.
Для опрератора ИЛИ достаточно, чтобы один из операндов был равен Истина, тогда и значение комбинации будет Истина. Значение Ложь получается только в том случае, когда оба операнда Ложь.
Оператор НЕ просто инвертирует текущее значение (Ложь в Истину, Истину в Ложь).
С помощью комбинации данных операторов можно строить достаточно сложные условия. При составлении сложных условных операторов следует учитывать приоритеты.
Высший приоритет имеет оператор НЕ, следующим идет оператор И, а за ним оператор ИЛИ. То, что заключено в скобки, имеет самый высший приоритет и выполняется в первую очередь.
Например, расставим приоритеты (последовательность выполнения) для операций в приведенном выражении:
НЕ(Условие1 ИЛИ Условие2) И Условие3 ИЛИ Условие4
1. Результат1 = (Условие1 ИЛИ Условие2);
2. Результат2 = НЕ Результат1;
3. Результат3 = Результат2 И Условие1;
4. Результат = Результат3 ИЛИ Условие4;
Существует правило преобразования:
НЕ (Условие1 ИЛИ Условие2) = НЕ Условие1 И НЕ Условие2.
Однако не следует всегда стремиться упростить выражение, поскольку зачастую, по логике, проще читается выражение развернутое.
Оператор присваивания
Не следует путать оператор присваивания с равенством, не смотря на то, что у них одинаковое написание.
Принцип работы оператора присваивания таков, что левому значению (переменной с левой части) присваивается то значение, которое находится справа от знака равенства. Разберем пример:
Переменная1 = Переменная2 = Переменная3;
Левое значение – Переменная1, далее следует оператор присваивания.
Переменной1 присваивается значение равенства из булевской логики, т.е. Истина, если Переменная2 = Переменная3, или Ложь в обратном случае.
При тестировании на должность начинающего программиста довольно часто используется задача: поменять значения двух переменных местами.
Данная задача решается с использованием оператора присваивания и имеет два решения.
Решение №1 с использованием временной переменной:
ВременнаяПеременная = Переменная1;
Переменная1 = Переменная2;
Переменная2 = ВременнаяПеременная;
Решение №2:
Переменная1 = Переменная1 + Переменная2;
Переменная2 = Переменная1 – Переменная2;
Переменная1 = Переменная1 – Переменная2;
Условный оператор
Есть такой оператор Если, после которого необходимо описать некоторое условие (само условие может быть достаточно большим). После условия следует слово Тогда и выполняемые операторы.
Далее может следовать ключевое слово Иначе и серия других операторов. Если разных условий несколько, можно использовать серию ключевых слов ИначеЕсли (см. пример ниже). Вся конструкция обязательно завершается ключевым словом КонецЕсли, после чего следует знак точки с запятой.

Кроме простого и множественного условия существует сокращенная форма условного оператора: ?(Условие, Выражение1, Выражение2);
Если условие истинное, то будет выполняться Выражение1, в противном случае – Выражение2. Пример кода: ДорогойТовар = ?(Товар.Цена>100000, Истина, Ложь);
На практике вместо записей сравнения со значением Истина (Ложь) типа:
Если Переменная = Истина Тогда
и
Если Переменная = Ложь Тогда
реально используются эквивалентные записи:
Если Переменная Тогда
и
Если НЕ Переменная Тогда
Циклические операторы
Для любого вида цикла обязательно явное указание окончания этого цикла с помощью ключевого слова КонецЦикла. Существует несколько типов циклов.
Цикл по счетчику – цикл с фиксированным количеством повторений. Условием выхода из цикла является превышение граничного значения. Пример использования для расчета значения А!
А = 5;
Факториал = 1;
Для Счетчик = 1 По А Цикл
Факториал = Факториал * Счетчик;
КонецЦикла;
Цикл по условию – выполняется пока истинно условие данного цикла. Пример:
ОстатокСуммы = 1000;
ЦенаДополнительногоТовара = 243;
Количество = 0;
Пока ОстатокСуммы>0 Цикл
Количество = Количество+1;
ОстатокСуммы = ОстатокСуммы – Количество*ЦенаДополнительногоТовара;
ЦенаДополнительногоТовара = ЦенаДополнительногоТовара * 0.8;
КонецЦикла
Количество = Количество-1;
Данный цикл вычисляет, сколько единиц товара можно купить на данную сумму (1000 рублей), если после покупки каждой единицы товара предыдущая его цена умножается на коэффициент 0,8. Изначальная цена товара – 243 рубля.
Примером ошибки при использовании данного вида цикла новичками является вечный цикл, когда изначально условие цикла истинно, а в рамках самого цикла оно никак не изменяется.
Цикл по коллекциям (другое название Для каждого).
В Платформе существует достаточно большое количество коллекций (это такие контейнеры, которые содержат элементы определенного типа).
Обойти элементы коллекции можно с помощью цикла специального вида.
Например, существует массив чисел, необходимо посчитать сумму всех элементов массива:
Сумма = 0;
Для каждого Элемент Из Массив Цикл
Сумма=Сумма+Элемент;
КонецЦикла;
Для циклов существуют специальные операторы: Продолжить и Прервать.
Если в некоторой точке цикла выполнение дальнейших операторов данного витка становится бессмысленным, то чтобы вернуться на начало цикла и организовать его следующий виток используется оператор Продолжить.
Оператор Прервать позволяет закончить выполнение цикла, даже если условие цикла истинно.
На этом мы завершаем наше первое знакомство с разработкой на внутреннем языке 1С.
А как же Hello World? Мы же его еще не написали, да? Да, но ничто не мешает вам сделать это самостоятельно, т.к. знаний УЖЕ достаточно. Ну а если не получается, то можете подглядеть сюда.
Далее мы продолжим изучать разработку на 1С, поэтому оставайтесь на связи и не пропустите следующую статью 😉

PDF-версия статьи для участников группы ВКонтакте
Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.
Статья в PDF-формате
Вы можете скачать эту статью в формате PDF по следующей ссылке:Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.
Комментарии / обсуждение (4):
Статья для тех кто приступает к изучению языка платформы 1С – полезная. Но видимо автор очень торопился…
1.Синтаксическая ошибка: “по обной ветке”
2.Как правило в том контексте пишут не “конвертирует текущее значение” а “инвертируем текущее значение”.
3.В описании условного оператора нет описания ИначеЕсли, хотя во втором примере он наглядно продемонстрирован.
Артем Артемов
1 и 2 опечатки. Исправим, большое спасибо.
С 3 вроде все понятно:
“Есть такой оператор Если, после которого необходимо описать некоторое условие (само условие может быть достаточно большим). После условия следует слово Тогда и выполняемые операторы. Далее может следовать ключевое слово Иначе и серия других операторов. Вся конструкция обязательно завершается ключевым словом КонецЕсли, после чего следует знак точки с запятой.” За этим сразу наглядные примеры с ИначеЕсли. Подумаем как сделать понятнее. Спасибо.
Можно было бы в начале привести снимок программного модуля с очень кратким примером переменных, процедур, функций и разделом основной программы.
Тогда новичкам будет понятнее то, что потом объясняется.
Описание формата внутреннего представления данных 1С в контексте обмена данными
Фирма 1С не рекомендует использовать внутреннее представление данных для любых целей, которые отличны от обмена с 1С:Предприятием 7.7. Но сама возможность заглянуть на «внутреннюю кухню» платформы с помощью функций ЗначениеВСтрокуВнутр(), ЗначениеВФайл(), ЗначениеИзСтрокиВнутр() и ЗначениеИзФайла(), дала возможность сообществу программистов 1С разработать новые приемы разработки и анализа. Так, именно на использовании внутреннего представления был построен алгоритм «быстрого массива», который позволяет практически мгновенно создать массив в памяти на основании строки с разделителями. С помощью разбора внутреннего представления можно «на лету» программным кодом выполнить анализ обычной формы и даже сделать редактор графической схемы. Во внутреннем формате сохраняют свои данные между сеансами различные популярные внешние обработки. А еще это возможность сделать быстрый обмен с внешними системами.
Скачать файлы
.epf 14,23Kb
Зачем нужна эта статья?
Несколько лет назад я работал над проектом логистического ПО. И у нас был расчетный сервер, который на вход получал из торговой 1С сотни точек пути с графиками их работы, тысячи заказов на доставки с параметрами совместимости товаров для возможности совместной доставки, описание парка из десятков машин с различными параметрами и разными тарифами; а на выход выдавал наиболее оптимальное решение по критериям времени/денег/выполнимости в виде сложной древовидной структуры сформированных маршрутов. Объем потока информации был огромен и важным стал вопрос формата для выполнения обмена.
В первых релизах я пробовал обмен сначала с помощью XML, а потом и на JSON. Но слишком много времени уходило на конвертацию. Попробовал вместо типовых функций написать собственный «велосипед» с потоковым парсингом, но и тут получил лишь незначительный выигрыш.
Тогда я вспомнил про внутреннее представление. По моему ТЗ наш сишник сделал задачу парсинга «формата 1С» на расчетном сервере и в результате у нас получилось практически мгновенное превращение расчетного задания в текст для сервера, а затем не менее быстрое превращение результатов расчета в объект, готовый для демонстрации логисту на карте.
К сожаления, я тогда не сохранил свои наработки, так как посчитал, что у нас весьма экзотический случай и ценность для других данной темы не высока. И был крайне удивлен, когда на днях на Toster.ru (сайт вопросов-ответов) Общие правила и Рекомендации.
Строка внутреннего представления данных, получаемая с помощью ЗначениеВСтрокуВнутр() или ЗначениеВФайл() — это текст, обычно в формате UTF-8. Отличительная особенность от других текстовых форматов — синтаксис фигурных кавычек. Описание данных, которые представлены внутренним форматом 1С, начинается с открывающейся фигурной скобки «». Содержимое между фигурными скобками — это инструкции парсеру данных (далее — параметры). Если параметров больше одного, то они разделяются символом запятой. Первый параметр — это всегда один символ признака типа в двойных кавычках. Остальные параметры — это или уточнение типа, или указание на количество элементов, или указание на конкретные элементы из множества, или описание значения свойств, или другие инструкции парсеру по сборке.
По моему опыту, для полноценного обмена вполне достаточно описать такие типы как Число, Строка, Дата, Булево, Массив, Соответствие и Неопределено. Эти простые типы, которые интуитивно понятны современным системным и веб-программистам, в которых те увидят аналогии с базовыми типами в своих языках. Тип Структура — это частный случай Соответствия и с точки зрения внутренней структуры они полностью идентичны, а потому я его не рекомендую. СписокЗначений, ТаблицыЗначений и особенно ДереваЗначений — будут мало интересны из-за своей направленности на интерактивную работу с пользователем, а потому имеющие сложную внутреннюю структуру, которую запросто можно повторить многомерным Массивом или Массивом Соответствий. Ссылочные типы я бы тоже не рекомендовал использовать из-за избыточности представляемой информации — те же код/номер или УИД из ссылки будут намного компактнее.
Важные замечание из моего опыта парсинга:
- Регистр символов для обозначения типов (первый параметр) имеет важное значение!
- Игнорируются все пробельные символы (пробелы, табуляции, переносы строк) в произвольных местах между фигурными скобками и параметрами — т.е. руки развязаны и для эстетов, и для любителей покомпактнее.
- Выражения в неправильном формате, но с правильной структурой (ошибочный тип или идентификатор) распознаются как Неопределено!
- Нарушение структуры или неправильные типы параметров на предопределенных позициях приводят к выводу ошибки: «Ошибка преобразования: Ошибка формата потока»
- Лишние параметры игнорируются и не считаются нарушением структуры. Для примера — это все равно будет число 5.
Примитивные типы.
| Тип | Шаблон | Описание типа и формат значения | Примеры |
|---|---|---|---|
| Null | Без значения. Символизирует пустые значения, полученные из запроса как результат соединения или обращения к вложенным полям пустых ссылок через точку. | ||
| Неопределено | Без значения. Символизирует неинициализированные переменную или свойство объекта составного типа. | ||
| Число | > | Тип для описания вещественных чисел. Во второй позиции представления находится число в десятеричной системе счисления. При наличии дробной части разделителем выступает символ точки. | |
| Строка | «> | Строковое значение заключается в двойные кавычки. Символы экранирования не используются за исключением двойного вывода самой двойной кавычки, если она должна быть в строке. | = тест «> = «> |
| Булево | > | Для False/Ложь значение равно 0, а для True/Истина будет равно 1 | |
| Дата | > | Значение даты указывается с точностью до секунды в формате YYYYMMDDhhmmss. В 1С пустая дата — это 1 января 1 года н.е. | = пустая дата = 20:34:50 30 августа 2019 года |
Примечание 1. Еще раз обращаю внимание на замечания из предыдущего пункта. Так при парсинге из выражения — мы получаем цифру 7, но если напишем — то в результате будет значение Неопределено!
Примечание 2. С точки зрения логики внутреннего формата к примитивным типам так же относятся Типы (идентификаторы классов данных). Описание Типа состоит из двух параметров — «T» и внутреннего идентификатора. Примеры: тип Строка = , тип Число = , тип Массив = .
Коллекции.
Чтобы описать коллекцию значений, необходимо в качестве первого параметра указать символ типа «#», а вторым параметром записать идентификатор типа. Для коллекций (также как и для Ссылок, Объектов, Списков, Выборок и так далее), в качестве идентификатора используется 32-разрядное 16-ричное число. Регистр для символов A-F (цифры с 10 по 15) не имеет значение — хоть большие и маленькие вперемешку. Но важно наличие разделение дефисами на 5 групп символов по правилу 8-4-4-4-12 и отсутствие пробельных символов внутри идентификатора — нарушение этих правил приводит к ошибке потока.
Для коллекций значений предопределены (со времен 7.7, а может даже раньше) следующие идентификаторы:
| Тип | Идентификатор |
|---|---|
| Массив | 51e7a0d2-530b-11d4-b98a-008048da3034 |
| Структура | 4238019d-7e49-4fc9-91db-b6b951d5cf8e |
| Соответствие | 3d48feae-a9c6-4c5a-a099-9eb6477630c6 |
| СписокЗначений | 4772b3b4-f4a3-49c0-a1a5-8cb5961511a3 |
| ТаблицаЗначений | acf6192e-81ca-46ef-93a6-5a6968b78663 |
| ДеревоЗначений | e603c0f2-92fb-4d47-8f38-a44a381cf235 |
| ФиксированныйМассив | 4500381b-db30-4a10-9db4-990038032acf |
| ФиксированнаяСтруктура | 3ee983d7-ace7-40f9-bb7e-2e916fcddd56 |
| ФиксированноеСоответствие | 220455ea-6c85-4513-996f-bbe79ed07774 |
Примечание. Если заменить символ «#» на «T», то получим вместо объекта значения объект его типа.
Если использовать параметр «T» и идентификатор, то получим значение типа Тип:
Массив.
Это популярный во всех языках программирования тип, который предназначен для хранения некоторого множества данных с доступом по индексу. Так как язык 1С не является строго типизированным языком, то и массив не требует описания типа своих элементов и даже допускается размещение в едином массиве значений различных типов.
Структурно внутреннее описание массива состоит из 3 параметров — «#», 51e7a0d2-530b-11d4-b98a-008048da3034 и содержимого массива в фигурных скобках. Содержимое в свою очередь состоит из количества элементов массива, а потом перечисления этих элементов через запятую, в формате, который соответствует их типу.
Для пустого массива содержимое будет . Если в массиве только одно число 12, то его содержимое равно >. Эти же примеры полностью:
Примечание. Практика показала, что точное указание количества на платформах 8.х не важно. Главное написать в первой позиции описания какое-то целое число равное или больше нулю, а далее платформа будет создавать Массив по фактически перечисленным элементам; и при вызов у нового объекта метода Количество() вернет верное фактическое значение. Указание в позиции количества любого значения кроме положительного целочисленного значения или нуля будет приводить к ошибке чтения потока, а если указать отрицательное число — даже к краху платформы с записью дампа.
Создание Массива (с игнорированием указанного количества)
Структура и Соответствие
Структура и Соответствие — это типы, которые позволяют получать некие значения по указанным ключам. Особенностью этих коллекций является то, что это фактически множество пар Ключа и Значения, которые можно обойти с помощью итератора в цикле. Внутреннее представление отражает эту особенность — описание состоит из троих параметров — «#», идентификатора (4238019d-7e49-4fc9-91db-b6b951d5cf8e или 3d48feae-a9c6-4c5a-a099-9eb6477630c6) и содержимого в фигурных скобках. Содержимое в свою очередь состоит из количества пар Ключ-Значение, а потом перечисления этих пар через запятую. Описывается пара Ключ-Значение с помощью фигурных скобок, где указаны через запятую значение Ключа и значение Значения. Пример описания пары Ключ-Значение вида имеет вид: ,>
Примечание 1. Точно так же, как и в массиве, не важно какое именно целочисленное количество вы укажите (или ноль) — при парсинге платформа игнорирует ваше число и для созданного объекта указывает реальное фактическое. Указание любых других значений в позиции количества приведет к ошибке потока. Только в отличии от массивов — тут можно указывать отрицательное количество и это нормально отработает и не приведет к краху платформы.
Пример создания Соответствия с игнорированием ошибок
Примечание 2. И еще важный момент — это соблюдение уникальности ключей. Если в описании сделать несколько пар Ключ-Значение, то в результирующую структуру попадет только один из них. В моих экспериментах — это была всегда первая найденная в текстовом описании пара, но не рекомендую надеяться, что так будет во всех версиях платформы.
Фиксированные массив, структура и соответствие
Как уже понятно из названия — это типы, которые не поддерживают изменение после своего создания. Они предназначены для использования в качестве параметров сеанса и в некоторых сценариях работы с формами — т.е. вероятнность встретится с ними в «выгрузке из 1С» очень мала.
С точки зрения описания внутреннего формата фиксированные коллекции полностью идентичны своим обычным аналогам. Буквально стоит заменить в описании массива, структуры или соответствия идентификатор на нужный эквивалент и получаем уже фиксированную версию объектов.
Примечание 1. Все мои замечания относительно количества элементов остаются в силе. Все идентично вплоть до того, что отрицательное количество нормально принимается фиксированными структурой и соответствием, а попытка использовать его для создания фиксированного массива вызывает крах платформы.
Примечание 2. Кстати, на будущее получаем лайфхак. Средствами платформы можно преобразовывать только пары Структура с Фиксированной Структурой и Соответствие с Фиксированным Соответствием. Для остальных комбинаций нужно делать циклы и перекидывать пары Ключей-Значений в новый объект. С помощью внутреннего представления и замены идентификатора можно преобразовать намного быстрее, да еще и вернуть результат в ту же переменную 🙂
Валидное описание Структуры с легкостью превращаем в описание Фиксированного Соответствия
Список значений
Это особый вид коллекции значений, который предназначен для формирования вариантов выбора для элементов форм или может самостоятельно выводится на форму или даже в отдельное окно. Интересно, что один заранее сформированный список значений может использоваться для формирования доступных значений в другом списке значений, который интерактивно редактирует пользователь. Так же с помощью специального объекта ОписаниеТипов можно ограничить диапазон допустимых значений (только справочник Склады, или только справочники Покупатели и Физлица, или только строки и числа с точностью до 2 знака). Еще значения иногда могут иметь вид непонятный для пользователей (к примеру, вложенные массивы или коды операций), то в списке поддерживается отдельное хранение понятного строкового представления. Так же для каждого значения можно назначить вывод пиктограммы (из библиотеки предопределенных или из конфигурации). Для необходимости отметить в списке некоторые из значений предусмотрено дополнительное поле, которое при показе связывается с флажком. Все вышеперечисленные возможности ожидаемо отразились на структуре хранимого значения.
Как и другие коллекции, данная состоит из троих параметров — «#», идентификатора (4772b3b4-f4a3-49c0-a1a5-8cb5961511a3) и содержимого в фигурных скобках. Содержимое списка значений состоит из таких элементов: число 6 (или другое целое число большего значения), идентификатор 1e512aab-1b41-4ef6-9375-f0137be9dd91 (можно любой другой), число 0 (или 1), число 0 (или любое другое целое число), описание перечня элементов списка в фигурных кавычках (см. ниже), описание доступных типов или можно так , признак наличия ограничивающего списка — 0 если нет и 1 если да. Если есть ограничивающий значения список, то добавляется еще один параметр — описание вложенного списка (то описание, которое начинается с 6).
Описание перечня элементов списка состоит из количества этих элементов (на самом деле подходит любое целое число) и через запятую описание строк списка в фигурных скобках. Строка списка состоит из двух параметров: идентификатор 1e512aab-1b41-4ef6-9375-f0137be9dd91 (если указать другой, то при парсинге этот элемент будет проигнорирован; при этом тот идентификатор, который был ранее после числа 6, может отличаться) и описание элемента списка в фигурных скобках.
Элемент списка состоит из таких параметров: текстовое описание элемента, отметка выбора (0 — нет, 1 — да), полное описание значения (если там был список, то описание начинается с «#»), описание пиктограммы (для пустого значения: ,»»,-1,-1,0,0,»»> ). Далее еще могут быть параметры, но их отсутствие ни на что не влияет.
Пример. Если нужно сделать список значений из пары элементов 100 и 200, один из которых с пометкой, то в результате получаем такое описание:
< 1e512aab-1b41-4ef6-9375-f0137be9dd91, 0, , ,"",-1,-1,0,0,""> > >, < 1e512aab-1b41-4ef6-9375-f0137be9dd91, 1, , ,"",-1,-1,0,0,""> > > >, ,0> >
Парсинг примера Списка Значений
Примечание. Может показаться, что 1e512aab-1b41-4ef6-9375-f0137be9dd91 из описания строки — это идентификатор строки списка, но на самом деле идентификатором строки является c27d99e0-2f53-11d5-a3be-0050bae0a776. Что же означает первый идентификатор (который после числа 6), я так и не смог выяснить.
Тип строки списка значений
Таблица значений
Особенность этого вида коллекций заключается в наличии колонок. По-умолчанию, в колонку можно писать значения любого типа, но при необходимости можно ограничить допустимые типы. Еще каждой колонке можно назначить заголовок и ширину для красивого вывода на форму или для открытия в отдельном окне. В каждой строке таблицы можно заполнять ячейки соответствующих колонок, а явно неинициализированные ячейки примут значения по-умолчанию для типов своих колонок (если типы не заданы, то будет Неопределено). А еще таблицам значений можно создавать произвольные индексы по колонкам для дальнейшего быстрого поиска/сортировки. Эти особенности отразились на структуре хранимого значения.
Как и другие коллекции, данная состоит из троих параметров — «#», идентификатора (acf6192e-81ca-46ef-93a6-5a6968b78663) и содержимого в фигурных скобках. В содержимом таблицы первым параметром должно быть целое число 9 (на самом деле от 7 и выше), на втором месте блок с описанием колонок, на третьем месте блок с описанием строк, на четвертом месте блок с описание индексов.
В блоке описания колонок первым параметром идет количество колонок (тут важно, чтобы было реальное количество колонок!), а далее через запятую блоки описания конкретных колонок. В блоке описания конкретной колонки пять параметров — порядковый индекс (отсчет от нуля; порядок не обязательно прямой, но далее в описании строк нужно не ошибиться с позицией для размещения значения), внутренний идентификатор колонки по правилу наименования переменных (для обращения из программного кода), описание типа колонки (можно просто ), строка с заголовком для вывода на формы, ширина колонки для вывода на формы.
В блоке описания строк сначала идет магическое целое число, которое при значениях меньше 2 не создает строки у результирующего объекта ТаблицаЗначений (а при значениях выше не заметил никаких различий в поведении). Далее вторым параметром идет указание сколько колонок из описанных в блоке колонок требуется взять для создания результирующего объекта (т.е. можно описать больше, но взять не все — и они не будут доступны через свойство-коллекцию Колонки у результирующего объекта); после чего указываются через запятую парами индекс колонки для описания позиции значения из расположенного ниже описания строки и соответствующий ей индекс колонки из описания колонок. Таким образом для одной колонки получим
Примечание. Если напутать порядок индексов для колонок и позиций в данных, то результат будет не совсем ожидаемый (я смог добиться результата, когда у таблицы из троих колонок в коллекции колонок было три идентичных описания, по которым получали одно и тоже значение, но если обратится через индексы, то можем прочитать «скрытые» колонки). Возможно эту фичу можно использовать для быстрого создания таблиц, где разным колонкам нужно дать одинаковое значение, но такую таблицу лучше не редактировать так как тут есть опасность в том, что, изменив значение в одной из колонок, получим изменение в других (разные колонки будут ссылаться на одну и туже ячейку в памяти).
Продолжаем описание блока строк. После перечисления всех нужных нам колонок, открывается новый блок — с содержимым строк. В этом блоке первым параметром снова идет магическое целое число, значение которого ни на что не влияет и может быть даже отрицательным (обычно 1). Вторым параметром блока содержимого строк идет число количества строк — важно указать правильное количество, так как при указании меньшего значения, вы столько и получите (потеряв остальные), а при указании большего числа получите только ошибку формата потока на попытке парсинга такого описания. После числа количества идут через запятую блоки самих строк, после которых указываются еще два числа — максимальный индекс использованной колонки и максимальный индекс строки (индексы начинаются с нуля и потому будут меньше количества на единицу) — хотя практика показала, что для корректного парсинга важно просто поставить там хоть какие-то два числа, хоть нули.
Блок строки таблицы снова открывает какое-то магическое целое число, которое просто должно быть (а дальше хоть в каждой строке свое и даже отрицательное подходит). Вторым параметром указывается индекс строки (практика показала, что этот параметр при загрузке игнорируется — можно хоть одинаковый указать во всех строках). Третьим параметром указывается количество описываемых значений в данной строке — важно, так как количество значений в строке может быть меньше или больше чем колонок (если меньше, то в результирующей таблице в ячейках получим значения по-умолчанию для типа колонок, а если больше чем сделано связок с колонками — лишние значения будут просто проигнорированы). После указания количества значений строки идет перечисление этих значений через запятую, а замыкает строку ноль — число без которого происходит ошибка парсинга (если вместо нуля другое число — тоже ошибка).
Третий блок описания таблицы значений — это блок индексов. По моему мнению, тут не нужно заморачиваться. Программист 1С сам должен решать, что делать с полученной из внешнего источника таблицей значений — если там понадобятся индексы, то пусть он их сам создаст. Если же веб-программисту для загрузки на сайт отдали описание с блоком индексов — при написании своего парсинга проигнорируйте тот блок. Блок без индексов выглядит так — .
Пример. Теперь можно создать валидное представление таблицы значений. Для простоты возьмем выгрузку прайса, где есть только артикул и цена. Выйдет что-то такое:
"Артикул",,"",0>, "Цена",,"",0> >, , , 0>, , , 0>, , , 0> >, 1,2>, >>
Парсинг примера Таблицы Значений
Дерево значений
Дерево Значений — это коллекция значений, которая очень похожа на Таблицу Значений. Принципиальное различие — это возможность подчинять строки друг к другу. Т.е. у каждой строки помимо свойств для хранения своих значений еще есть доступ к множеству описаний подчиненных строк. Второе отличие от таблицы — отсутствие индексов. В результате внутреннее представление получилось очень похожее на описание Таблицы Значений, но с небольшими различиями.
Как и другие коллекции, данная состоит из троих параметров — «#», идентификатора (e603c0f2-92fb-4d47-8f38-a44a381cf235) и содержимого в фигурных скобках. В содержимом первым параметром должно быть целое число 1 (на самом деле любое, даже отрицательное), на втором месте блок с описанием колонок, на третьем месте блок с описанием строк.
В блоке описания колонок первым параметром идет количество колонок (тут важно, чтобы было реальное количество колонок!), а далее через запятую блоки описания конкретных колонок. В блоке описания конкретной колонки пять параметров — порядковый индекс (отсчет от нуля; порядок не обязательно прямой, но далее в описании строк нужно не ошибиться с позицией для размещения значения), внутренний идентификатор колонки по правилу наименования переменных (для обращения из программного кода), описание типа колонки (можно просто ), строка с заголовком для вывода на формы, ширина колонки для вывода на формы.
В блоке описания строк сначала идет магическое целое число, которое при значениях меньше 2 не создает строки у результирующего объекта ДеревоЗначений (тут все как у ТаблицыЗначений). Далее вторым параметром идет указание сколько колонок из описанных в блоке колонок требуется взять для создания результирующего объекта, после чего указываются через запятую парами индекс колонки для описания позиции значения из расположенного ниже описания строки и соответствующий ей индекс колонки из описания колонок (снова все идентично ТаблицеЗначений — подробности смотрите ранее в соответствующем разделе).
После перечисления всех нужных нам колонок открывается новый блок — с содержимым строк. В этом блоке первым параметром снова идет магическое целое число, значение которого ни на что не влияет и может быть даже отрицательным (обычно 1). Вторым параметром блока содержимого строк идет число количества строк — важно указать правильное количество, так как при указании меньшего значения, вы столько и получите, потеряв остальные, а при указании большего числа получите только ошибку формата потока на попытке парсинга такого описания. После числа количества строк через запятую идут блоки самих строк, после которых указываются еще два числа — максимальный индекс использованной колонки и максимальный индекс строки (индексы начинаются с нуля и потому будут меньше количества на единицу) — хотя практика показала, что для корректного парсинга важно просто поставить там хоть какие-то два числа, хоть нули (снова все идентично ТаблицеЗначений).
Блок строки таблицы снова открывает какое-то целое число (значение не важно, как и в ТаблицеЗначений — обычно 2). Вторым параметром указывается индекс строки (практика показала, что этот параметр при загрузке игнорируется — можно хоть одинаковый указать во всех строках). Третьим параметром указывается количество описываемых значений в данной строке — важно, так как количество значений в строке может быть меньше или больше чем колонок (если далее указать не то количество значений как мы тут объявили, то получим ошибку парсинга). После указания количества значений строки идет перечисление этих значений через запятую. Потом идет признак наличия подстрок: 0 — нет подстрок и на том описание блока строки закрывается, 1 — подстроки есть и далее следует еще один параметр с блоком описания этих подстрок.
Пример. На практике все довольно просто. Пусть мы хотим описать состав склада по категориям: у нас есть какие-то запчасти в количестве 1000 штук и бытовая техника из 100 изделий, где 10 видов утюгов, 20 стиральных машин, 30 холодильников и 50 смартфонов, из которых 10 моделей айфонов и 40 — андроидов. Описание дерева значений получается таким:
,"",0>, ,"",0> >, , , 0 >, , , 1, , , 0>, , , 0>, , , 0>, , , 1, , , 0>, , , 0> > > > > >,1,7 > > >
Парсинг примера Дерева Значений
Ссылочные типы.
Если в выгрузке «формата 1С» вам попадается сущность вида: , : > , то знайте — вам передали значение ссылочного вида, назначение которого ссылаться на конкретное значение в базе данных. Если вы запрашиваете данные по задолженностям, то вам запросто могут выдать таблицу, где вместо кодов клиентов и номеров документов будут именно такие значения.
В представлении ссылочного типа первым идентификатором указывается идентификатор вида данных, который хранится в конфигурации 1С, а второй идентификатор — то указатель внутри таблицы данных, которая связана с указанным видом данных. Еще в представлении есть число — это суффикс физической таблицы, которая создается в СУБД для хранения содержимого данного вида данных.
Сформировать подобное значение можно и без функции ЗначениеВСтрокуВнутр(). Для того нужно выгрузить конфигурацию и выбрать для интересующего вида данных идентификатор для ссылочного типа (там могут быть и другие идентификаторы — объектов, менеджеров, выборок и т.д.). Далее с помощью тут подробно про форматы идентификаторов в 1С).
Давайте попробуем получить ссылочное представление для Доллара из справочника Валюты. Начнем с выгрузки конфигурации (стандартная выгрузка в файлы или с помощью v8unpack.exe) и получения идентификатора ссылочного типа справочника Валюты — это 3a87ef2a-9de1-4d34-9e5f-3c8cdf53b3ab
скриншот файла описания справочника Валюты
Далее узнаем, что в СУБД суффикс справочника валют будет 53
