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


Ключ соответствия структура, не работает почему?

Ключ соответствия структура, не работает почему?
Я
   Elf56
 
23.05.18 - 07:36
Всем доброго времени суток.

Имеется 1С:Предприятие 8.3 (8.3.11.3034)
И самописная конфигурация на базе БСП

Необходимо реализовать создание документов по критериям

Объект
Период

Строки могут повторяться т.е. могут быть строку с одинаковым периодом и объектом
для того, чтобы не создавать дубли создал новое соответсвие "СозданныеОбъекты" и проверяю если в структуре 

СтруктураКлюч = Новый Структура("Объект, Период");

по такому клучу в соответствие есть в значении документ то заново его не создаю

Только вот проблема если скажем заполнить ключ с параметрами
Объект = ДОговор1
Период = 01.01.18

и поместить под этот ключ документ, а потом этой структуре 
присвоить значения 
Объект = ДОговор1
Период = 03.03.18

То он найдет тот же самый документ а по сути соответсвие должно выдать НЕОПРЕДЕЛЕНО

вот код 

СозданныеОбъекты= Новый Соответствие;
СтруктураКлюч = Новый Структура("ОбъектОграничения, Период");

Для Каждого Строка Из Таблица Цикл            
    
    СтруктураКлюч.Объект = Строка.Объект;
    СтруктураКлюч.Период = Строка.Период;
            
    ЗначениеСоответствия = СозданныеОбъекты.Получить(СтруктураКлюч);
            
    Если ЗначениеСоответствия = Неопределено Тогда
          // Создаю документ 

        Иначе
          //Провожу действия с уже созданным документом ЗначениеСоответствия

        КонецЕсли;
КонецЦикла;

Почему ищет тот же документ по другому ключу структуре?
Всем заранее спасибо за ответы
 
 
   NWsFF
 
1 - 23.05.18 - 07:45
Потому что структура это  объектный тип, и значение для ключа указатель, а не значения структуры
   craxx
 
2 - 23.05.18 - 07:46
(0) используй Соответствие для подобного
   Elf56
 
3 - 23.05.18 - 07:54
ок спасибо
   Elf56
 
4 - 23.05.18 - 07:54
А соответствие тогда какого типа ?
   craxx
 
5 - 23.05.18 - 08:01
(4) в соответствии ключ может быть любого тиа
   NWsFF
 
6 - 23.05.18 - 08:03
(4)Тоже объектного...
Используй соответствие соответствий
Если СозданныеОбъекты[Период] <> Неопределено и СозданныеОбъекты[Период][Объект] <> Неопределено Тогда
//создаешь документ

 Если  СозданныеОбъекты[Период] = неопределено Тогда
  СозданныеОбъекты[Период] = Новый Соответствие();
 КонецЕсли;
 СозданныеОбъекты[Период][Объект] = Новый Док;
Иначе
 Док = СозданныеОбъекты[Период][Объект];
КонецЕсли;
   Ненавижу 1С
 
7 - 23.05.18 - 08:03
(4) тоже объектного
   NWsFF
 
8 - 23.05.18 - 08:04
(6) Спутал условие
Если СозданныеОбъекты[Период] = Неопределено или СозданныеОбъекты[Период][Объект] = Неопределено Тогда
   Elf56
 
9 - 23.05.18 - 08:12
А разве просто вот так не будет работать 

Если СозданныеОбъекты[Период] <> Неопределено и СозданныеОбъекты[Период][Объект] <> Неопределено Тогда
//создаешь документ


 СозданныеОбъекты[Период][Объект] = Новый Док;
Иначе
 Док = СозданныеОбъекты[Период][Объект];
КонецЕсли;


Без
Если  СозданныеОбъекты[Период] = неопределено Тогда
  СозданныеОбъекты[Период] = Новый Соответствие();
 КонецЕсли;
   Elf56
 
10 - 23.05.18 - 08:16
вобще на эту строку 

Если СозданныеОбъекты[Период] = Неопределено или СозданныеОбъекты[Период][Объект] = Неопределено Тогда

вот такую ошибку выдает

{Обработка.Выполнение.МодульОбъекта(243)}: Получение элемента по индексу для значения не определено
СозданныеОбъекты[Объект][Период];

Че то совсем перестал понимать?
 
 Рекламное место пустует
   craxx
 
11 - 23.05.18 - 08:18
(10) логику включи и поймешь что тут надо делать вложенное условие
   Йохохо
 
12 - 23.05.18 - 08:22
(10) надо "И" чтобы заработали ленивые вычисления, да и по логике
   Elf56
 
13 - 23.05.18 - 08:25
я так понял тут 

СозданныеОбъекты[Период][Объект]
Надо сначала задать эти индексы 

типо вот так 
СозданныеОбъекты.Вставить("Объект", ОбъектОграничения);
СозданныеОбъекты.Вставить("Период", Период);
   NWsFF
 
14 - 23.05.18 - 08:30
(10) Что это у тебя в ошибке
СозданныеОбъекты[Объект][Период]
а должно быть
СозданныеОбъекты[Период][Объект]
   Elf56
 
15 - 23.05.18 - 08:31
А разве это имеет значение на каком месте стоит ?
вобще мне важнее чтобы объект был первым
   Elf56
 
16 - 23.05.18 - 08:32
Честно вобще не понимаю зачем вот это условие 

Если СозданныеОбъекты[Период] = Неопределено или
   NWsFF
 
17 - 23.05.18 - 08:35
(16)
Это условие проверяет, что соответствие соответствия еще не создано
Если СозданныеОбъекты[Период] = Неопределено
то уже не имеет смысла проверять СозданныеОбъекты[Период][Объект] так как будет выдана ошибка из (10)
И только после операции
Если  СозданныеОбъекты[Период] = неопределено Тогда
  СозданныеОбъекты[Период] = Новый Соответствие();
КонецЕсли;
У нас появляется наша искомая структура данных соответствие соответсвий и опреация СозданныеОбъекты[Период][Объект] уже не будет выдавать ошибку
   Elf56
 
18 - 23.05.18 - 08:52
Все всем спасибо все взлетело, логику понял :)

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