Как сохранить таблицу значений в реквизит формы

Добрый день. Решаю задачу вывода таблицы на форму с динамически создаваемыми колонками. В заголовках колонок наименования Партнеров.

1 вопрос. Т.к. может потребоваться переформирование таблицы с пересозданием колонок, решил хранить структуру создаваемых колонок в таблице значений(ПутьКДанным, Партнер, Заголовок). В «ПутиКДанным» название колонки, по которому потом будет производиться запись данных в колонки, в «Партнере» — справочник ссылка партнер, по нему из данной таблицы находится ПутьКДанным, Заголовок — заголовок колонки, выводимой на форму.

На форме добавлен реквизит — ТаблицаСоздаваемыхКолонок с типом значения ТаблицаЗначений и описанными выше колонками.

Значение сохраняется туда посредством:

ЗначениеВРеквизитФормы(НоваяТаблицаСоздаваемыхКолонок, «ТаблицаСоздаваемыхКолонок»)

Пытаюсь получить ТЗ из уже имеющейся таблицы реквизита формы

ЗначТаблицаСоздаваемыхКолонок = РеквизитФормыВЗначение(«ТаблицаСоздаваемыхКолонок», Тип(«ТаблицаЗначений»));

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

И второй вопрос.

Как организовать перенос заголовка колонок? В свойствах таблицы высоту  заголовка и шапки указал = 4. В создаваемых колонках указал:

        НоваяКолонка.Ширина = 8;

        НоваяКолонка.РастягиватьПоГоризонтали = Ложь;

И всё равно они в одну строку выводятся и растягиваются.

Содержание:

1.       Использование временного хранилища 1С

2.       Заполнение таблицы значений формы

3.       ЗначениеВСтрокуВнутр() – только для толстого клиента 1С 8.3 

1.      Использование временного хранилища 1С

Если есть необходимость передать таблицу значений с сервера на клиент в 1С можно использовать несколько вариантов. Для начала можно начать с временного хранилища 1С – самого лаконичного варианта:

ПоместитьВоВременноеХранилище(<Данные>, <Адрес>)

Где данные — это наша таблица значений, а адрес — это уникальный идентификатор или строка, куда нам нужно передать таблицу значений 1С. Например:

ПоместитьВоВременноеХранилище(ТаблицаЗначений, ЭтаФорма.УникальныйИдентификтор);

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

ПолучитьИзВременногоХранилища(ЭтаФорма.УникальныйИдентификтор);  

2.      Заполнение таблицы значений формы

Самый лаконичный способ передать на клиента таблицу значений не означает, что это самый правильный вариант. Самым правильным (судя по экзаменам платформы 1С) является вариант заполнение Таблицы значений формы. Для начала необходимо добавить в форму новый реквизит с типом «ТаблицаЗначений» и именем «ТаблицаЗначенийФормы». На сервере пишем следующий код строки 1С:

//Считаем, что тут вы получили таблицу значений, у которой необходимо передать данные на форму


ТЗ = ПолучитьТЗ();


ДобавляемыеРеквизиты = Новый Массив;


УдаляемыеРеквизиты = Новый Массив;


//Получаем уже созданную на форме Таблицу значений 1С


ИмяТФ = «ТаблицаЗначенийФормы”;


ТаблицаФормы = РеквизитФормыВЗначение(«ТаблицаЗначенийФормы»);


Для Каждого ТекКолонка из ТаблицаФормы.Колонки Цикл


УдаляемыеРеквизиты.Добавить(ТаблицаЗначенийФормы + «.» + ТекКолонка.Имя);


КонецЦикла;



Для Каждого ТекКолонка из ТЗ.Колонки Цикл


ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТекКолонка.Имя, ТекКолонка.ТипЗначения, ИмяТФ));


КонецЦикла;



//Добавим новые, удалим старые колонки


ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);


// Поместим значение в реквизит формы 1С


ЗначениеВРеквизитФормы(ТЗ, ИмяТФ);

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

3.      ЗначениеВСтрокуВнутр() – только для толстого клиента 1С 8.3

Третий вариант – передать таблицу значений на клиент 1С. Для этого используется ЗначениеВСтрокуВнутр(), но лучше его не использовать, ибо эта функция на данный момент доступна только на толстом клиенте 1С 8.3. Сам код похож на временное хранилище:


//Укладываем ТЗ в строку


тзВСтроке = ЗначениеВСтрокуВнутр(тз);


//Вытаскиваем ТЗ из строки


тз = ЗначениеИзСтрокиВнутр(тзВСтроке);

Есть еще много вариантов передачи таблицы значений 1С на клиента, начиная со структур, заканчивая XML, но стоит ли их использовать решать Вам. В данной статье перечислены варианты которые покроют 100% нужд.

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

Роман Барабанов

Вот пример :
В справочнике (Контрагенты в моем случае) есть реквизит Ответственные (Строка произвольной длины).
Данные вводятся в таблицу значений, которая заполняется при открытии элемента справочника (OnOpen()) и сохраняются при закрытии формы в строке Ответственные с разделителями. Otv — таблица значений в форме элемента. Все работает
Procedure ClearSotr()
Otv.NewColumn(«F»,,,,»Фирма»,20);
Otv.NewColumn(«FC»,,,,»Code»,30);
Otv.NewColumn(«S»,,,,»Сотрудник»,40);
Otv.NewColumn(«SC»,,,,»Code»,13);
Otv.ColumnVisibility(«FC,SC»,0);
EndProcedure
//************************************************** ******************************
*******
Procedure InputSotr()
CurLine = Otv.CurrentLine();
if Otv.CurrentLine() = 0 then
Return;
endif;

CurrentColumn = Otv.CurrentColumn();
if CurrentColumn = «S» then
Prompt = «Введите сотрудника «;
Type = «Reference.Сотрудники»;
ColumnCode = «SC»
endif;

GD = Otv.GetValue(CurLine,CurrentColumn);
if InputValue(GD,Prompt,Type) = 1 then
Otv.SetValue(CurLine,CurrentColumn,GD);
Otv.SetValue(CurLine,ColumnCode,GD.Code);
Otv.SetValue(CurLine,»F»,GD.Parent.Description);
endif;
Otv.CurrentLine(CurLine);
EndProcedure
//************************************************** ******************************
*******
Procedure OnWrite()
Ответственные = «»; CurLine = 0;
Otv.SelectLines();
While Otv.GetLine() = 1 do
CurLine = CurLine + 1;
FC = TrimAll(Otv.GetValue(CurLine,2));
Ответственные = Ответственные + FC +»~»;
SC = TrimAll(Otv.GetValue(CurLine,4));
Ответственные = Ответственные + SC +»~|»
enddo;
EndProcedure
//************************************************** ******************************
*******
Procedure OnOpen()
ClearSotr();
if EmptyValue(Ответственные) = 0 then
ОстатокКонтакта = Ответственные;
ВсегоОтветственных = StrCountOccur(Ответственные,»|»);
ДлинаКонтакта = StrLen(Ответственные);

Firm = CreateObject(«Reference.Фирмы»);
Sotr = CreateObject(«Reference.Сотрудники»);

for k = 1 to ВсегоОтветственных do
Otv.NewLine();
ОграничительКонтакта = Find(ОстатокКонтакта,»|»);
ОчереднойОтветственный = Left(остатокКонтакта,ОграничительКонтакта-1);
Длина = StrLen(ОстатокКонтакта);
ОстатокКонтакта = Right(Ответственные,Длина-ОграничительКонтакта);

for R = 1 to 2 do
ОграничительКолонки = Find(ОчереднойОтветственный,»~»);
Cod = Left(ОчереднойОтветственный,ОграничительКолонки-1);
if R = 1 then
else // R = 2
if Sotr.FindByCode(Cod) = 1 then
Otv.SetValue(k,3,Sotr.CurrentItem());
Otv.SetValue(k,4,Sotr.Code);
Otv.SetValue(k,1,Sotr.Parent.Description);
endif;
endif;
ДлинаСтроки = StrLen(ОчереднойОтветственный);
ОчереднойОтветственный = Right(ОчереднойОтветственный,ДлинаСтроки-ОграничительКолонки);
enddo;
enddo;
EndProcedure
//************************************************** ******************************
*******



0



Выгрузка Таблицы значений 1с

Выгрузка Таблицы значений одна из типовых операций 1с. Выгрузка и загрузка Таблицы значений в Объект Таблица Значений позволяет быстро получать различные данные. Рассмотрим простой пример выгрузки данных в обработку при помощи ТаблицыЗначений.

Таблица значений-объект, позволяющий строить динамические наборы значений и работать с ними. Она заполняется значениями разных типов. Таблица значений может иметь любое количество колонок и быть связанным с элементом “Табличное поле”. 

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

Выгрузка таблицы значений 1с

Реквизит типа Таблица Значений

Для обработке сделаем Форму. На нее добавим одну команду Заполнить.Обработчик Команды на клиенте и процедура на сервере.

Выгрузка таблицы значений 1с

Создаем команду заполнить

Перетащим кнопку на Форму. В результате получим форму следующего вида:

Выгрузка таблицы значений 1с

Форма обработки

Модуль формы будет выглядеть так:

код процедуры заполнения формы

Модуль формы обработки

В Таблице Значений на Обработке мы планируем вывести данные выбранные из Регистра Накопления ОстаткиНоменклатуры. Примерный вид Таблицы Значений такой:

Данные для таблицы значений
Отчет с данными для таблицы значений 1с

Изменяем Реквизит Результат. Добавляем в него Колонки Реквизита так, чтобы имена Колонок и Типы совпадали с данными представленными выше.

Выгрузка таблицы значений 1с

Настраиваем реквизит Результат

Перетаскиваем Реквизит Результат на Форму. Соглашаемся на добавление колонок в Таблицу Значений, нажав Да.

Выгрузка таблицы значений 1с
Перетаскиваем Реквизит на форму.

Наша форма примет вид:

Выгрузка таблицы значений 1с
Форма перед загрузкой данных

Переходим в Модуль формы. В процедуре на Сервере вначале создаем Запрос.

Код запроса к регистру 1с

Код запроса к регистру

Как выгрузить результат запроса 1с в таблицу значений

Ответом на вопрос представленный код ниже.

Выгружаем результат запроса в Таблицу Значений:

создание таблицы значений 1с
Создание таблицы значений 1с

Связываем Таблицу Значений в которой сохранен результат запроса с Объектом на форме типа ТаблицаЗначений.

Выгрузка таблицы значений 1с
Записываем таблицу значений в данные формы 1с

Полный код обработки выглядит так:

Выгрузка таблицы значений 1с

Полный код

Результат работы обработки следующий:

Результат работы обработки

Результат выгрузки

Нами произведена выгрузка Таблицы значений 1с.

Выгрузка результат запроса в таблицу значений на форме 1с

Рассмотрим еще один пример.

Пример кода для выгрузки результат запроса в таблицу значений на форме:

Выгрузка результат запроса в таблицу значений 1с
Выгрузка результат запроса в таблицу значений 1с

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

Передача таблицы значений с сервера на клиент

Отличия функций РеквизитФормыВЗначение и ДанныеФормыВЗначение

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

Вариант №1

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


&НаСервере
Функция ПолучитьТЗКакМассивСтруктур()

МояТаблицаЗначений = СоздатьТаблицуЗначений();

МассивСтруктур = Новый Массив;
Для Каждого СтрокаТЗ Из МояТаблицаЗначений Цикл
СтрокаСтруктура = Новый Структура;
Для Каждого КолонкаТЗ Из МояТаблицаЗначений.Колонки Цикл
СтрокаСтруктура.Вставить(КолонкаТЗ.Имя, СтрокаТЗ[КолонкаТЗ.Имя]);
КонецЦикла;
МассивСтруктур.Добавить(СтрокаСтруктура);
КонецЦикла;

Возврат МассивСтруктур;

КонецФункции // ПолучитьТЗКакМассивСтруктур()

&НаКлиенте
Процедура ПолучитьДанные()

ДанныеТаблицы = ПолучитьТЗКакМассивСтруктур();

КонецПроцедуры // ПолучитьДанные()

Минус данного решения — это отсутствие тех самых полезных методов таблицы значений.

Вариант №2

Этот вариант намного сложнее, но выполнив его, считайте что к одному из пунктов экзамена на знание платформы 1С 8.2 или 8.3 «Специалист» вы подготовились. Здесь используется динамическое создание реквизитов формы. Алгоритм, примерно, такой: создается реквизит формы с типом ТаблицаЗначений, для этого реквизита создаются подчиненные реквизиты (колонки таблицы) и производиться загрузка данных таблицы значений в новый реквизит формы.

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

Рисунок 1. Реквизит формы типа ТаблицаЗначений

А потом написать следующий код:


&НаСервере
Функция ОтправитьТаблицуЗначенийНаКлиент()

МояТаблицаЗначений = ПолучитьТаблицуЗначений();

ДобавляемыеРеквизиты = Новый Массив;
УдаляемыеРеквизиты = Новый Массив;

МассивКолонок = Новый Массив;
ИмяТаблицыФормы = "ИмяТаблицыЗначений";

ТаблицаФормы = РеквизитФормыВЗначение(ИмяТаблицыФормы);

Для Каждого ТекКолонка из ТаблицаФормы.Колонки Цикл
УдаляемыеРеквизиты.Добавить(ИмяТаблицыФормы + "." + ТекКолонка.Имя);
КонецЦикла;

Для Каждого ТекКолонка из МояТаблицаЗначений.Колонки Цикл
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы(ТекКолонка.Имя, ТекКолонка.ТипЗначения, ИмяТаблицыФормы));
МассивКолонок.Добавить(ТекКолонка.Имя);
КонецЦикла;

// Добавим новые, удалим старые колонки
ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
// Поместим значение в реквизит формы
ЗначениеВРеквизитФормы(МояТаблицаЗначений, ИмяТаблицыФормы);

Возврат МассивКолонок;

КонецФункции // ОтправитьТаблицуЗначенийНаКлиент()

Далее на клиенте можно смело обращаться к свежеиспеченной таблице значений ЭтаФорма.ИмяТаблицыЗначений…

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

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

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

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

Реквизиты объекта
Настройки формы

Стоит обратить внимание, что на форме табличное поле связано с данными реквизита формы, а не реквизитом объекта.

Модуль формы
Модуль объекта

Также, здесь мы видим как в 1С можно выполнить на клиенте в модуле формы обращение к функции Модуля объекта. Делаем функцию в модуле объекта Экспортной. Получаем Объект через РеквизитФормыВЗначение, вызываем экспортную функцию общего модуля.

Время на прочтение
5 мин

Количество просмотров 20K

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

В итоге чаще всего используется 2 варианта:

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

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

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

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

Есть, конечно, еще другие варианты к примеру с хранилищем, но статья не об этом…

Статья, о том, как все-таки хранить таблицу значений в доп. реквизитах, ну или в доп. сведениях.

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

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

Пример продемонстрирую на конфигурации Документооборот 2.1.6.8. Буду использовать дополнительный реквизит, но можно использовать дополнительные сведения. Весь код будет написан в Расширении конфигурации.

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

1 Добавляем доп. реквизит и называем его к примеру «ТЗ_АдекватностьКонтактныхЛиц».
Я этот реквизит делаю общим для всех видов контрагентов. Тип его будет строка неограниченной длины.

2 Создаем Расширение конфигурации и Дорабатываем форму Контрагентов.
Добавляем реквизиты формы:

— «ДопТЗ» тип ПланВидовХарактеристикСсылка.ДополнительныеРеквизитыИСведения
— ТЗ_АдекватностьКонтактныхЛиц тип ТаблицаЗначений:
КонтактноеЛицо тип СправочникСсылка.КонтактныеЛица
ТипКонтакта тип Строка
Совет тип Строка

Добавляем на форму страницу «ГруппаАдекватностьКонтактныхЛиц» и снимаем видимость.
В данную группу выводим «ТЗ_АдекватностьКонтактныхЛиц»

3 Пишем код.
ПриСозданииНаСервере.
Необходимо считать сам доп реквизит напомню мы его обозвали «ТЗ_АдекватностьКонтактныхЛиц», далее прочитать его значение и построить по его значению таблицу значений.

Значение доп реквизита я предлагаю хранить в формате JSON, у кого более старая платформа можно использовать XML.

Процедура ДопТЗ_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	//Считываем доп реквизит
	//ТЗ_АдекватностьКонтактныхЛиц - В моем примере доп реквизит называется так
	ДопТЗ = ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоНаименованию("ТЗ_АдекватностьКонтактныхЛиц");
	
	Если ЗначениеЗаполнено(ДопТЗ) Тогда
		//Если нашли свойство тогда делаем страницу с ТЗ видимой
		Элементы.ГруппаАдекватностьКонтактныхЛиц.Видимость = Истина;

		//Считываем значение доп реквизита
		НайденныеСтроки = Объект.ДополнительныеРеквизиты.НайтиСтроки(Новый Структура("Свойство", ДопТЗ));
		перЗначение = ?(НайденныеСтроки.Количество() = 1, НайденныеСтроки[0].Значение, Неопределено);
		
		//Если значение прочитали пытаемся прочитать из JSON
		Если перЗначение <> Неопределено Тогда
			//Читаем JSON
			ЧтениеJSON = Новый ЧтениеJSON;
			ЧтениеJSON.УстановитьСтроку(перЗначение);
			Попытка
	        	ДопДанные = ПрочитатьJSON(ЧтениеJSON);
			Исключение
				ДопДанные = "";
			КонецПопытки;
			//Если вернулся массив значит JSON прочитали нормально
			//Заполняем ТЗ_АдекватностьКонтактныхЛиц
			Если ТипЗнч(ДопДанные) = Тип("Массив") Тогда
				Для Каждого СтрокаДД из	ДопДанные Цикл 
					СтрАдекватов = ТЗ_АдекватностьКонтактныхЛиц.Добавить();
					//Мы уже зарание знаем какой элемент нужно искать по уникальному идентификатору
					СтрАдекватов.КонтактноеЛицо = ПолучитьСсылкуПоGUIDИВидуОбъекта(СтрокаДД.КонтактноеЛицо,"Справочники.КонтактныеЛица");
					СтрАдекватов.ТипКонтакта    = СтрокаДД.ТипКонтакта;
					СтрАдекватов.Совет          = СтрокаДД.Совет;
			    КонецЦикла;
			КонецЕсли;

		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

//Функция возврата Ссылки по уникальному идентификатору и виду объекта
&НаСервере
Функция ПолучитьСсылкуПоGUIDИВидуОбъекта(GUIDВх,ВидОбъектаВх) Экспорт
	Результат=Неопределено;
	Попытка
		Выполнить("Результат = "+ВидОбъектаВх+".ПолучитьСсылку(Новый УникальныйИдентификатор("""+GUIDВх+"""));");
	Исключение
	КонецПопытки;
	Возврат Результат;
КонецФункции

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

&НаКлиенте
Процедура ДопТЗ_ПриОткрытии(Отказ)
	Если ЗначениеЗаполнено(ДопТЗ) Тогда
		//Ищем на форме нужный нам доп реквизит
		//Свойства_ОписаниеДополнительныхРеквизитов - В документообороте, в других конфигурациях скорее всего по другому.
		НайденныеСтроки = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("Свойство", ДопТЗ));
		//Прячем элемент программно
		Если НайденныеСтроки.Количество() = 1 Тогда 
			Элементы[НайденныеСтроки[0].ИмяРеквизитаЗначение].Видимость = Ложь;
		КонецЕсли;	
	КонецЕсли;
КонецПроцедуры

ПередЗаписьюНаСервере. Если ТЗ изменилась сохраняем ее в виде строки JSON в доп. реквизит.

Процедура ДопТЗ_ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	Если ЗначениеЗаполнено(ДопТЗ) Тогда 
		//Свойства_ОписаниеДополнительныхРеквизитов - В документообороте, в других конфигурациях скорее всего по другому.
		НайденныеСтроки = ЭтаФорма.Свойства_ОписаниеДополнительныхРеквизитов.НайтиСтроки(Новый Структура("Свойство", ДопТЗ));
		
		//Описываем параметры записи и создаем запись JSON
		ПараметрыJSON	= Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, " " , Истина, ЭкранированиеСимволовJSON.Нет, Ложь, Ложь, Ложь, Ложь);
		ЗаписьJSON		= Новый ЗаписьJSON;
		ЗаписьJSON.ПроверятьСтруктуру = Истина;
		ЗаписьJSON.УстановитьСтроку(ПараметрыJSON);
		//Создаем массив структур на основании ТЗ_АдекватностьКонтактныхЛиц
		МассивАдекватов = Новый Массив;
		Для Каждого СтрокаТЗ из ТЗ_АдекватностьКонтактныхЛиц Цикл
			МассивАдекватов.Добавить(Новый Структура("КонтактноеЛицо,ТипКонтакта,Совет",
									Строка(СтрокаТЗ.КонтактноеЛицо.УникальныйИдентификатор()),
									СтрокаТЗ.ТипКонтакта,
									СтрокаТЗ.Совет));
			
		КонецЦикла;
		//Записываем массив виде строки JSON						
		ЗаписатьJSON(ЗаписьJSON, МассивАдекватов);
		СтрокаJSON = ЗаписьJSON.Закрыть();
		
		//Если ТЗ изменили записываем новое значение доп реквизита
		Если ЭтаФорма[НайденныеСтроки[0].ИмяРеквизитаЗначение] <> СтрокаJSON Тогда
			 ЭтаФорма[НайденныеСтроки[0].ИмяРеквизитаЗначение]  = СтрокаJSON;
		КонецЕсли;	
	КонецЕсли;	
КонецПроцедуры

Понравилась статья? Поделить с друзьями:
  • Как сравнивать компании экзамен тинькофф ответы
  • Как сравнить стоимость осаго в разных компаниях
  • Как стать врачом экспертом в страховой компании
  • Как стать партнером страховой компании по осаго
  • Как стать президентом компании в life is a game