Имя: Пароль:
1C
1С v8
Запрос к ТаблицеЗначений. Вопрос по типизации.
,
0 Rounder
 
20.09.13
11:42
Есть таблица значений. В одной из колонок находятся данные разных типов. Т.е. жестко типизовать я ее не могу. Мне нужно эту ТЗ использовать в запросе. Вываливается по ошибке: "Тип не может быть выбран в запросе".
Можно ли как-то решить эту проблему?
1 МихаилМ
 
20.09.13
11:44
(0)
типизируйте несколькими типами.
2 Rounder
 
20.09.13
11:45
Я не знаю заранее какой именно тип будет или какие типы. Может быть абсолютно любой.
3 H A D G E H O G s
 
20.09.13
11:49
(2) Выгрузи в цикле типызначений в массив уникально, создай на основе массива описаниетипов, добавить новую колонку в ТЗ на основе ОписанияТипов, перезаполнить новую колонку старыми значениями через ВыгрузкитьКолонку, ЗагрузитьКолонку, удалить старую колонку, переименовать новую.
4 Fragster
 
модератор
20.09.13
11:52
(2) абсолютно любой тип нельзя использовать в запросе
5 Rounder
 
20.09.13
11:59
Поясню для чего делаю - может иные идеи будут. Нужно логировать изменения справочника номенклатура. Номенклатура помимо массы реквизитов еще в зависимости от вида имеет массу свойств. Свойства через ПВХ хранятся в РС.
В итоге при записи элемента номенклатуры мне нужно анализировать на изменение свойства и реквизиты. В итоге со свойствами все через запросы входит, а с реквизитами нет по вышеописанной причине.
Идея была сделать все в одном запросе.

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

И теперь есть два варианта решения проблемы - либо как написано в (3) и затем одним запросом из измененных свойств и реквизитов получать набор записей для логирования. Либо запросом получать только изменения свойств, а затем циклом к ним добавлять из ТЗ изменения реквизитов построчно.
По идее будет выгоднее второй вариант.
6 catena
 
20.09.13
12:23
(5)А какой запрос с этими данными потом будет?
Может быть значения переводить в ЗначениеВСтрокуВнутр()?
7 Rounder
 
20.09.13
12:33
(6) Не буду загромождать тему - уже принял решение в этой ТЗ работать построчно.
Спасибо всем отписавшимся.
8 rasswet
 
20.09.13
13:08
в БСП есть версионирование. не смотрел в его сторону?
9 Rounder
 
20.09.13
13:09
(8) В (0) я написал о массе свойств номенклатуры, хранящихся в РС. А РС не версионируются.
10 Rounder
 
20.09.13
13:10
Точнее скажу так - в БСП не смотрел. Смотрел версионирование в моей УППшке.