В заключение покажем, как изменять данные табличных частей.
Предположим, нам нужно изменить документ ПоступлениеТоваров, включая его табличную часть. В самом документе мы изменим номер и дату. Для этого нам нужно отправить на сервер PATCH-запрос к конкретному документу. Однако данные табличной части нужно перезаписывать полностью, несмотря на то что мы хотели изменить только некоторые поля или строки этой табличной части.
Обработчик команды, изменяющей данные, заполним следующим образом (листинг 1.120).
Листинг 1.120. Обработчик команды «ЗаписатьДанные»
&НаКлиенте
Процедура ЗаписатьДанные(Команда)
Сообщение = Новый СообщениеПользователю;
// Сформировать строку URL.
АдресРесурса = "/REST/odata/standard.odata/Document_ПоступлениеТоваров(guid'34c5d79c-7636-11e9-88b7-642737df2048')?$format=json";
// Получить строку JSON с изменяемыми данными.
СтрокаТелаЗапроса = СформироватьИзменяемыеДанныеТЧ();
// Отправить запрос на сервер.
ВыполнитьЗапрос("PATCH", АдресРесурса, СтрокаТелаЗапроса);
КонецПроцедуры
В этом обработчике в переменной АдресРесурса мы формируем URL, на основе которого будет создан HTTP-запрос для обращения к данным конкретной строки документа, которую мы хотим изменить. О правилах формирования URL ресурсов, доступ к которым осуществляется через REST-интерфейс, более подробно рассказывается в разделе «».
Затем с помощью функции СформироватьИзменяемыеДанныеТЧ(), которая будет рассмотрена ниже, в листинге 1.121, мы записываем изменяемые данные в строку JSON и возвращаем ее в переменную СтрокаТелаЗапроса.
В этом обработчике мы вызываем процедуру ВыполнитьЗапрос() и передаем в нее в качестве параметров адрес ресурса, строку тела запроса и имя метода ("PATCH"), котoрый надо выполнить на сервере. Поскольку эта процедура уже была рассмотрена в листинге 1.115, не будем еще раз на этом останавливаться.
В результате у конкретного документа ПоступлениеТоваров будут изменены те данные, которые мы запишем в строку JSON в функции СформироватьИзменяемыеДанныеТЧ() следующим образом (листинг 1.121).
Листинг 1.121. Функция «СформироватьИзменяемыеДанныеТЧ»
&НаСервереБезКонтекста
Функция СформироватьИзменяемыеДанныеТЧ()
// Создать объект записи и записать строковое значение в строку JSON.
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
// Записать начало корневого объекта.
Запись.ЗаписатьНачалоОбъекта();
// Изменить свойство Номер.
Запись.ЗаписатьИмяСвойства("Number");
Запись.ЗаписатьЗначение("000000777");
//Изменить свойство Дата
Запись.ЗаписатьИмяСвойства("Date");
Запись.ЗаписатьЗначение(ЗаписатьДатуJSON(ТекущаяДата(), ФорматДатыJSON.ISO, ВариантЗаписиДатыJSON.УниверсальнаяДата));
// Изменить состав ТЧ Товары.
Запись.ЗаписатьИмяСвойства("Товары@odata.type");
Запись.ЗаписатьЗначение("Collection(StandardODATA.Document_ПоступлениеТоваров_Товары_RowType)");
Запись.ЗаписатьИмяСвойства("Товары");
Запись.ЗаписатьНачалоМассива();
// записать полностью первую строку ТЧ.
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("LineNumber");
Запись.ЗаписатьЗначение("1");
Запись.ЗаписатьИмяСвойства("Количество");
Запись.ЗаписатьЗначение("1");
Запись.ЗаписатьИмяСвойства("Цена");
Запись.ЗаписатьЗначение("10000");
Запись.ЗаписатьИмяСвойства("Сумма");
Запись.ЗаписатьЗначение("10000");
Запись.ЗаписатьИмяСвойства("Товар_Key");
Запись.ЗаписатьЗначение("34c5d799-7636-11e9-88b7-642737df2048");
Запись.ЗаписатьКонецОбъекта();
// записать полностью вторую строку ТЧ.
Запись.ЗаписатьНачалоОбъекта();
Запись.ЗаписатьИмяСвойства("LineNumber");
Запись.ЗаписатьЗначение("2");
Запись.ЗаписатьИмяСвойства("Количество");
Запись.ЗаписатьЗначение("2");
Запись.ЗаписатьИмяСвойства("Цена");
Запись.ЗаписатьЗначение("5000");
Запись.ЗаписатьИмяСвойства("Сумма");
Запись.ЗаписатьЗначение("10000");
Запись.ЗаписатьИмяСвойства("Товар_Key");
Запись.ЗаписатьЗначение("34c5d798-7636-11e9-88b7-642737df2048");
Запись.ЗаписатьКонецОбъекта();
Запись.ЗаписатьКонецМассива();
// Записать конец корневого объекта .
Запись.ЗаписатьКонецОбъекта();
СтрокаJSON = Запись.Закрыть();
Возврат СтрокаJSON;
КонецФункции
В этой функции методом потоковой записи с помощью объекта ЗаписьJSON мы записываем в строку JSON значения полей Номер (свойство Number), Дата (свойство Date) и все поля и строки табличной части Товары, которые мы хотим изменить у конкретного документа ПоступлениеТоваров.
Номер – это строковое поле, поэтому в свойство Number мы просто записываем строку "000000777". В поле Дата (свойство Date) с помощью функции ЗаписатьДатуJSON() мы записываем текущую дату как универсальную дату в формате ISO.
Поскольку мы собираемся изменять состав табличной части Товары, мы указываем имя свойства этой коллекции значений как "Товары@odata.type", а значение – "Collection(StandardODATA.Document_ПоступлениеТоваров_Товары_RowType)". Затем записываем в свойство Товары массив, каждый элемент которого содержит объект, полностью описывающий каждую строку табличной части.
В результате при выполнении команды по изменению данных на сервер будет отправлен PATCH-запрос к информационной базе. Ответ сервера в виде строки будет содержать данные измененного документа (рис. 1.29).
Рис. 1.29. Ответ сервера
Таким образом, содержимое документа будет выглядеть следующим образом (рис. 1.30).
Рис. 1.30. Данные измененного документа «Поступление товаров»