|
Переменная переменная или вопрос на 1 миллион (не знаю как иначе назвать). | ☑ | ||
---|---|---|---|---|
0
bplmeddy
14.09.18
✎
16:59
|
Доброго времени суток.
Прошу совета по следующему вопросу: Есть колонка "Себестоимость". Она создана через конфигуратор как реквизит ТЧ. Есть несколько колонок которые были созданы программно. И есть переменная (тип "Соответствие"(ключ - "ЦенаА", значение - 20(%)), в которой есть проценты наценок для каждой программно созданной колонки. Например: ЦенаА, ЦенаБ - цены которые нужно высчитать. Нужно заполнить значениями в ТЧ эти колонки по принципу: ЦенаА = Себестоимость*ЗначениеПроцентаИзСоответсвия. Но не могу придумать как их связать. Необходимо для каждой колонки использовать свой процент. Посоветуйте пожалуйста как быть. |
|||
1
bplmeddy
14.09.18
✎
17:00
|
Забыл сказать - управляемые формы.
|
|||
2
bplmeddy
14.09.18
✎
17:02
|
Думал сначала возможно есть способ сделать так:
Для Каждого СтрТаб Из Объект.КонтрольЦен Цикл СтрТаб.{ВсунутьНазваниеКолонки} .... Но думаю что так нельзя. |
|||
3
FIXXXL
14.09.18
✎
17:05
|
(0) И есть переменная (тип "Соответствие"(ключ - "ЦенаА", значение - 20(%)), в которой есть проценты наценок для каждой программно созданной колонки.
Что мешает в Соответствие ИмяКолонки положить ключом? |
|||
4
bplmeddy
14.09.18
✎
17:07
|
А весь алгоритм работы такой:
1) Пользователь открывает обработку и задает цены которые нужно устанавливать. На основании этих данных создаются колонки: МассивНовыхКолонок = ЭтаФорма.ВидыУстанавливаемыхЦен.ВыгрузитьЗначения(); Для Каждого Кол Из МассивНовыхКолонок Цикл нРеквизиты = Новый Массив; нРеквизиты.Добавить(Новый РеквизитФормы(СтрЗаменить(Кол," ",""), Новый ОписаниеТипов("Число"), "Объект.КонтрольЦен", СтрЗаменить(Кол," ",""), Истина)); ИзменитьРеквизиты(нРеквизиты); нЭлемент = Элементы.Добавить(СтрЗаменить(Кол," ",""), Тип("ПолеФормы"), Элементы.КонтрольЦен); нЭлемент.Вид = ВидПоляФормы.ПолеВвода; нЭлемент.ПутьКДанным = "Объект.КонтрольЦен."+СтрЗаменить(Кол," ",""); КонецЦикла; 2) Пользователь нажимает кнопку "УстановитьПроценты". Открывается форма для установки процентов наценки, на ней программно создаются поля ввода для каждой отобранной цены: ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("Реквизиты", ЭтаФорма.ВидыУстанавливаемыхЦен.ВыгрузитьЗначения()); ОткрытьФорму("Обработка.КонтрольЦен.Форма.ФормаПроцентыЦен", ПараметрыОткрытия, ЭтотОбъект); МассивРеквизитов = Новый Массив; МассивРеквизитов = Параметры.Реквизиты; Если МассивРеквизитов <> Неопределено Тогда Для Каждого НовРек Из МассивРеквизитов Цикл СоздатьПолеНаСервере(НовРек); КонецЦикла; КонецЕсли; ///////ПОЛЯ ВВОДА ПРОЦЕНТОВ //Добавляем реквизит нРеквизиты = Новый Массив; Реквизит = Новый РеквизитФормы(СтрЗаменить(РеквизитПоля," ",""), Новый ОписаниеТипов("Число"), , "Процент для "+РеквизитПоля, Истина); нРеквизиты.Добавить(Реквизит); ИзменитьРеквизиты(нРеквизиты); //Добавляем поле ввода Элемент = ЭтаФорма.Элементы.Добавить(СтрЗаменить(РеквизитПоля," ",""), Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаПроценты); Элемент.Вид = ВидПоляФормы.ПолеВвода; Элемент.ПутьКДанным = СтрЗаменить(РеквизитПоля," ",""); 3) Когда значения процентов указаны, пользователь жмакает кнопку "Подтвердить", форма закрывается, данные передаются обратно в родительскую форму: ПроцентыЦен = Новый Соответствие; Для Каждого Элемент Из ЭтаФорма.Элементы Цикл Если Элемент.Вид = ВидПоляФормы.ПолеВвода Тогда ПроцентыЦен.Вставить(Элемент.Имя,Число(Элемент.ТекстРедактирования)); КонецЕсли; КонецЦикла; Оповестить("ФиксацияПроцентов", ПроцентыЦен); ЭтаФорма.Закрыть(); 5) Дальше нужно как раз сделать то что я описал. Но додуматься к сожалению не могу :( Застрял на таком "чуде": Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "ФиксацияПроцентов" Тогда ТаблицаПроцентов = Параметр; Если ТаблицаПроцентов <> Неопределено Тогда Для Каждого Элем Из ТаблицаПроцентов Цикл Для Каждого СтрТаб Из Объект.КонтрольЦен Цикл //Сообщить(Элем.Ключ+" "+Элем.Значение); КонецЦикла; КонецЦикла; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
5
bplmeddy
14.09.18
✎
17:07
|
(3) Лежит. Что дальше с ним делать? Имя колонок, и ключи в соответствии совпадают.
|
|||
6
bplmeddy
14.09.18
✎
17:08
|
Мозги уже кипят. Прошу прощения если не вижу очевидного. Но без вас на справлюсь.
|
|||
7
FIXXXL
14.09.18
✎
17:12
|
Строка[КлючИмяКолонки] = Цена * Соответствие.Получить(ИмяКолонки)
|
|||
8
FIXXXL
14.09.18
✎
17:14
|
Для Каждого ТекСтрока из ТаблицаФормы Цикл
Для каждого КлючЗнач Из Соответствия Цикл КлючИмяКолонки = КлючЗнач.Ключ Строка[КлючИмяКолонки] = Цена * Соответствие.Получить(ИмяКолонки) КонецЦикла КонецЦикла |
|||
9
bplmeddy
14.09.18
✎
17:19
|
(8) Сейчас попробую
|
|||
10
bplmeddy
14.09.18
✎
17:23
|
(8) А ИмяКолонки мы откуда получаем ?
Или это КлючИмяКолонки ? |
|||
11
bplmeddy
14.09.18
✎
17:29
|
(10) Понял. Опять туплю
|
|||
12
bplmeddy
14.09.18
✎
17:35
|
(8) Заработало! Спасибо огромнейшее. Плюсов в карму, долгих лет, и богатства!
|
|||
13
FIXXXL
14.09.18
✎
18:01
|
(10) сорри, описАлся :)
|
|||
14
bplmeddy
14.09.18
✎
18:06
|
(13) Не страшно, главное что сработало. Если не сложно, и есть где-то под рукой, можете ткнуть носом в мануал по данному вопросу (индексы колонок(" [КлючИмяКолонки] ")).
|
|||
15
bplmeddy
14.09.18
✎
18:07
|
(14) А то я сегодня понял что у меня в данной плане проблем в знаниях )
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |