Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
24 окт 2021, 08:43

Автозаполнение Наименование

Автор Azurian93, 09 июн 2017, 08:13

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

Azurian93

Добрый день. Возник вопрос следующего характера. Меня интересует, как можно реализовать заполнение реквизита "Наименование" на основании состава табличной части?
У меня справочник характеристики, в его табличной части СвойстваХарактеристик 2 колонки - Характеристика и ЗначениеХарактеристики. Суть в том, что после заполнения табличной части реквизит "Наименование" должен формироваться автоматически и состоять из значений всех строк табличной части. Например "Цвет Белый; Длина 15".
Принципиально я смог реализовать эту фукнцию кодом:
&НаКлиенте
Процедура ХарактеристикаПриИзменении(Элемент)
   ТекСтрока=Элементы.СвойстваХарактеристик.ТекущиеДанные;
   ТекущееПоказание="";
      Для каждого Строка из Объект.СвойстваХарактеристик цикл
         ПредыдущееПоказание=Объект.Наименование;
         ТекущееПоказание=Строка(ТекСтрока.Характеристика)+":"+Строка(ТекСтрока.ЗначениеХарактеристики);
      КонецЦикла;
      Если ЗначениеЗаполнено(ПредыдущееПоказание) Тогда
         Объект.Наименование=ПредыдущееПоказание+";"+ТекущееПоказание;
      Иначе
         Объект.Наименование=ТекущееПоказание;
      КонецЕсли;
КонецПроцедуры

Однако, есть существенные недостатки - например если я решу изменить уже введенное значение, поменять длину или цвет, то очевидно, что само название у меня не пересчитается. Да и сама реализация, с моей точки зрения, оставляет желать лучшего. Заниматься 1С я начал только недавно, поэтому, к сожалению придумать варианта лучше не смог.
Может быть есть какие-то идеи, как это можно сделать?

alex0402

Можно иметь два "Наименования".
Наименование - заполняется вручную и
НаименованиеПолное = Наименование + ваш код по дополнению характеристик.
Спасибо за Сказать спасибо

ilyay

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

Azurian93

Цитата: ilyay от 09 июн 2017, 10:37
В модуле объекта в обработчике ПередЗаписью каждый раз устанавливайте значение наименования.
Извинте, но честно говоря у меня опыта маленько не хватает, может быть вы сможете привести пример?

ilyay

Как-то так:

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

Azurian93

Цитата: ilyay от 09 июн 2017, 14:48
Как-то так:

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

Спасибо Огромное!

Теги:

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

Рейтинг@Mail.ru Rambler's Top100

Поиск