| 
    
        
     
     | 
    
  | 
Ключ соответствия структура, не работает почему? | ☑ | ||
|---|---|---|---|---|
| 
    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 
 | 
         
        Все всем спасибо все взлетело, логику понял :)     
         | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |