1С заполнитьзначениясвойств

Копирует свойства одного объекта в одноименные свойства другого

Синтаксис

Процедура ЗаполнитьЗначенияСвойств() имеет следующий синтаксис:

ЗаполнитьЗначенияСвойств(Приемник, Источник, , )

А также альтернативный англоязычный синтаксис:

FillPropertyValues(Destination, Source, , )

Параметры

Описание параметров процедуры ЗаполнитьЗначенияСвойств():

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

Внимание! Значение данного параметра не может быть примитивного типа!

Источник Произвольный Значения свойств данного объекта будут установлены в соответствующие свойства Приемника.

Внимание! Значение данного параметра не может быть примитивного типа!

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

Описание

Процедура ЗаполнитьЗначенияСвойств() Копирует свойства одного объекта в одноименные свойства другого. Сопоставление свойств производится по именам. Если указан параметр СписокСвойств, то в заполнении участвуют только они, параметр ИсключаяСвойства игнорируется. В противном случае, если указан параметр ИсключаяСвойства, свойства перечисленные в нем, исключаются из обработки.

Доступность

Пример использования

Пример кода с использованием процедуры ЗаполнитьЗначенияСвойств():

Источник = Новый Структура(«Наименование,Код», «Стул деревянный», 1); Получатель = Новый Структура(«Наименование,Код»); ЗаполнитьЗначенияСвойств(Получатель, Источник); Сообщить(Получатель.Наименование + » «); //Стул деревянный ЗаполнитьЗначенияСвойств(Получатель, Источник, «Наименование»); Сообщить(Получатель.Наименование + » «); //Стул деревянный ЗаполнитьЗначенияСвойств(Получатель, Источник, , «Код»); Сообщить(Получатель.Наименование + » «); //Стул деревянный

Теги: 1С:Предприятие • Квалификаторы • ОписаниеТипов • ТипыДанных

Слова «ОписаниеТипов» и «Квалификаторы» вызывают трудность понимания на начальном этапе использования. По сути это простые вещи — с толку может сбивать их название.

Что такое Квалификаторы?

В 1С есть простые типы: Число, Строка, Дата. Но иногда необходимо уточнить, что переменная будет не просто числом, а например, числом длиной 12 символов и 2 разрядами после запятой, при этом неотрицательное. В простых типах это сделать невозможно т.к. тип не имеет соответствующих свойств. Для таких случаев и нужен объект «Квалификатор».

Знак = ДопустимыйЗнак.Неотрицательный; КвалификаторЧисло = Новый КвалификаторыЧисла(12, 2, Знак);

У каждого простого типа есть свой квалификатор:

КвалификаторСтрока = Новый КвалификаторыСтроки(100); КвалификаторВремя = Новый КвалификаторыДаты(ЧастиДаты.Время);

Что такое Описание типов?

ОписаниеТипов — это объект, который содержит массив допустимых типов, но т.к. в массиве нет возможности указать дополнительные данные, то отдельно для простых типов (Число, Строка, Дата) можно уточнить свойства квалификаторами.

Новый ОписаниеТипов(Типы, КвалификаторыЧисла, КвалификаторыСтроки, КвалификаторыДаты)

  • Типы (обязательный, тип Массив, Строка). Массив значений типа Тип, состоящий из типов, которые будут использованы в объекте, или строка, содержащая имена типов, разделенных запятыми.
  • КвалификаторыЧисла (необязательный, тип КвалификаторыЧисла). Квалификаторы числа, описывающие допустимые значения числового типа. Если параметр не указан, то числа хранить нельзя.
  • КвалификаторыСтроки (необязательный, тип КвалификаторыСтроки). Квалификаторы строки, описывающие допустимые значения строкового типа. Если параметр не указан, то используется неограниченная длина строки.
  • КвалификаторыДаты (необязательный, тип КвалификаторыДаты). Квалификаторы даты, описывающие допустимые значения типа Дата. Если параметр не указан, то используются обе части даты (дата + время).

Создает описание типов на основании заданных типов и квалификаторов для типов Число, Строка, Дата.

У описания типов есть четыре параметра, первый — обязательный, в нем указываются типы. Остальные — необязательные, в них указываются квалификаторы. Для создания описания типов существует несколько вариантов.

Указание типа строкой:

ОписаниеТипов = Новый ОписаниеТипов(«СправочникСсылка.Склад»);

Можно указать несколько типов, разделяя их запятыми:

ОписаниеТипов = Новый ОписаниеТипов(«СправочникСсылка.Склад, ДокументСсылка.РеализацияТоваров»);

Можно передать массив типов:

МассивТипов = Новый Массив(); МассивТипов.Добавить(Тип(«СправочникСсылка.Склад»)); МассивТипов.Добавить(Тип(«ДокументСсылка.РеализацияТоваров»)); МассивТипов.Добавить(Тип(«Строка»)); КС100 = Новый КвалификаторыСтроки(100); ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,,КС100);

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

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

Для наглядности посмотрим на ограничение типов в реквизитах объекта конфигурации. По сути, это один механизм:

Поиск: 1С:Предприятие • Квалификаторы • Описание типов • Типы данных

Теги: 1С:Предприятие • Документ • ЗаполнятьИзДанныхЗаполнения • ЗначениеЗаполнения • ОбработкаЗаполнения

Частая задача — сделать так, чтобы форма нового объекта открывалась не «пустая», а уже заполненная некоторыми начальными данными. Для самых простых случаев можно использовать свойство ЗначениеЗаполнения, которое есть у реквизитов объектов конфигурации. В более сложных случаях можно использовать свойство ЗаполнятьИзДанныхЗаполнения. Если ни тот, ни другой способы не подходят, на встроенном языке можно описать собственный алгоритм начального заполнения данных нового объекта.

Свойство ЗначениеЗаполнения

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

У реквизитов объектов конфигурации существует свойство ЗначениеЗаполнения. Реквизит Склад имеет тип ссылки на справочник Склады, а в справочнике Склады существует предопределенный элемент ГлавныйСклад. Тогда прямо в конфигураторе можно указать, что в новых документах реквизит Склад будет сразу же заполнен ссылкой на ГлавныйСклад:

Cвойство ЗаполнятьИзДанныхЗаполнения

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

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

Собственный алгоритм заполнения реквизитов

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

Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Если ДанныеЗаполнения = Неопределено Тогда // «Простой» ввод нового объекта ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип(«СправочникСсылка.Поставщики») Тогда // Новый объект вводится на основании другого объекта. // В этом случае в данные заполнения передается ссылка на объект, являющийся основанием. // В данном случае обрабатывается ввод на основании элемента справочника Поставщики. ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип(«Структура») Тогда // Новый объект вводится командой из отобранного списка. // В данных заполнения будет структура, содержащая значения отбора: // «Поставщик» — СсылкаНаПоставщика // «Склад» — СсылкаНаСклад КонецЕсли; КонецПроцедуры

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

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

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

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

Поиск: 1С:Предприятие • Документ • Заполнять из данных заполнения • Значение заполнения • Обработка заполнения

Квалификаторы и ОписаниеТипов

Слова «ОписаниеТипов» и «Квалификаторы» у некоторых разработчиков вызывают трудность понимания на начальном этапе использования, хотя по сути это простые вещи с толку может сбивать их название, поэтому постараюсь объяснить смысл этих объектов.

В программе 1с есть простые типы: Число, Дата, Строка. Но иногда необходимо уточнить, что переменная будет не просто числом, а например, числом длиной 17 символов и 2 разрядами после запятой, при этом неотрицательное. В простых типах это сделать невозможно т.к. тип не имеет соответствующих свойств. Для таких случаев и нужен объект «Квалификатор». Это именно объект, создается он методом «Новый»:

КЧ17_2 = Новый КвалификаторыЧисла(17,2);

У каждого простого типа есть свой квалификатор. Соответственно есть также квалификаторы:

КС17 = Новый КвалификаторыСтроки(17);
КД_Время = Новый КвалификаторыДаты(ЧастиДаты.Время);

ОписаниеТипов – это объект который содержит массив допустимых типов, но т.к. в массиве нет возможности указать дополнительные данные, то отдельно для простых типов(Число, Строка, Дата) можно уточнить свойства квалификаторами.
У описания типов есть 4 параметра, первый – обязательный, в нем указываются типы. Остальные – необязательные, в них указываются квалификаторы. Для создания описания типов существует несколько вариантов.
Указание типа строкой:

ОписаниеТипов = Новый ОписаниеТипов(«СправочникСсылка.Склад»);

Можно указать несколько типов разделяя их запятыми:

ОписаниеТипов = Новый ОписаниеТипов(«СправочникСсылка.Склад, ДокументСсылка.РеализацияТоваровУслуг»);

Можно передать массив типов:

МассивТипов = Новый Массив.
МассивТипов.Добавить(Тип(«СправочникСсылка.Склад»));
МассивТипов.Добавить(Тип(«ДокументСсылка.РеализацияТоваровУслуг»));
МассивТипов.Добавить(Тип(«Строка»));
КС17 = Новый КвалификаторыСтроки(17);
ОписаниеТипов = Новый ОписаниеТипов(МассивТипов,,КС17);

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

P.S.

Итак, подытожим. Описание типов это объект, который используется, чтобы ограничить ввод данных, а квалификаторы это объекты которые дополняют ограничения для простых типов. Квалификаторов в описании типов 3 по одному для простых типов: Число, Строка, Дата. Соответственно у объекта ОписаниеТипов при создании 4 параметра: — первый массив доступных типов, последние три — квалификаторы. Т.к. квалификатор для каждого простого типа передается один, то соответственно нельзя назначить более одного ограничения для простого типа. Указывать все квалификаторы не обязательно, поэтому в вышеприведенном примере мы передали квалификатор для Строки(3 параметр), а для Числа(2-ой) и Даты(4-ый) не передавали.

Для наглядности проведу аналогию объекта ОписаниеТипов с ограничением типов в реквизитах, по сути это один механизм.

При редактировании типов данных реквизита мы увидим окно указанное выше. Что же здесь происходит, по сути, отметив флажками, типы мы добавим их в массив доступных типов объекта ОписаниеТипов для этого реквизита. А если тип простой, то внизу можно дополнительно его ограничить, указав значения, при этом будет создан квалификатор. Здесь наглядно видно, что нет смысла передавать несколько квалификаторов для одного простого типа, просто следует указать описание максимально возможного значения. Например, если могут записываться как число «12,258» так и «235,5»,то необходимо установить Длина: 6, Точность:3.

Чтобы было проще запомнить объект ОписаниеТипов, приведу следующую картинку:

Add a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *