Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Переменная переменная или вопрос на 1 миллион (не знаю как иначе назвать).

Переменная переменная или вопрос на 1 миллион (не знаю как иначе назвать).
Я
   bplmeddy
 
14.09.18 - 16:59
Доброго времени суток.

Прошу совета по следующему вопросу:
Есть колонка "Себестоимость". Она создана через конфигуратор как реквизит ТЧ.
Есть несколько колонок которые были созданы программно.
И есть переменная (тип "Соответствие"(ключ - "ЦенаА", значение - 20(%)), в которой есть проценты наценок для каждой программно созданной колонки.

Например: ЦенаА, ЦенаБ - цены которые нужно высчитать.

Нужно заполнить значениями в ТЧ эти колонки по принципу:
ЦенаА = Себестоимость*ЗначениеПроцентаИзСоответсвия.
Но не могу придумать как их связать. Необходимо для каждой колонки использовать свой процент.

Посоветуйте пожалуйста как быть.
 
 
   bplmeddy
 
1 - 14.09.18 - 17:00
Забыл сказать - управляемые формы.
   bplmeddy
 
2 - 14.09.18 - 17:02
Думал сначала возможно есть способ сделать так:
Для Каждого СтрТаб Из Объект.КонтрольЦен Цикл
 СтрТаб.{ВсунутьНазваниеКолонки} ....

Но думаю что так нельзя.
   FIXXXL
 
3 - 14.09.18 - 17:05
(0) И есть переменная (тип "Соответствие"(ключ - "ЦенаА", значение - 20(%)), в которой есть проценты наценок для каждой программно созданной колонки.

Что мешает в Соответствие ИмяКолонки положить ключом?
   bplmeddy
 
4 - 14.09.18 - 17:07
А весь алгоритм работы такой:

1) Пользователь открывает обработку и задает цены которые нужно устанавливать. На основании этих данных создаются колонки:

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

        нЭлемент = Элементы.Добавить(СтрЗаменить(Кол," ",""), Тип("ПолеФормы"), Элементы.КонтрольЦен); 
        нЭлемент.Вид = ВидПоляФормы.ПолеВвода; 
        нЭлемент.ПутьКДанным = "Объект.КонтрольЦен."+СтрЗаменить(Кол," ","");    
    КонецЦикла;

2) Пользователь нажимает кнопку "УстановитьПроценты". Открывается форма для установки процентов наценки, на ней программно создаются поля ввода для каждой отобранной цены:

ПараметрыОткрытия = Новый Структура;
    ПараметрыОткрытия.Вставить("Реквизиты", ЭтаФорма.ВидыУстанавливаемыхЦен.ВыгрузитьЗначения());
    ОткрытьФорму("Обработка.КонтрольЦен.Форма.ФормаПроцентыЦен", ПараметрыОткрытия, ЭтотОбъект);

МассивРеквизитов = Новый Массив;
    МассивРеквизитов = Параметры.Реквизиты;
    Если МассивРеквизитов <> Неопределено Тогда
        Для Каждого НовРек Из МассивРеквизитов Цикл
            СоздатьПолеНаСервере(НовРек);
        КонецЦикла;
    КонецЕсли;

///////ПОЛЯ ВВОДА ПРОЦЕНТОВ

    //Добавляем реквизит

    нРеквизиты = Новый Массив;
    Реквизит = Новый РеквизитФормы(СтрЗаменить(РеквизитПоля," ",""), Новый ОписаниеТипов("Число"), , "Процент для "+РеквизитПоля, Истина);
    нРеквизиты.Добавить(Реквизит);
    ИзменитьРеквизиты(нРеквизиты);

    //Добавляем поле ввода

    Элемент = ЭтаФорма.Элементы.Добавить(СтрЗаменить(РеквизитПоля," ",""), Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаПроценты);
    Элемент.Вид = ВидПоляФормы.ПолеВвода;
    Элемент.ПутьКДанным = СтрЗаменить(РеквизитПоля," ","");

3) Когда значения процентов указаны, пользователь жмакает кнопку "Подтвердить", форма закрывается, данные передаются обратно в родительскую форму:

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

5) Дальше нужно как раз сделать то что я описал. Но додуматься к сожалению не могу :( Застрял на таком "чуде":

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
    Если ИмяСобытия = "ФиксацияПроцентов" Тогда
        ТаблицаПроцентов = Параметр;
        Если ТаблицаПроцентов <> Неопределено Тогда
            Для Каждого Элем Из ТаблицаПроцентов Цикл
                Для Каждого СтрТаб Из Объект.КонтрольЦен Цикл
                    
                    //Сообщить(Элем.Ключ+" "+Элем.Значение);

                КонецЦикла;
            КонецЦикла;    
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры
   bplmeddy
 
5 - 14.09.18 - 17:07
(3) Лежит. Что дальше с ним делать? Имя колонок, и ключи в соответствии совпадают.
   bplmeddy
 
6 - 14.09.18 - 17:08
Мозги уже кипят. Прошу прощения если не вижу очевидного. Но без вас на справлюсь.
   FIXXXL
 
7 - 14.09.18 - 17:12
Строка[КлючИмяКолонки] = Цена * Соответствие.Получить(ИмяКолонки)
   FIXXXL
 
8 - 14.09.18 - 17:14
Для Каждого ТекСтрока из ТаблицаФормы Цикл

Для каждого КлючЗнач Из Соответствия Цикл

КлючИмяКолонки = КлючЗнач.Ключ

Строка[КлючИмяКолонки] = Цена * Соответствие.Получить(ИмяКолонки)

КонецЦикла

КонецЦикла
   bplmeddy
 
9 - 14.09.18 - 17:19
(8) Сейчас попробую
   bplmeddy
 
10 - 14.09.18 - 17:23
(8) А ИмяКолонки мы откуда получаем ?
Или это КлючИмяКолонки ?
 
 Рекламное место пустует
   bplmeddy
 
11 - 14.09.18 - 17:29
(10) Понял. Опять туплю
   bplmeddy
 
12 - 14.09.18 - 17:35
(8) Заработало! Спасибо огромнейшее. Плюсов в карму, долгих лет, и богатства!
   FIXXXL
 
13 - 14.09.18 - 18:01
(10) сорри, описАлся :)
   bplmeddy
 
14 - 14.09.18 - 18:06
(13) Не страшно, главное что сработало. Если не сложно, и есть где-то под рукой, можете ткнуть носом в мануал по данному вопросу (индексы колонок(" [КлючИмяКолонки] ")).
   bplmeddy
 
15 - 14.09.18 - 18:07
(14) А то я сегодня понял что у меня в данной плане проблем в знаниях )

Список тем форума
Рекламное место пустует  Рекламное место пустует
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс, 1996 г.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует