Работа со структурами в 1С 8
Структура в языке программирования 1С 8.3 — набор пар «Ключ» и «Значение». Поле «Ключ» имеет строковый тип, «Значение» же может принимать любой тип данных. Обычно используется для хранения и передачи между процедурами набора каких-либо параметров.
Создание новой структуры
Структуру в языке программирования 1С можно создать двумя способами с помощью конструкции «Новый».
Первый способ:
Структура = Новый Структура;
Структура.Вставить(«КлючПараметра1», «Значения параметра №1»);
Структура.Вставить(«КлючПараметра2», «Значения параметра №2»);
Второй способ:
Структура = Новый Структура(«КлючПараметра1, КлючПараметра2», «Значения параметра №1», «Значения параметра №2»);
Оба способа создадут структуру, которую видно на скриншоте из отладки:
Изменение
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Добавить или изменить структуру можно, используя метод «Вставить()».
Пример:
Структура.Вставить(«ИмяКлюча», ЗначениеКлюча);
Если требуется изменить значение старого ключа, вписываем его имя. Если добавить новый ключ, добавить уникальное имя относительно всех ключей структуры.
Чтобы удалить элемент коллекции, нужно воспользоваться методом «Удалить», куда передать имя ключа:
Структура.Удалить(«ИмяКлюча»);
Возможна также очистка всех объектов коллекции:
Структура.Очистить();
Обход структуры
Чтобы перебрать коллекцию структуры, нужно использовать конструкцию «Для Каждого КлючИЗначение Из Структура Цикл».
Например:
Для Каждого КлючИЗначение Из Структура Цикл
…… //обрабатываем, например, изменяем значения
КонецЦикла;
В каждом цикле будет видно, что нам доступны следующие поля:
Количество элементов в структуре можно подсчитать следующим образом:
ТекущаяСтруктура.Количество()
Проверка наличия ключа
Часто бывает, что нужно проверить, есть ли в структуре нужное значение по ключу. В таком случае следует использовать метод «Свойство»:
ЕстьСвойствоКонтрагент = Структура.Свойство(«Контрагент»);
Если в структуре есть элемент с ключом «Контрагент», тогда метод вернет «Истина», в противном случае — «Ложь».
Если Вы начинаете изучать 1С программирование, рекомендуем наш бесплатный курс (не забудьте подписаться на YouTube — регулярно выходят новые видео):
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
СПРОСИТЕ в комментариях!
Вадим:
Есть одна информация, которая не дает мне покоя. В синтаксис-помощнике написано:
Структура (Structure)
()
Использование:
Только чтение.
Автор статьи предлагает при изменении существующего ключа структуры использовать метод Вставить. Все, вроде бы, логично и правильно, но тем не менее, если я сделаю так:
Структура.КлючПараметра1=»Другое значение параметра 1″, то 1С-ка проглотит это и не подавится, в то же время как в СП четко написано «ТОЛЬКО ЧТЕНИЕ». Или я чего-то не понимаю?
Кирилл:
Структура.КлючПараметра1= «Другое значение параметра 1″
«КлючПараметра1» — это имя ключа (ТОЛЬКО ЧТЕНИЕ)
Значение параметра меняем как хотим 🙂
Вадим:
Ну… так-то если подойти, то да)). Однако, насколько я понял, структура СП в части свойств объекта, который она описывает выглядит так:
Если свойство четко определено — то пишется имя свойства. Например
СправочникСсылка
Наименование
Только чтение
или
СправочникОбъект
Наименование
Чтение и запись
Если же имя свойства неопределено, оно пишется в тегах «знак больше» и «знак меньше», как в этом случае со свойством «Имя ключа»
И в тех и в других случаях, когда говорится «Только чтение» или «Чтение и запись» — то имеют в виду ЗНАЧЕНИЕ СВОЙСТВА, А НЕ ЕГО ИМЯ.
Например
СправочникОбъект
ИмяОбщегоРеквизита
Чтение и запись (проверьте сами в СП)
здесь же не имеется в виду, что мы можем менять САМО ИМЯ ОБЩЕГО РЕКВИЗИТА. Его-то уж точно нельзя менять. Здесь написано «Чтение и запись» для ЗНАЧЕНИЯ ЭТОГО СВОЙСТВА
Проводя такой же аналог для структуры получаем что речь идет именно о значении свойства, которое указано в имени ключа. Вот в чем прикол-то))
Кирилл:
Ну… Очень много вы написали)))
Наверное трактовка и хромает. Как написали, так написали. Скажем спасибо что СП вообще есть:)
Но точно скажу:
Имя свойства изменить нельзя, можно только удалить и вставить новое 🙂
owner2005:
«В каждом цикле будет видно, что нам доступны следующие поля», тут небольшая неточность, лучше сказать «В каждой итерации цикла…»
kulkrise:
Добрый день. Пытаюсь создать структуру и обратиться к ее элементам, но выдает след. ошибку: «Поле объекта не обнаружено (ЗаголовокТЧИзТД6)». Как исправить, что я делаю не так?
код ниже:
ЗаголовокТЧИзТД = Новый Структура;
Для Счетчик = 1 По 5 Цикл
ЗаголовокТЧИзТД.Вставить(«ЗаголовокТЧИзТД»+Счетчик,»НовоеЗначение1»);
ЗаголовокТЧИзТД.Вставить(«ЗаголовокТЧИзТД»+Счетчик,»НовоеЗначение2»);
ЗаголовокТЧИзТД.Вставить(«ЗаголовокТЧИзТД»+Счетчик,»НовоеЗначение3»);
ЗаголовокТЧИзТД.Вставить(«ЗаголовокТЧИзТД»+Счетчик,»НовоеЗначение4»);
ЗаголовокТЧИзТД.Вставить(«ЗаголовокТЧИзТД»+Счетчик,»НовоеЗначение5»);
//ЗаголовокТЧИзТД.Вставить(«ЗаголовокТЧИзТД»+Счетчик,»НовоеЗначение»);
КонецЦикла;
Для Каждого КлючИЗначение Из ЗаголовокТЧИзТД Цикл
Индекс = «ЗаголовокТЧИзТД»+Счетчик;
Сообщить(ЗаголовокТЧИзТД[Индекс]);
КонецЦикла;
kulkrise:
обрезало строки в цикле, должно быть в одну строку
ЗаголовокТЧИзТД.Вставить(«ЗаголовокТЧИзТД»+
Счетчик,»НовоеЗначение1»);
потом «НовоеЗначение2» и т.д.