Свойство реквизита справочник

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

Т.о. Справочник предназначен для хранения справочной информации об однотипных объектах и представляет собой список, заполняемый пользователем на этапе исполнения прикладного решения.

Справочник хранится в таблице. Запись (строка) таблицы определяет объект базы данных – элемент справочника. Но объект базы данных включает не только запись в основной таблице справочника, но и все записи всех табличных частей справочника, относящиеся к данному объекту. Таким образом, объект базы данных включает в себя:

  1. запись основной таблицы;
  2. записи табличных частей.

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

Использование справочника:

  1. позволяет избежать многократного ввода одной и той же информации (например, наименования контрагента);
  2. обеспечивает сквозную идентификацию (например, идентификацию контрагента при отгрузке и оплате).

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

1С Справочники

Особенности Справочника 1С:

  1. каждый элемент справочника может иметь сложную структуру, задаваемую разработчиком на этапе конфигурирования;
  2. каждый элемент справочника характеризуется кодом и наименованием;
  3. каждый элемент справочника может содержать некоторую дополнительную информацию,  описывающую этот элемент (например, артикул и др.);
  4. поддерживается режим автоматической нумерации элементов (автоматической генерации кода для нового элемента справочника);
  5. позволяет осуществлять контроль уникальности кодов справочника, не разрешая создавать элементы с одинаковыми кодами.

Реквизиты справочника 1С

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

Все справочники содержат два обязательных (предопределенных) реквизита:

  1. Код;
  2. Наименование.

Например, для сотрудников кодом может выступать табельный номер, а наименованием — фамилия, имя и отчество (ФИО).

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

Набор такой информации является одинаковым для всех элементов конкретного справочника.

Рисунок «Реквизиты справочника 1С»

Реквизиты справочника 1С

[свернуть]

Каждый реквизит 1С имеет свойства, отображаемые в палитре свойств реквизита.

Основные свойства реквизитов справочника 1С (в зависимости от Типа могут отличаться)

Основные свойства реквизитов справочника 1С

  1. Имя – наименование реквизита в языке 1С (в имени реквизитов не должно быть пробелов и знаков препинания).
  2. Синоним – отображение наименования реквизита для пользователя в режиме 1С:Предприятие.
  3. Тип – тип данных, хранящихся в реквизите:
    • Число — используется для численных значений;
    • Строка — строковые значения, может быть ограничена по длине;
    • Дата — дата и/или время;
    • Булево — использование флагов (значения Истина/Ложь или Да/Нет);
    • ХранилищеЗначения (хранилище значений 1С) – это объект, который позволяет хранить в базе данных прочие значения, например картинки и файлы, структуры и таблицы значений. (подробнее…);
    • УникальныйИдентификатор — статистически уникальный 128-битный идентификатор, позволяющий создавать расширяемые сервисы и приложения без опасения конфликтов, вызванных совпадением идентификаторов (подробнее здесь и здесь);
    • СправочникСсылка, ДокументСсылка и т.д. — хранит ссылку, идентифицирующую объект в базе данных; используется везде, где нужно хранить ссылку на элемент (подробнее).

Флаг «Составной тип данных» позволяет выбрать несколько типов данных одновременно:

Составной тип данных

В этом случае пользователю в прикладном решении будет отображаться кнопка «Т», при нажатии на которую откроется окно «Выбор типа данных».

[свернуть]

  • Использование (Для элемента; Для группы; Для группы и элемента) — установка «Для группы и элемента» позволит задавать данный реквизит и для элементов иерархического  справочника, и для его групп.
  • Индексировать – позволяет указать системе, что нужно создать дополнительный индекс, содержащий соответствующий реквизит:
    1. «Индексировать» — индекс строится непосредственно по реквизиту. Включать, если требуется только поиск с помощью запроса объектов по данному реквизиту (без упорядочивания). Создаваемый индекс потребляет меньше ресурсов системы.
    2. «Индексировать с доп. упорядочиванием» — для использования в динамических  списках; индекс строится по реквизиту, а также по некоторому полю, которое обычно используется для упорядочивания объектов этого типа. Включать, если требуется просмотр списка с отбором по реквизиту.
  • Полнотекстовый поиск — участие в механизме полнотекстового поиска, позволяет быстро находить нужную информацию в данных информационной базы и в справочной системе.
  • История данных — хранение истории изменения прикладных данных пользователями.
  • Заполнять из данных заполнения — свойство определяет возможность заполнения реквизита из данных заполнения. Используется для заполнения реквизитов из значений текущего отбора списков. Читай также Как программно при открытии формы передать в нее нужные данные заполнения,  Как открыть форму с заполнением.
  • Значение заполнения — см. выше. Читай также Обработчик проверки заполнения.
  • Проверка заполнения — функция ПроверитьЗаполнение() проверяет заполнение реквизитов, у которых свойство «Проверка заполнения» установлено в значение «Показывать ошибку». Если реквизит не заполнен, то выводится сообщение об ошибке (возвращает ЛОЖЬ). Читай также здесь о программной проверке заполнения..

[свернуть]

Предопределенные элементы справочника

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

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

Рисунок «Предопределенные элементы справочника 1С»

Закладка «Прочее» в окне редактирования объекта конфигурации «Справочник»:

Предопределенные элементы справочника 1С

[свернуть]

Табличные части справочника 1С

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

Рисунок

Табличные части справочника 1С

[свернуть]

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

Виды иерархии элементов справочников 1С:

  1. Иерархия групп и элементов — группы справочника могут включать в себя как элементы, так и другие группы, создавая тем самым многоуровневую иерархическую структуру.

    Рисунок «Закладка «Иерархия» в окне редактирования объекта конфигурации «Справочник»

    Иерархия элементов справочника 1С

    [свернуть]

  2. Иерархия элементов — элементы справочника будут относиться не к группам, а к другим элементам этого же справочника. Такой вид иерархии может использоваться, например, при создании справочника «Задачи», где одна задача может включать в себя несколько других задач.

Подчинение справочников (Список владельцев справочника)

Справочники могут находиться в состоянии подчинения по отношению друг к другу, т.е. элементы одного справочника могут быть подчинены элементам или группам другого справочника:

  • если справочник иерархический (содержит подчиненные элементы), то у него будет доступен стандартный реквизит Родитель;
  • если справочник подчинен другому объекту конфигурации, у него будет доступен реквизит Владелец.

Например, справочник «Кассы» может быть подчинен справочнику «Организации».

Рисунок «Подчинение справочников 1С»

Подчинение справочников (Список владельцев справочника)

[свернуть]

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

Значения свойства ИспользованиеПодчинения (SubordinationUse):

  • Группам (ToFolders)
  • ГруппамИЭлементам (ToFoldersAndItems)
  • Элементам (ToItems)

Свойство ИспользованиеПодчинения определяет использование ограничение подчинения для групп и элементов подчиненных справочников. Если у справочника несколько владельцев, то ограничение применяется ко всем владельцам.

Формы справочника 1С

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

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

Форма списка справочника 1С

Форма списка 1С используется для просмотра данных, содержащихся в справочнике, и позволяет:

  • выполнять навигацию по справочнику;
  • добавлять, помечать на удаление и удалять элементы и группы справочника;
  • перемещать элементы и группы.

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

Конструктор формы списка справочника на закладке «Далее» всегда позволяет разместить на диалоге список элементов и, кроме того, для иерархических справочников с иерархией групп и элементов, — дерево групп.

Рисунок «Форма списка 1С»

Справочник 1С форма списка

Форма списка 1С

[свернуть]

Форма элемента справочника 1С

Форма элемента справочника 1С используется для просмотра и изменения данных отдельных элементов справочника. Как правило, она представляет данные в удобном для восприятия и редактирования виде.

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

Рисунок «Форма элемента справочника 1С»

Форма элемента 1С

Форма элемента справочника 1С

[свернуть]

Форма группы справочника 1С

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

Форма выбора, форма выбора группы 1С

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

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

Рисунок «Форма выбора группы 1С»

Форма выбора группы 1С

[свернуть]

Макеты 1С

Справочнику могут быть сопоставлены несколько макетов, предназначенных

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

Рисунок «Макеты 1С»

Макеты 1С

[свернуть]

Использование программного кода для работы со справочниками 1С

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

Ссылка на справочник

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

// 1 вариант

Сотрудники = Справочники.Сотрудники; 

// 2 вариант

Должности = Справочники[«Должности»];

[свернуть]

Создание и запись нового элемента справочника

//создаем новый элемент справочника

НовЭлемент = Справочники.Сотрудники.СоздатьЭлемент();

//определяем значения реквизитов нового элемента справочника

НовЭлемент.Наименование = «Иванов Иван Иванович»;

НовЭлемент.Подразделение «Администрация»;

НовЭлемент.Оклад = 10000;

// записываем новый элемент в базу данных

НовЭлемент.Записать();

[свернуть]

Поиск элемента справочника

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

// если элемент найден, то он возвращается, иначе возвращается значение <Неопределено>

//обращаемся к справочнику Сотрудники

СпрСотрудники = Справочники.Сотрудники;

//ищем сотрудника по коду

Сотрудник = СпрСотрудники.НайтиПоКоду(25);   

//или ищем по наименованию

Сотрудник = СпрСотрудники.НайтиПоНаименованию(«Иванов Иван Иванович»); 

//или ищем по реквизиту

Сотрудник = СпрСотрудники.НайтиПоРеквизиту(«Оклад», 10000);   

//проверяем значение

Если Сотрудник = Неопределено Тогда

//действия в случае, если элемент не найден

КонецЕсли;

[свернуть]

Перебор элементов справочника

Выборка = Справочники.Сотрудники.Выбрать();

// начало перебора элементов справочника в цикле

Пока Выборка.Следующий() 1 Цикл 

//действия с очередным элементом …

Сообщить(«Сотрудник « + Выборка.Наименование);

КонецЦикла;

[свернуть]

Удаление элемента справочника

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

СпрСотрудники = Справочники.Сотрудники;

//непосредственное удаление текущего элемента справочника

СпрСотрудники.Удалить();

// проверка, помечен ли элемент на удаление

Пометка = СпрСотрудники.ПометкаУдаления; //обратите внимание: это свойство

Если Пометка = Истина Тогда

//элемент помечен на удаление

КонецЕсли;

//установить пометку на удаление

СпрСотрудники.УстановитьПометкуУдаления (Истина); 

//снять пометку на удаление

СпрСотрудники.УстановитьПометкуУдаления (Ложь);

[свернуть]

Создание и запись новой группы справочника (для иерархического справочника)

// 1 вариант 

НовГруппа = Справочники.Сотрудники.СоздатьГруппу();

НовГруппа.Наименование = «Работающие»;

НовГруппа.Записать(); 

// 2 вариант 

НовГруппа = Справочники[«Сотрудники»].СоздатьГруппу();

НовГруппа.Наименование = «Работающие»;

НовГруппа.Записать();

[свернуть]

Перебор элементов внутри группы (родителя)

СпрСотрудники = Справочники.Сотрудники;

ГруппаРаботающие = СпрСотрудники.НайтиПоНаименованию(«Работающие»);

Выборка = СпрСотрудники.Выбрать(ГруппаРаботающие);

Пока Выборка.Следующий() 1 Цикл

//действия с очередным элементом

Сообщить(«Сотрудник « + Выборка.Наименование);

КонецЦикла;

[свернуть]

Перебор элементов справочника, принадлежащих элементу другого справочника (владельца)

Пусть справочник «Кассы»подчинен другому справочнику «Организации».

Выборка = Справочники.Кассы.Выбрать( ,Организация); 

// где Организация — ссылка на элемент справочника «Организации»,

//см. также справку по СправочникМенеджер.<Имя справочника>

Пока Выборка.Следующий() = 1 Цикл

 //действия с очередным элементом

Сообщить(«касса « + Выборка.Наименование);

КонецЦикла;

[свернуть]

Транзакция при работе со справочниками 1С

Транзакция — логически связанная, неделимая последовательность действий: транзакция может быть либо выполнена целиком, либо вообще не выполнена.

Транзакция при работе со справочниками используется:

  • при создании множества элементов справочника для ускорения работы;
  • для повышения надежности операций (в случае какого-либо сбоя транзакция не выполняется, изменения не вносятся, все останется также, как до запуска транзакции).

Транзакции широко применяются в банковской сфере.

Транзакции в 1С могут быть:

  1. созданы автоматически (примеры — обработка проведения документа, запись элемента справочника в базу данных, запись набора записей регистра сведений и т.д.);
  2. описаны разработчиком с помощью методов:
    • ТранзакцияАктивна() — узнать, активна ли транзакция;
    • НачатьТранзакцию() — активация транзакции;
    • ЗафиксироватьТранзакцию() — фиксация результатов транзакции;
    • ОтменитьТранзакцию() —  отмена действия транзакции.

ВАЖНО! 1С не поддерживает вложенных транзакций:

  • если вы несколько раз открываете транзакцию, она «сливается» в одну;
  • если вы фиксируете или отменяете подобную транзакцию, то это действие производится со всеми транзакциями, активируемыми ранее.

СпрСотрудники = Справочники.Сотрудники;

НачатьТранзакцию();

Для Ном = 1 По 100 Цикл

 Нов = СпрСотрудники.СоздатьЭлемент();

 Нов.Наименование = «Новый « + Строка(Ном);

 Нов.Записать();

КонецЦикла;

ЗафиксироватьТранзакцию();

[свернуть]

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

Значение заполнения

Это свойство позволяет установить значение по-умолчанию для реквизита.
Например, решим такую задачу: в справочнике «Сотрудники» есть реквизит «Вид приема на работу», который принимает одно из 3-х значений: «Штатный», «Внутренний совместитель» и «Внешний совместитель»:
imageДля новых сотрудников по-умолчанию нужно устанавливать вариант приема на работу — «Штатный». Для того чтобы решить эту задачу достаточно в конфигураторе перейти в свойства реквизита и выбрать значение по-умолчанию в свойстве «Значение заполнения»:
imageВ результате при создании нового элемента справочника значение реквизита будет заполнено выбранным значением по-умолчанию:

Проверка заполнения

Это свойство реквизита, которое позволяет сделать реквизит обязательным для заполнения.
Например, решим такую задачу: в справочнике «Контрагенты» есть реквизит «УНП», который пользователь должен заполнить обязательно.
imageПри попытке сохранить контрагента с пустым «УНП» должна выдаваться ошибка.

Для решения такой задачи достаточно в конфигураторе в настройках реквизита «УНП» установить свойство «Проверка заполнения» в значение «Выдавать ошибку»:

imageВ результате при попытке сохранения контрагента с пустым «УНП» пользователь получит сообщение об ошибке заполнения и сохранение выполняться не будет:
image

Связи параметров выбора

Это свойство позволяет установить связь между реквизитами одного объекта.
Пример задачи: в документе «Приходная накладная» есть реквизиты «Контрагент» (ссылка на справочник «Контрагенты») и «Договор» (ссылка на справочник «Договоры», который подчинен справочнику «Контрагенты»). При выборе договора пользователь должен видеть в списке только те договоры, которые принадлежат выбранному в этому же документе контрагенту. Договоры других контрагентов пользователь видеть не должен:
imageДля решения этой задачи нужно в конфигураторе для реквизита «Договор» настроить свойство «Связи параметров выбора»: указать связь с реквизитом этого же документа — «Контрагент». Условие связи будет следующим: Контрагент из документа должен равен значению реквизита «Владелец» для справочника «Договоры»:
imageВ результате при выборе договора в списке пользователь будет видеть только те договоры, для которых выполняется условие связи Владелец (из справочника договоры) = Контрагент (из документа «Приходная накладная):
image

Параметры выбора

Это свойство позволяет настроить фильтр списка, который открывается при выборе значения реквизита.

Пример задачи:
В справочнике «Номенклатура» хранится список всех товаров и услуг организации:

imageВ документе «Расходная накладная» товары и услуги хранятся в разных табличных частях:
imageВ заполнении табличной части «Товары» пользователь при выборе товара должен видеть списке только товары, а при заполнении табличной части «Услуги» — только услуги (без товаров). При этом в справочнике «Номенклатура» есть реквизит типа «Булево» — «Услуга», который позволяет однозначно определить тип номенклатуры:
imageДля решения этой задачи нужно в конфигураторе настроить свойство «Параметры выбора» реквизита «Номенклатура» для каждой табличной части:
imageimageДля реквизита «Номенклатура» табличной части «Товары» добавляем в настройки параметров выбора условие вида «Услуга = Ложь», для реквизита «Номенклатура» табличной части «Услуги» — условие вида «Услуга = Истина». В результате при выборе значения реквизита список будет отфильтрован согласно этому условию.
imageimageТаким образом, в этой статье мы познакомились с полезными свойствами реквизитов объектов 1С, которые позволяют быстро и просто решать часто возникающие на практике задачи без программирования, это свойства:

  • Значение заполнения (настройка значения по-умолчанию)
  • Проверка заполнения (обязательность заполнения реквизита)
  • Связи параметров выбора (настройка связи между реквизитами одного объекта)
  • Параметры выбора (настройка фильтра списка при выборе значения реквизита)


2019-05-01 13:39

Программирование

Для
работы со справочниками предназначена
ветвь “Справочники” дерева конфигурации.

Рис.
1 – ветвь “
cправочники”
дерева конфигурации.

При
создании нового справочника открывается
окно редактирования объекта.

Иерархический
справочник”

— если свойство установлено, то справочник
имеет иерархическую структуру и
становится доступным свойство “Вид
иерархии” и “Ограничение количества
уровней иерархии”.

Рис.
2 – Окно редактирования объекта, свойство
“ иерархический справочник”.

Вид
иерархии

— определяется, какой вид иерархии
используется в данном справочнике. При
выборе вида ”Иерархия групп и элементов”
для справочника определяются два вида
элементов: группы и элементы. Группы
предназначены только для объединения
других групп и элементов справочника.
Обычно для описания группы достаточно
кода, наименования и родителя (ссылка
на верхний уровень). Элемент справочника
помимо этих реквизиторов может содержать
другие реквизиты, указанные на закладке
Данные. Для справочников с этим видом
иерархии можно создать формы группы и
формы элемента. При выборе вида “Иерархия
элементов”
все элементы справочника равнозначны.
Примером справочников такого вида могут
служить справочники подразделений и
статьи затрат.

Рис.
3 – пример справочника с “иерархией
элементов”.

Размещать
группы сверху”

— свойство становится доступным, если
выбрано значение “Иерархия групп и
элементов”. Если свойство “Размещать
группы сверху” установлено, то при
отображении справочника в виде
иерархического списка группы окажутся
в верхних строчках списка, а элементы
справочника будут располагаться ниже.
Если это свойство не установлено,
расположение групп и элементов будет
подчиняться установленным правилам
сортировки (по коду, наименованию и
пр.). Например, при создании новой группы
с кодом большим, чем у всех имеющихся
групп и элементов (при сортировке по
коду), в первом варианте эта подгруппа
окажется нижней среди групп, но выше
остальных элементов справочника; во
втором варианте она займет самую нижнюю
строчку.

Следует
отметить, что установка или снятие
свойства “Размещать
группы

сверху
не влияет на показ справочника в виде
неиерархического списка.

Количество
уровней иерархии”

— свойство становится доступным, если
установлено свойство “Ограничение
количества уровней иерархии”. Справочники
в системе 1С:Предприятие8.2 могут иметь
более одного уровня вложенности. Если
свойство “Ограничение количества
уровней иерархии” не установлено, то
максимальное количество уровней
вложенности справочника неограниченно.

Владельцы”
— это свойство требует подробного
объяснения.

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

Чтобы
подчинить справочник другому, уже
существующему в системе, в поле “Список
владельцев справочника” следует нажать
кнопку редактирования и в открывшемся
окне выбора объекта отметить те
справочники, которые являются владельцами
данного справочника. Каждый такой
справочник в системе 1С:Предприятие8.2
называется владельцем, а сам справочник
— подчиненным.

Рис.
4 – пример подчинённого справочника
“подразделения организаций”. Владельцем
является справочник “Организации”.

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

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

Использование
подчинения — позволяет управлять
ограничением, накладываемым на владельцев.
Могут использоваться только элементы,
только группы или и группы, и элементы.
Если у справочника несколько владельцев,
то ограничение применяется ко всем
владельцам.

Длина
кода”

— свойство устанавливает максимальную
длину кода элемента справочника.

Конфигуратор
позволяет установить длину кода равной
0. Это может понадобиться в тех случаях,
когда код элемента справочника не
используется.

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

Длина
наименования”

— в свойстве устанавливается максимально
возможная длина наименования элемента
справочника.

Конфигуратор
позволяет установить длину наименования
равной 0.

Рис.5
– установка длины кода и длины
наименования в справочнике

Серии
кодов”

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

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

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

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

Рис.
6
– выбор серии кодов.

При
установке серии кодов в пределах
подчинения владельцу в иерархических
подчиненных справочниках обеспечивается
автоматическая нумерация и контроль
уникальности кодов среди элементов с
одинаковым владельцем, но различными
родителями.

Тип
кода”

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

Рис.
7 – выбор типа кода.

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

Для
самого первого элемента система формирует
код вида 001 (количество нулей зависит
от установленной длины кода), то есть
код представляет собой строку символов,
но все символы в этой строке являются
цифрами. При вводе других элементов в
справочник система будет продолжать
присваивать коды аналогичным образом
— 002,003 и т. д.

Если
требования к ведению справочника
предполагают непременное использование
смешанных буквенно-цифровых кодов, то
для целей автоматической нумерации
можно использовать коды вида АА001. Здесь
первая часть кода — символы АА — является
текстовым префиксом, а вторая часть —
символы 001 — будет интерпретироваться
системой как число и использоваться
при автоматическом присвоении очередного
кода.

Например,
если самым первым кодом в справочник
введен АА001, то следующим автоматически
присвоенным кодом будет АА002, затем —
ААООЗ, и так далее по возрастанию.

Текстовый
префикс можно задать вручную (при вводе
в справочник нового элемента ввести
такой «составной» код) или использовать
возможности установки префикса из
встроенного языка системы 1С:Предприятие
8.2.

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

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

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

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

Рис.
9 – создание нового реквизита в справочнике
“сотрудники организации”

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

Рис.
10 – пример дополнительных данных
справочника “сотрудники организации”
в табличной части

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

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

Число
строк табличной части не может более
100 000.

Каждый
справочник может иметь неограниченное
число табличных частей.

Автонумерация.
Установка свойства приводит к тому, что
вновь введенному элементу в справочнике
код будет присваиваться автоматически.
Автоматически присвоенный код можно
исправить.

Контроль
уникальности
.
Если код используется для однозначной
идентификации конкретного элемента в
справочнике, он должен быть уникальным
(не должен повторяться). Если свойство
“Контроль уникальности” установлено,
проверка кода на уникальность будет
проводиться автоматически при вводе в
справочник нового элемента.

Рис.
11 – включение автонумерации и контроля
уникальности.

Основное
представление”

— в свойстве задается представление
элементов справочника. Например, значения
типа СправочникСсылка, введенные в
реквизит документа, справочника или
константу, будут представляться в виде
кода или наименования элемента справочника
в зависимости от данного свойства. Для
форм списков данная колонка становится
колонкой по умолчанию. При открытии
списка эта колонка становится активной.

Ввод
на основании
.
На закладке “Ввод на основании”
указывается, какие объекты конфигурации
могут являться основанием для объектов
данного типа, и для каких объектов
объекты данного типа могут являться
основанием. По кнопке “Конструктор
ввода на основании” запускается
конструктор создания процедуры ввода
на основании

.

Рис.
12 – пример ввода на основании

Свойства
реквизитов справочника.

Помимо
основных свойств реквизиты справочника
имеют следующие свойства:

  • Индексировать
    — указывается, нужно ли формировать
    индекс по этому полю.

  • Тип
    — указывается тип данных реквизита.

  • Использование
    — для иерархических справочников
    определяет использование реквизита
    для групп и элементов.

Рис.
13 – свойства реквизитов справочника.

Предопределенные
элементы справочника.

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

Форма
для ввода предопределенных элементов
открывается нажатием кнопки
“Предопределенные” на закладке “Прочие”
окна редактирования объекта конфигурации.
В конфигураторе вводятся только основные
свойства элемента (имя, код и наименование).
Имя элемента можно использовать в
выражениях встроенного языка. Значения
других реквизитов предопределенного
элемента вводятся в режиме 1С:Предприятие.

Рис.
14 – ввод предопределенных элементов.

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

Важно!
Для справочника, имеющего владельца,
нельзя создать предопределенные
элементы. И наоборот, справочнику,
имеющему предопределенные элементы,
нельзя назначить владельца.

Рис.
15 — справочнику, имеющего владельца,
нельзя создать предопределенные
элементы.

Рис.
16 — справочнику, имеющему предопределенные
элементы, нельзя назначить владельца.

Соседние файлы в папке курсовая docx100

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Внимание! Перед вами ознакомительная версия урока, материалы которого могут быть неполными.

Создание конфигураций 1С: добавляем реквизит

Автор уроков и преподаватель школы: Владимир Милькин02

Продолжаем изучение азов создания конфигураций на 1С.

Оглавление

  • Где найти реквизиты справочника
  • Как открыть свойства реквизитов справочника
  • Какие типы бывают у реквизитов справочника
  • Добавляем новый реквизит к справочнику
  • Проверяем, что получилось
  • Пройдите тест

Вернёмся в конфигуратор и откроем дерево конфигурации:

  

Где найти реквизиты справочника

Давайте познакомимся поближе со справочником «Сотрудники». Откроем его окно двойным щелчком:

Открылось окно настроек со множеством вкладок. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Нас интересует прежде всего вкладка «Данные»:

Обратите внимание на панель «Реквизиты». Вот она наша дополнительная информация, которую мы добавили к справочнику: «ДатаРождения», «НомерПаспорта» и «СерияПаспорта».

  

Как открыть свойства реквизитов справочника

У любого из этих реквизитов есть свойства. Чтобы открыть их нужно сделать двойной щелчок на имени реквизита. К примеру, «кликнем» два раза на реквизите «ДатаРождения»:

Открылась дополнительная панель со свойствами этого реквизита:

Здесь много различных параметров, которые позволяют настраивать поведение реквизита. Самые главные для нас это, конечно же, «Имя» и «Тип». Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.  

 

Какие типы бывают у реквизитов справочника

В параметре «Тип» указано «Дата» и это логично, ведь мы храним в этом реквизите дату рождения сотрудника.

Раскройте этот параметр (стрелка вниз), чтобы посмотреть какие ещё типы бывают у реквизитов:

  

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

Давайте вместе добавим новый реквизит для справочника «Сотрудники» для хранения должности.

Сначала определимся с именем этого реквизита. Пусть так и будет «Должность». Ну а тип пусть будет «Строка».

Нажмём зелёную кнопку плюсик над панелью с реквизитами:

Добавится реквизит с именем «Реквизит1»:

Откроем его свойства (двойным щелчком по реквизиту) и установим в свойство «Имя» значение «Должность», а в свойство «Тип» значение «Строка»:

  

Проверяем, что получилось

Посмотрим что получилось! Для этого запустим 1С в режиме пользователя (меню «Отладка»->»Начать отладку»). На все вопросы об обновлении конфигурации базы данных сейчас и впредь отвечаем утвердительно.

Откроем любого сотрудника и увидим, что на форме появилось поле «Должность» (если вы не видите этого поля воспользуйтесь полосой прокрутки или потяните форму за нижний край):

Замечательно :)

Пройдите тест

Для учеников

Обязательно повторяйте все действия, которые мы выполняем на уроках данного модуля. Теория, не подкреплённая практикой — ничего не значит.

На вопросы учеников — отвечаю по почте,  но прежде загляните в ЧАВО (ссылка) .

С уважением, Владимир Милькин

Работа с реквизитами справочника

Автор СветланаТ, 11 июл 2008, 10:26

0 Пользователей и 4 гостей просматривают эту тему.

Любой справочник можно представить как таблицу, которая имеет 2 обязательные графы: код элемента справочника и наименование элемента справочника. Однако, часто бывает полезно (а зачастую и необходимо) хранить для элементов справочника какую-либо дополнительную информацию: например, банковские реквизиты — для организаций, паспортные данные — для сотрудников, и так далее.

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

Для управления списком реквизитов справочника и редактирования их свойств служат управляющие элементы группы «Реквизиты» окна редактирования «Справочник». Назначение и порядок использования управляющих элементов группы «Реквизиты» можно посмотреть в п. «Редактирование списков объектов метаданных» на стр. Ошибка! Закладка не определена..


Свойства реквизита справочника
В этом параграфе будут описаны специфические свойства реквизитов справочника, в дополнение к общим свойствам объектов метаданных, о которых говорилось в п. «Свойства объектов метаданных» на стр. Ошибка! Закладка не определена..

Свойства реквизита справочника редактируются при помощи палитры свойств «Свойства Реквизита».

Закладка «Дополнительные»


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

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


Замечание. Текстовый реквизит неограниченной длины не может быть периодическим.

К периодическому реквизиту можно обращаться при помощи встроенного языка системы 1С:Предприятие — получать и записывать значение реквизита на указываемую дату. Однако, следует иметь в виду, что при получении значения реквизита на какую-то дату извлекается его значение на указанную или (если значение на указанную дату отсутствует) на ближайшую предыдущую дату, а запись значения периодического реквизита выполняется всегда на указанную дату.

В режиме использования конфигурации для периодического реквизита можно вызвать окно «История». Это окно представляет собой таблицу, состоящую из двух граф: дата изменения значения реквизита справочника и значение на эту дату. Окно «История» позволяет редактировать историю изменений значения реквизита напрямую: вводить новые строки, редактировать или удалять существующие.


Сортировка. Установка флажка «Сортировка» предоставляет две возможности.

Если эта опция включена для реквизитов типа «число», «строка» и «дата», то содержимое справочника можно будет отсортировать но этим реквизитам при просмотре справочника.

Для реквизитов всех типов значений включение этой опции позволит осуществлять поиск элемента справочника по этому реквизиту средствами встроенного языка системы 1С:Предприятие.

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

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

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


Отбор по реквизиту. Если для реквизита установлен флажок «Отбор по реквизиту», в режиме запуска «1С:Предприятие» появляется возможность просматривать только те элементы справочника, которые имеют заданное значение этого реквизита.

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

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


Использовать. Управляющий элемент «Использовать» устанавливает, будет редактируемый реквизит справочника использоваться в качестве дополнительной характеристики только для группы, только для элемента справочника или в обоих случаях.

Более подробно поясним смысл установки «Использовать».

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

Как и для «простого» элемента справочника, для группы также может быть определен список дополнительных реквизитов (помимо обязательных реквизитов «Код» и «Наименование»). Однако, зачастую набор таких реквизитов должен быть различным для заголовка группы и для элемента справочника. Например, для группы товаров не имеет смысла реквизит «Цена», так как это, скорее, характеристика отдельного товара.


Изменяется документами. Включение опции «Изменяется документами» разрешает изменять значение периодического реквизита справочника из модулей документов. Изменение выполняется процедурой УстановитьРеквизитСправочника, которая вносит запись об изменении в историю реквизита и связывает эту запись с породившим се документом.

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

Записи в истории реквизита, порожденные документами, не могут быть изменены «вручную». Такие записи будут «помнить» о породивших их документах и будут автоматически удаляться при удалении документа или выполнении операции «Сделать документ непроведенным» (см. п. «Модуль документа» на стр. Ошибка! Закладка не определена.)


Ручное изменение. Опция «Ручное изменение» всегда включена для периодических реквизитов справочника. Однако, ее можно отключить, тогда изменение значения периодического реквизита справочника можно будет выполнять только из модулей документов. Отключить обе опции «Изменяется документами» и «Ручное изменение» одновременно нельзя.


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 7.7

  • Конфигурирование, программирование в 1С Предприятие 7.7

  • Работа с реквизитами справочника

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Что такое реквизиты 1С?

Мы с Вами недавно обсуждали справочники 1С и документы 1С. Работа пользователя со справочниками и документами в 1С состоит из заполнения полей на форме.

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

Рассмотрим подробно тему реквизитов в 1С.

Что такое Реквизиты 1С

Каждый справочник и документ 1С состоит из набора полей. Такие поля называются реквизиты 1С (для программиста 1С).

В конфигураторе, в дереве конфигурации 1С, раскройте любой справочник или документ и Вы увидите ветку Реквизиты. Это список реквизитов (полей) справочника.

Поглядите как те же реквизиты 1С выглядят на форме справочника 1С.

Каждый реквизит 1С имеет свойства, в которых указано какой вид значения хранится в реквизите (строка, число и т.п.) и как с ним будет работать пользователь.

Нажмите правой кнопкой на любой реквизит 1С и нажмите Свойства. В окне справа откроется список свойств выбранного реквизита.

Основные свойства реквизитов 1С:

  • Имя – наименование реквизита 1С в языке 1С (внимание – в имени реквизитов не должно быть пробелов и знаков препинания)
  • Синоним – наименование реквизита каким его увидит пользователь в режиме Предприятие
  • Тип – указывает какие данные можно будет хранить в реквизите 1С, нажмите на кнопку «…», чтобы изменить тип; основные типы:
    o Число — используется для цифр, а также для радиопереключателя
    o Строка — может быть ограничена по длине, дело в том, что не везде возможно использование неограниченной длины
    o Дата
    o Булево — для того, чтобы на форме была галочка (значения Истина/Ложь или Да/Нет)
    o СправочникСсылка или ДокументСсылка – выбор значения справочника или документа.

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

  • Использование –можно сделать разные реквизиты (поля) для элемента справочника и для группы справочника
  • Индексировать – требуется включать для тех реквизитов, по которым будет сортировка и поиск, однако нельзя включить для всех вообще – будет работать медленно.

Стандартные реквизиты 1С

Как Вы заметили, на форме справочника есть реквизиты 1С, которые отсутствуют в списке в конфигураторе: группа, наименование, БИК.

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

Это – стандартные реквизиты 1С. Что это такое? У каждого объекта 1С есть набор реквизитов 1С по умолчанию. У справочников это, например – код и наименование. У документов это – дата и номер.

Стандартные реквизиты 1С можно посмотреть следующим образом:

  • Зайдите в редактор объекта 1С (справочника или документа), нажав на него два раза мышкой
  • В открывшемся редакторе выберите закладку Данные
  • Здесь Вы можете настроить стандартные реквизиты Код и Наименование справочника
  • Нажмите кнопку Стандартные реквизиты 1С, чтобы посмотреть полный список.

Общие реквизиты 1С

Начиная с версии 1С 8.2.14 в 1С появился новый Объект 1С – Общие реквизиты 1С. С помощью него можно добавить реквизит (поле), который будет присутствовать сразу во множестве справочников и документов.

Свойства общего реквизита 1С:

  • Автоиспользование – добавляет общий реквизит 1С сразу во все справочники и документы
  • Состав – позволяет добавить общий реквизит 1С только в нужные справочники и документы (автоиспользование тогда в значение Не использовать).

Как добавить реквизит 1С

Нажмем правой кнопкой на ветку Реквизиты 1С нужного справочника и выберем Добавить.

Введем нужно Имя реквизита 1С, например «АдресОфиса» и синоним «Адрес офиса». Тип оставим по умолчанию Строка, но поставим галочку Неограниченная длина.

Добавим еще один реквизит 1С точно так же, только выберем тип Булево, назовем его «РаботаетПоВыходным».

Как вывести реквизит на форму 1С (толстый клиент 1С)

Раскроем ветку Формы того же справочника. Чтобы открыть форму — выберем форму элемента и нажмем на нее два раза мышкой.

Потяните мышкой за край формы и растяните ее (необязательный пункт).

В панели конфигуратора нажмите кнопку «Размещение данных». Также можно использовать меню Форма / Размещение данных.

Вы видите – наши реквизиты на форму не выведены. Установите на них галочку. А также галочки Вставить надписи и Разместить автоматически.

Вуаля!

Как вывести реквизит на форму 1С (тонкий клиент 1С)

Раскроем ветку Формы того же справочника. Выберем форму элемента и нажмем на нее два раза мышкой.

На закладке Реквизиты раскройте строку Объект. Вы увидите список реквизитов, добавленных ранее в справочник.

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

Вуаля!

Реквизиты формы 1С

В толстом клиенте у формы есть свои собственные реквизиты. Они находятся на закладке Реквизиты.

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

Например, Вы добавили на форму галочку. При ее нажатии на форме что-то происходит. Значение галочки для Вас неважно (записывать его не нужно) – она используется только для переключения формы при работе с ней. В этом случае в качестве данных Вы используете не реквизит справочника, а реквизит формы.

Периодические реквизиты 1С

В 1С версии 7.7 были периодические реквизиты. Их смысл таков: значение у реквизита разное в разные даты. Например, значение на 1 сентября – одно, а на 1 октября – другое. У одного и того же реквизита.

В 1С 8 периодических реквизитов нет. Это реализуется следующим образом:

  • Добавляем регистр сведений и делаете его периодическим. Период может быть – секунда, день, месяц, квартал, год.

  • Добавляем измерение, у которого тип – нужный нам справочник (которому мы делаем периодический реквизит)

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

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

Загрузка…

Справочники

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

Структура справочника

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


Справочники

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


Справочники

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


Справочники

Справочники могут поддерживать иерархическое расположение элементов. Например, в справочнике Номенклатура могут быть созданы группы: Бытовая техникаОбувьПродукты и т. д., в которых располагаются элементы, относящиеся к этим группам. Кроме того группы справочника могут включать в себя и другие группы, создавая тем самым многоуровневую иерархическую структуру.


Справочники

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


Справочники

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


Справочники

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

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


Справочники

Формы справочника

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


Справочники

Форма списка

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


Справочники

Форма элемента

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


Справочники

Форма группы

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


Справочники

Форма выбора, форма выбора группы

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


Справочники

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

Макеты

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


Справочники

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

Contents

  • 1 Введение
  • 2 Архитектура
  • 3 Использование
  • 4 Особенности реализации
  • 5 Источники

Введение

В этой статье я хотел бы рассказать об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С БСП).

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

Архитектура

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

Дополнительные сведения отличаются от дополнительных реквизитов прежде всего расположением, дополнительные сведения содержатся в отдельном регистре с одноименным названием, а дополнительные реквизиты являются табличной частью объекта, к которому относятся. На рисунке ниже слева-направо изображены: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и список регистра сведений «Дополнительные сведения».

Следующий рисунок изображает пример дополнительного реквизита, слева-направо: элемент справочника «Наборы дополнительных реквизитов и свойств», элемент плана видов характеристик и элемент справочника, в который был добавлен дополнительный реквизит.

Также стоит учитывать, что большая часть объектов метаданных в справочнике «Наборы дополнительных реквизитов и сведений» является предопределённой:

Однако, заполнение этих данных происходит программно, при внедрении 1С БСП или обновлении информационной базы — для этого в общих модулях добавляют процедуру ПриПолученииПредопределенныхНаборовСвойств. Уникальный идентификатор задаётся в явном виде, в т.ч. для того чтобы облегчить процедуры обмена между базами.

// См. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств.
//
// Параметры:
//   Наборы - см. УправлениеСвойствамиПереопределяемый.ПриПолученииПредопределенныхНаборовСвойств.Наборы
//
Процедура ПриПолученииПредопределенныхНаборовСвойств(Наборы) Экспорт
	Набор = Наборы.Строки.Добавить();
	Набор.Имя = "Справочник_ПапкиФайлов";
	Набор.Идентификатор = Новый УникальныйИдентификатор("00000000-0000-0000-0000-000000000000");
КонецПроцедуры

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Обработчик подсистемы "Свойства"
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("Объект", Объект);
    ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты");
    УправлениеСвойствами.ПриСозданииНаСервере(ЭтаФорма, ДополнительныеПараметры);
    
КонецПроцедуры

Полный список функций и процедур находится в общем модуле УправлениеСвойствами в блоке, озаглавленным: «Процедуры и функции для стандартной обработки дополнительных реквизитов».

Использование

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

Пример использования имени для получения дополнительного реквизита:

ВЫБРАТЬ
	ГражданствоФизическихЛиц.ФизическоеЛицо КАК ФизическоеЛицо,
	ФизическиеЛицаДополнительныеРеквизиты.Значение КАК Рост,
	ГражданствоФизическихЛиц.Страна КАК Страна
ИЗ
	Справочник.ФизическиеЛица.ДополнительныеРеквизиты КАК ФизическиеЛицаДополнительныеРеквизиты
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ГражданствоФизическихЛиц КАК ГражданствоФизическихЛиц
		ПО ГражданствоФизическихЛиц.ФизическоеЛицо = ФизическиеЛицаДополнительныеРеквизиты.Ссылка
ГДЕ
	ГражданствоФизическихЛиц.ФизическоеЛицо = &ФизическоеЛицо
	И ФизическиеЛицаДополнительныеРеквизиты.Свойство.Имя = &Имя

Результат:

Пример запроса для получения всех дополнительных свойств:

ВЫБРАТЬ
	ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
	ЦеныНоменклатурыСрезПоследних.ТипЦен КАК ТипЦен,
	ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
	ДополнительныеСведения.Свойство КАК Свойство,
	ДополнительныеСведения.Значение КАК Значение,
	ДополнительныеСведения.Свойство.Имя КАК ИмяСвойства
ИЗ
	РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
			&Дата,
			Номенклатура = &Номенклатура
				И ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних
		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
		ПО ЦеныНоменклатурыСрезПоследних.Номенклатура = ДополнительныеСведения.Объект
ИТОГИ
	МАКСИМУМ(Номенклатура),
	МАКСИМУМ(Цена)
ПО
	ОБЩИЕ,
	ТипЦен

Результат:

Примеры получения свойств без запроса:

Рост = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.найтиПоРеквизиту("Имя", "Рост_12f49d4f164847b79effd75a758186c3");
// Получение дополнительного реквизита
Рост = УправлениеСвойствами.ЗначениеСвойства(ФизическоеЛицо.Ссылка, Рост);
// Получение всех дополнительных реквизитов и сведений объекта
ВсеСвойства = УправлениеСвойствами.ЗначенияСвойств(ФизическоеЛицо.Ссылка);

Особенности реализации

Если с запросами и функциями всё более менее ясно неприятным сюрпризом может стать то, что дополнительный реквизит на форме содержит название, отличающееся от этого реквизита, например, такое:

Чтобы найти реквизит на форме 1С БСП создаёт новые реквизиты формы Свойства_ОписаниеДополнительныхРеквизитов и Свойства_ОписаниеЗависимыхДополнительныхРеквизитов, с помощью них можно установить однозначное соответствие между элементом и значением объекта:

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

Добавим новый дополнительный реквизит для справочника физические лица «Номера счетов»

Добавляем программно, вторую запись в табличную часть «Дополнительные реквизиты» справочника «Физические лица» с тем же самым свойством:

Немного модифицируем код функции ЗначенияСвойств в общем модуле УправлениеСвойствамиСлужебный:

А также код процедуры ЗаполнитьДополнительныеРеквизитыВФорме в общем модуле УправлениеСвойствами:

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

// Создает/пересоздает дополнительные реквизиты и элементы в форме владельца свойств.
//
// Параметры:
//  Форма           - ФормаКлиентскогоПриложения - уже настроена в процедуре ПриСозданииНаСервере.
//
//  Объект          - Неопределено - взять объект из реквизита формы "Объект".
//                  - СправочникОбъектИмяСправочника - 
//                  - ДокументОбъектИмяДокумента - 
//                  - ПланВидовХарактеристикОбъектИмяПланаВидовХарактеристик - 
//                  - БизнесПроцессОбъектИмяБизнесПроцесса - 
//                  - ЗадачаОбъектИмяЗадачи - 
//                  - ПланВидовРасчетаОбъектИмяПланаВидовРасчета - 
//                  - ПланСчетовОбъектИмяПланаСчетов -
//                  - ДанныеФормыСтруктура -
//
//  ПоляНадписей    - Булево - если указать Истина, то вместо полей ввода на форме будут созданы поля надписей.
//
//  СкрытьУдаленные - Неопределено - не менять текущий режим скрытия удаленных, установленный ранее.
//                  - Булево - установить/отключить режим скрытия удаленных.
//                    При вызове процедуры ПередЗаписьюНаСервере в режиме скрытия удаленных, удаленные значения
//                    очищаются (не переносятся обратно в объект), а режим СкрытьУдаленные устанавливается Ложь.
//
Процедура ЗаполнитьДополнительныеРеквизитыВФорме(Форма, Объект = Неопределено, ПоляНадписей = Ложь, СкрытьУдаленные = Неопределено) Экспорт
	
	Если НЕ Форма.Свойства_ИспользоватьСвойства
	 ИЛИ НЕ Форма.Свойства_ИспользоватьДопРеквизиты Тогда
		Возврат;
	КонецЕсли;
	
	Если ТипЗнч(СкрытьУдаленные) = Тип("Булево") Тогда
		Форма.Свойства_СкрытьУдаленные = СкрытьУдаленные;
	КонецЕсли;
	
	Если Объект = Неопределено Тогда
		ОписаниеОбъекта = Форма.Объект;
	Иначе
		ОписаниеОбъекта = Объект;
	КонецЕсли;
	
	Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта = Новый СписокЗначений;
	
	КлючНазначения = Неопределено;
	НаборыСвойствОбъекта = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(
		ОписаниеОбъекта, КлючНазначения);
	
	УправлениеСвойствамиСлужебный.ЗаполнитьНаборыСДополнительнымиРеквизитами(
		НаборыСвойствОбъекта,
		Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта);
	
	ОбновитьКлючНазначенияФормы(Форма, КлючНазначения);
	
	ОписаниеСвойств = УправлениеСвойствамиСлужебный.ЗначенияСвойств(
		ОписаниеОбъекта.ДополнительныеРеквизиты.Выгрузить(),
		Форма.Свойства_НаборыДополнительныхРеквизитовОбъекта,
		Ложь);
	
	ОписаниеСвойств.Колонки.Добавить("ИмяРеквизитаЗначение");
	ОписаниеСвойств.Колонки.Добавить("СтрокаСсылочногоТипа");
	ОписаниеСвойств.Колонки.Добавить("ИмяСсылочногоРеквизитаЗначение");
	ОписаниеСвойств.Колонки.Добавить("ИмяУникальнаяЧасть");
	ОписаниеСвойств.Колонки.Добавить("ДополнительноеЗначение");
	ОписаниеСвойств.Колонки.Добавить("Булево");
	
	УдалитьСтарыеРеквизитыИЭлементы(Форма);
	
	// Создание реквизитов.
	ДобавляемыеРеквизиты = Новый Массив();
	
	Для каждого ОписаниеСвойства Из ОписаниеСвойств Цикл
		
		ТипЗначенияСвойства = ОписаниеСвойства.ТипЗначения;
		СписокТипов = ТипЗначенияСвойства.Типы();
		СтроковыйРеквизит = (СписокТипов.Количество() = 1) И (СписокТипов[0] = Тип("Строка"));
		
		// Поддержка строк неограниченной длины.
		ИспользоватьНеограниченнуюСтроку = УправлениеСвойствамиСлужебный.ИспользоватьНеограниченнуюСтроку(
			ТипЗначенияСвойства, ОписаниеСвойства.МногострочноеПолеВвода);
		
		Если ИспользоватьНеограниченнуюСтроку Тогда
			ТипЗначенияСвойства = Новый ОписаниеТипов("Строка");
		ИначеЕсли ТипЗначенияСвойства.СодержитТип(Тип("Строка"))
			И ТипЗначенияСвойства.КвалификаторыСтроки.Длина = 0 Тогда
			// Если нельзя использовать неограниченную строку, а в свойствах реквизита она неограниченная,
			// то устанавливаем ограничение в 1024 символа.
			ТипЗначенияСвойства = Новый ОписаниеТипов(ОписаниеСвойства.ТипЗначения,
				,,, Новый КвалификаторыСтроки(1024));
		КонецЕсли;
		
		ОписаниеСвойства.ИмяУникальнаяЧасть = 
		СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Набор.УникальныйИдентификатор())), "-", "x")
		+ "_"
		+ СтрЗаменить(ВРег(Строка(ОписаниеСвойства.Свойство.УникальныйИдентификатор())), "-", "x");
		
		// {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:51].
		Если ОписаниеСвойств.Найти("ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть) <> Неопределено Тогда 
			ОписаниеСвойства.ИмяУникальнаяЧасть = ОписаниеСвойства.ИмяУникальнаяЧасть + "_" + ОписаниеСвойств.Индекс(описаниеСвойства);		
		КонецЕсли;
		// }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:51].
		
		
		ОписаниеСвойства.ИмяРеквизитаЗначение =
		"ДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
		
		
		ОписаниеСвойства.СтрокаСсылочногоТипа = Ложь;
		Если СтроковыйРеквизит
			И Не ИспользоватьНеограниченнуюСтроку
			И ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
			ФорматированнаяСтрока                           = Новый ОписаниеТипов("ФорматированнаяСтрока");
			ОписаниеСвойства.СтрокаСсылочногоТипа           = Истина;
			ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение = "СсылочныйДополнительныйРеквизитЗначение_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
			
			Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение, ФорматированнаяСтрока, , ОписаниеСвойства.Наименование, Истина);
			ДобавляемыеРеквизиты.Добавить(Реквизит);
		КонецЕсли;
		
		Если ОписаниеСвойства.Удалено Тогда
			ТипЗначенияСвойства = Новый ОписаниеТипов("Строка");
		КонецЕсли;
		
		Реквизит = Новый РеквизитФормы(ОписаниеСвойства.ИмяРеквизитаЗначение, ТипЗначенияСвойства, , ОписаниеСвойства.Наименование, Истина);
		ДобавляемыеРеквизиты.Добавить(Реквизит);
		
		ОписаниеСвойства.ДополнительноеЗначение =
			УправлениеСвойствамиСлужебный.ТипЗначенияСодержитЗначенияСвойств(ТипЗначенияСвойства);
		
		ОписаниеСвойства.Булево = ОбщегоНазначения.ОписаниеТипаСостоитИзТипа(ТипЗначенияСвойства, Тип("Булево"));
	КонецЦикла;
	Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);
	
	// Создание элементов формы.
	Для Каждого ОписаниеСвойства Из ОписаниеСвойств Цикл
		
		ИмяЭлементаДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения;
		Если ТипЗнч(ИмяЭлементаДляРазмещения) <> Тип("СписокЗначений") Тогда
			Если ИмяЭлементаДляРазмещения = Неопределено Тогда
				ИмяЭлементаДляРазмещения = "";
			КонецЕсли;
			
			ЭлементРазмещения = ?(ИмяЭлементаДляРазмещения = "", Неопределено, Форма.Элементы[ИмяЭлементаДляРазмещения]);
		Иначе
			РазделыДляРазмещения = Форма.Свойства_ИмяЭлементаДляРазмещения;
			РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению(ОписаниеСвойства.Набор);
			Если РазмещениеНабора = Неопределено Тогда
				РазмещениеНабора = РазделыДляРазмещения.НайтиПоЗначению("ВсеОстальные");
			КонецЕсли;
			ЭлементРазмещения = Форма.Элементы[РазмещениеНабора.Представление];
		КонецЕсли;
		
		ФормаОписаниеСвойства = Форма.Свойства_ОписаниеДополнительныхРеквизитов.Добавить();
		ЗаполнитьЗначенияСвойств(ФормаОписаниеСвойства, ОписаниеСвойства);
		
		// Заполнение таблицы зависимых дополнительных реквизитов.
		Если ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.Количество() > 0
			И Не ОписаниеСвойства.Удалено Тогда
			ОписаниеЗависимогоРеквизита = Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов.Добавить();
			ЗаполнитьЗначенияСвойств(ОписаниеЗависимогоРеквизита, ОписаниеСвойства);
		КонецЕсли;
		
		ОтборСтрок = Новый Структура;
		ОтборСтрок.Вставить("НаборСвойств", ОписаниеСвойства.Набор);
		ЗависимостиДанногоНабора = ОписаниеСвойства.ЗависимостиДополнительныхРеквизитов.НайтиСтроки(ОтборСтрок);
		Для Каждого СтрокаТаблицы Из ЗависимостиДанногоНабора Цикл
			Если СтрокаТаблицы.ЗависимоеСвойство = "ЗаполнятьОбязательно"
				И ОписаниеСвойства.ТипЗначения = Новый ОписаниеТипов("Булево") Тогда
				Продолжить;
			КонецЕсли;
			Если ОписаниеСвойства.Удалено Тогда
				Продолжить;
			КонецЕсли;
			
			Если ТипЗнч(СтрокаТаблицы.Реквизит) = Тип("Строка") Тогда
				ПутьКРеквизиту = "Параметры.ОписаниеОбъекта." + СтрокаТаблицы.Реквизит;
			Иначе
				ОписаниеДополнительногоРеквизита = ОписаниеСвойств.Найти(СтрокаТаблицы.Реквизит, "Свойство");
				Если ОписаниеДополнительногоРеквизита = Неопределено Тогда
					Продолжить; // Дополнительный реквизит не существует, условие игнорируется.
				КонецЕсли;
				ПутьКРеквизиту = "Параметры.Форма." + ОписаниеДополнительногоРеквизита.ИмяРеквизитаЗначение;
			КонецЕсли;
			
			УправлениеСвойствамиСлужебный.ПостроитьУсловияЗависимостей(ОписаниеЗависимогоРеквизита, ПутьКРеквизиту, СтрокаТаблицы);
		КонецЦикла;
		
		Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда
			Если ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда
				Значение = ОписаниеСвойства.ТипЗначения.ПривестиЗначение(ОписаниеСвойства.Значение);
				СтрокаЗначение = СтроковыеФункции.ФорматированнаяСтрока(Значение);
			Иначе
				Значение = НСтр("ru = 'не задано'");
				СсылкаРедактирования = "НеЗадано";
				СтрокаЗначение = Новый ФорматированнаяСтрока(Значение,, ЦветаСтиля.ЦветПустойГиперссылки,, СсылкаРедактирования);
			КонецЕсли;
			Форма[ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение] = СтрокаЗначение;
		КонецЕсли;
		Форма[ОписаниеСвойства.ИмяРеквизитаЗначение] = ОписаниеСвойства.Значение;
		
		Если ОписаниеСвойства.Удалено И Форма.Свойства_СкрытьУдаленные Тогда
			Продолжить;
		КонецЕсли;
		
		Если НаборыСвойствОбъекта.Количество() > 1 Тогда
			
			ЭлементСписка = Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.НайтиПоЗначению(
				ОписаниеСвойства.Набор);
			
			Если ЭлементСписка <> Неопределено Тогда
				Родитель = Форма.Элементы[ЭлементСписка.Представление];
			Иначе
				ОписаниеНабора = НаборыСвойствОбъекта.Найти(ОписаниеСвойства.Набор, "Набор");
				
				Если ОписаниеНабора = Неопределено Тогда
					ОписаниеНабора = НаборыСвойствОбъекта.Добавить();
					ОписаниеНабора.Набор     = ОписаниеСвойства.Набор;
					ОписаниеНабора.Заголовок = НСтр("ru = 'Удаленные реквизиты'")
				КонецЕсли;
				
				Если НЕ ЗначениеЗаполнено(ОписаниеНабора.Заголовок) Тогда
					ОписаниеНабора.Заголовок = Строка(ОписаниеСвойства.Набор);
				КонецЕсли;
				
				ИмяЭлементаНабора = "НаборДополнительныхРеквизитов" + ОписаниеСвойства.ИмяУникальнаяЧасть;
				
				Родитель = Форма.Элементы.Добавить(ИмяЭлементаНабора, Тип("ГруппаФормы"), ЭлементРазмещения);
				
				Форма.Свойства_ЭлементыГруппДополнительныхРеквизитов.Добавить(
					ОписаниеСвойства.Набор, Родитель.Имя);
				
				Если ТипЗнч(ЭлементРазмещения) = Тип("ГруппаФормы")
				   И ЭлементРазмещения.Вид = ВидГруппыФормы.Страницы Тогда
					
					Родитель.Вид = ВидГруппыФормы.Страница;
				Иначе
					Родитель.Вид = ВидГруппыФормы.ОбычнаяГруппа;
					Родитель.Отображение = ОтображениеОбычнойГруппы.Нет;
				КонецЕсли;
				Родитель.ОтображатьЗаголовок = Ложь;
				Родитель.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
				
				ЗаполненныеСвойстваГруппы = Новый Структура;
				Для каждого Колонка Из НаборыСвойствОбъекта.Колонки Цикл
					Если ОписаниеНабора[Колонка.Имя] <> Неопределено Тогда
						ЗаполненныеСвойстваГруппы.Вставить(Колонка.Имя, ОписаниеНабора[Колонка.Имя]);
					КонецЕсли;
				КонецЦикла;
				ЗаполнитьЗначенияСвойств(Родитель, ЗаполненныеСвойстваГруппы);
			КонецЕсли;
		Иначе
			Родитель = ЭлементРазмещения;
		КонецЕсли;
		
		Если ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
			ИмяГруппыГиперссылки = "Группа_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
			ГруппаГиперссылки = Форма.Элементы.Добавить(ИмяГруппыГиперссылки, Тип("ГруппаФормы"), Родитель);
			ГруппаГиперссылки.Вид = ВидГруппыФормы.ОбычнаяГруппа;
			ГруппаГиперссылки.Отображение = ОтображениеОбычнойГруппы.Нет;
			ГруппаГиперссылки.ОтображатьЗаголовок = Ложь;
			ГруппаГиперссылки.Группировка = ГруппировкаПодчиненныхЭлементовФормы.ГоризонтальнаяВсегда;
			ГруппаГиперссылки.Заголовок = ОписаниеСвойства.Наименование;
			
			Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), ГруппаГиперссылки); // РасширениеПоляФормыДляПоляНадписи, РасширениеПоляФормыДляПоляВвода
			
			РеквизитДоступен = РеквизитДоступенПоФункциональнымОпциям(ОписаниеСвойства);
			Если РеквизитДоступен И Не ПоляНадписей Тогда
				ИмяКнопки = "Кнопка_" + ОписаниеСвойства.ИмяУникальнаяЧасть;
				Кнопка = Форма.Элементы.Добавить(
					ИмяКнопки,
					Тип("КнопкаФормы"),
					ГруппаГиперссылки);
					
				Кнопка.ТолькоВоВсехДействиях = Истина;
				Кнопка.ИмяКоманды = "РедактироватьГиперссылкуРеквизита";
				Кнопка.ОтображениеФигуры = ОтображениеФигурыКнопки.ПриАктивности;
			КонецЕсли;
			
			Если Не ОписаниеСвойства.СтрокаСсылочногоТипа И ЗначениеЗаполнено(ОписаниеСвойства.Значение) Тогда
				Элемент.Гиперссылка = Истина;
			КонецЕсли;
		Иначе
			Элемент = Форма.Элементы.Добавить(ОписаниеСвойства.ИмяРеквизитаЗначение, Тип("ПолеФормы"), Родитель); // РасширениеПоляФормыДляПоляНадписи, РасширениеПоляФормыДляПоляВвода
		КонецЕсли;
		
		ФормаОписаниеСвойства.ЭлементФормыДобавлен = Истина;
		
		Если ОписаниеСвойства.Булево И ПустаяСтрока(ОписаниеСвойства.ФорматСвойства) Тогда
			Элемент.Вид = ВидПоляФормы.ПолеФлажка;
			Элемент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Право;
		Иначе
			Если ПоляНадписей Тогда
				Элемент.Вид = ВидПоляФормы.ПолеВвода;
			ИначеЕсли ОписаниеСвойства.ВыводитьВВидеГиперссылки
				И (ОписаниеСвойства.СтрокаСсылочногоТипа
					Или ЗначениеЗаполнено(ОписаниеСвойства.Значение))Тогда
				Элемент.Вид = ВидПоляФормы.ПолеНадписи;
			Иначе
				Элемент.Вид = ВидПоляФормы.ПолеВвода;
				Элемент.АвтоОтметкаНезаполненного = ОписаниеСвойства.ЗаполнятьОбязательно И НЕ ОписаниеСвойства.Удалено;
			КонецЕсли;
			
			Элемент.РастягиватьПоВертикали = Ложь;
			Элемент.ПоложениеЗаголовка     = ПоложениеЗаголовкаЭлементаФормы.Лево;
		КонецЕсли;
		
		Если ОписаниеСвойства.СтрокаСсылочногоТипа Тогда
			Элемент.ПутьКДанным = ОписаниеСвойства.ИмяСсылочногоРеквизитаЗначение;
			Элемент.УстановитьДействие("ОбработкаНавигационнойСсылки", "Подключаемый_СвойстваВыполнитьКоманду");
		Иначе
			Элемент.ПутьКДанным = ОписаниеСвойства.ИмяРеквизитаЗначение;
		КонецЕсли;
		Элемент.Подсказка   = ОписаниеСвойства.Подсказка;
		Элемент.УстановитьДействие("ПриИзменении", "Подключаемый_ПриИзмененииДополнительногоРеквизита");
		
		Если Элемент.Вид = ВидПоляФормы.ПолеВвода
		   И Не ИспользоватьНеограниченнуюСтроку
		   И ОписаниеСвойства.ТипЗначения.Типы().Найти(Тип("Строка")) <> Неопределено Тогда
			
			Элемент.СвязьПоТипу = Новый СвязьПоТипу("Свойства_ОписаниеДополнительныхРеквизитов.Свойство",
				ОписаниеСвойств.Индекс(ОписаниеСвойства));
		КонецЕсли;
		
		Если ОписаниеСвойства.МногострочноеПолеВвода > 0 Тогда
			Если НЕ ПоляНадписей Тогда
				Элемент.МногострочныйРежим = Истина;
			КонецЕсли;
			Элемент.Высота = ОписаниеСвойства.МногострочноеПолеВвода;
		КонецЕсли;
		
		Если НЕ ПустаяСтрока(ОписаниеСвойства.ФорматСвойства)
			И Не ОписаниеСвойства.ВыводитьВВидеГиперссылки Тогда
			Если ПоляНадписей Тогда
				Элемент.Формат = ОписаниеСвойства.ФорматСвойства;
			Иначе
				ФорматнаяСтрока = "";
				Массив = СтрРазделить(ОписаниеСвойства.ФорматСвойства, ";", Ложь);
				
				Для каждого Подстрока Из Массив Цикл
					Если СтрНайти(Подстрока, "ДП=") > 0 ИЛИ СтрНайти(Подстрока, "DE=") > 0 Тогда
						Продолжить;
					КонецЕсли;
					Если СтрНайти(Подстрока, "ЧН=") > 0 ИЛИ СтрНайти(Подстрока, "NZ=") > 0 Тогда
						Продолжить;
					КонецЕсли;
					Если СтрНайти(Подстрока, "ДФ=") > 0 ИЛИ СтрНайти(Подстрока, "DF=") > 0 Тогда
						Если СтрНайти(Подстрока, "ддд") > 0 ИЛИ СтрНайти(Подстрока, "ddd") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "ддд", "дд");
							Подстрока = СтрЗаменить(Подстрока, "ddd", "dd");
						КонецЕсли;
						Если СтрНайти(Подстрока, "дддд") > 0 ИЛИ СтрНайти(Подстрока, "dddd") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "дддд", "дд");
							Подстрока = СтрЗаменить(Подстрока, "dddd", "dd");
						КонецЕсли;
						Если СтрНайти(Подстрока, "МММ") > 0 ИЛИ СтрНайти(Подстрока, "MMM") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "МММ", "ММ");
							Подстрока = СтрЗаменить(Подстрока, "MMM", "MM");
						КонецЕсли;
						Если СтрНайти(Подстрока, "ММММ") > 0 ИЛИ СтрНайти(Подстрока, "MMMM") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "ММММ", "ММ");
							Подстрока = СтрЗаменить(Подстрока, "MMMM", "MM");
						КонецЕсли;
					КонецЕсли;
					Если СтрНайти(Подстрока, "ДЛФ=") > 0 ИЛИ СтрНайти(Подстрока, "DLF=") > 0 Тогда
						Если СтрНайти(Подстрока, "ДД") > 0 ИЛИ СтрНайти(Подстрока, "DD") > 0 Тогда
							Подстрока = СтрЗаменить(Подстрока, "ДД", "Д");
							Подстрока = СтрЗаменить(Подстрока, "DD", "D");
						КонецЕсли;
					КонецЕсли;
					ФорматнаяСтрока = ФорматнаяСтрока + ?(ФорматнаяСтрока = "", "", ";") + Подстрока;
				КонецЦикла;
				
				Элемент.Формат = ФорматнаяСтрока;
				Элемент.ФорматРедактирования = ФорматнаяСтрока;
			КонецЕсли;
		КонецЕсли;
		
		Если ОписаниеСвойства.Удалено Тогда
			Элемент.ЦветТекстаЗаголовка = ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет;
			Элемент.ШрифтЗаголовка = ШрифтыСтиля.ЗаголовокУдаленногоРеквизитаШрифт;
			Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
				Элемент.КнопкаОчистки = Истина;
				Элемент.КнопкаВыбора = Ложь;
				Элемент.КнопкаОткрытия = Ложь;
				Элемент.КнопкаВыпадающегоСписка = Ложь;
				Элемент.РедактированиеТекста = Ложь;
			КонецЕсли;
		КонецЕсли;
		
		Если НЕ ПоляНадписей И ОписаниеСвойства.ДополнительноеЗначение И Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда
			ПараметрыВыбора = Новый Массив;
			ПараметрыВыбора.Добавить(Новый ПараметрВыбора("Отбор.Владелец",
				?(ЗначениеЗаполнено(ОписаниеСвойства.ВладелецДополнительныхЗначений),
					ОписаниеСвойства.ВладелецДополнительныхЗначений, ОписаниеСвойства.Свойство)));
			Элемент.ПараметрыВыбора = Новый ФиксированныйМассив(ПараметрыВыбора);
		КонецЕсли;
		
	КонецЦикла;
	
	// Установка видимости, доступности и обязательности заполнения дополнительных реквизитов.
	Для Каждого ОписаниеЗависимогоРеквизита Из Форма.Свойства_ОписаниеЗависимыхДополнительныхРеквизитов Цикл
		Если ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки Тогда
			ОбрабатываемыйЭлемент = СтрЗаменить(ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение, "ДополнительныйРеквизитЗначение_", "Группа_");
		Иначе
			ОбрабатываемыйЭлемент = ОписаниеЗависимогоРеквизита.ИмяРеквизитаЗначение;
		КонецЕсли;
		
		Если ОписаниеЗависимогоРеквизита.УсловиеДоступности <> Неопределено Тогда
			Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеДоступности);
			Элемент = Форма.Элементы[ОбрабатываемыйЭлемент]; // ПолеФормы
			Если Элемент.Доступность <> Результат Тогда
				Элемент.Доступность = Результат;
			КонецЕсли;
		КонецЕсли;
		Если ОписаниеЗависимогоРеквизита.УсловиеВидимости <> Неопределено Тогда
			Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеВидимости);
			Элемент = Форма.Элементы[ОбрабатываемыйЭлемент];
			Если Элемент.Видимость <> Результат Тогда
				Элемент.Видимость = Результат;
			КонецЕсли;
		КонецЕсли;
		Если ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения <> Неопределено Тогда
			Если Не ОписаниеЗависимогоРеквизита.ЗаполнятьОбязательно Тогда
				Продолжить;
			КонецЕсли;
			
			Результат = РезультатВычисленияУсловия(Форма, ОписаниеОбъекта, ОписаниеЗависимогоРеквизита.УсловиеОбязательностиЗаполнения);
			Элемент = Форма.Элементы[ОбрабатываемыйЭлемент];
			Если Не ОписаниеЗависимогоРеквизита.ВыводитьВВидеГиперссылки
				И Элемент.АвтоОтметкаНезаполненного <> Результат Тогда
				Элемент.АвтоОтметкаНезаполненного = Результат;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Структура = Новый Структура("ПараметрыСвойств");
	ЗаполнитьЗначенияСвойств(Структура, Форма);
	Если ТипЗнч(Структура.ПараметрыСвойств) = Тип("Структура")
		И Структура.ПараметрыСвойств.Свойство("ВыполненаОтложеннаяИнициализация") Тогда
		Форма.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация = Истина;
		// Удаление временной декорации, если она была добавлена.
		Если Форма.ПараметрыСвойств.Свойство("ДобавленаПустаяДекорация") Тогда
			Для Каждого ИмяДекорации Из Форма.ПараметрыСвойств.КоллекцияДекораций Цикл
				Форма.Элементы.Удалить(Форма.Элементы[ИмяДекорации]);
			КонецЦикла;
			Форма.ПараметрыСвойств.Удалить("ДобавленаПустаяДекорация");
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры
// Возвращает заполненную таблицу значений свойств объекта.
Функция ЗначенияСвойств(ДополнительныеСвойстваОбъекта, Наборы, ЭтоДополнительноеСведение) Экспорт
	
	Если ДополнительныеСвойстваОбъекта.Количество() = 0 Тогда
		// Предварительная быстрая проверка использования дополнительных свойств.
		СвойстваНеНайдены = ДополнительныеРеквизитыИСведенияНеНайдены(Наборы, ЭтоДополнительноеСведение);
		
		Если СвойстваНеНайдены Тогда
			ОписаниеСвойств = Новый ТаблицаЗначений;
			ОписаниеСвойств.Колонки.Добавить("Набор");
			ОписаниеСвойств.Колонки.Добавить("Свойство");
			ОписаниеСвойств.Колонки.Добавить("ВладелецДополнительныхЗначений");
			ОписаниеСвойств.Колонки.Добавить("ЗаполнятьОбязательно");
			ОписаниеСвойств.Колонки.Добавить("Наименование");
			ОписаниеСвойств.Колонки.Добавить("ТипЗначения");
			ОписаниеСвойств.Колонки.Добавить("ФорматСвойства");
			ОписаниеСвойств.Колонки.Добавить("МногострочноеПолеВвода");
			ОписаниеСвойств.Колонки.Добавить("Удалено");
			ОписаниеСвойств.Колонки.Добавить("Значение");
			Возврат ОписаниеСвойств;
		КонецЕсли;
	КонецЕсли;
	
	Свойства = ДополнительныеСвойстваОбъекта.ВыгрузитьКолонку("Свойство");
	
	НаборыСвойств = Новый ТаблицаЗначений;
	
	НаборыСвойств.Колонки.Добавить(
		"Набор", Новый ОписаниеТипов("СправочникСсылка.НаборыДополнительныхРеквизитовИСведений"));
	
	НаборыСвойств.Колонки.Добавить(
		"ПорядокНабора", Новый ОписаниеТипов("Число"));
	
	Для каждого ЭлементСписка Из Наборы Цикл
		НоваяСтрока = НаборыСвойств.Добавить();
		НоваяСтрока.Набор         = ЭлементСписка.Значение;
		НоваяСтрока.ПорядокНабора = Наборы.Индекс(ЭлементСписка);
	КонецЦикла;
	
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Свойства",      Свойства);
	Запрос.УстановитьПараметр("НаборыСвойств", НаборыСвойств);
	Запрос.УстановитьПараметр("ЭтоОсновнойЯзык", ТекущийЯзык() = Метаданные.ОсновнойЯзык);
	Запрос.УстановитьПараметр("КодЯзыка", ТекущийЯзык().КодЯзыка);
	
	Запрос.Текст =
	"ВЫБРАТЬ
	|	НаборыСвойств.Набор КАК Набор,
	|	НаборыСвойств.ПорядокНабора КАК ПорядокНабора
	|ПОМЕСТИТЬ НаборыСвойств
	|ИЗ
	|	&НаборыСвойств КАК НаборыСвойств
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	НаборыСвойств.Набор КАК Набор,
	|	НаборыСвойств.ПорядокНабора КАК ПорядокНабора,
	|	СвойстваНаборов.Свойство КАК Свойство,
	|	СвойстваНаборов.ПометкаУдаления КАК ПометкаУдаления,
	|	СвойстваНаборов.НомерСтроки КАК ПорядокСвойства
	|ПОМЕСТИТЬ СвойстваНаборов
	|ИЗ
	|	НаборыСвойств КАК НаборыСвойств
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты КАК СвойстваНаборов
	|		ПО (СвойстваНаборов.Ссылка = НаборыСвойств.Набор)
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
	|		ПО (СвойстваНаборов.Свойство = Свойства.Ссылка)
	|ГДЕ
	|	НЕ СвойстваНаборов.ПометкаУдаления
	|	И НЕ Свойства.ПометкаУдаления
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Свойства.Ссылка КАК Свойство
	|ПОМЕСТИТЬ ЗаполненныеСвойства
	|ИЗ
	|	ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК Свойства
	|ГДЕ
	|	Свойства.Ссылка В(&Свойства)
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	СвойстваНаборов.Набор КАК Набор,
	|	СвойстваНаборов.ПорядокНабора КАК ПорядокНабора,
	|	СвойстваНаборов.Свойство КАК Свойство,
	|	СвойстваНаборов.ПорядокСвойства КАК ПорядокСвойства,
	|	СвойстваНаборов.ПометкаУдаления КАК Удалено
	|ПОМЕСТИТЬ ВсеСвойства
	|ИЗ
	|	СвойстваНаборов КАК СвойстваНаборов
	|
	|ОБЪЕДИНИТЬ ВСЕ
	|
	|ВЫБРАТЬ
	|	ЗНАЧЕНИЕ(Справочник.НаборыДополнительныхРеквизитовИСведений.ПустаяСсылка),
	|	0,
	|	ЗаполненныеСвойства.Свойство,
	|	0,
	|	ИСТИНА
	|ИЗ
	|	ЗаполненныеСвойства КАК ЗаполненныеСвойства
	|		ЛЕВОЕ СОЕДИНЕНИЕ СвойстваНаборов КАК СвойстваНаборов
	|		ПО ЗаполненныеСвойства.Свойство = СвойстваНаборов.Свойство
	|ГДЕ
	|	СвойстваНаборов.Свойство ЕСТЬ NULL
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВсеСвойства.Набор КАК Набор,
	|	ВсеСвойства.Свойство КАК Свойство,
	|	ДополнительныеРеквизитыИСведения.ВладелецДополнительныхЗначений КАК ВладелецДополнительныхЗначений,
	|	ДополнительныеРеквизитыИСведения.ЗаполнятьОбязательно КАК ЗаполнятьОбязательно,
	|	ВЫБОР
	|		КОГДА &ЭтоОсновнойЯзык
	|			ТОГДА ДополнительныеРеквизитыИСведения.Заголовок
	|		ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Заголовок, ДополнительныеРеквизитыИСведения.Заголовок) КАК СТРОКА(150))
	|	КОНЕЦ КАК Наименование,
	|	ДополнительныеРеквизитыИСведения.ТипЗначения КАК ТипЗначения,
	|	ДополнительныеРеквизитыИСведения.ФорматСвойства КАК ФорматСвойства,
	|	ДополнительныеРеквизитыИСведения.МногострочноеПолеВвода КАК МногострочноеПолеВвода,
	|	ВсеСвойства.Удалено КАК Удалено,
	|	ДополнительныеРеквизитыИСведения.Доступен КАК Доступен,
	|	ДополнительныеРеквизитыИСведения.Виден КАК Виден,
	|	ВЫБОР
	|		КОГДА &ЭтоОсновнойЯзык
	|			ТОГДА ДополнительныеРеквизитыИСведения.Подсказка
	|		ИНАЧЕ ВЫРАЗИТЬ(ЕСТЬNULL(СвойстваПредставления.Подсказка, ДополнительныеРеквизитыИСведения.Подсказка) КАК СТРОКА(150))
	|	КОНЕЦ КАК Подсказка,
	|	ДополнительныеРеквизитыИСведения.ВыводитьВВидеГиперссылки КАК ВыводитьВВидеГиперссылки,
	|	ДополнительныеРеквизитыИСведения.ЗависимостиДополнительныхРеквизитов.(
	|		ЗависимоеСвойство КАК ЗависимоеСвойство,
	|		Реквизит КАК Реквизит,
	|		Условие КАК Условие,
	|		Значение КАК Значение,
	|		НаборСвойств КАК НаборСвойств
	|	) КАК ЗависимостиДополнительныхРеквизитов
	|ИЗ
	|	ВсеСвойства КАК ВсеСвойства
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения КАК ДополнительныеРеквизитыИСведения
	|		ПО ВсеСвойства.Свойство = ДополнительныеРеквизитыИСведения.Ссылка
	|		ЛЕВОЕ СОЕДИНЕНИЕ ПланВидовХарактеристик.ДополнительныеРеквизитыИСведения.Представления КАК СвойстваПредставления
	|		ПО (СвойстваПредставления.Ссылка = ДополнительныеРеквизитыИСведения.Ссылка)
	|			И (СвойстваПредставления.КодЯзыка = &КодЯзыка)
	|
	|УПОРЯДОЧИТЬ ПО
	|	Удалено,
	|	ВсеСвойства.ПорядокНабора,
	|	ВсеСвойства.ПорядокСвойства";
	
	Если ЭтоДополнительноеСведение Тогда
		Запрос.Текст = СтрЗаменить(
			Запрос.Текст,
			"Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеРеквизиты",
			"Справочник.НаборыДополнительныхРеквизитовИСведений.ДополнительныеСведения");
	КонецЕсли;
	
	ОписаниеСвойств = Запрос.Выполнить().Выгрузить();
	ОписаниеСвойств.Индексы.Добавить("Свойство");
	ОписаниеСвойств.Колонки.Добавить("Значение");
	
	// Удаление дублей свойств в нижестоящих наборах свойств.
	Если Наборы.Количество() > 1 Тогда
		Индекс = ОписаниеСвойств.Количество()-1;
		
		Пока Индекс >= 0 Цикл
			Строка = ОписаниеСвойств[Индекс];
			НайденнаяСтрока = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
			
			Если НайденнаяСтрока <> Неопределено
			   И НайденнаяСтрока <> Строка Тогда
				
				ОписаниеСвойств.Удалить(Индекс);
			КонецЕсли;
			
			Индекс = Индекс-1;
		КонецЦикла;
	КонецЕсли;
	
	// {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:33].
	ИспользованныеСвойства = Новый Массив;
	// }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:33].
	
	// Заполнение значений свойств.
	Для Каждого Строка Из ДополнительныеСвойстваОбъекта Цикл
		ОписаниеСвойства = ОписаниеСвойств.Найти(Строка.Свойство, "Свойство");
		Если ОписаниеСвойства <> Неопределено Тогда
			// {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:34].
			Если ИспользованныеСвойства.Найти(ОписаниеСвойства.Свойство) = Неопределено Тогда
				ИспользованныеСвойства.Добавить(ОписаниеСвойства.Свойство) 
			Иначе
				НоваяСтрокаОписания = ОписаниеСвойств.Добавить();
				ЗаполнитьЗначенияСвойств(НоваяСтрокаОписания, ОписаниеСвойства);
				ОписаниеСвойства = НоваяСтрокаОписания;
			КонецЕсли;
			// }} {{ Prosto. [Silantev Oleg Sergeevich] - [26.09.2020 21:34].
			// Поддержка строк неограниченной длины.
			Если НЕ ЭтоДополнительноеСведение Тогда
				ИспользоватьСтрокуВВидеСсылки = ИспользоватьСтрокуВВидеСсылки(
					ОписаниеСвойства.ТипЗначения,
					ОписаниеСвойства.ВыводитьВВидеГиперссылки,
					ОписаниеСвойства.МногострочноеПолеВвода);
				ИспользоватьНеограниченнуюСтроку = ИспользоватьНеограниченнуюСтроку(
					ОписаниеСвойства.ТипЗначения,
					ОписаниеСвойства.МногострочноеПолеВвода);
				НеобходимоПеренестиЗначениеИзСсылки = НеобходимоПеренестиЗначениеИзСсылки(
						Строка.ТекстоваяСтрока,
						Строка.Значение);
				Если (ИспользоватьНеограниченнуюСтроку
						Или ИспользоватьСтрокуВВидеСсылки
						Или НеобходимоПеренестиЗначениеИзСсылки)
					И НЕ ПустаяСтрока(Строка.ТекстоваяСтрока) Тогда
					Если Не ИспользоватьСтрокуВВидеСсылки И НеобходимоПеренестиЗначениеИзСсылки Тогда
						ЗначениеБезСсылки = ЗначениеБезСсылки(Строка.ТекстоваяСтрока, Строка.Значение);
						ОписаниеСвойства.Значение = ЗначениеБезСсылки;
					Иначе
						ОписаниеСвойства.Значение = Строка.ТекстоваяСтрока;
					КонецЕсли;
				Иначе
					ОписаниеСвойства.Значение = Строка.Значение;
				КонецЕсли;
			Иначе
				ОписаниеСвойства.Значение = Строка.Значение;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;
	
	Возврат ОписаниеСвойств;
	
КонецФункции

Работа в примерах была осуществлена с версией БСП: 3.1.2.245

Источники

Как подключить дополнительные реквизиты к справочнику или документу в БСП 2.3

Создание множественного дополнительного реквизита. Управление торговлей 11

Понравилась статья? Поделить с друзьями:

Вот еще несколько интересных статей нашего сайта:

  • Монгольские компании в москве
  • Мондиал бизнес консорциум ооо
  • Монетка реквизиты организации
  • Монополия на большую компанию
  • Монопольные компании в россии

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии