Skip to content

Instantly share code, notes, and snippets.

@ruslan-hut
Created September 2, 2020 18:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ruslan-hut/dc7bf96485ac7c58a1f5d176e55e045a to your computer and use it in GitHub Desktop.
Save ruslan-hut/dc7bf96485ac7c58a1f5d176e55e045a to your computer and use it in GitHub Desktop.
Функция ПодготовитьДанныеОТоварах с выборкой цен
Функция ПодготовитьДанныеОТоварах(МобильныйКлиент,НомерЭлемента) Экспорт
Дата = КонецДня(ТекущаяДата());
зТовары = Новый Запрос;
зТовары.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1000
| Агент_Товары.Номенклатура КАК Товар,
| Агент_Товары.ПорядковыйНомер КАК ПорядковыйНомер
|ИЗ
| РегистрСведений.Агент_Товары КАК Агент_Товары
|ГДЕ
| Агент_Товары.ПорядковыйНомер > &ПорядковыйНомер
|
|УПОРЯДОЧИТЬ ПО
| Агент_Товары.ПорядковыйНомер";
зТовары.УстановитьПараметр("ПорядковыйНомер",НомерЭлемента);
тбТовары = зТовары.Выполнить().Выгрузить();
Если тбТовары.Количество() > 0 Тогда
//значение переменной будет возвращено агенту
НомерЭлемента = тбТовары[тбТовары.Количество()-1].ПорядковыйНомер;
КонецЕсли;
мТовары = тбТовары.ВыгрузитьКолонку("Товар");
//проверим, это последняя порция или нет
Если НомерЭлемента > 0 Тогда
зТовары = Новый Запрос;
зТовары.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| Агент_Товары.ПорядковыйНомер КАК ПорядковыйНомер
|ИЗ
| РегистрСведений.Агент_Товары КАК Агент_Товары
|
|УПОРЯДОЧИТЬ ПО
| Агент_Товары.ПорядковыйНомер УБЫВ";
Выборка = зТовары.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Если Выборка.ПорядковыйНомер <= НомерЭлемента Тогда
НомерЭлемента = 0;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Товары.Ссылка,
| Товары.Родитель,
| Товары.Родитель.Наименование,
| Товары.Родитель.Код,
| Товары.Код,
| ВЫБОР
| КОГДА Товары.ЭтоГруппа
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК ЭтоГруппа,
| Товары.Артикул,
| Товары.ЕдиницаХраненияОстатков.Наименование КАК Единица,
| ВЫБОР
| КОГДА Товары.ЭтоГруппа
| ТОГДА Товары.Наименование
| ИНАЧЕ ВЫРАЗИТЬ(Товары.НаименованиеПолное КАК СТРОКА(100))
| КОНЕЦ КАК Наименование,
| Агент_Товары.ПорядковыйНомер
|ИЗ
| РегистрСведений.Агент_Товары КАК Агент_Товары
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК Товары
| ПО Агент_Товары.Номенклатура.Ссылка = Товары.Ссылка
|ГДЕ
| Агент_Товары.Номенклатура В(&Номенклатура)";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Номенклатура", мТовары);
//-------------------- выборка цен по типам
Цены = Новый Запрос;
Цены.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.ТипЦен.Код КАК Код,
| ЦеныНоменклатурыСрезПоследних.ТипЦен.Наименование КАК Наименование,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата, Номенклатура В (&Товары)) КАК ЦеныНоменклатурыСрезПоследних
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура";
Цены.УстановитьПараметр("Дата", Дата);
Цены.УстановитьПараметр("Товары", мТовары);
тбЦены = Цены.Выполнить().Выгрузить();
Выборка = Запрос.Выполнить().Выбрать();
мРезультат = Новый Массив;
Пока Выборка.Следующий() Цикл
ИДТовара = СокрЛП(Выборка.Ссылка.УникальныйИдентификатор());
МинЦена = 0;
ЦенаЗакупки = 0;
ЦенаПродажи = 0;
ДанныеТовара = Новый Структура;
ДанныеТовара.Вставить("value_id", "item");
ДанныеТовара.Вставить("guid", ИДТовара);
ДанныеТовара.Вставить("description", СокрЛП(Выборка.Наименование));
ДанныеТовара.Вставить("code1", СокрЛП(Выборка.Артикул)); //этот код отображается в списке товаров на клиенте
ДанныеТовара.Вставить("code2", СокрЛП(Выборка.Код)); //будет передан с устройства для идентификации элемента
ДанныеТовара.Вставить("sorting", ЧислоВСтроку(Выборка.ПорядковыйНомер));
ДанныеТовара.Вставить("quantity", 0);
ДанныеТовара.Вставить("is_group", Выборка.ЭтоГруппа);
//если группы нет, у клиента будет null
Если НЕ Выборка.Родитель.Пустая() Тогда
//если group_guid будет пустым, на устройстве не будет списка по папкам
ДанныеТовара.Вставить("group_guid", СокрЛП(Выборка.Родитель.УникальныйИдентификатор()));
КонецЕсли;
//----------------- добавление информации о ценах
Если Выборка.ЭтоГруппа = 0 Тогда
Отбор = Новый Структура;
Отбор.Вставить("Номенклатура", Выборка.Ссылка);
ЦеныТовара = тбЦены.НайтиСтроки(Отбор);
Для каждого ЦенаТовара Из ЦеныТовара Цикл
ДанныеЦены = Новый Структура;
ДанныеЦены.Вставить("value_id", "price");
ДанныеЦены.Вставить("item_guid", ИДТовара);
ДанныеЦены.Вставить("price_type", ЧислоВСтроку(ВернутьЧисло(ЦенаТовара.Код)));
ДанныеЦены.Вставить("price_name", ЦенаТовара.Наименование);
Цена = ЦенаТовара.Цена;
ДанныеЦены.Вставить("price", ЧислоВСтроку(Цена));
мРезультат.Добавить(ДанныеЦены);
МинЦена = ?(МинЦена=0, Цена, Мин(МинЦена, Цена));
//тут можно определить и присвоить значения для цен закупки и продажи
//например по заданным типам цен (можно задать в константах или параметрах моб. клиента)
КонецЦикла;
КонецЕсли;
ДанныеТовара.Вставить("price", ЧислоВСтроку(ЦенаПродажи));
ДанныеТовара.Вставить("min_price", ЧислоВСтроку(МинЦена));
ДанныеТовара.Вставить("base_price", ЧислоВСтроку(ЦенаЗакупки));
ДанныеТовара.Вставить("package_only", 0);
ДанныеТовара.Вставить("package_value", 0);
ДанныеТовара.Вставить("weight", 0);
ДанныеТовара.Вставить("unit", СокрЛП(Выборка.Единица));
мРезультат.Добавить(ДанныеТовара);
КонецЦикла;
Возврат мРезультат;
КонецФункции // ПодготовитьДанныеОТоварах()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment