Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 мая 2025, 01:04

Массив товаров. Поиск товара с минимальной ценой

Автор shams, 18 мая 2023, 14:58

0 Пользователей и 1 гость просматривают эту тему.

shams

Здраствуйте хотел бы спросить как сравнить цену чтобы  сделать так чтобы показать пользователю в виде сообщения вида "Самый дешевый товар: Смартфон Samsung Galaxy A12, цена: 352 руб. 55 коп."



&НаКлиенте
Процедура Массивтоваров(Команда)
   

   МассивТоваров = Новый Массив ;
   
   //
   ДанныеRedmi = Новый Структура;
   
   ДанныеRedmi.Вставить("Артикул" , "184601023");
   ДанныеRedmi.Вставить("Наименование" , "Смартфон Xiaomi Redmi 9 3/32GB, зеленый");
   ДанныеRedmi.Вставить("Штрихкод" , "978020137962");
   ДанныеRedmi.Вставить("Цена" , "418.12");
   
   МассивТоваров.Добавить(ДанныеRedmi);
   
   //
   ДанныеGalaxy  = Новый Структура;
   
   ДанныеGalaxy.Вставить("Артикул" , "215543732");
   ДанныеGalaxy.Вставить("Наименование" , "Смартфон Samsung Galaxy A12");
   ДанныеGalaxy.Вставить("Штрихкод" , "478020147962");
   ДанныеGalaxy.Вставить("Цена" , "352.55");
   
   МассивТоваров.Добавить(ДанныеGalaxy);
   //
    Для Каждого ЭлементСтруктуры Из ДанныеGalaxy Цикл
      Сообщить(ЭлементСтруктуры.Ключ + ": " + ЭлементСтруктуры.Значение);
   КонецЦикла;

   
   //
   ДанныеPoco   = Новый Структура;
   
   ДанныеPoco.Вставить("Артикул" , "254514022");
   ДанныеPoco.Вставить("Наименование" , "Смартфон Poco X3 Pro 8");
   ДанныеPoco.Вставить("Штрихкод" , "448021147962");
   ДанныеPoco.Вставить("Цена" , "734.07");
   
   МассивТоваров.Добавить(ДанныеPoco);
   
   //Для Каждого ЭлементСтруктуры Из ДанныеPoco Цикл
   //   Сообщить(ЭлементСтруктуры.Ключ + ": " + ЭлементСтруктуры.Значение);
   //КонецЦикла;

   
   Для Каждого Элемент Из МассивТоваров Цикл
      Если Элемент = МассивТоваров   Тогда
         дешевый   = Элемент;
      КонецЕсли;     
   КонецЦикла;
   
   Сообщить("------");
   Сообщить("Самый дешевый товар: " + ДанныеGalaxy );
   
   
     
КонецПроцедуры

LexaK

shams, сначала исправьте ошибку: Цена должна быть Числом !!!
(вставьте сюда код который получится)
если помогло нажмите: Спасибо!

Afinogen

 B) сделайте реквизит формы с типом таблица значений, добавьте в него колонки  с именами как у вас имена ключей в структуре и вместов сего что  написали

вот этой всей петрушки

   ДанныеGalaxy  = Новый Структура;
   
   ДанныеGalaxy.Вставить("Артикул" , "215543732");
   ДанныеGalaxy.Вставить("Наименование" , "Смартфон Samsung Galaxy A12");
   ДанныеGalaxy.Вставить("Штрихкод" , "478020147962");
   ДанныеGalaxy.Вставить("Цена" , "352.55");
   
   МассивТоваров.Добавить(ДанныеGalaxy);
   //
    Для Каждого ЭлементСтруктуры Из ДанныеGalaxy Цикл
      Сообщить(ЭлементСтруктуры.Ключ + ": " + ЭлементСтруктуры.Значение);
   КонецЦикла;

проосто добавляйте новую строку в таблицу, потмо когда все добавить отсортируйте таблицу по возрастанию  цены и выведите в сообщении все что вам надо


shams

LexaK, Здраствуйте вот исправил теперь что надо сделать


&НаКлиенте
Процедура Массивтоваров(Команда)
   

   МассивТоваров = Новый Массив ;
   
   //
   ДанныеRedmi = Новый Структура;
   
   ДанныеRedmi.Вставить("Артикул" , "184601023");
   ДанныеRedmi.Вставить("Наименование" , "Смартфон Xiaomi Redmi 9 3/32GB, зеленый");
   ДанныеRedmi.Вставить("Штрихкод" , "978020137962");
   ДанныеRedmi.Вставить("Цена" , 418.12);
   
   МассивТоваров.Добавить(ДанныеRedmi);
   
   //
   ДанныеGalaxy  = Новый Структура;
   
   ДанныеGalaxy.Вставить("Артикул" , "215543732");
   ДанныеGalaxy.Вставить("Наименование" , "Смартфон Samsung Galaxy A12");
   ДанныеGalaxy.Вставить("Штрихкод" , "478020147962");
   ДанныеGalaxy.Вставить("Цена" , 352.55);
   
   МассивТоваров.Добавить(ДанныеGalaxy);
   //
   ДанныеPoco   = Новый Структура;
   
   ДанныеPoco.Вставить("Артикул" , "254514022");
   ДанныеPoco.Вставить("Наименование" , "Смартфон Poco X3 Pro 8");
   ДанныеPoco.Вставить("Штрихкод" , "448021147962");
   ДанныеPoco.Вставить("Цена" , 734.07);
   
   МассивТоваров.Добавить(ДанныеPoco);
   
   Для Каждого ЭлементСтруктуры Из ДанныеPoco Цикл
      Сообщить(ЭлементСтруктуры.Ключ + ": " + ЭлементСтруктуры.Значение);
   КонецЦикла;

   
   Сообщить("------");
   Сообщить("Самый дешевый товар: " + ДанныеGalaxy );
   
   

      
КонецПроцедуры

Kvark5d

shams, а дальше надо задуматься - зачем применять Структуру? А потом перечитать комментарий Afinogen и сделать как там написано

LexaK

shams, попробуйте такой код, почитайте коменты
&НаКлиенте
Процедура Массивтоваров(Команда)

//1
   МассивТоваров = Новый Массив ;
   ДанныеRedmi = Новый Структура;
   ДанныеRedmi.Вставить("Артикул" , "184601023");
   ДанныеRedmi.Вставить("Наименование" , "Смартфон Xiaomi Redmi 9 3/32GB, зеленый");
   ДанныеRedmi.Вставить("Штрихкод" , "978020137962");
   ДанныеRedmi.Вставить("Цена" , 418.12);
   МассивТоваров.Добавить(ДанныеRedmi);
   
//2
   ДанныеGalaxy  = Новый Структура;
   ДанныеGalaxy.Вставить("Артикул" , "215543732");
   ДанныеGalaxy.Вставить("Наименование" , "Смартфон Samsung Galaxy A12");
   ДанныеGalaxy.Вставить("Штрихкод" , "478020147962");
   ДанныеGalaxy.Вставить("Цена" , 352.55);
   МассивТоваров.Добавить(ДанныеGalaxy);
   
//3
   ДанныеPoco   = Новый Структура;
   ДанныеPoco.Вставить("Артикул" , "254514022");
   ДанныеPoco.Вставить("Наименование" , "Смартфон Poco X3 Pro 8");
   ДанныеPoco.Вставить("Штрихкод" , "448021147962");
   ДанныеPoco.Вставить("Цена" , 734.07);
   МассивТоваров.Добавить(ДанныеPoco);

   МинЦена = Неопределено; //переменная для товара с минимальной ценой
   Для Каждого ТекТовар Из МассивТоваров Цикл
   Если МинЦена = Неопределено или МинЦена.Цена > ТекТовар.Цена Тогда
   //если у текущего товара цена меньше, запоминаем его в переменной
     МинЦена = ТекТовар;
  КонецЕсли;
      //Сообщить(ЭлементСтруктуры.Ключ + ": " + ЭлементСтруктуры.Значение);
   КонецЦикла;

   Если МинЦена <> Неопределено Тогда
   Сообщить("------");
   Сообщить("Самый дешевый товар: " + МинЦена.Наименование + ", Цена: " + МинЦена.Цена );
   КонецЕсли;
   
   

     
КонецПроцедуры
если помогло нажмите: Спасибо!

Nirinka

LexaK, Работает, спасибо!
Подскажите, уместно ли писать код так или другим будет тяжело читать?
МассивТоваров = Новый Массив;
МассивТоваров.Добавить(Новый Структура("Артикул,Наименование,Штрихкод,Цена", 184601023, "Смартфон Xiomi", 978020137962, 418.12));
МассивТоваров.Добавить(Новый Структура("Артикул,Наименование,Штрихкод,Цена", 215543732, "Смартфон Samsung", 478020147962, 352.55));
МассивТоваров.Добавить(Новый Структура("Артикул,Наименование,Штрихкод,Цена", 254514022, "Смартфон Poco", 448021147962, 734.07));


LexaK

Nirinka, как вариант для обучения подойдет
лучше использовать коллекции формы (реквизит ТЗ)
с другой стороны, такой способ  используется для
получения данных из запроса с Сервера на Клиент

но лучше все действия делать сразу на сервере сразу в Запросе или в ТЗ
а на Клиент возвращать только резултат поиска или обработки.
если помогло нажмите: Спасибо!

antoneus

Nirinka, ну не будут же у вас данные всегда вот так хардкодом)

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск