МОБИЛЬНАЯ 1С. LAZYLOADING НОМЕНКЛАТУРЫ. ЧАСТЬ 1
- Опубликовано Илья Низамов
- Разделы Blog
- Дата 11.03.2021
- Комментарии Нет комментариев
Всем привет. Небольшая акция для новичков, старички могут пропустить)
К сожалению, текущий функционал портала школы не позволяет делать бандлы. В связи с этим решил попробовать собрать все курсы в один бандл по интересной цене. Кто заинтересовался, пишите в личку @IlyaNizamov
Привет программисты 1С, с вами Низамов Илья. Сегодня мы разработаем backend в 1С для нашего мобильного приложения. HTTP сервис 1С будет возвращать номенклатуру в формате json с пагинацией по 4 позиции. В последующих уроках мы разработаем фронтенд на javascript фреймворке Vue, и перенесем потом его в мобильное приложение 1С.
А если вам понравится эта серия видео уроков, то обязательно записывайтесь на мое занятие по разработке личного кабинета контрагента на NuxtJS для 1С.
Запишись на тренинг
Ну и конечно подписывайтесь на мой канал, чтобы не пропустить выход всех видео, прожимайте колокольчик и не забывайте про лайки. На вопросы по уроку отвечаю в комментариях.
И давайте приступать.
Функция ProductsGET(Запрос) КодПоследнегоЭлемента = Запрос.ПараметрыЗапроса.Получить("lastcode"); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 4 | СпрНоменклатура.Код КАК Код, | СпрНоменклатура.Ссылка, | СпрНоменклатура.Наименование, | СпрНоменклатура.Артикул, | СпрНоменклатура.НаименованиеПолное, | СпрНоменклатура.ДополнительноеОписаниеНоменклатуры, | СпрНоменклатура.ОсновноеИзображение, | ЦеныНоменклатурыСрезПоследних.Цена, | ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры |ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(, ТипЦен = &ТипЦен) КАК ЦеныНоменклатурыСрезПоследних | ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка) |ГДЕ | СпрНоменклатура.Код > &Код | И СпрНоменклатура.ЭтоГруппа = ЛОЖЬ | |УПОРЯДОЧИТЬ ПО | Код"; Запрос.УстановитьПараметр("ТипЦен", Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000004")); Если ЗначениеЗаполнено(КодПоследнегоЭлемента) Тогда Запрос.УстановитьПараметр("Код", КодПоследнегоЭлемента); Иначе Запрос.Текст = СтрЗаменить(Запрос.Текст, "СпрНоменклатура.Код > &Код", "ИСТИНА"); КонецЕсли; РезультатЗапроса = Запрос.Выполнить(); СтруктураОтвета = ПолучитьСтруктуруОтвета(); Если РезультатЗапроса.Пустой() Тогда Возврат СформироватьОтвет(СтруктураОтвета, 204); КонецЕсли; Код = 0; Выборка = РезультатЗапроса.Выбрать(); Пока Выборка.Следующий() Цикл ДанныеТовара = Новый Структура; ДанныеТовара.Вставить("guid", XMLСтрока(Выборка.Ссылка)); ДанныеТовара.Вставить("title", СтрШаблон("%1 - %2", Выборка.Наименование, Выборка.ХарактеристикаНоменклатуры)); ДанныеТовара.Вставить("price", Выборка.Цена); ДанныеТовара.Вставить("desk", Выборка.ДополнительноеОписаниеНоменклатуры); ДанныеТовара.Вставить("img", ПолучитьКартинкуДляHTML(Выборка.ОсновноеИзображение)); СтруктураОтвета.products.Добавить(ДанныеТовара); Код = Выборка.Код; КонецЦикла; СтруктураОтвета.lastcode = Код; Возврат СформироватьОтвет(СтруктураОтвета, 200); КонецФункции
Функция ПолучитьСтруктуруОтвета()
Товары = Новый Структура;
Товары.Вставить("lastcode", 0);
Товары.Вставить("products", Новый Массив);
Возврат Товары;
КонецФункции
Функция СформироватьJSON(СтруктураДанных)
Попытка
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку(Новый ПараметрыЗаписиJSON(, Символы.Таб));
ЗаписатьJSON(ЗаписьJSON, СтруктураДанных);
Возврат ЗаписьJSON.Закрыть();
Исключение
ЗаписьЖурналаРегистрации("Vue",,,, ОписаниеОшибки());
Возврат СформироватьJSON(ПолучитьСтруктуруОтвета());
КонецПопытки;
КонецФункции
Функция СформироватьОтвет(СтруктураОтвета, КодОтвета)
Ответ = Новый HTTPСервисОтвет(КодОтвета);
Ответ.УстановитьТелоИзСтроки(СформироватьJSON(СтруктураОтвета), КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Возврат Ответ;
КонецФункции
Функция ПолучитьКартинкуДляHTML(ОсновноеИзображение)
ДвоичныеДанные = БиблиотекаКартинок.Заглушка.ПолучитьДвоичныеДанные();
Если НЕ ОсновноеИзображение.Хранилище.Получить() = Неопределено Тогда
ДвоичныеДанные = ОсновноеИзображение.Хранилище.Получить().ПолучитьДвоичныеДанные();
КонецЕсли;
СтрокаBase64 = ПолучитьBase64СтрокуИзДвоичныхДанных(ДвоичныеДанные);
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ПС, "");
СтрокаBase64 = СтрЗаменить(СтрокаBase64, Символы.ВК, "");
Возврат СтрШаблон("data:image/jpg;base64, %1", СтрокаBase64);
КонецФункции