В документе ЧЕКККМ есть кнопка вызова Формы СкидкаUDS
При нажатии Запросить ошибка
{Документ.ЧекККМ.Форма.ФормаСкидкиUDS.Форма(185)}: Ошибка при установке значения атрибута контекста (ТаблицаИнформацииОтСервера)
ИнформацияОтСервера=ПолучитьИнформациюОКомпании(ТаблицаИнформацииОтСервера,КодСкидкиUDS);
по причине:
Нельзя изменять поле, содержащее объект данных формы
&НаСервере
Функция ПолучитьИнформациюОКомпании(КодСкидки) экспорт
//-H 'Accept: application/json' \
//-H 'X-Api-Key: api-key' \
//-H 'X-Origin-Request-Id: a8d03734-5b63-4f04-9c69-46a3e1db378a' \
//-H 'X-Timestamp: 2016-07-11T09:39:07.000Z' \
//-X GET -s https://udsgame.com/v1/partner/company
Токен = "1111111";
Сервер = "udsgame.com";
ИмяФайла = ПолучитьИмяВременногоФайла("txt2_");
XOriginRequestId = Строка(Новый УникальныйИдентификатор());
XTimestamp = Строка(Формат(ТекущаяДата(), "ДФ=yyyy-MM-ddT05hh:mm:ssZ" ));
URL = "/v1/partner/company";
ТекстЗапросаКомпании = Новый HTTPЗапрос;
ТекстЗапросаКомпании.Заголовки.Вставить("Accept", "application/json");
ТекстЗапросаКомпании.Заголовки.Вставить("X-Origin-Request-Id", Строка(XOriginRequestId));
ТекстЗапросаКомпании.Заголовки.Вставить("X-Timestamp", Строка(XTimestamp));
ТекстЗапросаКомпании.Заголовки.Вставить("X-Api-Key", Токен);
ТекстЗапросаКомпании.АдресРесурса = URL;
ssl = Новый ЗащищенноеСоединениеOpenSSL();
Con = Новый HTTPСоединение(Сервер, , , , , 10, ssl);
Con.Получить(ТекстЗапросаКомпании, ИмяФайла);
ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
Ответ2 = ТекстДок.ПолучитьТекст();
ЧтениеИнформацииОКомпании = Новый ЧтениеJSON;
ЧтениеИнформацииОКомпании.УстановитьСтроку(Ответ2);
СтруктураОтвета2 = ПрочитатьJSON(ЧтениеИнформацииОКомпании, ,"dateCreated");
//ТаблицаИнформацииОтСервера = Новый ТаблицаЗначений;
//ТаблицаИнформацииОтСервера.Колонки.Добавить("Поле");
//ТаблицаИнформацииОтСервера.Колонки.Добавить("Значение");
Если СтруктураОтвета2.marketingSettings.Свойство("discountBase") Тогда
НоваяСтрокаТаблицы = ТаблицаИнформацииОтСервера.Добавить();
НоваяСтрокаТаблицы.Поле = "БазоваяСкидка";
НоваяСтрокаТаблицы.Значение = Строка(СтруктураОтвета2.marketingSettings.discountBase);
КонецЕсли;
Если СтруктураОтвета2.baseDiscountPolicy = "CHARGE_SCORES" Тогда
НоваяСтрокаТаблицы = ТаблицаИнформацииОтСервера.Добавить();
НоваяСтрокаТаблицы.Поле = "СкидкаИлиКэшбэк";
НоваяСтрокаТаблицы.Значение = "Кэшбэк";
ИначеЕсли СтруктураОтвета2.baseDiscountPolicy = "APPLY_DISCOUNT" Тогда
НоваяСтрокаТаблицы = ТаблицаИнформацииОтСервера.Добавить();
НоваяСтрокаТаблицы.Поле = "СкидкаИлиКэшбэк";
НоваяСтрокаТаблицы.Значение = "Скидка";
КонецЕсли;
НоваяСтрокаТаблицы = ТаблицаИнформацииОтСервера.Добавить();
НоваяСтрокаТаблицы.Поле = "ПроцентПорогаСписанияБаллов";
НоваяСтрокаТаблицы.Значение = Строка(СтруктураОтвета2.marketingSettings.maxScoresDiscount);
Если СтрДлина(КодСкидки) = 6 Тогда
ПолучитьИнформациюОКлиенте(ТаблицаИнформацииОтСервера, КодСкидки);
ИначеЕсли СтрДлина(КодСкидки) < 6 Тогда
Сообщить("Код скидки не может быть меньше шести цифр!");
Отказ = Истина;
КонецЕсли;
Возврат ТаблицаИнформацииОтСервера;
КонецФункции
&НаСервере
Функция ПолучитьИнформациюОКлиенте(ТаблицаИнформацииОтСервера, КодСкидки)
//X-Origin-Request-Id (required) Request identifier (UUID) header string
//X-Timestamp (required) Timestamp in ISO8601 datetime format header string code (required)
//Customer promo code query string
//curl -H "Accept: application/json" -X GET https://udsgame.com/v1/partner/customer -v
//Curl curl -X GET --header "Accept: application/json" --header "X-Origin-Request-Id: fe6930f8-1231-4798-aa2d-02a5f8e7d931" --header "X-Timestamp: 2015-03-17T12:00:01.000Z" "http://udsgame.com/v1/partner/customer?code=rirg2425"
//Request URL http://udsgame.com/v1/partner/customer?code=rirg2425
Token="11111111";
Сервер = "udsgame.com";
ИмяФайла = ПолучитьИмяВременногоФайла("txt_");
XOriginRequestId = Строка(Новый УникальныйИдентификатор());
XTimestamp = Строка(Формат(ТекущаяДата(), "ДФ=yyyy-MM-ddT05hh:mm:ssZ" ));
URL = "/v1/partner/customer?code=" + КодСкидки;
ТекстЗапросаПользователя = Новый HTTPЗапрос;
ТекстЗапросаПользователя.Заголовки.Вставить("Accept", "application/json");
ТекстЗапросаПользователя.Заголовки.Вставить("X-Origin-Request-Id", Строка(XOriginRequestId));
ТекстЗапросаПользователя.Заголовки.Вставить("X-Timestamp", Строка(XTimestamp));
ТекстЗапросаПользователя.Заголовки.Вставить("X-Api-Key", Токен);
ТекстЗапросаПользователя.АдресРесурса = URL;
ssl = Новый ЗащищенноеСоединениеOpenSSL();
Con = Новый HTTPСоединение(Сервер, , , , , 10, ssl);
Con.Получить(ТекстЗапросаПользователя, ИмяФайла);
ТексДок = Новый ТекстовыйДокумент;
ТексДок.Прочитать(ИмяФайла, КодировкаТекста.UTF8);
Ответ = ТексДок.ПолучитьТекст();
//Возврат Ответ;
ЧтениеИнформацииОПользователе = Новый ЧтениеJSON;
ЧтениеИнформацииОПользователе.УстановитьСтроку(Ответ);
СтруктураОтвета = ПрочитатьJSON(ЧтениеИнформацииОПользователе, ,"dateCreated");
Если СтруктураОтвета.Свойство("scores") Тогда
НоваяСтрокаТаблицы = ТаблицаИнформацииОтСервера.Добавить();
НоваяСтрокаТаблицы.Поле = "КоличествоИмеющихсяБаллов";
НоваяСтрокаТаблицы.Значение = Строка(СтруктураОтвета.scores);
КонецЕсли;
Если СтруктураОтвета.Свойство("name") Тогда
ИмяКлиента = "";
ИмяКлиента = ИмяКлиента + СтруктураОтвета.name;
КонецЕсли;
Если СтруктураОтвета.Свойство("surname") Тогда
НоваяСтрокаТаблицы = ТаблицаИнформацииОтСервера.Добавить();
НоваяСтрокаТаблицы.Поле = "ИмяКлиента";
ИмяКлиента = ИмяКлиента + ?(ИмяКлиента="",""," ") + СтруктураОтвета.surname;
НоваяСтрокаТаблицы.Значение = ИмяКлиента;
КонецЕсли;
Если СтруктураОтвета.Свойство("errorCode") Тогда
Сообщить("Получена ошибка: " + ?(СтруктураОтвета.errorCode = "notFound","неверный код скидки!",СтруктураОтвета.errorCode));
КонецЕсли;
Возврат ТаблицаИнформацииОтСервера;
КонецФункции
&НаСервере
Функция POST_purchase_Структура(СтруктураОперации, СтрокаJSONОперации) Экспорт
Токен = "c19TN2hIb085WjkjdCVDNjlEbEVZZX4pOnoqTTphQmlsSFItSElwQGFSOCRQVnJUXlI=";
//curl -X POST -H "x-api-key: $key" http://udsgame.com/v1/partner/purchase?total=$total&cash=$cash&scores=$scores&code=$code
Сервер = "www.udsgame.com";
ФайлРезультата = ПолучитьИмяВременногоФайла("txt_");
XOriginRequestId = Строка(Новый УникальныйИдентификатор());
XTimestamp = Строка(Формат(ТекущаяДата(), "ДФ=yyyy-MM-ddT05hh:mm:ssZ" ));
Если СтрДлина(СтруктураОперации.Code) > 6 Тогда
КодИлиТелефон = "&phone=%2B7" + СтруктураОперации.Code;
Иначе
КодИлиТелефон = "&code=" + СтруктураОперации.Code;
КонецЕсли;
URL = "/v1/partner/purchase?total=$total&cash=$cash&scores=$scores" + КодИлиТелефон + "&cashierExternalId=$cashierExternalId";
Если СтруктураОперации.Свойство("total") Тогда URL = СтрЗаменить(URL, "$total", Формат(СтруктураОперации.total, "ЧН=0; ЧГ=")); КонецЕсли;
Если СтруктураОперации.Свойство("cashierExternalId") Тогда URL = СтрЗаменить(URL, "$cashierExternalId", СтруктураОперации.cashierExternalId); КонецЕсли;
Если СтруктураОперации.Свойство("cash") Тогда URL = СтрЗаменить(URL, "$cash", Формат(Окр(СтруктураОперации.cash,0), "ЧН=0; ЧГ=")); КонецЕсли;
Если СтруктураОперации.Свойство("scores") Тогда URL = СтрЗаменить(URL, "$scores", Формат(СтруктураОперации.scores, "ЧН=0; ЧГ=")); КонецЕсли;
ssl = Новый ЗащищенноеСоединениеOpenSSL();
Con = Новый HTTPСоединение(Сервер, , , , , 10, ssl);
HTTPЗапрос = Новый HTTPЗапрос(URL);
HTTPЗапрос.Заголовки.Вставить("X-Api-Key", Токен);
Con.ОтправитьДляОбработки(HTTPЗапрос, ФайлРезультата);
ТексДок = Новый ТекстовыйДокумент;
ТексДок.Прочитать(ФайлРезультата, КодировкаТекста.UTF8);
Ответ = ТексДок.ПолучитьТекст();
Возврат Ответ;
КонецФункции
//форма
&НаКлиенте
Процедура ОсновныеДействияФормыЗапросить(Кнопка)
перем КодСкидки;
ИмяКлиента = "";
ДоступноБонусов="";
//КодСкидкиUDS=Объект.КодСкидкиUDS;
ИнформацияОтСервера=ПолучитьИнформациюОКомпании(КодСкидкиUDS);
ИскомаяСтрокаБаллов = ИнформацияОтСервера.Найти("КоличествоИмеющихсяБаллов","Поле");
Если ИскомаяСтрокаБаллов = Неопределено Тогда
Отказ = Истина;
Возврат;
КонецЕсли;
ДоступноБонусов =ИскомаяСтрокаБаллов.Значение;
//ЗначениеВРеквизитФормы(ДоступноБонусов, Число(ИскомаяСтрокаБаллов.Значение));
ИскомаяСтрокаИмениКлиента = ИнформацияОтСервера.Найти("ИмяКлиента","Поле");
ИмяКлиента = ИскомаяСтрокаИмениКлиента.Значение;
Если ИмяКлиента <> Неопределено Тогда
ЭтаФорма.Элементы.СписываемыеБаллы.Доступность = Истина;
ЭтаФорма.Элементы.ИспользоватьСкидку.Доступность = Истина;
КонецЕсли;
//
КонецПроцедуры
&НаКлиенте
Процедура ОсновныеДействияФормыИспользоватьСкидку(Кнопка)
ЭтаФорма.Закрыть(ИнформацияОтСервера);
КонецПроцедуры
&НаКлиенте
Процедура СписываемыеБаллыПриИзменении(Элемент)
Если СписываемыеБаллы > ДоступноБонусов Тогда СписываемыеБаллы = ДоступноБонусов КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Если ИнформацияОтСервера.Количество() > 2 тогда
НоваяСтрокаТаблицы = ИнформацияОтСервера.Добавить();
НоваяСтрокаТаблицы.Поле = "СписываемыеБаллы";
НоваяСтрокаТаблицы.Значение = Строка(СписываемыеБаллы);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии()
//Если Найти(КодСкидкиUDS, "+++") <> 0 Тогда
// ЭтаФорма.ЭлементыФормы.КодСкидкиUDS.Доступность = Ложь;
//КонецЕсли;
//ЭтаФорма.ЭлементыФормы.ОсновныеДействияФормы.Кнопки.ИспользоватьСкидку.Доступность = Ложь;
КонецПроцедуры
&НаКлиенте
Процедура КодСкидкиUDSПриИзменении(Элемент)
Если СтрДлина(КодСкидкиUDS) > 6 Тогда
ЭтаФорма.Элементы.ИспользоватьСкидку.Доступность = Истина;
Иначе
ЭтаФорма.Элементы.Запросить.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
(1) ТаблицаИнформацииОтСервера - случайно не реквизит формы? Если да, то её нельзя передавать как параметр на сервер, да и бессмысленно. Она в серверном контексте и так доступна.
Всем привет! Код был написан под обычное приложение не уф
Хотим переделать по уф. Если не использовать таблицу значений то работает. Если с таблицой пишет ошибку. В отладчике смотрел там функция возвращает данные коллекции а как с ней работать не знаю, не селен в уф, начинающий)
МассивДанных = Новый Массив;
Для Каждого СтрЛог из ТаблицаИнформацииОтСервера Цикл
Стр = Новый Структура("Поле,Значение");
ЗаполнитьЗначенияСвойств(Стр,СтрЛог);
МассивДанных.Добавить(Стр);
КонецЦикла;
Возврат Массив