Имя: Пароль:
1C
 
Работа с объектом Соответствие
0 Midaw
 
15.10.10
09:52
Использовал впервые данный инструмент в плане оптимизации работы сложной обработки. Работает на славу, но возник вопрос. Привожу текст заполнения Соответствия:

   ЗапросПоСвойствам = новый Запрос();
   ЗапросПоСвойствам.Текст = "ВЫБРАТЬ
                             |    ЗначенияСвойствОбъектов.Объект КАК Объект,
                             |    ЗначенияСвойствОбъектов.Свойство,
                             |    ЗначенияСвойствОбъектов.Значение
                             |ИЗ
                             |    РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
                             |ГДЕ
                             |    ЗначенияСвойствОбъектов.Объект.ПолныйКодВТорговле В (&Объект)";
   СоответствиеОбщая = Новый Соответствие;
   ЗапросПоСвойствам.УстановитьПараметр("Объект", ТЗНоменклатура.ВыгрузитьКолонку("ПолныйКод"));
   Выборка = ЗапросПоСвойствам.Выполнить().Выбрать();
   ОбъектРанее = Неопределено;
   Пока Выборка.Следующий() Цикл
       Объект = Выборка.Объект;
       Если НЕ ОбъектРанее = Объект Тогда
           Если ОбъектРанее = Неопределено Тогда
               СоответствиеСвойств = Новый Соответствие;
               СоответствиеСвойств.Вставить(Выборка.Свойство, Выборка.Значение);
           Иначе
               СоответствиеОбщая.Вставить(ОбъектРанее, СоответствиеСвойств);
               СоответствиеСвойств = Новый Соответствие;
               СоответствиеСвойств.Вставить(Выборка.Свойство, Выборка.Значение);
           КонецЕсли;
           ОбъектРанее = Объект;
       Иначе
           СоответствиеСвойств.Вставить(Выборка.Свойство, Выборка.Значение);
       КонецЕсли;
   КонецЦикла;

В тексте запрос не имеет сортировки по объекту. Внимание вопрос. Часть свойств теряется или в соответствии один объект как то дважды встречается?! Где нибудь бы подробности в особенностях выполнения метода Вставить в случае присутствия данного элемента в "Соответствии".
1 Midaw
 
15.10.10
09:53
*узнать
2 EGAfonov
 
15.10.10
09:57
в СП все написано.
3 Mitriy
 
15.10.10
09:57
ключ в соответствии повторяться не может, если такой уже существует, то Вставить затирает старое значение и заполняет новым, если такого ключа нет, то он добавляется... что непонятно?
4 FIXXXL
 
15.10.10
09:57
из СП:
Соответствие (Map)
Вставить (Insert)

Описание:
Устанавливает значение элемента соответствия по ключу. Если элемент с переданным значением ключа существует, то его значение заменяется, в противном случае добавляется новый элемент.

не заменятся там ничего?
5 Mitriy
 
15.10.10
09:59
(4) что сказать хотел? ))
6 vmv
 
15.10.10
10:03
5. что в соответствии не может быть два элемента с одним ключем.

я так раз тоже прокололся, когда нужно было фильтровать списки/таблицы, где на ключевое поле могут быть наложены разные условия. пришлось пределать на список значений
7 Midaw
 
15.10.10
10:06
а ну всё, ответ ясен. явная не доработка в коде )
8 Midaw
 
15.10.10
10:06
жалко ошибку не выводит
9 vmv
 
15.10.10
10:10
500К на щет(с):)
10 Midaw
 
15.10.10
10:11
(9) 500к ушло новичкам на обход граблей )
11 Midaw
 
15.10.10
15:57
продолжим холивар...

есть ошибка:
Ошибка при вызове метода контекста (Получить): Несоответствие типов (параметр номер '1')

код:
ппп = ПланыВидовХарактеристик.СвойстваОбъектов[Объект];
ЗначениеСвойства = ТаблицаСвойств.Получить(ппп); // <--- Место ошибки

где:
Объект = наименование свойства
ТаблицаСвойств = соответствие с ключом (разные типы свойств) и со значением свойства

варианты ошибки:
1. Ошибка потому что нельзя хранить ПланыВидовХарактеристик.СвойстваОбъектов[Объект]
2. Ошибка потому что в ТаблицаСвойств должна содержать ключ одного типа.
3. Ещё чтото?

склоняюсь к первому. но уточнения не вижу в описании. там написано ключ типа "Произвольный".
12 hhhh
 
15.10.10
16:02
(11) вот это

ппп = ПланыВидовХарактеристик.СвойстваОбъектов[Объект];

- редкий бред.
13 Midaw
 
15.10.10
16:04
(12) тебе ппп не понравилось? оно для отладки, чтоб выяснить где именно ошибка. а остальное вроде нормально, хоть и не моё (с). )))
14 НЕА123
 
15.10.10
16:11
(11)
>ТаблицаСвойств = соответствие с ключом (разные типы свойств) и со значением свойства

врешь.
15 hhhh
 
15.10.10
16:11
(13) нет, мне другое не понравилось: ПланыВидовХарактеристик. Ведь все знают, Что Объекты - это элементы спавочников.
16 НЕА123
 
15.10.10
16:12
(12)
вроде нормально, если есть предопределенный.
17 hhhh
 
15.10.10
16:17
(16) да. Я смотрел это в привязке к (0), а это похоже совсем другая задача.
18 НЕА123
 
15.10.10
16:19
(17)
офф. Объект неявно в строку преобразовывается
19 Midaw
 
15.10.10
16:40
(17) не задача таже. только я соответствие пристроил без переименования всего и вся. кода много. таблицасвойств это как раз соответствияСвойств отдельного элемента.
20 Midaw
 
15.10.10
16:42
а объект это потому что в процедуру передается всё что угодно, а там по типам распределяется. в моем случае ппп вроде равен тому что нужно, сча проверю чтоб там неопределено не встретилось )))
21 Midaw
 
15.10.10
17:35
всё, разобрался. код заломал малех )
Независимо от того, куда вы едете — это в гору и против ветра!