Created
September 2, 2020 18:10
-
-
Save ruslan-hut/dc7bf96485ac7c58a1f5d176e55e045a to your computer and use it in GitHub Desktop.
Функция ПодготовитьДанныеОТоварах с выборкой цен
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Функция ПодготовитьДанныеОТоварах(МобильныйКлиент,НомерЭлемента) Экспорт | |
Дата = КонецДня(ТекущаяДата()); | |
зТовары = Новый Запрос; | |
зТовары.Текст = | |
"ВЫБРАТЬ ПЕРВЫЕ 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