|   |   | 
| 
 | Ключ соответствия структура, не работает почему? | ☑ | ||
|---|---|---|---|---|
| 0
    
        Elf56 23.05.18✎ 07:36 | 
        Всем доброго времени суток.
 Имеется 1С:Предприятие 8.3 (8.3.11.3034) И самописная конфигурация на базе БСП Необходимо реализовать создание документов по критериям Объект Период Строки могут повторяться т.е. могут быть строку с одинаковым периодом и объектом для того, чтобы не создавать дубли создал новое соответсвие "СозданныеОбъекты" и проверяю если в структуре СтруктураКлюч = Новый Структура("Объект, Период"); по такому клучу в соответствие есть в значении документ то заново его не создаю Только вот проблема если скажем заполнить ключ с параметрами Объект = ДОговор1 Период = 01.01.18 и поместить под этот ключ документ, а потом этой структуре присвоить значения Объект = ДОговор1 Период = 03.03.18 То он найдет тот же самый документ а по сути соответсвие должно выдать НЕОПРЕДЕЛЕНО вот код СозданныеОбъекты= Новый Соответствие; СтруктураКлюч = Новый Структура("ОбъектОграничения, Период"); Для Каждого Строка Из Таблица Цикл СтруктураКлюч.Объект = Строка.Объект; СтруктураКлюч.Период = Строка.Период; ЗначениеСоответствия = СозданныеОбъекты.Получить(СтруктураКлюч); Если ЗначениеСоответствия = Неопределено Тогда // Создаю документ Иначе //Провожу действия с уже созданным документом ЗначениеСоответствия КонецЕсли; КонецЦикла; Почему ищет тот же документ по другому ключу структуре? Всем заранее спасибо за ответы | |||
| 1
    
        NWsFF 23.05.18✎ 07:45 | 
        Потому что структура это  объектный тип, и значение для ключа указатель, а не значения структуры     | |||
| 2
    
        craxx 23.05.18✎ 07:46 | 
        (0) используй Соответствие для подобного     | |||
| 3
    
        Elf56 23.05.18✎ 07:54 | 
        ок спасибо     | |||
| 4
    
        Elf56 23.05.18✎ 07:54 | 
        А соответствие тогда какого типа ?     | |||
| 5
    
        craxx 23.05.18✎ 08:01 | 
        (4) в соответствии ключ может быть любого тиа     | |||
| 6
    
        NWsFF 23.05.18✎ 08:03 | 
        (4)Тоже объектного...
 Используй соответствие соответствий Если СозданныеОбъекты[Период] <> Неопределено и СозданныеОбъекты[Период][Объект] <> Неопределено Тогда //создаешь документ Если СозданныеОбъекты[Период] = неопределено Тогда СозданныеОбъекты[Период] = Новый Соответствие(); КонецЕсли; СозданныеОбъекты[Период][Объект] = Новый Док; Иначе Док = СозданныеОбъекты[Период][Объект]; КонецЕсли; | |||
| 7
    
        Ненавижу 1С гуру 23.05.18✎ 08:03 | 
        (4) тоже объектного     | |||
| 8
    
        NWsFF 23.05.18✎ 08:04 | 
        (6) Спутал условие
 Если СозданныеОбъекты[Период] = Неопределено или СозданныеОбъекты[Период][Объект] = Неопределено Тогда | |||
| 9
    
        Elf56 23.05.18✎ 08:12 | 
        А разве просто вот так не будет работать 
 Если СозданныеОбъекты[Период] <> Неопределено и СозданныеОбъекты[Период][Объект] <> Неопределено Тогда //создаешь документ СозданныеОбъекты[Период][Объект] = Новый Док; Иначе Док = СозданныеОбъекты[Период][Объект]; КонецЕсли; Без Если СозданныеОбъекты[Период] = неопределено Тогда СозданныеОбъекты[Период] = Новый Соответствие(); КонецЕсли; | |||
| 10
    
        Elf56 23.05.18✎ 08:16 | 
        вобще на эту строку 
 Если СозданныеОбъекты[Период] = Неопределено или СозданныеОбъекты[Период][Объект] = Неопределено Тогда вот такую ошибку выдает {Обработка.Выполнение.МодульОбъекта(243)}: Получение элемента по индексу для значения не определено СозданныеОбъекты[Объект][Период]; Че то совсем перестал понимать? | |||
| 11
    
        craxx 23.05.18✎ 08:18 | 
        (10) логику включи и поймешь что тут надо делать вложенное условие     | |||
| 12
    
        Йохохо 23.05.18✎ 08:22 | 
        (10) надо "И" чтобы заработали ленивые вычисления, да и по логике     | |||
| 13
    
        Elf56 23.05.18✎ 08:25 | 
        я так понял тут 
 СозданныеОбъекты[Период][Объект] Надо сначала задать эти индексы типо вот так СозданныеОбъекты.Вставить("Объект", ОбъектОграничения); СозданныеОбъекты.Вставить("Период", Период); | |||
| 14
    
        NWsFF 23.05.18✎ 08:30 | 
        (10) Что это у тебя в ошибке 
 СозданныеОбъекты[Объект][Период] а должно быть СозданныеОбъекты[Период][Объект] | |||
| 15
    
        Elf56 23.05.18✎ 08:31 | 
        А разве это имеет значение на каком месте стоит ? 
 вобще мне важнее чтобы объект был первым | |||
| 16
    
        Elf56 23.05.18✎ 08:32 | 
        Честно вобще не понимаю зачем вот это условие 
 Если СозданныеОбъекты[Период] = Неопределено или | |||
| 17
    
        NWsFF 23.05.18✎ 08:35 | 
        (16)
 Это условие проверяет, что соответствие соответствия еще не создано Если СозданныеОбъекты[Период] = Неопределено то уже не имеет смысла проверять СозданныеОбъекты[Период][Объект] так как будет выдана ошибка из (10) И только после операции Если СозданныеОбъекты[Период] = неопределено Тогда СозданныеОбъекты[Период] = Новый Соответствие(); КонецЕсли; У нас появляется наша искомая структура данных соответствие соответсвий и опреация СозданныеОбъекты[Период][Объект] уже не будет выдавать ошибку | |||
| 18
    
        Elf56 23.05.18✎ 08:52 | 
        Все всем спасибо все взлетело, логику понял :)     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |