|
Запрос к ТаблицеЗначений. Вопрос по типизации. | ☑ | ||
---|---|---|---|---|
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
|
Точнее скажу так - в БСП не смотрел. Смотрел версионирование в моей УППшке.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |