ТекущиеДанныеОплатыТруда - это Соответствие. Кто-нибудь может сказать, как это Соответствие "конвертировать" в Таблицу значений? Содержимое вижу, а "вынуть" значения мозгов не хватает. Заранее спасибо!
там несколько "вложенных" ТЗ и в "самой глубине" есть соответствие, в котором находится % доплаты (который мне нужно извлечь).
Понятно, тогда лично я бы не мучался с "кучей запросов", а использовал бы цикл и рекурсию: перебираем элементы соответствия, если тип значения - не соответствие, то проверяем ключ и, если он такой, как нужен, считываем значение. А если тип значения - соответствие, то проваливаемся глубже, и в той же функции обрабатываем его.
Кто-нибудь может сказать, как это Соответствие "конвертировать" в Таблицу значений?
Берем за образец вот это и вот это и склеиваем, исключая промежуточное преобразование в структуру:
Функция СоответствиеВТЗ(Соотв)
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Значение");
ТЗ.Колонки.Добавить("Описание");
Для Каждого ТекЭлем из Соотв Цикл
НовСтр=ТЗ.Добавить();
НовСтр.Значение = ТекЭлем.Ключ;
НовСтр.Описание = ТекЭлем.Значение;
КонецЦикла;
Возврат ТЗ;
КонецФункции
(2) Дело в том, что решение "зарыто" гораздо глубже: Ключ видим, а значение - в Таблице значений - а там опять Соответствие..... Одним словом на примере: в Плановых начислениях у сотрудника есть Доплата за вредность 12%, что в сумме составляет 730 руб. Вот мне и нужно получить Вид начисления, % и сумму, т.е. три показателя.
P.S. В принципе можно любым способом, просто надеялся получить "одной строкой" кода.
значение - в Таблице значений - а там опять Соответствие.....
Не понял, в в полученном соответствии - таблица значений (с еще одним соответствием)? Или сразу соответствие, без ТЗ?
надеялся получить "одной строкой" кода.
Ну, если в таблице значений (см.выше) только одна строка, или ТЗ нет совсем, а во вложенном соответствии - только один элемент, ключ которого точно известен, тогда теоретически можно уложиться в одну строку.
Только в этой строке кода будет дофига точек... что не есть гут.
А если во вложенном соответствии больше одного элемента или в ТЗ больше одной строки, то об "одной строке кода" можно смело забыть.
Не понял, в в полученном соответствии - таблица значений (с еще одним соответствием)? Или сразу соответствие, без ТЗ?
В данном случае/примере несколько Видов начислений, но даже если взять из них конкретное, то и там несколько "вложенных" ТЗ и в "самой глубине" есть соответствие, в котором находится % доплаты (который мне нужно извлечь).
P.S. Насчет "одной строкой кода" - это просто условно (чтоб не городить кучу запросов).
там несколько "вложенных" ТЗ и в "самой глубине" есть соответствие, в котором находится % доплаты (который мне нужно извлечь).
Понятно, тогда лично я бы не мучался с "кучей запросов", а использовал бы цикл и рекурсию: перебираем элементы соответствия, если тип значения - не соответствие, то проверяем ключ и, если он такой, как нужен, считываем значение. А если тип значения - соответствие, то проваливаемся глубже, и в той же функции обрабатываем его.
Процедура СоответствиеВТЗ(Соотв)
// ТЗ = Новый ТаблицаЗначений;
// ТЗ.Колонки.Добавить("Значение");
// ТЗ.Колонки.Добавить("Описание");
// ТЗ должна быть создана и описана ВНЕ процедуры!
// колонки: ВидНачисления, ПроцентНачисления, Сумма
Для Каждого ТекЭлем из Соотв Цикл
Если ТипЗнч(ТекЭлем.Значение)=Тип("Соответствие") Тогда // вложенное соответствие
СоответствиеВТЗ(ТекЭлем.Значение);
ИначеЕсли ТекЭлем.Ключ="Вид начисления" Тогда // новое начисление, ключ - описание вида
НовСтр = ТЗ.Добавить();
НовСтр.ВидНачисления = ТекЭлем.Значение;
ИначеЕсли ТекЭлем.Ключ="Процент начисления" Тогда // ключ - % доплаты
НовСтр.ПроцентНачисления = ТекЭлем.Значение;
ИначеЕсли ТекЭлем.Ключ="Сумма начисления" Тогда // ключ - сумма доплаты
НовСтр.Сумма = ТекЭлем.Значение;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Показать
Точнее написать не могу - ЗУП под рукой нет, но думаю, что алгоритм понятен.
В БСП есть метод ОбщегоНазначения.ВыгрузитьКолонку(Соответствие, "Значение") - выгрузит все значения из соответствия, чтобы выгрузить ключи вместо "Значение" пишем "Ключ"