1с соответствие в реквизите управляемой формы

Соответствие как реквизит управляемой формы

Я
   toypaul

03.05.12 — 15:43

Нужен реквизит типа Соотвествие в управляемой форме. Как реализовать? Если объявить через Перем, то при заполненнии переменой на сервере, добавленные значения не сохранются.

  

Партнерская программа EFSOL Oblako

   toypaul

1 — 03.05.12 — 15:55

ась?

   fisher

2 — 03.05.12 — 15:59

А в реквизите формы произвольного типа — не?

Тока я сам по УФ не спец :)

   ДенисЧ

3 — 03.05.12 — 15:59

НАсколько я помню — нет такого контрола… И реквизита.

Используй ТЧ…

   mikecool

4 — 03.05.12 — 16:00

список значений

   fisher

5 — 03.05.12 — 16:04

(3) Насколько я понял, нужна просто разделяемая между сервером и клиентом переменная этого типа.

   toypaul

6 — 03.05.12 — 16:08

(4) список прокатил бы если бы был поиск по представлени. дэк 1С его поленилась сделать

   hhhh

7 — 03.05.12 — 16:13

(6) ну таблица значений тогда. Из двух колонок: Значение и Представление.

   toypaul

8 — 03.05.12 — 16:16

(7) :)

   fisher

9 — 03.05.12 — 16:53

Фигня какая-то.

Напрямую в произвольный реквизит засунуть соответствие не дает, а в реквизит типа список значений — без проблем.

  

fisher

10 — 04.05.12 — 10:58

Еще такая странная фишка…

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

Я вообще в УФ не настоящий сварщик… Может, гуру прокомментируют?

Читай всё полезное и впитывай, а нападки игнорируй. Здесь так принято. aka AMIGO

Установить Соответствие Объекта И Формы

Командный интерфейс

Описание процедуры УстановитьСоответствиеОбъектаИФормы() и функции ПолучитьСоответствиеОбъектаИФормы( ) находится в разделе Глобальный контекст/ процедуры и функции работы с универсальными объектами синтаксис – помощника электронной документации платформы :

Процедура УстановитьСоответствиеОбъектаИФормы() устанавливает соответствие управляемой формы и объектов вида СообщениеПользователю для последующей правильной привязки сообщений к элементам управления формы. Для того, чтобы сообщение использовало данные соответствия объекта и формы, у него необходимо заполнить свойство ИдентификаторНазначения. Соответствие может быть получено методом ПолучитьСоответствиеОбъектаИФормы(). Получать соответствие можно до тех пор, пока существует объект, для которого оно зарегистрированно.

Синтаксис:

 УстановитьСоответствиеОбъектаИФормы(<Объект>,  <ИдентификаторФормыИИмяРеквизита>)  

Параметры:

  • <Объект> (обязательный) – Прикладной объект ( например СправочникОбъект.<Имя справочника>; ДокументОбъект.<Имя документа> и т. д.), преобразованный из универсального объекта в значение, для которого необходимо установить соответствие с именем реквизита формы.
  • <ИдентификаторФормыИИмяРеквизита> (обязательный ) – Структура , которая содержит идентификатор формы и имя реквизита элемента управления, для которых выполняется установка соответствия. Структура, передаваемая в параметр, может содержать два элемента с именами ключей:
    • “ИдентификаторФормы” – уникальный идентификатор формы (тип УникальныйИдентификатор);
    • “ИмяРеквизита” (“AttributeName”) – имя реквизита в форме (тип Строка). Этот элемент может не указываться.

Ниже описывается, как установить соответствие, если объект создается из данных формы программно.

Связь между объектом и формой может быть задана явно, путем вызова метода, или неявно. Для явной установки соответствия используется метод УстановитьСоответствиеОбъектаИФормы(). В качестве второго параметра в метод передается информация о том, в какой форме отображается объект (свойство ИдентификаторФормы) и в каком реквизите указанной формы хранится объект данных (свойство Реквизит) для последующей установки правильного соответствия сообщений и элементов управления формы:

Параметры = Новый Структура;
Параметры.Вставить("ИдентификаторФормы", УникальныйИдентификатор);
Параметры.Вставить("Реквизит", "Объект");
УстановитьСоответствиеОбъектаИФормы(Объект, Параметры);

Установленное соответствие будет существовать до тех пор, пока существует объект, для которого установлено соответствие.

Для того чтобы сообщение использовало данные соответствия объекта и имени реквизита, необходимо связать сообщение с данными через метод УстановитьДанные() объекта СообщениеПользователю.

ОбъектСправочник = СсылкаСправочник.ПолучитьОбъект();
Параметры = Новый Структура;
Параметры.Вставить("ИдентификаторФормы", ИдентификаторФормы);
Параметры.Вставить("Реквизит", "Объект");
УстановитьСоответствиеОбъектаИФормы(ОбъектСправочник, Параметры);
ОбъектСправочник.ПроверитьЗаполнение();

Нужно понимать, что в методе УстановитьСоответствиеОбъектаИФормы() указывается имя реквизита для той формы, которая будет открыта по умолчанию для отображения элемента используемого справочника (в примере ОбъектСправочник). Тогда сообщения, которые создаются в обработчике проверки заполнения (ОбъектСправочник.ПроверитьЗаполнение()), будут корректно привязаны к реквизитам новой формы. Если свойство ИндентификаторФормы структуры Параметры (в примере выше) содержит уникальный идентификатор, который не соответствует ни одному экземпляру формы, то для отображения сообщения будет создана и открыта новая форма.

Получить соответствие можно методом ПолучитьСоответствиеОбъектаИФормы(). Получить соответствие можно до тех пор, пока существует объект, для которого оно установлено.

ОписаниеСоответствия = ПолучитьСоответствиеОбъектаИФормы(Объект);

Если для переданного объекта существует соответствие с реквизитом, имя реквизита будет возвращено как результат работы функции. Кроме того, соответствие может быть установлено формой при использовании метода РеквизитФормыВЗначение(). В большинстве случаев рекомендуется использовать именно этот способ.

// Код в модуле документа.
&НаСервере
Процедура ОбработкаПроведения()
    ...
    Сообщение = Новый СообщениеПользователю();
    Сообщение.Текст = "В строке 10 табличной части " + "Номенклатура не хватает " + НедостающееКоличество + " " + ЕдиницаИзмеренияНоменклатуры;
    Сообщение.Поле = "Номенклатура[9].Количество";
    Сообщение.УстановитьДанные(ЭтотОбъект);
    Сообщение.Сообщить();
    // Сообщение будет показано в форме и привязано к
    // элементу управления, связанному с полем
    // Количество в 10 й строке табличной части
    // Номенклатура.
    ...
КонецПроцедуры;

В случае если создание сообщений пользователю (с помощью объекта СообщениеПользователю) выполняется во время контекстного или неконтекстного серверного вызова из формы, вызова из общего модуля или из модуля общей команды, вывод сообщений блокируется. Созданные сообщения будут показаны пользователю после возврата управления на клиентскую сторону. Для получения списка непоказанных сообщений используется метод ПолучитьСообщенияПользователю().

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

См. также:

  • Работа с сообщениями пользователю
  • Отображение состояния длительных процессов
  • Оповещения пользователя

Соответствие в языке программирования 1С чем-то похоже на Структуру, это тоже коллекция пар Ключ и значение. Но в отличие от Структуры, в Соответствие, чтобы получить значение по определенному ключу, нужно обращаться не как к свойству объекта, а через квадратные скобки, и в качестве ключа можно использовать значение любого типа.

Структура: Структура1.Ключ1

Соответствие: Соответствие1[«Ключ1»]

Соответствие можно создать на всех видах клиентов и в любом контексте. Сериализируется, т.е. можно передать переменную с типом соответствие с клиентского контекста на серверный.

Хоть и в ключ и значение соответствия можно записать переменные любого типа, использование типов в этом случае очень сильно зависит от контекста и от вида клиента: мы не можем в клиентском задать в ключ или значение, тип которого работает только в серверном контексте (например, ДокументОбъект.<>).

Новое соответствие создается при помощи конструктора Новый.

Соответствие1 = Новый Соответствие; 

Для того, чтобы добавить новый элемент соответствия, необходимо использовать метод Вставить, который имеет следующий синтаксис:

Вставить(<Ключ>, <Значение>)

Параметр «Ключ» может иметь любой тип! Это очень важное свойство, таким образом, с помощью коллекции Соответствие можно в процессе работы устанавливать соответствие любых объектов с любыми объектами.

Простой пример работы с соответствием:

Соответствие1 = Новый Соответствие;
Соответствие1.Вставить("Ключ1","Ключ тип строка");
Соответствие1.Вставить(1,"Ключ тип число");
Соответствие1.Вставить(Дата(2017,12,10),"Ключ тип дата");
//Выведем значения ключей
Сообщить(Соответствие1["Ключ1"]);
Сообщить(Соответствие1[1]);
Сообщить(Соответствие1[Дата(2017,12,10)]);

Для того чтобы поменять значение какого-нибудь элемента, который соответствует определенному ключу, достаточно для этого ключа присвоить новое значение.

Соответствие1.Вставить(1,"Ключ тип ""число""");

Поменять имеющееся значение можно, также используя квадратные скобки.

Соответствие1[1] = "Ключ тип ""число""";

Обходить соответствие можно с помощью цикла Для каждого…Цикл.

Соответствие1 = Новый Соответствие;
Соответствие1.Вставить("Ключ1","Ключ тип строка");
Соответствие1.Вставить(1,"Ключ тип число");
Соответствие1.Вставить(Дата(2017,12,10),"Ключ тип дата");
Для Каждого ЭлементСоответствия из Соответствие1 цикл
    Сообщить("Соответствие1 [" +
    Строка(ЭлементСоответствия.Ключ) + "] = " +
    ЭлементСоответствия.Значение);
КонецЦикла;

Результат обхода соответствия 1С

Безошибочное получении значения соответствия 1С

Как Вы уже поняли, для того чтобы получить значение элемента соответствия, мы используем квадратные скобки. Но иногда возможны ситуации, когда применение квадратных скобок неосуществимо. В таких случаях мы можем использовать метод Получить, который возвращает любое значение, соответствующее ключу. Если такого ключа нет, то вернется значение Неопределено

Рассмотрим работу данного метода на соответствии с датами в качестве ключей.

Соответствие1 = Новый Соответствие;
Соответствие1.Вставить(Дата(2017,12,1), "Число 2");
Соответствие1.Вставить(Дата(2017,12,2), "Число 3");
Соответствие1.Вставить(Дата(2017,12,3), "Число 1");
Соответствие1.Вставить(Дата(2017,12,4), "Число 6");
//Используем метод Получить
ЭлСоотвествия1 = Соответствие1.Получить(Дата(2017,12,4));
ЭлСоотвествия2 = Соответствие1.Получить(Дата(2017,12,5));
//выведем в сообщения полученные значения
Сообщить(?(ЗначениеЗаполнено(ЭлСоотвествия1),ЭлСоотвествия1,"Неопределено"));
Сообщить(?(ЗначениеЗаполнено(ЭлСоотвествия2),ЭлСоотвествия2,"Неопределено"));

Результат использования метода Получить

Статьи о других универсальных коллекциях значений в 1С

Структуры в 1С

Массив в 1С

Список значений в 1С

Таблица значений в 1С

Более подробно о работе с соответствиями и другими интересными объектами языка программирования в 1С читайте в моей книге «Программировать в 1С за 11 шагов»

Книга «Программировать в 1С за 11 шагов»

Изучайте программирование в 1С в месте с моей книги «Программировать в 1С за 11 шагов»

  1. Книга написана понятным и простым языком — для новичка.
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Научитесь понимать архитектуру 1С;
  4. Станете писать код на языке 1С;
  5. Освоите основные приемы программирования;
  6. Закрепите полученные знания при помощи задачника;

Книга «Основы разработки в 1С: Такси»

Отличное пособие по разработке в управляемом приложении 1С, как для начинающих разработчиков, так и для опытных программистов.

  1. Очень доступный и понятный язык изложения
  2. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!
  3. Поймете идеологию управляемого приложения 1С
  4. Узнаете, как разрабатывать управляемое приложение;
  5. Научитесь разрабатывать управляемые формы 1С;
  6. Сможете работать с основными и нужными элементами управляемых форм
  7. Программирование под управляемым приложением станет понятным

Промо-код на скидку в 15% — 48PVXHeYu


Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

можно оплатить вручную:

Яндекс.Деньги — 410012882996301
Web Money — R955262494655

Вступайте в мои группы:

Вконтакте: https://vk.com/1c_prosto
Фейсбуке: https://www.facebook.com/groups/922972144448119/
ОК: http://ok.ru/group/52970839015518
Твиттер: https://twitter.com/signum2009

О чем эта статья

Эта статья продолжает цикл статей «Первые шаги в разработке на 1С». В ней рассматриваются принципы работы с универсальными коллекциями. Прочитав статью, вы узнаете:

  • Что такое универсальные коллекции, когда и в каких случаях их необходимо использовать?
  • Что общего у всех универсальных коллекций? Какие приемы можно использовать для работы со всеми ними?
  • Что такое массив, как и когда его использовать? Какие у него есть методы?
  • Зачем использовать структуру? В чем её отличие от массива?
  • В каких случаях использовать список значений? Как отобразить его на форме?
  • Соответствие – что это и когда его использовать? В чем преимущества относительно структуры?
  • Для чего используется таблица значений? Как описать ее структуру? Как добавить/удалить строки? Как вывести ее на форму?
  • Дерево значений – для чего используется? Как заполнить и вывести на форму? Как с ним работать?

Применимость

В статье рассматривается платформа 1С:Предприятие 8.3 актуальной редакции.

Как в 1С работать с универсальными коллекциями

  • Дополнительные методы для Массива
  • Универсальная коллекция Структура
  • Универсальная коллекция Список значений
  • Универсальная коллекция Соответствие
  • Универсальная коллекция Таблица значений
  • Универсальная коллекция Дерево значений

Коллекция значений – это некий контейнер, в котором может содержаться обычно любое количество элементов. При этом каких-либо жестких ограничений на тип данных зачастую не накладывается.

В универсальную коллекцию можно добавлять значения. Все значения в коллекции можно обойти. Используются эти коллекции в основном для какой-либо обработки в алгоритмах. Т.е. это некие динамические структуры, которые существуют на время работы алгоритма.

Важно понимать, что коллекции не хранятся в базе данных (о типе данных Хранилище значений, которое может сохранять практически любой тип данных, речь пока не идет).

Существуют различные виды универсальных коллекций: Массив, Структура, Соответствие, Фиксированный массив, Таблица значений, Табличная часть и т.д. Но у всех коллекций есть схожесть поведения.

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

Можно получить новую коллекцию вручную, обратившись к конструктору и создав экземпляр класса.

Например: НашМассив = Новый Массив;

Конструкторы для многих универсальных коллекций являются параметризованными.

Так, в конструкторе для Массива можно указать количество элементов в соответствующих измерениях. Т.е. можно сразу же объявлять многомерные Массивы.

Соответствующее описание конструктора есть в синтакс-помощнике.

Конструктор 1С

Таким образом, используя параметры конструктора, можно сразу задать желаемое поведение данного объекта.

Но параметры являются необязательными, разработчик может их не задавать и в дальнейшем определить поведение Массива так, как считает нужным.

Почти любую универсальную коллекцию можно создать с помощью конструктора (исключением являются табличные части, которые выступают в качестве объектов конфигурации).

Для универсальных коллекций существуют такие общие понятия, как индекс и номер. Каждый элемент коллекции имеет индекс. При этом индекс начинается с нуля.

Для того чтобы обратиться к элементу Массива НашМассив, можно использовать обращение по индексу, для этого индекс указывается в квадратных скобках.

Например, НашМассив[3]. Обратите внимание, в этом случае система возвращает элемент Массива с индексом 3, а по порядку это четвертый элемент Массива.

Для некоторых коллекций существует также понятие номера строки. Номер строки начинается с единицы. Например, для табличной части есть такое свойство, как номер строки. Важно иметь ввиду, что если мы знаем номер строки и хотим обратиться по индексу, то в качестве индекса следует использовать значение на единицу меньше номера строки.

Понятие номера строки существует далеко не у всех коллекций, а преимущественно у тех, которые могут отображаться в интерфейсе пользователя.

Для всех коллекций используется обход элементов коллекции. Обход возможен двумя способами: циклом Для и циклом Для каждого из.

Массив

Для большинства универсальных коллекций применимы методы: Количество, Индекс, Добавить, Вставить, Удалить и Найти.

Количество – это функция, которая возвращает количество элементов коллекции. Она может использоваться перед циклом Для, как представлено на рисунке.

Метод Индекс существует не у всех коллекций, а только у тех, на элементы которой можно сослаться. В качестве примера можно привести ТаблицуЗначений.

ТаблицаЗначений – это определенная коллекция строк, в строках могут содержаться разные колонки с разными типами значений.

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

Метод Индекс позволяет определить, какой индекс соответствует данной строке (т.е. текущую позицию строки в таблице). Значения индекса начинаются с нуля.

Методы добавления новых значений в данную коллекцию существуют практически у любой универсальной коллекции. На рисунке представлено, как заполнить Массив значениями от 0 до 10 двумя способами.

Добавление значений в коллекцию

Для того, чтобы добавить элемент в Массив мы можем использовать метод Добавить, в скобках указать добавляемое значение. При этом значение будет добавляться в конец списка, т.е. Массив будет постоянно увеличиваться за счет последней позиции.

Другой метод, который позволяет добавлять значения в коллекцию – метод Вставить. Он отличается от метода Добавить тем, что можно указать, в какое место нужно вставить добавляемый элемент.

Синтаксис: Вставить (<Индекс>,<Значение>)

Первым параметром указывается индекс, в который будет вставлено новое значение. Т.е. мы, например, можем указать, что каждое значение нужно вставлять в начало списка (второй способ на рисунке выше).

Для удаления элементов из коллекции используется метод Удалить. В методе Удалить указывается по индексу, какой элемент мы будем удалять.

Синтаксис: Удалить(<Индекс>)
Пример использования: НашМассив.Удалить(5);

Следует отметить, что для тех коллекций, где строки представляют самостоятельную сущность (например, для ТаблицыЗначений), мы также можем использовать метод получения индекса для того, чтобы потом удалить данную строку.

Практически у всех коллекций существует метод поиска значения – Найти. В метод передается то значение, которое хотим найти. В некоторых коллекциях можно поставить какие-либо ограничения.

Например, в ТаблицеЗначений можно указать те строки, те колонки, в которых нужно осуществлять поиск.

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

Пример использования: НашаПеременная = НашМассив.Найти(8);

Универсальные коллекции можно очень быстро очищать, т.е. удалить абсолютно все элементы. Для этого используется метод Очистить(), который удаляет элементы Массива, строки ТаблицыЗначений, либо данные других коллекций.

Дополнительные методы для Массива

Метод ВГраница() возвращает количество элементов минус один. Т.е. если мы используем цикл Для, то вместо метода Количество можем сразу использовать метод Граница().

В частности, переменную КоличествоВМассиве можно было определить иначе:

КоличествоВМассиве = НашМассив.ВГраница();
Тогда при описании самого цикла отнимать от данной переменной единицу не следует.

Метод Установить позволяет присвоить значение элементу Массива по индексу.

Синтаксис: Установить(<Индекс>,<Значение>)

Пример: НашМассив.Установить (2,8);

Альтернативный вариант: НашМассив[2] = 8;

Можно для Массива использовать метод Получить, для того, чтобы прочитать значение по индексу, не обращаясь к использованию квадратных скобок.

Синтаксис: Получить(<Индекс>)

Пример: НашаПеременная = НашМассив.Получить(2);

Альтернативный вариант: НашаПеременная = НашМассив[2];

Универсальная коллекция Структура

Структура, так же как и Массив, может иметь неограниченное количество элементов, но вот содержание элемента отличается от Массива.

Структура представляет собой коллекцию, каждое значение которой состоит из пары. Первый элемент пары называется Ключ. Второй элемент пары – Значение.

Ключ – это строго строковый тип данных, который описывает значение. Например, Ключу «Код» может соответствовать значение 113; Ключу «Имя» значение «Вася». На само Значение ограничение типа данных не накладывается.

Структуру очень удобно использовать, если мы хотим создать некий список параметров. Если данная Структура называется НашаСтруктура, то обращаться к ее двум значениям мы будем следующим образом: НашаСтруктура.Код и НашаСтруктура.Имя.

Такое обращение гораздо удобнее, чем если бы мы все параметры определили в Массив и обращались к ним по индексу.

Структура делает программный код читаемым (понятным). Структура применяется достаточно часто, гораздо чаще чем Массив.

Она используется для описания некоторых параметров, которых зачастую существует достаточно большое количество во всех алгоритмах.

Кроме того, Структура применяется в том случае, если процедура и функция содержат большое количество передаваемых параметров.

Тогда гораздо удобнее записать все параметры в Структуру и именно ее и передавать. Т.е. происходит «упаковка» параметров процедур и функций.

Отдельно следует отметить, что в качестве Ключа в Структуре может выступать не абсолютно любая строка. Накладываются определенные ограничения.

Ключ должен выступать в качестве идентификатора. Это означает, что в Ключе не должно быть пробелов и он не может начинаться с цифры.

Допустимо начало Ключа с буквы или знака подчеркивания. Таким образом, Ключ должен удовлетворять требованиям к созданию идентификаторов.

Отметим, чем еще Сруктура отличается от Массива. В Структуре есть метод Вставить, в Массиве есть два метода для вставки: Вставить (в определенную позицию) и Добавить (в конец списка). В Массиве все элементы являются упорядоченными.

Структура – это некое неупорядоченное множество. Именно поэтому для Структуры существует только метод вставки.

Значение вставляется не на конкретную позицию, а в указанное множество. Для Структуры недопустимо обращение по индексу, как для других универсальных коллекций.

К элементам Структуры обращаются только по имени Ключа. Тем не менее, цикл Для каждого из работает и для Структуры, но опираться на порядок элементов Структуры не следует.

Структура создается точно так же, как и другие универсальные коллекции с помощью использования конструктора Новый, указывая тип данных Структура.

Как и Массив, конструктор Структуры может иметь параметры. Т.е. возможно описать само содержание Структуры, используя конструктор.

В отличие от Массива, где можно просто указать количество элементов для всех размерностей, в Структуре возможно задавать само содержание.

Например: НашаСтруктура = Новый Структура (“Код,Имя”, 133, “Вася”);

Через запятую перечисляются сначала имена Ключей, а потом, соответственно, в той же последовательности значения параметров.

Для добавления в Структуру нового значения существует метод Вставить, который вставляет новую пару (Ключ и Значение).

Например: НашаСтруктура.Вставить(“ЧленовСемьи”,3);

Для Структуры характерен еще один метод, который используется достаточно часто. Это метод Свойство.

С помощью данного метода можно понять, а есть ли в этой Структуре такой элемент, у которого Ключ имеет такое-то имя.

Если существует такой элемент, то система вернет значение Истина, в противном случае – Ложь.

Например, выражение НашаСтруктура.Свойство (“ЧленовСемьи”) будет равно значению Истина. Этот метод применяется достаточно часто при анализе Структуры.

Как и для любой универсальной коллекции, допустимо обращение к свойствам Структуры по индексу. Но индекс для Структуры – это строковое значение.

Например: Сообщить(НашаСтруктура[“ЧленовСемьи”]);

Однако следует не забывать, что Структура – это не упорядоченное множество объектов, именно поэтому обращение по индексу 0, 1, 2 недопустимо.

Универсальная коллекция Список значений

СписокЗначений представляет собой линейный список элементов любого типа данных.

Каждый элемент состоит из нескольких значений. Схематично список значений можно представить в виде списка с четырьмя колонками.

Первая колонка – Отметка. Она имеет булевский тип данных и позволяет пользователю либо ставить флажки, либо их снимать.

Другая колонка – это картинка, которая может каким-то образом визуально изображать данный элемент, т.е. ставить в соответствие данной строке какую-либо картинку.

Третья колонка – само хранимое значение, т.е. это любой тип данных, причем в разных строках он может быть различным.

Четвертая колонка – это представление, т.е. это некое строковое описание данного значения. Представление будет выводиться пользователю, когда он будет просматривать данный элемент. При этом, если представление не задано, система будет пытаться сама получить представления для элемента, содержащегося в данной позиции.

СписокЗначений – это тот объект, с которым может визуально работать пользователь. Т.е. СписокЗначений можно вывести на форму.

Пользователь может выполнять с ним какие-то действия. Кроме этого, СписокЗначений можно вывести независимо, используя методы, т.е. показать на экран в некоторой ветке алгоритма (за исключением серверного кода), чтобы пользователь выбрал какую-то строчку или проставил какие-либо галочки.

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

СписокЗначений (ValueList)

Методы СписокЗначений

Есть такие методы, как:

  • Вставить(<Индекс>, <Значение>, <Представление>, <Пометка>, <Картинка>) ;
  • Добавить(<Значение>, <Представление>, <Пометка>, <Картинка>);
  • Количество();
  • Индекс(<Элемент>).

Есть и специальные методы, например, ВыгрузитьЗначения(). При этом создается Массив, в который копируется список значений. Например:

МассивЭлементов = СписокТиповЦен.ВызрузитьЗначения();

Существует и обратный метод:
СписокТиповЦен.ЗагрузитьЗначения(МассивЭлементов);

Существуют методы поиска:
НайтиПоЗначению(<ИскомоеЗначение>); НайтиПоИдентификатору(<Идентификатор>).

Есть метод копирования:
КопияСписка = СписокТиповЦен.Скопировать();
Данный метод предназначен для того, чтобы сделать какую-то модификацию с копией.

Существуют методы:
СортироватьПоЗначению(<Направление>);
СортироватьПоПредставлению(<Направление>).

Методы ВыбратьЭлемент(<Заголовок>,<Элемент>) и ОтметитьЭлементы (<Заголовок>) вызывают модальное диалоговое окно, которое останавливает выполнение алгоритма, пока пользователь не закроет данное окно.

Для использования этих методов в свойствах конфигурации Режим использования модальности должен быть установлен на значение Использовать.

Нстройки конфигурации для использования методов

Пример кода, вызываемого из модуля Управляемого приложения:

Язык 1С

Код из модуля управляемого приложения

Отображение данного кода в пользовательском режиме (модальное диалоговое окно).

Код в пользовательском режиме

Ниже СписокЗначений используется в качестве доступного типа данных для реквизита формы. Создаем для формы обработки новый реквизит, определяем для него тип СписокЗначений и отображаем его на форме.

СписокЗначений отображение

Создаем новую команду ЗапонитьПодарки, переносим на форму и определяем для нее обработчик действия.

Создание команды в форме

Обработчик действия в модуле формы:

Обработчик действия в модуле формы

В пользовательском режиме, при нажатии в форме обработки кнопки Заполнить подарки, появится заполненный список.

Пользовательский режим

При желании список можно редактировать: какие-то элементы добавить, какие-то – удалить.

Настройка в пользовательском режиме

Универсальная коллекция Соответствие

Данная коллекция очень схожа со Структурой. Также, как и Структура, Соответствие представляет собой наборы значений, которые состоят из ключа и самого значения.

Главное отличие в том, что в качестве Ключа может указываться любой тип данных, равно как и для значения. В виду этой особенности обращаться к значению соответствия необходимо по индексу, в качестве значения индекса указывается значение ключа.

В качестве ключа может быть тип данных, отличающихся от строки. Свойства и методы работы с Соответствием практически такие же, как у Структуры.

Конструктор Соответствия, в отличии от Структуры, не содержит возможности указания параметров.

Конструктор Соответствия

Пример использования:

Пример конструктора Соответствия

Соответствие удобно применять тогда, когда необходимо связать какие-либо две структуры. Например, каждой строке табличной части необходимо сопоставить строку из таблицы значений.
В этом случае в качестве ключа Соответствия используется строка табличной части и указывается соответствующее значение.

При вставке элементов в коллекцию Соответствие помимо метода Вставить(<Ключ>,<Значение>) существует другой способ вставки значения – это использование обычного оператора присваивания.

Например: НашеСоответствие = Новый Соответствие;
Соответствие[777] = 999;

Т.е. если элемент в коллекции не присутствовал, то с помощью оператора присваивания он будет добавлен, а если присутствовал, то будет обновлен.

Это является отличием от Структуры.

Универсальная коллекция Таблица значений

ТаблицаЗначений представляет из себя таблицу с произвольным количеством строк и произвольным количеством колонок. На пересечении могут храниться значения любого типа данных. При необходимости колонки можно типизировать, т. е. определить в какой колонке какой тип данных хранится.

Можно оставить колонки нетипизированными, тогда в одной колонке в разных строках могут храниться значения разных типов.

Отличия ТаблицыЗначений от двухмерного Массива:

  • это объект, с которым может работать пользователь (таблицу значений можно вывести на экран, пользователь может ее заполнять, в дальнейшем введенные данные можно читать);
  • построение индексов для быстрого поиска;
  • клонирование, заполнение определенным значением всей колонки, выгрузка все колонки в массив.

ТаблицаЗначений используется как некий буфер хранения информации. ТаблицаЗначений возвращается и принимается как параметр многими методами системы. К Таблице значений возможно построить запрос.

Итак, ТаблицаЗначений состоит из набора строк и набора колонок. И строки, и колонки представляют собой коллекции.

Т.е. внутри коллекции ТаблицаЗначений есть еще две коллекции. Обратимся к синтакс-помощнику и найдем ТаблицуЗначений.

Синтакс-помощник: ТаблицаЗначений

Поддерживаемые типы данных: сама ТаблицаЗначений, которая состоит из строк. Каждая строка представлена типом данных СтрокаТаблицыЗначений, у которой есть свои свойства и свои методы. Имеется КоллекцияКолонок ТаблицыЗначений. КолонкаТаблицыЗначений также обладает определенными свойствами.

Важный момент! Процедура, которая формирует ТаблицуЗначений, должна компилироваться & НаСервере.

НаСервере

Прежде, чем начать работать с ТаблицейЗначений, необходимо определить, какие в ней будут содержаться колонки (т.е. создать их). Синтаксис:

Добавить(<Имя>, <Тип>, <Заголовок>, <Ширина>)
<Имя> (необязательный)
Тип: Строка.
<Тип> (необязательный)
Тип: ОписаниеТипов
<Заголовок> (необязательный)
Тип: Строка.
<Ширина> (необязательный)
Тип: Число.

Например:

Содержание ТаблицыЗначений

Для вызова данной процедуры будем использовать команду.

Создание ТаблицыЗначений

В описании ТаблицыЗначений в качестве элементов коллекции выступают именно СтрокиТаблицыЗначений.

В отличии от колонок, которые состоят только из свойств (Имя, Тип, Заголовок, Ширина), в СтрокеТаблицыЗначений существуют как свойства (обращение по имени колонки), так и методы (можно получать и устанавливать значение, работать с владельцами).

КолонкаТаблицыЗначений

Чтобы добавить новую строку в таблицу нужно использовать метод либо Добавить(), либо Вставить(<Индекс>). Во втором случае следует указать, на какую позицию нужно выставлять требуемую строку.

Чтобы присвоить значение колонке, мы через точку обращаемся по имени колонки или по индексу (с помощью квадратных скобок).

Имя колонки

Для заполнения ТаблицыЗначений могут использоваться следующие методы:

Очистить() – для удаления всех строк из ТаблицыЗначений.

ЗаполнитьЗначения(<Значение>, <Колонки>) – позволяет заполнить все колонки, либо выбранные колонки одним значением.
ЗагрузитьКолонку(<Массив>, <Колонка>) – загружает колонку из массива.
ВыгрузитьКолонку(<Колонка>) – выгружает колонку в массив.

Два последних метода удобно использовать, когда нужно перебросить колонку из одной таблицы значений в другую.

Скопировать(<Строки>, <Колонки>) – позволяет на основании существующей таблицы создать новую ТаблицуЗначений, при этом указывать не все строки и все колонки, а только некоторые из них. Возвращаемое значение – ТаблицаЗначений.

Можно скопировать структуру ТаблицыЗначений. Для этого существует соответствующий метод СкопироватьКолонки(<Колонки>). Мы получим пустую ТаблицуЗначений с требуемой структурой.

В ТаблицеЗначений существует метод Итог(<Колонка>). Можно указать ту колонку, в которой нужно просуммировать числовые величины. Применительно к ранее показанному коду в Табло можно рассчитать значение: ТЗ.Итог(“Сумма”).

Рассчитать итог в ТаблицеЗначений

В ТаблицеЗначений существует возможность сгруппировать (свернуть) числовые величины по одинаковым значениям определенных колонок с помощью метода Свернуть(<КолонкиГруппировок>, <КолонкиСуммирования>).

Применительно к ранее показанному коду в Табло можно рассчитать значение: ТЗ.Свернуть(“ДеньНедели”,“Сумма”).

ТЗ.Свернуть

ТаблицуЗначений можно показать на пользовательском экране, чтобы с ней можно было совершать какие-либо действия. Но в отличии от СпискаЗначений из программного кода нельзя просто так вызвать таблицу на экран.

Чтобы отобразить ТаблицуЗначений на экране, создадим реквизит формы и присвоим ему тип данных ТаблицаЗначений.

Отображение ТаблицыЗначений на экране

Далее у этого объекта («Таблица») нужно будет создать колонки с соответствующим именем и типом данных.

Свойства таблицы

Свойства таблицы

После чего полученную таблицу следует вывести на форму.

Таблица в форме

В модуле формы в конце ранее составленного алгоритма (в Процедуре СозданиеТаблицыЗначений) следует дописать:
ЗначениеВДанныеФормы(ТЗ, Таблица);

Модуль формы

Универсальная коллекция Дерево значений

ДеревоЗначений универсальная коллекция, которая очень похожа на ТаблицуЗначений. Отличие от таблицы заключается в том, что строки дерева могут быть подчинены друг другу, т.е. может быть образована некая иерархия.

ДеревоЗначений тоже может быть отражено на экране. Дерево значений в явном виде состоит из коллекции строк и коллекции колонок. В дереве существуют такие два свойства как Строки и Колонки.

Поскольку строки могут быть подчинены друг другу, то для каждой строки может быть указан Родитель, а также подчиненные ей строки.

Дерево значений

Создадим соответствующую команду Дерево и ее процедуру обработки.

Процедура обработки команды Дерево

Создадим ДеревоЗначений в котором одна родительская строка и две подчиненные.

ДеревоЗначений

Создадим реквизит формы ДерЗн (тип данных – ДеревоЗначений).

Форма ДеревоЗначений

Для этого реквизита создадим колонки Год и Месяц.

Настройка формы

Переместим соответствующий элемент ДерЗн на форму.

Добавление объекта в форму

В конце Процедуры ДеревоНаСервере() допишем:

ЗначениеВДанныеФормы(ДеревоЗн, ДерЗн);

Проверим, что получилось в пользовательском режиме.

Пользовательский режим 1С

С помощью кнопки Добавить можно добавлять новые строки. Они могут также образовывать иерархию.

Чтобы обойти все элементы дерева значений, нам понадобится использовать рекурсию, т.е. вызов процедуры самой из себя. Например, обработка дерева значений может выглядеть так:

Обработка дерева значений с помощью рекурсии

На этом мы завершаем наше первое знакомство с универсальными коллекциями.

В следующей статье рассмотрим, при помощи какого важного механизма разработчик может упростить обращение к элементу справочника из программного кода.

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

Если Вы уже участник группы – нужно просто повторно авторизоваться в ВКонтакте, чтобы скрипт Вас узнал. В случае проблем решение стандартное: очистить кеш браузера или подписаться через другой браузер.

Иногда встает вопрос, что лучше использовать, а чаще всего в стандартных конфигурациях 1С и их партнеров при обновлении может, происходит преобразование данных в другие объекты метаданных и почему то они строят структуру, где ключом является код объекта?! А там же может быть значение, которое начинается на цифру и сразу же выходит ошибка.

Таблица сравнения построена по версии справки из Конфигуратора:

Структура

Соответствие

Элементы коллекции:КлючИЗначение

Свойства: ()

Возможно обращение к значению элемента посредством оператора […]. В качестве аргумента передается значение ключа элемента.

Для объекта доступен обход коллекции посредством оператора Для каждого … Из … Цикл. При обходе выбираются элементы коллекции.

Методы:

Вставить (Insert)
Количество (Count)
Очистить (Clear)
Удалить (Delete)

Свойство (Property)

Получить (Get)

Конструкторы:

По ключам и значениям

По умолчанию

Описание:

Представляет собой коллекцию пар КлючИЗначение. При этом ключ может быть только строковым и должен удовлетворять требованиям, предъявляемым к именованию переменных встроенного языка.
К значениям структуры можно обращаться как к свойствам объекта. При этом ключ используется как имя свойства.
Структура используется обычно для хранения небольшого количества значений, каждое из которым имеет некоторое имя.

Представляет доступ к соответствию.

Доступность: Тонкий клиент, веб-клиент, сервер, толстый клиент, внешнее соединение.

Возможен обмен с сервером. Сериализуется. Данный объект может быть сериализован в/из XDTO. Тип XDTO, соответствующий данному объекту, определяется в пространстве имен {http://v8.1c.ru/8.1/data/core}.

Имя типа XDTO: Structure

Имя типа XDTO: Map

Может использоваться в реквизитах управляемой формы.

Пример:

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

Запись = Новый Соответствие;

Запись.Вставить(«Ключ»,«Значение»);

Кроме этого: Структура упорядочивает элементы при добавлении, а соответсвие нет.

Вернемся к теме:

Для «Структура» ключ должен быть введен по всем правилам объявления переменных, а «Соответствие» нет.

Можно просто заменить тип переменной и заменить метод «Свойство» на «Получить». Обычно этого достаточно.

Но бывают и неожиданные результаты при использовании «Соответствие».

Например, платформа даёт добавить значение с ключом = Неопределенно, а вот считать нельзя, так как по факту запись не была добавлена, но и ошибку не выдал.

Предлагаю код для проверки исключительных ситуаций. Код можно добавить на пустой форме, добавив 2 таблицы значений с именами табСтруктура и табСоответствие.

Перем мСтруктура;

Перем мСоответствие;  

Процедура КнопкаВыполнитьНажатие(Кнопка)

        Тест =«А500»;

        мСтруктура.Очистить();

        тДата = ТекущаяДата();

        Для А =1По500000Цикл

               Стр =«А»+Формат(А,«ЧГ=»);

               ВставитьИПроверить(мСтруктура, Стр, Стр);

        КонецЦикла;           

        Сообщить(«Структура — «+(ТекущаяДата() тДата));

        ВставитьИПроверить(мСтруктура, Тест, Тест);

        мСоответствие.Очистить();

        тДата = ТекущаяДата();

        Для А =1По500000Цикл

               Стр =«А»+Формат(А,«ЧГ=»);

               ВставитьИПроверить(мСоответствие, Стр, Стр);

        КонецЦикла;           

        Сообщить(«Соответствие — «+(ТекущаяДата() тДата));

        ВставитьИПроверить(мСоответствие, Тест, Тест);

        ВывестиНаФорму()

КонецПроцедуры

Процедура ВставитьИПроверить(Список, Ключ, Значение);

        //получаем тип

        мТип = ТипЗнч(Список);

        //проверка возможно добавить или нет

        Попытка

               Список.Вставить(Ключ, Значение);

        Исключение

               Сообщить(«»+ мТип +«: Не возможно добавить ключ [«+ Значение +«].»);   

               Возврат;

        КонецПопытки;

        //проверка чтения

        Попытка

               ЕслиНЕ((мТип = Тип(«Соответствие»)ИНЕ Список.Получить(Ключ)=Неопределено)

                               ИЛИ(мТип = Тип(«Структура»)ИНЕ Список.Свойство(Ключ)=Неопределено))Тогда

                       Сообщить(«»+ мТип +«: Выполнено неявное преобразование типов и/или данных ключа [«+ Значение +«].»)   

               КонецЕсли;

        Исключение

               Сообщить(«»+ мТип +«: Невозможно получить значение по ключу [«+ Значение +«].

                                      |              Возможно было выполнено неявное преобразование типов и/или данных ключа.»)   

        КонецПопытки;

КонецПроцедуры

Процедура ОсновныеДействияФормыПроверка(Кнопка)

        мСсылка = Справочники.Валюты.ПустаяСсылка();

        мСтруктура.Очистить();

        // добавление новый элементов в Структуру

        ВставитьИПроверить(мСтруктура,«Ключ1»,«Ключ1»);

        ВставитьИПроверить(мСтруктура,«1Ключ»,«1Ключ»);

        ВставитьИПроверить(мСтруктура, мСсылка,«Справочники.Валюты.ПустаяСсылка()»);

        ВставитьИПроверить(мСтруктура, табСтруктура,«ТаблицаЗначений»);

        ВставитьИПроверить(мСтруктура,Неопределено,«Неопределено»);

        ВставитьИПроверить(мСтруктура,null,«null»);

        мСоответствие.Очистить();

        // добавление новый элементов в Соответствие

        ВставитьИПроверить(мСоответствие,«Ключ1»,«Ключ1»);

        ВставитьИПроверить(мСоответствие,«1Ключ»,«1Ключ»);

        ВставитьИПроверить(мСоответствие, мСсылка,«Справочники.Валюты.ПустаяСсылка()»);

        ВставитьИПроверить(мСоответствие, табСоответствие,«ТаблицаЗначений»);

        ВставитьИПроверить(мСоответствие,Неопределено,«Неопределено»);

        ВставитьИПроверить(мСоответствие,null,«null»);

        ВывестиНаФорму()

КонецПроцедуры

Процедура ВывестиНаФорму()

        табСтруктура.Очистить();

        // выводим результат на форму

        ДляКаждого Стр Из мСтруктура Цикл

               нСтр                   = табСтруктура.Добавить();

               нСтр.Ключ              = Стр.Ключ;

               нСтр.Значение = Стр.Значение;

        КонецЦикла;   

        ЭлементыФормы.табСтруктура.СоздатьКолонки();

        табСоответствие.Очистить();

        ДляКаждого Стр Из мСоответствие Цикл

               нСтр                   = табСоответствие.Добавить();

               нСтр.Ключ              = Стр.Ключ;

               нСтр.Значение = Стр.Значение;

        КонецЦикла;   

        ЭлементыФормы.табСоответствие.СоздатьКолонки();

КонецПроцедуры;

мСтруктура =Новый Структура;

мСоответствие =Новый Соответствие;  

табСтруктура.Колонки.Добавить(«Ключ»);

табСтруктура.Колонки.Добавить(«Значение»);

табСоответствие.Колонки.Добавить(«Ключ»);

табСоответствие.Колонки.Добавить(«Значение»);

Лог выполнения:

Структура: Не возможно добавить ключ [1Ключ].

Структура: Не возможно добавить ключ [Справочники.Валюты.ПустаяСсылка()].

Структура: Не возможно добавить ключ [Неопределено].

Структура: Не возможно добавить ключ [null].

Соответствие: Выполнено неявное преобразование типов и/или данных ключа [Неопределено].

Прошу обратить внимание: Что ТаблицаЗначений при добавлении в Структуру было преобразовано к строке «ТаблицаЗначений».

Последний раз у меня возникла такая ситуация при обновлении 1С:Консолидация ПРОФ с 1.3.3.7 (1.3.4.1) на 2.0.1.4 (2.0.2.6)
Строилась «Структура» по коду справочника «Операнды показателей».
Исправляется 1 строкой в Общих модулях.УправлениеОтчетами строка 3622.
«СтруктураПолей=Новый Структура;» заменить на «СтруктураПолей=Новый Соответствие;»

Вступайте в мою группу помощник программиста.
В ней мы обсуждаем программирование в 1С.

2017-12-18T22:22:23+00:00Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Полный синтаксис (нажмите, чтобы раскрыть)

Оглавление (нажмите, чтобы раскрыть)

&НаКлиенте
Процедура ВыполнитьКод(Команда)
 
    /// Как создать соответствие в 1с 8.3, 8.2
 
    СобытияДаты = Новый Соответствие;
    // пара ключ (произвольного типа) - значение (произвольного типа)
    СобытияДаты.Вставить(1980, "Олимпиада в Москве");
    СобытияДаты.Вставить(1961, "Первый полет человека в космос.");
 
    /// Как получить значение соответствия по ключу в 1с 8.3, 8.2
 
    Сообщить(СобытияДаты.Получить(1980)); // "Олимпиада в Москве"
 
    /// Как узнать есть ли соответствие значения ключу в 1с 8.3, 8.2
 
    Если СобытияДаты.Получить(2014) = Неопределено Тогда
        Сообщить("В 2014 ничего не произошло.");
    КонецЕсли;
 
    /// Как изменить значение ключа созданного соответствия 
    /// в 1с 8.3, 8.2
 
    СобытияДаты.Вставить(1961, "Первый полет Гагарина в космос.");
 
    /// Как узнать количество элементов соответствия в 1с 8.3, 8.2
 
    Сообщить(СобытияДаты.Количество());
 
    /// Как обойти все элементы соответствия в 1с 8.3, 8.2
 
    Для Каждого Элемент Из СобытияДаты Цикл
        Сообщить(Строка(Элемент.Ключ) + " " + Элемент.Значение);
    КонецЦикла;
 
    /// Как удалить элемент соответствия в 1с 8.3, 8.2
 
    СобытияДаты.Удалить(1980);
 
    /// Как очистить все элементы соответствия в 1с 8.3, 8.2
 
    СобытияДаты.Очистить();
 
КонецПроцедуры
 
/// Скачать и выполнить эти примеры на компьютере

Скачать эти примеры в виде тестовой базы (как загрузить, как исследовать)

Тип Соответствие в языке 1С 8.3, 8.2 (в примерах)

Дата Если Массивы Математика Процедуры Строки Циклы
Диалоги ОписаниеТипов ОперационнаяСистема Приложение Соответствие
СписокЗначений Структура ТаблицаЗначений ФайловаяСистема Формат

ОбщиеОбъекты Запросы ПрикладныеОбъекты УниверсальныеФункции

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Владимир Милькин

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Нажмите одну из кнопок, чтобы поделиться:

Содержание:

1.       Что такое коллекция Соответствие в 1С 8.3

2.       Создание и работа с коллекцией «Соответствие» в 1С 8.3

3.       Получение значения ключа из коллекции «Соответствие»  

1.    Что такое коллекция Соответствие в 1С 8.3

В данной статье будет описано, что такое соответствие в 1С 8.3, как работать с соответствием, а также как оно отображается в программном коде. Всё будет представлено на примерах.

В системе 1С 8.3 соответствие – это некоторая коллекция, которая состоит из пар «ключ» и «значение», она чем-то схожа на коллекцию «Структура». Но, тем не менее, у этих двух коллекций есть различие, оно состоит в том, что в «Соответствии» для того, чтобы узнать значение относительно некоторого конкретного ключа, необходимо обратиться не к объектным свойствам, а при помощи квадратных скоб. Ещё одной особенностью коллекции «Соответствие» является то, что тип значения ключа может быть любым.

Далее показано представление данных коллекций в системе 1С, где можно понять их отличия:

Коллекция Структура и коллекция соответствие

Также, стоит отметить, ещё одной особенностью коллекции «Соответствие» является то, что её можно создавать для любых видов клиентов и в разных контекстах. А также в «Соответствии» можно отправлять переменную, которая будет иметь тип «Соответствие» с контекста клиента на контекст сервера.

Выше было сказано, что в виде ключа в коллекции «Соответствие» можно использовать переменную любого возможного типа, но, стоит помнить, что в «Соответствии» выбор типа переменных напрямую связано с контекстом, а также с видом клиента. К примеру предыдущего высказывания, в контекст клиента нельзя помещать ключ или значение коллекции в тип, который предназначен для серверного контекста, пример: «ДокументОбъект<>».   

2.    Создание и работа с коллекцией «Соответствие» в 1С 8.3

Рассмотрим то, как создать новую коллекцию «Соответствие», а это можно сделать, воспользовавшись конструктором «Новый», как показано ниже:

Создание коллекции Соответствие в 1С 8.3

Когда нужно добавить элемент в коллекцию «Соответствие», пользуемся специальным методом «Вставить», данный метод имеет следующее представление:

Добавление элемента в коллекцию Соответствие в 1С 8.3

Так как значение типа ключа абсолютно любое, то коллекция «Соответствие» обеспечивает проставление связей между любыми объектами.

Рассмотрим программный – пример «Соответствие» в 1С:


Пример Соответствия в 1С

Чтобы изменить значение одного из элементов, который имеет ключ в соответствии, необходимо знать как добавить значение в ключ, это демонстрируется ниже:


Как добавить значение в ключ

Чтобы изменить тип значения ключа, которое уже есть в соответствии, можно воспользоваться ещё одним способом, через квадратные скобы, как показано ниже:


Изменение типа значения ключа

Рассмотрим случай, если необходимо обойти коллекцию «Соответствие», в этом случае, нужно знать как использовать цикл, как демонстрируется на скриншоте с примером ниже:


Как использовать цикл

Результатом работы данного программного кода будет такое сообщение:

Сообщение после обхода соответствия в 1С 8.3  

3.    Получение значения ключа из коллекции «Соответствие»

Обычно, чтобы получить значение ключа из коллекции «Соответствие», необходимо воспользоваться квадратными скобами. Однако, бывают случаи, когда нет возможности задействовать квадратные скобы, тогда нужно задействовать метод «Получить», он производит возврат того значения, которое идёт в соответствие ключу. Когда ключа нет, то возвращается «Неопределено».

Ниже приведён пример программного кода, который демонстрирует действие данного метода:


Получение значение ключа из коллекции

Результатом работы данного программного кода будет такое сообщение:


Сообщение в коллекции Соответствие в 1С 8.3

В данной статье была рассмотрена коллекция «Соответствие» 1С 8.3, были описаны основные нюансы в работе с данной коллекцией, а также приведены примеры её использования и функционала.

Специалист компании «Кодерлайн»

Айдар Фархутдинов

Понравилась статья? Поделить с друзьями:
  • 1с справочник дополнительные реквизиты запрос
  • 50 мыслей которые устроили мой бизнес скачать
  • 1с справочник контроль уникальности реквизита
  • 5001007706 инн реквизиты штрафа балашихинское
  • 1с удалить все программно созданные реквизиты