Дополнительные реквизиты и сведения
В данной статье мы рассмотрим возможность поиска и обновления полей в объектах, содержащих дополнительные реквизиты и сведения, с использованием встроенных инструментов Инжектора 1С.
Пример справочника (Дополнительные реквизиты)
На примере справочника «Номенклатура» рассмотрим поиск и обновление элемента справочника по дополнительному реквизиту «Мин.поставка».
Что делаем?
Итак, заходим в раздел «Проекты» Инжектора 1С,
нажимаем «Создать».
Выбираем вариант загрузки данных «Загружаем объект» и нажимаем кнопку «Вперед».
Заполняем поля «Наименование проекта», «Подключение к базе-источнику» и выбираем вариант чтения таблиц: «Читаем каждый раз всю таблицу целиком», затем нажимаем «Вперед» в правом нижнем углу интерфейса.
На следующем этапе сопоставляем «Источник» и «Приемник» данных по номенклатуре без указания конкретных табличных частей. Затем нажимаем «Вперед» в правом нижнем углу интерфейса.
Выбираем подходящие правила загрузки данных и следуем далее до сопоставления данных.
На этапе сопоставления в режиме «Вычислять» определяем запросом данные для поиска. Через Конструктор делаем выборку ссылок элементов справочника «Номенклатура», у которых нет пометки на удаление, есть дополнительный реквизит со свойством «Мин. поставка» и значение этого реквизита - 20.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | НоменклатураДополнительныеРеквизиты.Ссылка КАК Ссылка |ИЗ | Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты |ГДЕ | НоменклатураДополнительныеРеквизиты.Свойство = &Свойство | И НоменклатураДополнительныеРеквизиты.Значение = &Значение | И НоменклатураДополнительныеРеквизиты.Ссылка.ПометкаУдаления = &ПометкаУдаления"; Запрос.УстановитьПараметр("Значение",20); Запрос.УстановитьПараметр("ПометкаУдаления",Ложь); Запрос.УстановитьПараметр("Свойство",ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Мин.поставка"); РезультатЗапроса = Запрос.Выполнить(); ВыборкаЗапрос = РезультатЗапроса.Выбрать(); Если ВыборкаЗапрос.Следующий() Тогда Результат = ВыборкаЗапрос.Ссылка; КонецЕсли;
На этапе создания Обработчиков создаем обработчик «После записи объекта».
СвойствоРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("Имя","Мин.поставка"); //создаём таблицу значений доп.реквизитов для помещения их в нужный элемент ТаблицаЗначенийВременная = Новый ТаблицаЗначений; ТаблицаЗначенийВременная.Колонки.Добавить("Свойство"); ТаблицаЗначенийВременная.Колонки.Добавить("Значение"); НоваяСтрокаТЗ = ТаблицаЗначенийВременная.Добавить(); НоваяСтрокаТЗ.Свойство = СвойствоРеквизит; НоваяСтрокаТЗ.Значение = ТекстыЯчеек[0].ВидНоменклатуры; //Используя стандартную процедуру БСП присваиваем значения доп.реквизитов элементу справочника УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.Ссылка, ТаблицаЗначенийВременная);
Далее сохраняем проект и проверяем загрузку.
Результатом выполнения проекта являются созданные или найденные и обновленные элементы справочника Номенклатура, подходящие под условие запроса поиска.
Пример Справочника (Выборочное обновление дополнительных реквизитов)
Допустим, что в Справочнике «Приемника» уже есть множество дополнительных реквизитов и они уже заполнены значениями. Нам нужно выборочно обновить пару разнотипных дополнительных реквизитов, а остальные реквизиты оставить с прежними значениями.
Создаем проект загрузки Справочника, следуя классической инструкции по созданию проекта (см. пример выше) до момента выбора схемы данных. Здесь сопоставляем табличную часть «Дополнительные реквизиты».
На этапе сопоставления данных в табличной части «ТЧ_ДополнительныеРеквизиты» выбираем способ обработки полей: обновлять «Только по ключевым полям» [1]. В колонке [2] выбираем ключевые поля. В текущем примере это поле «Свойство» дополнительного реквизита, так как обновляем не все дополнительные реквизиты справочника, а только избранные из СУБД.
Полю «Значение» выставляем условие связи «по владельцу Свойство» [3].
Далее сохраняем проект и проверяем загрузку. В строках «Источника» и «Приемника» отразились только те свойства и значения, которые обновляем из СУБД.
В результате выполнения проекта загрузки обновятся только два значения двух дополнительных реквизитов, остальные дополнительные реквизиты справочника останутся прежними.
Пример документа (Дополнительное сведение)
Допустим, что документ Заказ клиента уже есть в базе. Настраиваем поиск документа по Ссылке. По итогу требуется только обновить одно дополнительное сведение из загружаемых данных.
Создаем проект загрузки документа Заказ клиента, следуя классической инструкции создания проекта загрузки. За исключением этапа «Правила загрузки данных» - тут не выбираем ничего.
На этапе создания обработчиков создаем обработчик «При обнаружении объекта»
СвойствоРеквизит = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","Экспедитор_f71f846293824e929ea967007393a821"); //создаём таблицу значений доп.реквизитов для помещения их в нужный элемент ТаблицаЗначенийВременная = Новый ТаблицаЗначений; ТаблицаЗначенийВременная.Колонки.Добавить("Свойство"); ТаблицаЗначенийВременная.Колонки.Добавить("Значение"); НоваяСтрокаТЗ = ТаблицаЗначенийВременная.Добавить(); НоваяСтрокаТЗ.Свойство = СвойствоРеквизит; НоваяСтрокаТЗ.Значение = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ТекстыЯчеек[0].Avtor,,,СвойствоРеквизит); //Используя стандартную процедуру БСП присваиваем значения доп.реквизитов элементу справочника УправлениеСвойствами.ЗаписатьСвойстваУОбъекта(Объект.Ссылка, ТаблицаЗначенийВременная);
Сохраняем проект и проверяем загрузку. При заполнении дополнительного сведения происходит обновление Регистра сведений «Дополнительные сведения», поэтому в результатах загрузки не отобразятся обновленные заказы. Их можно обнаружить в истории загрузки по дате и времени запуска проекта.
Открыв любой Заказ клиента из списка можно обнаружить, что Дополнительное сведение «Экспедитор» обновлено на значение из внешней СУБД «Автор».
Значение из источника данных «Автор» загружается в дополнительное сведение «Экспедитор».
Пример документа (Дополнительный реквизит)
Допустим, что документ Заказ клиента уже есть в базе. Настраиваем поиск документа по Номеру, Дате либо по Ссылке. По итогу требуется обновить значения Дополнительных реквизитов. Данные для загрузки выгрузим из табличной части «Дополнительные реквизиты» документа Заказ клиента, загружать будем так же в табличную часть «Дополнительные реквизиты».
Итак, заходим в раздел «Проекты» Инжектора 1С,
нажимаем «Создать».
Выбираем вариант загрузки данных «Загружаем объект» и нажимаем кнопку «Вперед».
Заполняем поля «Наименование проекта», «Подключение к базе-источнику» и выбираем вариант чтения таблиц: «Читаем каждый раз всю таблицу целиком», затем нажимаем «Вперед» в правом нижнем углу интерфейса.
На следующем этапе сопоставляем «Источник» и «Приемник» данных по номенклатуре указываем конкретную табличную часть «Дополнительные реквизиты». Затем нажимаем «Вперед» в правом нижнем углу интерфейса.
Выбираем подходящие правила загрузки данных и следуем далее до сопоставления данных.
На этапе сопоставления на вкладке «Основная настройка» выставляем настройки для поиска по Номеру и Дате заказа клиента. Далее переходим на вкладку «ТЧ_ДополнительныеРеквизиты». Условия связи для поля «Значение» выставляем «по владельцу Свойство». Тип данных по владельцу определяется автоматически.
Сохраняем проект и проверяем загрузку. По результату сопоставления в нижней таблице появляются данные «Свойство» и «Значение» загружаемых дополнительных реквизитов.
Далее выполняем проект и проверяем результат загрузки. Значения загружаемых дополнительных реквизитов обновлены в базе - приемнике.