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

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) А то я сегодня понял что у меня в данной плане проблем в знаниях )

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует