1С 8.3 Метод ЗаполнитьЗначенияСвойств()
Данные > Примеры кода 1С > 1С 8.3 Процедуры и Функции
Перейти в раздел примеры кода 1С 8.3:
Синтаксис:
ЗаполнитьЗначенияСвойств(Приемник, Источник, [СписокСвойств], [ИсключаяСвойства]);
// Копирует свойства одного объекта в одноименные свойства другого. Сопоставление свойств производится по именам.
// Если указан параметр СписокСвойств, то в заполнении участвуют только они, параметр ИсключаяСвойства игнорируется.
// В противном случае, если указан параметр ИсключаяСвойства, свойства перечисленные в нем, исключаются из обработки.
// Копирует свойства одного объекта в одноименные свойства другого. Сопоставление свойств производится по именам.
// Если указан параметр СписокСвойств, то в заполнении участвуют только они, параметр ИсключаяСвойства игнорируется.
// В противном случае, если указан параметр ИсключаяСвойства, свойства перечисленные в нем, исключаются из обработки.
Приемник (обязательный параметр) - Произвольный - Значение, чьи свойства будут заполнены значениями соответствующих свойств Источника. Внимание! Значение данного параметра не может быть примитивного типа!
Источник (обязательный параметр) - Произвольный - Значения свойств данного объекта будут установлены в соответствующие свойства Приемника. Внимание! Значение данного параметра не может быть примитивного типа!
СписокСвойств - Строка - Ограничивает список имен свойств которые необходимо заполнить. Имена свойств указываются через запятую. Если параметр опущен, то копируются только те свойства, которые представлены одновременно и в Источнике, и в Приемнике.
ИсключаяСвойства - Строка - Список имен свойств Приемника, разделенный запятыми, которые необходимо исключить из заполнения. Если свойства, указанного в параметре не окажется в Приемнике, будет вызвано исключение.
Пример использования ЗаполнитьЗначенияСвойств() при заполнении документа в 1С 8.3:
Процедура ПримерМетодаЗаполнитьЗначенияСвойств()
Накладная = Документы.Накладная.СоздатьДокумент();
// Заполняем накладную на основании счёта
ЗаполнитьЗначенияСвойств(Накладная, СчетНаОплату, , "Дата, Проведен, ПометкаУдаления");
// Заполняем табличную часть накладной
Для Каждого СтрокаСчета Из СчетНаОплату.Услуги Цикл
СтрокаНакладной = Накладная.Услуги.Добавить();
// Заполняем значения очередной строки табличной части
ЗаполнитьЗначенияСвойств(СтрокаНакладной, СтрокаСчета);
КонецЦикла;
КонецПроцедуры
Накладная = Документы.Накладная.СоздатьДокумент();
// Заполняем накладную на основании счёта
ЗаполнитьЗначенияСвойств(Накладная, СчетНаОплату, , "Дата, Проведен, ПометкаУдаления");
// Заполняем табличную часть накладной
Для Каждого СтрокаСчета Из СчетНаОплату.Услуги Цикл
СтрокаНакладной = Накладная.Услуги.Добавить();
// Заполняем значения очередной строки табличной части
ЗаполнитьЗначенияСвойств(СтрокаНакладной, СтрокаСчета);
КонецЦикла;
КонецПроцедуры
Пример использования ЗаполнитьЗначенияСвойств() при заполнении структуры в 1С 8.3:
Процедура ПримерМетодаЗаполнитьЗначенияСвойств()
ИсточникСтруктураА = Новый Структура("Наименование,Код", "Паладий", 1);
ПриемникСтруктураА = Новый Структура("Наименование,Код");
ЗаполнитьЗначенияСвойств(ПриемникСтруктураА, ИсточникСтруктураА);
Сообщить(ПриемникСтруктураА.Наименование + " (" + ПриемникСтруктураА.Код + ")");
//Паладий (1)
ИсточникСтруктураБ = Новый Структура("Наименование,Код", "Золото", 2);
ПриемникСтруктураБ = Новый Структура("Наименование,Код");
ЗаполнитьЗначенияСвойств(ПриемникСтруктураБ, ИсточникСтруктураБ, "Наименование");
Сообщить(ПриемникСтруктураБ.Наименование + " (" + ПриемникСтруктураБ.Код + ")");
//Золото ()
ИсточникСтруктураВ = Новый Структура("Наименование,Код", "Серебро", 3);
ПриемникСтруктураВ = Новый Структура("Наименование,Код");
ЗаполнитьЗначенияСвойств(ПриемникСтруктураВ, ИсточникСтруктураВ, , "Код");
Сообщить(ПриемникСтруктураВ.Наименование + " (" + ПриемникСтруктураВ.Код + ")");
//Серебро ()
КонецПроцедуры
ИсточникСтруктураА = Новый Структура("Наименование,Код", "Паладий", 1);
ПриемникСтруктураА = Новый Структура("Наименование,Код");
ЗаполнитьЗначенияСвойств(ПриемникСтруктураА, ИсточникСтруктураА);
Сообщить(ПриемникСтруктураА.Наименование + " (" + ПриемникСтруктураА.Код + ")");
//Паладий (1)
ИсточникСтруктураБ = Новый Структура("Наименование,Код", "Золото", 2);
ПриемникСтруктураБ = Новый Структура("Наименование,Код");
ЗаполнитьЗначенияСвойств(ПриемникСтруктураБ, ИсточникСтруктураБ, "Наименование");
Сообщить(ПриемникСтруктураБ.Наименование + " (" + ПриемникСтруктураБ.Код + ")");
//Золото ()
ИсточникСтруктураВ = Новый Структура("Наименование,Код", "Серебро", 3);
ПриемникСтруктураВ = Новый Структура("Наименование,Код");
ЗаполнитьЗначенияСвойств(ПриемникСтруктураВ, ИсточникСтруктураВ, , "Код");
Сообщить(ПриемникСтруктураВ.Наименование + " (" + ПриемникСтруктураВ.Код + ")");
//Серебро ()
КонецПроцедуры
При использовании популярного метода ЗаполнитьЗначенияСвойств(), если в приёмнике полей - единицы, а в источнике сотни, то желательно добавлять список, в котором будут перечислены все свойства для заполнения. При пустом параметре СписокСвойств, выполнение метода подтормаживает. Разница в скорости выполнения становиться ещё более значительной, когда источник или приемник имеют разные типы.
Тест метода ЗаполнитьЗначенияСвойств() в 1С 8.3:
Функция ТестМетодаЗаполнитьЗначенияСвойств()
СтруктураИсточник = Новый Структура;
СтруктураИсточник.Вставить("Свойство1", 1);
СтруктураИсточник.Вставить("Свойство2", 1);
СтруктураИсточник.Вставить("Свойство3", 1);
СтруктураИсточник.Вставить("Свойство4", 1);
СтруктураИсточник.Вставить("Свойство5", 1);
СтруктураПриемник = Новый Структура;
Для Сч = 1 По 700 Цикл
СтруктураПриемник.Вставить("Свойство" + Формат(Сч, "ЧГ="), 1);
КонецЦикла;
НачалоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
Для Сч = 1 По 10000 Цикл
// Вариант 1 434мс
// ЗаполнитьЗначенияСвойств(СтруктураИсточник, СтруктураПриемник);
// Вариант 2 16мс
ЗаполнитьЗначенияСвойств(СтруктураПриемник, СтруктураИсточник);
КонецЦикла;
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
Сообщить("Длительность, мс: " + Длительность);
Возврат Длительность;
КонецФункции
СтруктураИсточник = Новый Структура;
СтруктураИсточник.Вставить("Свойство1", 1);
СтруктураИсточник.Вставить("Свойство2", 1);
СтруктураИсточник.Вставить("Свойство3", 1);
СтруктураИсточник.Вставить("Свойство4", 1);
СтруктураИсточник.Вставить("Свойство5", 1);
СтруктураПриемник = Новый Структура;
Для Сч = 1 По 700 Цикл
СтруктураПриемник.Вставить("Свойство" + Формат(Сч, "ЧГ="), 1);
КонецЦикла;
НачалоЗамера = ТекущаяУниверсальнаяДатаВМиллисекундах();
Для Сч = 1 По 10000 Цикл
// Вариант 1 434мс
// ЗаполнитьЗначенияСвойств(СтруктураИсточник, СтруктураПриемник);
// Вариант 2 16мс
ЗаполнитьЗначенияСвойств(СтруктураПриемник, СтруктураИсточник);
КонецЦикла;
Длительность = ТекущаяУниверсальнаяДатаВМиллисекундах() - НачалоЗамера;
Сообщить("Длительность, мс: " + Длительность);
Возврат Длительность;
КонецФункции
0
комментарии
____________________
Перепечатка текста и фотографий разрешена при наличии прямой ссылки на источник