Top.Mail.Ru
Заказать консультацию
специалиста 1С
Отправить заявку

ИнфоСофт использует файлы «cookie» с целью персонализации сервисов и повышения удобства пользования веб-сайтом. Вы можете запретить обработку сookies в настройках браузера. Пожалуйста, ознакомьтесь с политикой использования cookies.
Оставаясь на сайте, вы соглашаетесь с политикой использования cookies.

Групповое изменение реквизитов: произвольный алгоритм

Макарова Наталья Посмотреть все статьи >> Специалист по внедрению 1С франчайзинговой сети "ИнфоСофт".
25.06.2024
3137
Время прочтения - 6 мин.
Заказать консультацию

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

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

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


Про групповое изменение

Групповое изменение реквизитов предусмотрено в двух вариантах:

А) в большинстве списков программы есть команда «Изменить выделенные».

Б) только для администратора:

  • в разделе «Администрирование» - «Обслуживание» - «Корректировка данных» по команде «Групповое изменение реквизитов»;

  • в случае подключения в качестве внешней обработки - в соответствующем разделе программы по команде «Дополнительные обработки» - «Групповое изменение реквизитов».

 

Выбор элементов к изменению

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

1.png


Замена по стандартному алгоритму

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

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

2.png


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

 

Произвольный алгоритм

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

  • Исправление части некорректных данных объекта с использованием гибкого условия;

  • Стандартных возможностей недостаточно для массового преобразования данных;

  • Изменение или удаление других объектов с учетом данных текущего объекта.

В поле «Алгоритм» можно указать название алгоритма. После выполнения алгоритм будет сохранен под этим именем.

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

3.png


С помощью переключателя «Объект записывается» можно выбрать способ записи объекта:

  • Автоматически;

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

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

Когда алгоритм был выполнен без ошибок, он автоматически сохраняется в список алгоритмов и становится доступен для повторного использования. С помощью кнопки «Алгоритмы» можно просмотреть список  использованных алгоритмов для данного объекта и использовать их. Программа запоминает 20 последних выполненных алгоритмов для объекта.

4.png


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

 

Оформить как код 1С

                НоменклатураОбъект = Объект;
                НоменклатураСсылка = Объект.Ссылка;
                  МассивСвойствНоменклатуры = УправлениеСвойствами.СвойстваОбъекта(НоменклатураСсылка);
                                СвойствоВидОдежды = Неопределено;
                СвойствоКлассТовара = Неопределено;
                                Для Каждого ЭлементМассива Из МассивСвойствНоменклатуры Цикл
                                                              Если ЭлементМассива.Наименование = "Вид одежды" Тогда
                                               СвойствоВидОдежды = ЭлементМассива;
                               КонецЕсли;
                                                              Если ЭлементМассива.Наименование = "Класс товара" Тогда
                                               СвойствоКлассТовара = ЭлементМассива;
                               КонецЕсли;
                                               КонецЦикла;
                                Если НЕ СвойствоВидОдежды = Неопределено И НЕ СвойствоКлассТовара = Неопределено Тогда
                                                              ЗначениеКлассТовара = Неопределено;
                                                              Для Каждого СтрокаДопРеквизит Из НоменклатураОбъект.ДополнительныеРеквизиты Цикл
                                               Если СтрокаДопРеквизит.Свойство.Наименование = "Класс товара" Тогда
                                                                                                                              ЗначениеКлассТовара = СтрокаДопРеквизит.Значение.Наименование;
                                                               Прервать;
                                                                                                                                                                             КонецЕсли;
                                                                              КонецЦикла;
                                                              Если ЗначениеЗаполнено(ЗначениеКлассТовара) Тогда
                                                                                              РеквизитЗаполнен = Ложь;
                                                                                              Для Каждого СтрокаДопРеквизит Из НоменклатураОбъект.ДополнительныеРеквизиты Цикл
                                                                                                                              Если СтрокаДопРеквизит.Свойство.Наименование = "Вид одежды" Тогда
                                                                                                                                                              ЗначениеВидОдежды = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеКлассТовара,Истина,,СтрокаДопРеквизит.Свойство);
                                                                                                                                                              Если НЕ ЗначениеЗаполнено(ЗначениеВидОдежды) Тогда
                                                                                                                                                                                            ЗначениеВидОдежды = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеКлассТовара,Ложь,,СтрокаДопРеквизит.Свойство);
                                                                                                                                                                             КонецЕсли;
                                                                                                                                                              Если ЗначениеЗаполнено(ЗначениеВидОдежды) Тогда
                                                                                                                                                                                            СтрокаДопРеквизит.Значение = ЗначениеВидОдежды;
                                                                                              СтрокаДопРеквизит.Свойство = СтрокаДопРеквизит.Свойство;
                                                                                              РеквизитЗаполнен = Истина;
                                                                                                                                                                             КонецЕсли;
                                                                                                                                                              Прервать;
                                                                                                                                              КонецЕсли;
                                                                                                              КонецЦикла;
                                                                                              Если НЕ РеквизитЗаполнен Тогда
                                                                                                                              СтрокаДопРеквизит = НоменклатураОбъект.ДополнительныеРеквизиты.Добавить();
                                                                                                                              ЗначениеВидОдежды = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеКлассТовара,Истина,,СвойствоВидОдежды);
                                                                                                                              Если НЕ ЗначениеЗаполнено(ЗначениеВидОдежды) Тогда
                                                                                                                                                              ЗначениеВидОдежды = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию(ЗначениеКлассТовара,Ложь,,СвойствоВидОдежды);
                                                                                                                                              КонецЕсли;
                                                                                                                              СтрокаДопРеквизит.Значение = ЗначениеВидОдежды;
                                                               СтрокаДопРеквизит.Свойство = СвойствоВидОдежды;
                                                                                                              КонецЕсли;
                                                                              КонецЕсли;                      
                                               КонецЕсли;
  Конец кода
 

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

 


Заказать консультацию специалиста 1С
Оставьте заявку и наши эксперты проконсультируют вас по данной статье.
Отправить заявку
Рассказать друзьям
Для разработчиков 1С
Вам может быть интересно: