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