8.х Кто работал с объектом Структура в 1С

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем sokrat, 27 окт 2010.

  1. TopicStarter Overlay
    sokrat
    Offline

    sokrat

    Регистрация:
    18 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Баллы:
    1
    Итак суть в следующем

    Есть список банков (код, наименование, бик, и прочие реквизиты) - список не уникальный и есть повторящиеся значения (уникальным ключем является код банка). Нужен набор записей с уникальными банками.

    Пример кода

    ЗаписьБанка = Новый Структура;

    Пока выборка.Следующий() Цикл

    Если ЗаписьБанка.Свойство("Номер",выборка.КодБанка) Тогда
    Сообщить(Строка(выборка.КодБанк)+" "+ЗаписьБанка["Номер"]);
    Иначе
    ЗаписьБанка = Новый Структура;
    ЗаписьБанка.Вставить("Номер", выборка.КодБанк);
    .........
    ЗаписьБанка.Вставить("Наименование", выборка.Наименование);
    КонецЕсли;

    КонецЦикла;

    Проблема в следующем, если уже имеется хоть одна запись - то строка
    Если ЗаписьБанка.Свойство("Номер",выборка.КодБанка) Тогда

    возвращает все время Истину, не смотря на то что выборка.КодБанк и ЗаписьБанка["Номер"] не равны меж собой

    В хелпе 1с написано что если задавать просто
    ЗаписьБанка.Свойство("Номер") - не указаывая второй параметр, то будет возвращаться Истина если найдено хоть какое то значение с этим ключем
    а Если задавать
    ЗаписьБанка.Свойство("Номер",выборка.КодБанка) - то будет выдаваться Истина только в том случае, если найдено значение по ключу, и оно равно второму параметру.

    У меня же Истина выдается в любом случае - равно оно второму параметру или нет.

    Подскажите в чем я не прав?
  2. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Не понял. Про ваш второй параметр:
    Ну и так, по коду:
    Код:
    Иначе 
    ЗаписьБанка = Новый Структура; 
    ЗаписьБанка.Вставить("Номер", выборка.КодБанк);
    .........
    ЗаписьБанка.Вставить("Наименование", выборка.Наименование);
    КонецЕсли;
    
    Зачем вы каждый раз создаете новую структуру?

    И вообще, чет читаю понять не могу: давайте с самого начала расскажите где что хранится (в каких типах данных) изначально и какие данные надо в итоге получить?
  3. TopicStarter Overlay
    sokrat
    Offline

    sokrat

    Регистрация:
    18 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Баллы:
    1
    Все, всем спасибо - понял в чем косяк ))))

    Во второй параметр возвращается найденное значение, и вот его как раз и нужно сравнивать с тем значением которое у меня есть

    То есть

    Нум=Неопределено;
    Если (ЗаписьБанка.Свойство("Номер",Нум)) И (Нум=выборка.КодБанк) Тогда
    Сообщить(Строка(выборка.КодБанк)+" "+ЗаписьБанка["Номер"]);
    Иначе
    ЗаписьБанка = Новый Структура;
    ЗаписьБанка.Вставить("Номер", выборка.КодБанк);
    ...........
    ЗаписьБанка.Вставить("Наименование", выборка.Наименование);
    КонецЕсли;

    По поводу добавления новой структуры - если поможите оптимизировать буду рад
  4. TopicStarter Overlay
    sokrat
    Offline

    sokrat

    Регистрация:
    18 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Баллы:
    1
    Согласен новую структуру можно и не создавать

    НО все равно не работает
    так как Если (ЗаписьБанка.Свойство("Номер",Нум)) в Нум выводи значение последней записи
    а как мне узнать записывал я значение раньше или нет?
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.409
    Симпатии:
    316
    Баллы:
    104
    Бррр... Куда записывали?
    Структура - элемент состоящий из набора ключ-значение.
    Т.е. например исходная структура:
    "Код" - "001"
    "Наименование" - "Абв"
    "Бик" - "049000000"
    т.е. здесь у нас 3 ключа: "Код", "Наименование", "Бик".

    Если мы напишем Структура.Вставить("Код", "002"), то итог у нас теперь будет:
    "Код" - "002"
    "Наименование" - "Абв"
    "Бик" - "049000000"

    З.Ы. Используйте пожалуйста тэг [ code ].


    Вам не структуру надо использовать, а допустим ТЗ, в ней искать текущий элемент, и вставлять новый если ничего не найдено.
  6. UnNone
    Offline

    UnNone Опытный в 1С

    Регистрация:
    21 мар 2007
    Сообщения:
    148
    Симпатии:
    0
    Баллы:
    26
    Я так понимаю, что выборка - это результат какого-то запроса, если это так, почему не сделать выгрузку в таблицу значений и свернуть таблицу по всем полям.
    Также если это запрос, может имеет смысл сделать группировку по полям непосредственно в нем.
  7. TopicStarter Overlay
    sokrat
    Offline

    sokrat

    Регистрация:
    18 окт 2010
    Сообщения:
    28
    Симпатии:
    0
    Баллы:
    1
    Всем еще раз спасибо

    не стал мучиться - переделал через обычный массив

Поделиться этой страницей