Длина кода в 1с это
Вопрос оказался интереснее, чем казалось вначале. Сначала немного общеизвестных фактов.
- каждый справочник хранится в отдельной таблице;
- таблица может быть либо DBF-файлом, либо таблицей на SQL-девайсе;
- есть понятие пользовательского кода и внутреннего идентификатора;
- пользовательский код:
- изменяется пользователем или алгоритмом на 1Сике;
- может быть строкой или числом;
- если код является строкой, то в Предприятии 7.7 можно использовать 98 символов
- максимальная длина - 24 символа;
- можно установить контроль уникальности, а можно и не устанавливать;
- может быть уникальным в пределах одной группы или в пределах всего справочника;
- является системным реквизитом 1С:Предприятие
- не виден пользователю или программисту;
- является уникальным в пределах всего справочника числом, каждый вызов метода Новый увеличивает это число на 1;
- ID в Предприятии 7.7 записывается по основанию 36;
- длина ID - 6 символов (всего 9 символов, 3 используется распределеннкой);
В ходе обсуждения выяснилось, что вопрос можно рассматривать с трех сторон.
Итак, вопрос "сколько элементов по максимуму влезает в 1С" можно разбить по крайней мере на три подвопроса:
Сколько раз можно вызвать метод Новый()
1. Рассмотрим пользовательский код.
Предположим, что контроль уникальности кодов включен. Предположим, что включена уникальность кодов во всем справочнике. Максимальное число элементов, которые можно записать с помощью самого длинного кода = 98^25-1 что примерно равно 6.03E+49.
Где 98 - количество допустимых символов в коде, а 25 это максимальная длина кода + 1.
Получается, что пользовательского кода - хватит на очень много. Если задать уникальность в пределах группы - то будет еще на 10 порядков больше.
Рассмотрим справочники, которые предлагаются по умолчанию. Длина кода по умолчанию - 5, включено числовое представление. Обычно в типовых конфигурациях торговли включена уникальность в пределах всего справочника. Это значит, что всего можно ввести 99999 элементов.
Обычно в типовых конфигурациях бухгалтерии включена уникальность в пределах подчинения и используется 3 уровня вложенности. Это значит, что максимальное число элементов может достигать (10^5-1)^3 это примерно равно 10^15.
Вывод по пункту 1: вроде пока достаточно. Если достигли максимального значения кода, то всегда можно увеличить длину кода.
2. Рассмотрим ID
Поскольку ID уникален в пределах всего справочника, то максимальное элементов, кодируемое полем ID в 7.7 = 36^7-1 это равно 78 364 164 095. Т.е. около 80 миллиардов элементов.
Где 36 - количество допустимых символов в коде, а 7 это максимальная длина кода + 1.
Вывод по пункту 2: максимальное количество элементов уже вполне представимое. Оно конечно больше, чем 99999, предлагаемых в Торговле по умолчанию, но уже существенно меньше максимального числа элементов, для
справочников из типовой Бухгалтерии.3. Попробуем представить что же такое 80 миллиардов элементов.
3.1. . с точки зрения времени.
Пусть за одну секунду создается один новый элемент справочника и еще за одну секунду удаляется предыдущий элемент (чтобы диск не переполнился). Тогда для того, чтобы достигнуть максимального значения поля ID потребуется около 4970 лет непрерывной работы.
3.2. . с точки зрения необходимого пространства на диске.
Пусть имеется справочник с кодом, длиной 5 символов и наименованием, длиной 25 символов (значения по умолчанию). Чтобы достигнуть максимального значения ID установим 10 уровней вложенности .
Размер записи этого справочника в 4м релизе 7.7 = 56 байт. Для хранения 80ти миллиардов таких элементов потребуется около 4087 GB на диске. Т.е. около 4 терабайт (это не считая индексов).
Выводы:
а) в 1С:Предприятии есть системное ограничение на максимальное количество элементов. В справочнике принципиально не может содержаться более 80 миллиардов элементов.
б) вряд ли кто реально столкнется с этим ограничением в реальном будущем.
в) ограничение на максимальное количество элементов не является принципиальным. 1С достаточно легко сможет увеличить длину поля ID в любое время.
г) код, вводимый пользователем не является ограничением на максимальное количество элементов.
Сколько записей может храниться в базе
1. DBF
Максимальное количество одновременно хранимых записей для DBF, указанных в документации Clipper'а и FOX'а - 1 миллиард. 1С использует библиотеку CodeBase. Думаю, что и там такое же ограничение.
2. SQL
В SQL нет ограничения на количество записей. Там есть ограничение на количество страниц в пределах одного устройства (device). Каждая страница может содержать несколько записей. Поскольку параметров много, то для SQL сложно дать точный максимум записей. Мне хотелось бы предложить методику и очень примерно оценить верхний предел для типовых справочников.
Максимальное количество страниц для MS SQL - 16 777 216. Размер каждой страницы:
- для MS SQL 6.5 = 2 Kb минус 32 байта на заголовок = 2016;
- для MS SQL 7.0 = 8 Kb минус 96 байтов на заголовок = 8096.
Кроме того MS SQL хранит служебную информацию о начале записи в странице. Но я не буду учитывать эти значения. Оценка максимума усложняется еще тем, что индексы хранятся в на том же устройстве, что и база данных. А максимальный размер устройства задается администратором.
Итак, введем параметр "Количество записей в странице" (Кзап),
Кзап = int(размер_страницы / размер_записи),
размер_записи равна сумма длины полей, определенных в конфигураторе (можно посмотреть в DD-файле).
Для справочника с параметрами по умолчанию размер_записи = 56 байт. Максимальное количество записей с параметрами по умолчанию:
- Для SQL 6.5 около 0.6 миллиардов элементов;
- Для SQL 7.0 около 2.5 миллиардов элементов.
Размер_записи для справочника контрагентов в типовой Бухгалтерии = 448 байт. Максимальное количество контрагентов:
- Для SQL 6.5 около 0.06 миллиардов контрагентов;
- Для SQL 7.0 около 0.3 миллиардов контрагентов.
Выводы:
Для DBF - максимальное количество записей 1 млрд., для SQL - максимальное количество записей зависит от размера элемента справочника и может изменяться от 16 777 216 до нескольких миллиардов.
Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.Планируется в версии 8.3.22 Пробовать
В версии 8.3.22 у расширений конфигурации появятся новые возможности.
Возможность изменения параметров номеров и кодов объектов
Изменение длины, типа и других настроек кода/номера объектов с помощью расширений конфигурации было невозможно. Если менять это в самой конфигурации – то надо включить в ней возможность изменений, что усложнит обновление конфигурации на новую версию.
В версии 8.3.22 появится возможность изменения этих параметров в расширениях у ряда объектов метаданных. Это позволит с помощью расширений реализовать новые сценарии. Например, увеличить длину номера документа, если в текущих условиях проводится так много документов, что их номера могут не поместиться в текущую длину номера. Или поменять тип нумератора с числа на строку, если бизнес-процессы требуют добавления к номеру документа строкового префикса.Настройки нумерации
Для объектов типа «Документ», «Бизнес-процесс», «Задача» и «Нумератор» в расширениях можно будет изменять свойства нумерации.
Можно будет увеличивать значение свойства «Длина номера». При изменении свойства несколькими расширениями конфигурации длиной номера будет наибольшее значение.
Также можно будет задавать значение свойства «Тип номера». Если тип номера в конфигурации и расширении отличаются – результирующим типом будет «Строка», т.к. это обеспечит хранение и строковых значений, и чисел (преобразованных в строку).
Будет разрешено задавать значение свойства «Допустимая длина номера», «Периодичность» и «Контроль уникальности». При изменении свойств несколькими расширениями значение свойства будет браться из последнего расширения в списке.
Нумераторы
В расширениях можно будет создавать свои нумераторы. Будет разрешена установка и собственным, и заимствованным документам как собственных, так и заимствованных нумераторов из конфигурации.
Для объектов типа «Планы обмена», «Справочники», «Планы видов характеристик», «Планы счетов», «Планы видов расчета» в расширениях можно будет увеличивать значение свойства «Длина кода».
Для объектов типа «Справочники» и «Планы видов расчета» в расширениях можно будет изменять значение свойства «Тип кода».
Если тип кода в конфигурации и расширении отличаются – результирующим типом будет «Строка», т.к. это обеспечит хранение и строковых значений, и чисел (преобразованных в строку).
Длина наименования
Для объектов типа «Планы обмена», «Справочники», «Планы видов характеристик», «Планы счетов», «Планы видов расчета», «Задачи» в расширениях можно будет увеличивать значение свойства «Длина наименования».
При изменении свойства несколькими расширениями конфигурации длиной наименования будет наибольшее значение.
Доступ к параметрам расширений конфигурации без установки в информационную базу
Разработчикам конфигураций иногда бывает нужно получить доступ к параметрам расширений конфигурации без их установки в информационную базу. В случае если расширение меняет структуру данных, установка расширения требует перевода базы в монопольный режим и реструктуризации данных (что сопряжено с неудобствами для пользователей). А разработчику может понадобиться узнать, меняет ли расширение структуру данных. Или получить хэш-сумму, которая используется в настройке профилей безопасности, до установки расширения.
В версии 8.3.22 в метод МенеджерРасширенийКонфигурации.Создать() будет добавлен необязательный параметр «Данные» типа ДвоичныеДанные. В этот параметр передается содержимое файла расширения. Для расширения, не установленного в конфигурацию, будут доступны свойства Версия, Имя, Назначение, ОсновныеРоли, Синоним и ХешСумма. Метод ИзменяетСтруктуруДанных() вернет «Истина», если после установки расширение будет влиять на структуру данных конфигурации.
Сейчас для проверки расширения на изменения им структуры данных нужно установить расширение. Эта проверка может выполняться следующим кодом:
Раcш1 = РасширенияКонфигурации.Создать();
Раcш1.Записать(Новый ДвоичныеДанные("Раcш1.cfe"));
ИзменяетСтруктуруДанных = Раcш1.ИзменяетСтруктуруДанных();
Раcш1.Удалить();Новый вариант проверки будет выглядеть так:
Раcш1 = РасширенияКонфигурации.Создать(Новый ДвоичныеДанные("Раcш1.cfe"));
ИзменяетСтруктуруДанных = Раcш1.ИзменяетСтруктуруДанных();Проверка не потребует перевода конфигурации в монопольный режим и реструктуризации данных.
Справочники 1С — специализированный объект древа метаданных, который служит для хранения статичной информации справочного характера. Например, в типовых конфигурациях можно увидеть следующие виды: Контрагенты, Номенклатура, Сотрудники, Основные средства и т.д. Информация в справочниках, как правило, часто не изменяется. Справочники в дальнейшем используются практически во всех объектах учета как разрез учета или справочная информация.
Справочники в конфигураторе 1С 8
Ниже мы рассмотрим настройку и проектирование справочника из конфигуратора на примере справочника «Номенклатура».
Вкладка «Основные»
На вкладке «Основные» указывается имя, синоним, представление объектов, описание назначения.
Вкладка «Иерархия справочника»
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>Здесь устанавливается иерархичность справочника.
Иерархия в 1С 8.3 бывает двух типов — «групп и элементов» и «элементов«. Отличается тем, что в первом случае родителем (папкой) может быть только папка (группа), а во втором случае родителем может быть и элемент.
«Размещать группы сверху» — флаг отвечает за отображение групп в форме списка.
Также в настройках можно ограничить количество групп иерархии справочника соответствующей настройкой.
Вкладка «Владельцы»
Справочник может быть подчинен другому справочнику. С точки зрения конфигурирования 1С 8.3 это значит, что у подчиненного элемента становится обязательным реквизит «Владелец». Пример такой связи справочников в типовых конфигурациях «Номенклатура — Единицы Измерения», «Контрагенты-Договоры Контрагентов».
Владельцем справочника могут также быть следующие объекты метаданных: планы обмена, планы видов характеристик, планы счетов, планы видов расчета.
Вкладка «Данные»
Самая важная вкладка с точки зрения программиста. На ней указываются реквизиты справочника.
У справочника есть набор стандартных реквизитов, которые не редактируются программистом 1С 8.2, список их можно увидеть, нажав кнопку «Стандартные реквизиты»:
Остановлюсь на каждом подробнее:
- ЭтоГруппа — реквизит с типом булево, показывающий, группа это или элемент. Доступен только в иерархическом справочнике. Обратите внимание, значение этого реквизита невозможно изменить в режиме 1С: Предприятие.
- Код — реквизит, тип число или строка (как правило строка). Номер, присваиваемый системой автоматически. Как правило, рассчитывается как (предыдущий код + 1). Рекомендую использовать именно строковый тип, потому как сортировка числовых значений происходит не так, как нужно. Можно использовать как представление справочника в списке и в полях ввода. Как правило, используется для поиска элемента при вводе по строке. Если Вам нужно убрать поле Код, укажите в длине строки ноль.
- Наименование — реквизит, обязательный к заполнению, строкового типа. Максимальная длина строки — 150 символов. Можно использовать как представление справочника в списке и в полях ввода. Как правило, используется для поиска элемента при вводе по строке. Если Вам нужно убрать поле Наименование, укажите в длине строки ноль.
- Родитель — реквизит, имеющий тип СправочникСсылка.. Доступен только в иерархическом справочнике. Указывает на вышестоящего родителя в иерархии. Если Элемент или Группа находятся в корне справочника, указывается значение Справочник..ПустаяСсылка.
- Владелец — ссылка на элемент-владелец текущего элемента (группы) справочника. Доступен только в подчиненном справочнике 1С.
- ПометкаУдаления — реквизит с типом булево. Отвечает за отображение «пометки удаления» в системе. Помеченный на удаление элемент считается непригодным к использованию, однако на нём могут оставаться старые движения в документах.
- Ссылка — поле строкового типа. В этом реквизите хранится уникальный идентификатор объекта — GUID. То, что в системе мы видим в визуальном отображении под название «ссылка», — это всего лишь представление объекта. Невозможно изменить.
- Предопределенный — тип булево, отображает, является ли элемент предопределенным, об этом позже. Невозможно изменить.
На вкладке «Данные» так же указывается представление справочника в системе, до версии 8.2.16 представление могло быть лишь Кодом или Наименованием. В свежих версиях платформы (начиная с 8.3) представление можно описать самостоятельно в модуле менеджера с помощью обработчика «ОбработкаПолученияПредставления».
Вкладка «Нумерация»
Серия кодов — определяет, как нумеровать справочник, можно ввести нумерацию справочника в разрезе владельца. Например, у контрагента «Рога и копыта» будет иметься своя нумерация договоров — «1, 2, 3» и тд.
Вкладка «Формы»
Тут описываются формы для справочника. Если конфигурация запускается как в обычном, так и управляемом режиме, тогда вкладок с формами по умолчанию будет две: «основные» и «дополнительные» — для обычного и управляемого приложения разные.
На этой странице есть немаловажное свойство справочника — «Ввод по строке«. Это очень удобная функция 1С 8, позволяющая при заполнении данных в поле ввода не заходить в справочник, а набрать его наименование, код или т.п. и выбрать из выпадающего списка нужный элемент. Выглядит это так:
Вкладка «Прочее»
На вкладке можно получить быстрый доступ к основным модулям справочника — модулю объекта и модулю менеджера.
На странице можно также определить список предопределенных элементов справочника. Это элементы, которые невозможно удалить в режиме Предприятия. К предопределенным элементам можно обратиться в конфигураторе напрямую, по имени, например: Справочники.Номенклатура.Услуга.
На этой вкладке также определяется режим блокировки — автоматический или управляемый. Использование полнотекстового поиска, а также справочная информация о справочнике, доступная в режиме 1С: Предприятия.
Минивидео, как работать со справочниками:
Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путём последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск — например, сбалансированного дерева.
Если простым языком индекс похож на содержание книги, когда вам надо найти что-то в книге у вас два варианта:
1. Если содержания нет - просмотреть всю книгу с первой по последнюю страницу в поисках нужной главы. Повторять это для каждого запроса.
2. Зайти в содержание (индекс), найти быстро номер страницу нужной главы (адрес). Перейти на нужную страницу.
Понятно что второй способ занимает, особенно если книга большая*, намного меньше времени. А если повторять это многократно то время экономится глобально (читай - ресурсы сервера).
* - Важно! Если книга очень маленькая, то использование содержания (индекса) становится бесполезным и даже вредным, проще просмотреть две страницы и сразу выяснить искомую главу.
Как выглядят индексы в базе 1С
В файловом режим базы данных (*.1cd) индексы не увидишь, а вот если база в клиент-серверном варианте, то индексы выглядят в консоли СУБД примерно так:
Как добавить индексы в 1С
В базу 1С индексы могут быть добавлены двумя способами:
1. Платформой автоматически. Независимо от действий программиста, при создании объектов метаданных в дереве (справочники, документы, регистры), одновременно с созданием в БД соотвествущей таблицы (таблиц), платформа создает и индексы для этих таблиц.
2. Явным указанием программиста. Программист может частично управлять созданием индекса, в "свойствах" реквизита для этого выделен специальный элемент "индексировать":
Конкретно в этом случае не используется разделение данных и ОРРХ | ОРНР1 не будет. Значит будет создан индекс "Реквизит + Ссылка", включающий в себя целевой реквизит "вид номенклатуры" и еще колонку "ссылка", составной индекс по двум полям таблицы.
Справка 1С:
Кроме варианта "Индексировать" в данном свойстве для большинства объектов можно установить вариант "Индексировать с доп. упорядочиванием". Данный вариант предназначен, прежде всего, для использования в динамических списках.
В варианте "Индексировать" строится индекс непосредственно по реквизиту. Индекс также дополняется ссылкой, чтобы обеспечить определенный порядок записей в индексе при повторяющихся значениях реквизита.
В варианте "Индексировать с доп. упорядочиванием" индекс строится по реквизиту, а также по некоторому полю, которое обычно используется для упорядочивания объектов этого типа. Для справочника индекс в зависимости от основного представления дополняется кодом или наименованием. А для документа, индекс дополняется датой. Этот индекс также дополняется ссылкой.
Таким образом при определении варианта свойства Индексировать следует исходить из того, какие варианты выборки информации необходимо оптимизировать в первую очередь. Например, если требуется просмотр списка с отбором по реквизиту, то имеем смысл использовать вариант "Индексировать с доп. упорядочиванием". А если индекс нужен, например, только для поиска с помощью запроса объектов по данному реквизиту без упорядочивания, то лучше использовать вариант "Индексировать", чтобы создаваемые индекс требовал меньше ресурсов системы.
Есть еще один способ явно указать платформе что надо создать индекс, необходимо этот реквизит справочника включить в какой-нибудь "критерий отбора".
Есть еще один способ - добавить индекс в вашем запросе, используется для временных таблиц. Во время написания запроса пишем "ИНДЕКСИРОВАТЬ ПО" после которого перечислить поля, по которым нужно построить индекс. Например:
Поля, по которым происходит индексирование, должны находиться в списке выборки.
Можно ли обойти ограничения платформы по индексам
Ограничение платформы - 1С сама добавляет к вашему индексу дополнительные колонки, т.е. делает его составным. А вот если вы решили сделать составной индекс из нескольких реквизитов, то эта возможность наоборот отсутствует.
Частично можно обойти ограничение следующим образом. Вычислить имя таблицы, есть обработки которые показывают настоящие имена таблиц, создать запрос создания индекса, примерно такой:
Выполняем его в консоли СУБД, готово индекс добавлен и будет работать.
Есть проблема, при реструктуризации базы данных (например после изменения справочника) все те индексы, что Вы создадите скриптами самостоятельно будут удалены. Вам потребуется заново запустить эти скрипты после реструктуризации, например, добавив их в Jobs на сервере СУБД на ежедневный запуск.
Внимание! Прежде чем лепить свои индексы попробуй оптимизировать код запроса средствами 1С, возможно одно добавленное условие, или смена порядка, приведет к "попаданию в индекс" и запрос ускорится в разы! Также не забывай что у тебя есть способ указать для реквизита "индексировать".
Как обслуживать индексы в базе 1С
А надо что-то делать? Ведь индексы уже созданы автоматически? Да, надо. Необходимо еженедельно\ежедневно и в некоторых случая частично ежечасно обновлять данные в индексах, чтобы они работали действительно эффективно. Для этого существуют стандартные команды обновления и\или перестроения индекса которые необходимо отправлять СУБД. Как правило для этого создают регламентную работу на сервере СУБД и она выполняется автоматически.
В MSSQL это можно сделать одной мышью в "планах обслуживания" - создаем задачу, указываем базу - готово. Выглядит примерно так.
Штатная реиндексация в 1С
В конфигураторе через меню Администрирование - Тестирование и исправление, можно попасть в форму где можно выбрать работу по реиндексации текущей базы.
Для измерений, реквизитов и т.д. применяются условные имена Измерение1, Реквизит1 и т.д.
Для общих реквизитов, являющихся разделителями в режиме "независимо", будем использовать имена ОРНР (ОРНР1, ОРНР2, и т.д.).
Для общих реквизитов, являющихся разделителями в режиме "независимо и совместно", будем использовать имена ОРСР.
Если режим разделения не имеет значения, то для общих реквизитов, являющихся разделителями, будем использовать имена ОРР.
Если в конфигурации определены разделители, то в индексы может входит поле, которое содержит значение хэш-функции набора значений разделителей. Такое поле будем обозначать именем ОРРХ.
Те индексные поля, которые не являются обязательными приведены в квадратных скобках, а если в индексе присутствует набор однотипных полей, это описывается многоточием, например: Реквизит + Измерение1 + [Измерение2 +. ].Данным материалом следует руководствоваться при написании текстов запросов с целью оптимизации времени их исполнения.
Справочник
Основные индексы
[ОРНР1 + . +] Ссылка (Кластерный)
Всегда.
В индекс входят поля независимых разделителей, которые разделяют этот справочник.[ОРРХ | ОРНР1 +] Код + Ссылка
Свойство "Длина кода" не равно 0.
Если справочник разделяется одним независимым разделителем, тип которого не Строка, то индекс содержит поле этого разделителя.
Если тип разделителя - Строка, или разделитель независимый и совместный, или разделителей больше одного, то индекс содержит поле значения хэш-функции значений разделителей.
Это правило справедливо для всех индексов, в составе которых указано [ОРРХ | ОРНР1 +].[ОРРХ | ОРНР1 +] Наименование + Ссылка
Свойство "Длина наименования" не равно 0.
[ОРРХ | ОРНР1 +] Реквизит + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ОРРХ | ОРНР1 +] Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ОРРХ | ОРНР1 +] Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
[ОРРХ | ОРНР1 +] Реквизит
Справочник включен в критерий отбора через реквизит "Реквизит".
[ОРРХ | ОРНР1 +] PredefinedID
Индекс по идентификатору предопределенного объекта метаданных.
Дополнительные индексы для подчиненного справочника (вне зависимости от иерархичности справочника)
[ОРРХ | ОРНР1 +] Владелец + Ссылка
Свойство "Длина кода" равно 0.
[ОРРХ | ОРНР1 +] Владелец + Код + Ссылка
Свойство "Длина кода" не равно 0.
[ОРРХ | ОРНР1 +] Владелец + Наименование + Ссылка
Свойство "Длина наименования" не равно 0.
[ОРРХ | ОРНР1 +] Владелец + Реквизит + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ОРРХ | ОРНР1 +] Владелец + Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ОРРХ | ОРНР1 +] Владелец + Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
Дополнительные индексы для иерархического неподчиненного справочника
Если для справочника установлено свойство "Размещать группы сверху", то в индексах, наряду с полем Родитель, участвует поле ЭтоГруппа. Состав индексов соответствует приведенной ниже таблице.
[ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Ссылка
Свойство "Длина кода" равно 0 и свойство "Длина наименования" равно 0.
[ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Код + Ссылка
Свойство "Длина кода" не равно 0.
[ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Наименование + Ссылка
Свойство "Длина наименования" не равно 0.
[ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Реквизит + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ОРРХ | ОРНР1 +] Родитель + ЭтоГруппа + Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
Для справочников без размещения групп сверху состав индексов соответствует приведенной выше таблице, но в индексы при этом не включено поле ЭтоГруппа.
Дополнительные индексы для иерархического подчиненного справочника
Если для справочника установлено свойство "Размещать группы сверху", то в индексах, наряду с полем Родитель, участвует поле ЭтоГруппа. Состав индексов соответствует приведенной ниже таблице.
[ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Ссылка
Свойство "Длина кода" равно 0 и свойство "Длина наименования" равно 0.
[ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Код + Ссылка
Свойство "Длина кода" не равно 0.
[ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Наименование + Ссылка
Свойство "Длина наименования" не равно 0.
[ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Реквизит + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать".
[ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Реквизит + Код + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина кода" не равно 0, а свойство "Основное представление" равно "В виде кода".
[ОРРХ | ОРНР1 +] Владелец + Родитель + ЭтоГруппа + Реквизит + Наименование + Ссылка
Для реквизита "Реквизит" свойство "Индексировать" установлено в значение "Индексировать с доп. упорядочиванием" и при этом свойство "Длина наименования" не равно 0, а свойство "основное представление" равно "В виде наименования".
Для справочников без размещения групп сверху состав индексов соответствует приведенной выше таблице, но в индексы при этом не включено поле ЭтоГруппа.
В предыдущей статье мы узнали, как работать со строками в 1С 8.3. В этой статье изучим самые часто применяемые функции для работы со строками 1С.
Длина строки 1С
В платформе 1С имеется функция, которая вычисляет длину строки – СтрДлина. Эта функция имеет единственный параметр – строку, и возвращает количество символов в этой строке, т.е. её длину. Причем считаются все символы, в том числе пробелы.
Регистр строки 1С
В 1С имеются функции для работы с регистрами строк.
НРег – переводит строку в нижний регистр
ВРег – переводит строку в верхний регистр
ТРег – переводит строку в титульный регистр (каждое слово начинается с заглавной буквы).
Замечу, эти функции не изменяют строку в параметре, а создают новую строку в нужном регистре.
Убрать пробелы в строке 1С
Часто возникает, что в строке 1С в начале строки или в конце строки есть лишние пробелы, которые нужно убрать. Для этих целей служат следующие функции.
СокрЛ — убирает пробелы слева строки.
СокрП — убирает пробелы справа строки.
СокрЛП – убирает пробелы справа и слева строки.
Рассмотрим пример (добавлю символы перед и после функциями, чтобы было понятно как они работают).
Эти функции, также, не изменяют строку в параметре, а создают новую строку с обрезанными пробелами.
Сократить строку 1С
Если предыдущие функции сокращали только пробелы, то в платформе 1С имеется возможность сократить и саму строку на нужное количество символов. Или наоборот – оставить нужное количество символов. Для этих целей служат следующие функции.
Лев – оставляет нужное количество символов слева. Имеет следующий синтаксис: Лев(,)
Прав – оставляет нужно количество символов справа. Имеет следующий синтаксис: Лев(,)
Сред – оставляет нужное количество символов в строке. Имеет следующий синтаксис: Лев(,, ).
Функции Лев и Прав – создают новую строку, в которой оставлено слева и справа соответственно, то количество символов, которое указанно во втором параметре.
Функция Сред также создает новую строку, в которой оставлено то количество символов, которое указано в третьем параметре. Но, если предыдущие функции оставлялись символы или с начала строки, или с конца, то эта функция оставляет символы с любого места строки. Для этого во втором параметре нужно указать номер символа, с которого будут оставлены остальные символы (включая символ, номер которого мы указали).
По сути, эти функции позволяют сокращать как нужно строки, но работают наоборот – они оставляют то количество символов, которое необходимо.
Найти в строке 1С
Иногда нужно найти в строке или нужный символ, или нужную группу символов. Для этих целей применятся функция СтрНайти(). Эта функция имеет следующий синтаксис.
Данная функция возвращает позицию первого знака подстроки, которая была найдена. Если 0, то ни чего не найдено.
Строка – строка, по которой осуществляется поиск;
ПодстрокаПоиска – подстрока (или символ), которая ищется в строке поиска;
НаправлениеПоиска – системное перечисление, которое задает в какую сторону осуществляется поиск. Имеет два значения: НаправлениеПоиска.Сначала, НаправлениеПоиска.Сконца. Необязательный параметр.
НачальнаяПозиция – номер символа, с которого начинается поиск. Должен быть в диапазоне от 1 до количества символов, иначе будет ошибка. Необязательный параметр. Если он не задан и установлен параметр НаправлениеПоиска, то в случае поиска Сначала по умолчанию равен 1, а если поиск СКонца, то по умолчанию равен количеству символов в строке.
НомерВхождения – искомая подстрока (или символ) может несколько раз входить в исходную строку, этот параметр указывает, какое вхождение нас интересует. По умолчанию равен 1.
И результат работы функции
Т.е. когда мы ищем в строке «Иванов Сидоров Иванов» подстроку «Иванов», то при поиске без дополнительных параметров функция возвращает 1, это номер символа с которого начинается искомая подстрока. Если же мы ищем в направлении СКонца, то возвращается номер символа, с которого начинается второе вхождение подстроки в строку. В третьем случае мы искали в направлении СКонца, но указали номер символа, с которого нужно искать строку, поэтому функция вернула 1, поскольку при поиске начиная с 10 символа с конца строки, искомая подстрока находится только в начале строки. И в последнем примере, мы ищем подстроку с начала, но ищем второе вхождение этой подстроки.
Заменить в строке 1С
В платформе 1С 8.3. имеется метод, при помощи которого можно менять в строке определенные символы на другие символы.
Этот метод СтрЗаменить, и он имеете следующий синтаксис: СтрЗаменить(,,)
Данные метод возвращается строку, в которой будет выполнена замена или нет, в зависимости от того найдена строка поиска или нет.
Как видите, при помощи этого метода можно не только менять символы, но и вырезать не нужные символы.
Функции для многострочных строк в 1С
Из предыдущей статьи вы знаете, что в 1С можно задать многострочную строку, делается это при помощи символа «|». Сейчас мы разберем несколько функций, которые могут пригодиться при работе с многострочной строкой.
СтрЧислоСтрок() – позволяет узнать, сколько в строке строк.
СтрПолучитьСтроку – позволяет получить строку из многострочной строки по номеру, имеете следующий синтаксис: СтрПолучитьСтроку(, ). — начинается с единицы.
В этой статье я разобрал основные функции, которые были в платформе 8.1, в платформе 8.2 и перешли в платформу 8.3 (кроме функции СтрНайти, но это улучшенная версия функция Найти, которая была в старых платформах) . В следующей статье рассмотрим функции работы со строками, которые появились в платформе 8.3:
Статьи о примитивных типах
Более подробно и основательно начальные вопросы программирования в 1С есть вы можете изучить в
Книга «Программировать в 1С за 11 шагов»Изучайте программирование в 1С в месте с моей книгой «Программировать в 1С за 11 шагов»
Книга написана понятным и простым языком — для новичка.
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Научитесь понимать архитектуру 1С;
- Станете писать код на языке 1С;
- Освоите основные приемы программирования;
- Закрепите полученные знания при помощи задачника.
О том как разрабатывать под управляемым приложением 1С, читайте в книге Книга «Основы разработки в 1С: Такси»
Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.
- Очень доступный и понятный язык изложения
- Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
- Поймете идеологию управляемого приложения 1С
- Узнаете, как разрабатывать управляемое приложение;
- Научитесь разрабатывать управляемые формы 1С;
- Сможете работать с основными и нужными элементами управляемых форм
- Программирование под управляемым приложением станет понятным
Промо-код на скидку в 15% — 48PVXHeYu
Эти книги, плюс книга по программированию оперативного учета имеются в едином комплекте: комплект книг по разработке в 1С.
Только для читателей моего блога,
промо-код на скидку в 300 рублей на весь комплект: blog
Если Вам понравился этот урок, был полезен или помог решить какую-нибудь проблему, то Вы можете поддержать мой проект, перечислив любую сумму.Читайте также: