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


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

Ключ соответствия структура, не работает почему?
Я
   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
Все всем спасибо все взлетело, логику понял :)

Список тем форума
Рекламное место пустует  Рекламное место пустует
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует