Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 8 общая

Как вычислить максимальное значение в ТЗ

Как вычислить максимальное значение в ТЗ
Я
   ugorchina
 
19.04.18 - 11:20
Добрый день!

есть ТЗ (ТаблицаЗначений) в ней есть две колонки

Арт | Цена

записи могут быть такого вида

123 | 15
123 | 25
123 | 35
321 | 10
321 | 12
321 | 40
321 | 53

как видно есть артикулы одинаковые 
необходимо их сгруппировать и вычислить максимальное значение цены 

но вот как это сделать? помогите пожалуйста
 
 
   ugorchina
 
1 - 19.04.18 - 11:21
здесь читал но там не сказано ничего о группировки (ну или я не нашел ( )

https://www.forum.mista.ru/topic.php?id=551881
   Eastert
 
2 - 19.04.18 - 11:22
Отсортировать по убыванию цены и выбрать первую запись
   aka AMIGO
 
3 - 19.04.18 - 11:23
Я-б сделал сортировку по полю "Цена", а в цикле проверял бы изменение Арт. Изменился - стал-быть, максимальная цена
   PLUT
 
4 - 19.04.18 - 11:24
(0) запросом
   aka AMIGO
 
5 - 19.04.18 - 11:24
(2) По убыванию = ++, и еще - ему надо для каждого Арт
   Eastert
 
6 - 19.04.18 - 11:24
(3) ТЗ.Сортировать("Цена Убыв");
МаксимальнаяСтрока = ТЗ[0];

, а при чем здесь колонка Арт? если надо найти максимальное значение цены?
   ugorchina
 
7 - 19.04.18 - 11:25
(6) мне надо получить по каждому артиклу максимальную цену
   aka AMIGO
 
8 - 19.04.18 - 11:26
(6) См.(7). У меня интуиция :)
   Eastert
 
9 - 19.04.18 - 11:26
(7) Аа, можно закинуть в запрос, и там сгурппировать
   Junibot
 
10 - 19.04.18 - 11:26
(0) максимальное значение цены для каждого арт?
 
 Рекламное место пустует
   Волшебник
 
11 - 19.04.18 - 11:26
(7) ТЗ.Сортировать("Артикул Возр, Цена Убыв");
   ugorchina
 
12 - 19.04.18 - 11:26
Результат = Новый Структура("Макс,Мин");
 
    ЗапросМакМин = Новый Запрос;
    ЗапросМакМин.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросМакМин.Текст = "ВЫБРАТЬ
                         |  РабТаблица._ПолеМакс КАК Макс,
                         |  РабТаблица._ПолеМин КАК Мин
                         |ПОМЕСТИТЬ РабочаяТаблица
                         |ИЗ
                         |  &РабТаблица КАК РабТаблица
                         |;
                         |
                         ////////////////////////////////////////////////////////////////////////////////

                         |ВЫБРАТЬ
                         |  МАКСИМУМ(РабочаяТаблица.Макс) КАК Макс,
                         |  МИНИМУМ(РабочаяТаблица.Мин) КАК Мин
                         |ИЗ
                         |  РабочаяТаблица КАК РабочаяТаблица
                         |;
                         |
                         ////////////////////////////////////////////////////////////////////////////////

                         |УНИЧТОЖИТЬ РабочаяТаблица";
 
    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМакс" , ПолеМакс);
    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМин" , ПолеМин);
    ЗапросМакМин.УстановитьПараметр("РабТаблица",  тзДанные);
    РезМаксМин = ЗапросМакМин.Выполнить().Выгрузить();
 
    Результат["Макс"]= РезМаксМин[0].Макс;
    Результат["Мин"] = РезМаксМин[0].Мин;
 
    Возврат Результат;
   ugorchina
 
13 - 19.04.18 - 11:27
+(12) как сгруппировать здесь?
   pasha_d
 
14 - 19.04.18 - 11:27
Если надо сгруппировать по артикулу - то для начала ТЗ.Свернуть("Арт", "Цена");
   ugorchina
 
15 - 19.04.18 - 11:27
(14) и что я получу?
   aka AMIGO
 
16 - 19.04.18 - 11:27
(14) :)
   Eastert
 
17 - 19.04.18 - 11:27
(13) в конструкторе запроса на вкладке Группировка
   ugorchina
 
18 - 19.04.18 - 11:28
(10) да!
   pasha_d
 
19 - 19.04.18 - 11:28
(15) ты же пишешь, что есть одинаковые артикулы и что необходимо их сгруппировать
   ugorchina
 
20 - 19.04.18 - 11:30
(19) понятно что я знаю что надо сделать! но я не знаю как!
   pasha_d
 
21 - 19.04.18 - 11:31
Вычислить максимальную цену и при этом их сгруппировать по артикулу - вещи несовместимые)
   ugorchina
 
22 - 19.04.18 - 11:32
Результат = Новый Структура("Макс,Мин");
 
    ЗапросМакМин = Новый Запрос;
    ЗапросМакМин.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросМакМин.Текст = "ВЫБРАТЬ
                         |  РабТаблица._ПолеМакс КАК Макс,
                         |  РабТаблица._ПолеМин КАК Мин
                         |ПОМЕСТИТЬ РабочаяТаблица
                         |ИЗ
                         |  &РабТаблица КАК РабТаблица
                         |;
                         |
                         ////////////////////////////////////////////////////////////////////////////////

                         |ВЫБРАТЬ
                         |  МАКСИМУМ(РабочаяТаблица.Макс) КАК Макс,
                         |  МИНИМУМ(РабочаяТаблица.Мин) КАК Мин
                         |ИЗ
                         |  РабочаяТаблица КАК РабочаяТаблица
                         |;
                         |
                         ////////////////////////////////////////////////////////////////////////////////

                         |УНИЧТОЖИТЬ РабочаяТаблица";
 
    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМакс" , ПолеМакс);
    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМин" , ПолеМин);
    ЗапросМакМин.УстановитьПараметр("РабТаблица",  тзДанные);
    РезМаксМин = ЗапросМакМин.Выполнить().Выгрузить();
 
    Результат["Макс"]= РезМаксМин[0].Макс;
    Результат["Мин"] = РезМаксМин[0].Мин;
 
    Возврат Результат;

дополните пож группировкой по арт каму не сложно 

спаисбо
   Junibot
 
23 - 19.04.18 - 11:33
(18)


ВЫБРАТЬ
    ВремТЗ.Арт,
    МАКСИМУМ(ВремТЗ.Цена) КАК Цена
ИЗ
    ВремТЗ КАК ВремТЗ

СГРУППИРОВАТЬ ПО
    ВремТЗ.Арт
   ugorchina
 
24 - 19.04.18 - 11:33
(21)с чего Вы взяли?
   ugorchina
 
25 - 19.04.18 - 11:33
(230 спасибо! добрый человек!
   ugorchina
 
26 - 19.04.18 - 11:35
потом запрос циклом перебирать верно?
   PLUT
 
27 - 19.04.18 - 11:36
(26) можно в ТЗ выгрузить
ТЗ = Запрос.Выполнить().Выгрузить();
   Вафель
 
28 - 19.04.18 - 11:37
а можно построителем запроса, он умеет напрямую из тз читать без обращения к серверу субд
   ugorchina
 
29 - 19.04.18 - 11:41
(28) построителем запроса Вы имели в виду конструктором? я плохо еще знаю 1с 8
   Вафель
 
30 - 19.04.18 - 11:42
Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ИсточникДанных(ТЗ)
...

   ugorchina
 
31 - 19.04.18 - 11:42
(23) погодите а это не дополнение к моему а новый запрос?
   МихаилМ
 
32 - 19.04.18 - 11:43
за запрос надо увольнять за профнепригодность.

1с  имеет как минимум 3 механизма для расчета максимума
тз:  

построительзапроса, анализданных общая статистика, скд.

а алгоритм без полного перебора прост: копию тз, добавить поле счетчик, заполнить поле 1, свернуть в поле счетчик будет кол-во записей. тз сортировать , выбирать последние записи в группировке
   ugorchina
 
33 - 19.04.18 - 11:45
так верно?
      //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |    ВремТЗ.Арт КАК Арт,
        |    МАКСИМУМ(ВремТЗ.Цена) КАК Цена
        |ИЗ
        |    ВремТЗ КАК ВремТЗ
        |
        |СГРУППИРОВАТЬ ПО
        |    ВремТЗ.Арт";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи

    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
 
 
   Вафель
 
34 - 19.04.18 - 11:46
(32) мне кажется одинарный перебор будет быстрее сортирвоки и свертки
   ugorchina
 
35 - 19.04.18 - 11:46
(32) если я пользую свернуть для ТЗ по артикулу

разве не не сложат все цифры цены?
   ugorchina
 
36 - 19.04.18 - 11:47
(27) а для чего мне помещать то? мне надо регистр после этого записать эти данные! помещу я в еще одну ТЗ после ее всеравно перебирать НЕ?
   МихаилМ
 
37 - 19.04.18 - 12:00
(35) цену не нужно сворачивать. нужно сворачивать поле счетчик, чтобы узнать кол-во записей в группировке.
   ugorchina
 
38 - 19.04.18 - 12:01
ОписаниеТипЦеновогоЧисла        = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2));
    ТЗЦеныТоваров1 = Новый ТаблицаЗначений;
    ТЗЦеныТоваров1.Колонки.Добавить("Артикул");
    ТЗЦеныТоваров1.Колонки.Добавить("Цена", ОписаниеТипЦеновогоЧисла);
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 10;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 21;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 30;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 55;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 25;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 10;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 48;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 23;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 05;

    
    
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗЦеныТоваров1.Цена) КАК Цена
    |ИЗ
    |    ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1
    |
    |СГРУППИРОВАТЬ ПО
    |    ТЗЦеныТоваров1.Артикул";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Арт = ВыборкаДетальныеЗаписи.Артикул;
        Цен = ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    

ошибка  Ошибка при вызове метода контекста (Выполнить)
по причине:

по причине:
{(5, 2)}: Таблица не найдена "ТЗЦеныТоваров1"
<<?>>ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1
   ugorchina
 
39 - 19.04.18 - 12:02
(38) шо не так то?
   Zmich
 
40 - 19.04.18 - 12:02
(38) ИЗ &ТЗЦеныТоваров1 + Запрос.УстановитьПараметр
   ugorchina
 
41 - 19.04.18 - 12:04
(40) до РезультатЗапроса = Запрос.Выполнить();
или после?
   ugorchina
 
42 - 19.04.18 - 12:05
(40) так верно?

Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗЦеныТоваров1.Цена) КАК Цена
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1
    |
    |СГРУППИРОВАТЬ ПО
    |    ТЗЦеныТоваров1.Артикул";
    
    Запрос.УстановитьПараметр("ТЗЦеныТоваров1",ТЗЦеныТоваров1);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Арт = ВыборкаДетальныеЗаписи.Артикул;
        Цен = ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;
   Junibot
 
43 - 19.04.18 - 12:08
(32) хороший алгоритм
   ugorchina
 
44 - 19.04.18 - 12:09
+(42) еще ошибка (

Ошибка при вызове метода контекста (Выполнить)
по причине:

по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу
   МихаилМ
 
45 - 19.04.18 - 12:10
(34) сортировка все равно будет. без сортировки и одной колонки можно с соответствием. все зависит от кол-ва строк и колва группировок
   Zmich
 
46 - 19.04.18 - 12:12
(44).
"ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    ТЗЦеныТоваров1.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗ.Цена) КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул";
   Zmich
 
47 - 19.04.18 - 12:13
(44) + И тип поля Артикул в таблице значений тебе нужно явно описать.
   ugorchina
 
48 - 19.04.18 - 12:20
(46), (47) 

ошибка
 Ошибка при вызове метода контекста (Добавить)
по причине:
Несоответствие типов (параметр номер '2')

вот мой нов код

ОписаниеТипЦеновогоЧисла        = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2));
    ТЗЦеныТоваров1 = Новый ТаблицаЗначений;
    ТЗЦеныТоваров1.Колонки.Добавить("Артикул", "Строка");
    ТЗЦеныТоваров1.Колонки.Добавить("Цена", ОписаниеТипЦеновогоЧисла);
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 10;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 21;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 30;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 123;
    СтрЦены.Цена = 55;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 25;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 10;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 48;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 23;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = 321;
    СтрЦены.Цена = 05;

    
    
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    ТЗЦеныТоваров1.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗ.Цена) КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул";
    
    Запрос.УстановитьПараметр("ТЗЦеныТоваров1",ТЗЦеныТоваров1);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Арт = ВыборкаДетальныеЗаписи.Артикул;
        Цен = ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   Zmich
 
49 - 19.04.18 - 12:24
(48). 123 - не Строка, "123" - Строка
 
 Рекламное место пустует
   PLUT
 
50 - 19.04.18 - 12:28
+(49) варианты:
""+123; 
"123"; 
Строка(123);
   hhhh
 
51 - 19.04.18 - 12:29
(48) как-то так
ТЗЦеныТоваров1.Колонки.Добавить("Артикул", ОписаниеТипаСтрока);
   hhhh
 
52 - 19.04.18 - 12:30
(50) по идее  СтрЦены.Артикул = 123; тоже правильно. преобразуется ведь
   ugorchina
 
53 - 19.04.18 - 12:30
спасибо работает

ОписаниеТипЦеновогоЧисла        = Новый ОписаниеТипов("Число",Новый КвалификаторыЧисла(15,2));
    ОписаниеТипСтрок                = Новый ОписаниеТипов("Строка",Новый КвалификаторыСтроки(30));

    ТЗЦеныТоваров1 = Новый ТаблицаЗначений;
    ТЗЦеныТоваров1.Колонки.Добавить("Артикул", ОписаниеТипСтрок);
    ТЗЦеныТоваров1.Колонки.Добавить("Цена", ОписаниеТипЦеновогоЧисла);
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "123";
    СтрЦены.Цена = 10;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "123";
    СтрЦены.Цена = 21;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "123";
    СтрЦены.Цена = 30;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "123";
    СтрЦены.Цена = 55;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "321";
    СтрЦены.Цена = 25;

    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "321";
    СтрЦены.Цена = 10;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "321";
    СтрЦены.Цена = 48;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "321";
    СтрЦены.Цена = 23;
    
    СтрЦены    = ТЗЦеныТоваров1.Добавить();
    СтрЦены.Артикул = "321";
    СтрЦены.Цена = 05;

    
    
    //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА

    // Данный фрагмент построен конструктором.

    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    ТЗЦеныТоваров1.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗ.Цена) КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул";
    
    Запрос.УстановитьПараметр("ТЗЦеныТоваров1",ТЗЦеныТоваров1);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Арт = ВыборкаДетальныеЗаписи.Артикул;
        Цен = ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   pasha_d
 
54 - 19.04.18 - 13:42
(24) с того, что если вы сгруппируете вашу ТЗ по артикулу, то максимальную цену вы уже не увидите, т.к. строки просуммируются и свернутся. Почитайте что-нибудь на досуге по 1С прежде чем такие вопросы задавать.
   ugorchina
 
55 - 20.04.18 - 11:16
(54) ну так у меня то все получилось! при пользовании свернуть по артикулу да у нас цена суммируется но при группировке мы получаем сгруппированный тот же список по артикулу где и вычисляем самую максимальную с чего вы взяли что они при группировке суммируются?
   ugorchina
 
56 - 20.04.18 - 11:22
по сути при пользовании свернуть мы видим следующие данные

было

арт | цена
123 | 12
123 | 15
321 | 20
321 | 35
321 | 48

Стало

арт | цена
123 | 27
321 | 103

а при использовании группировки мы видим следующее

было

арт | цена
123 | 12
123 | 15
321 | 20
321 | 35
321 | 48

Стало
арт ->123| цена
         | 12
         | 15
арт ->321| цена
         | 20
         | 35
         | 48
в последнем примере мы уже по артикулу видим массив его цен а имея это легко вычисляем масимальную из них

или  не прав?
   МимохожийОднако
 
57 - 20.04.18 - 11:26
(56) Прикольно
   catena
 
58 - 20.04.18 - 11:28
(56)Бред. Разберитесь в отличиях СГРППИРОВАТЬ и ИТОГИ.
   pasha_d
 
59 - 20.04.18 - 12:23
(56) Класс, чо
   Zmich
 
60 - 20.04.18 - 12:34
(56). Ерунда какая-то. Код из (53) выдаст только записи с максимальной ценой по каждому артикулу (по которому и сгруппировали). Остальные записи проигнорируются. И вообще не понял, кстати, (54) - с чего там будет суммирование? Если бы функция СУММА(Цена) использовалась вместо МАКСИМУМ(Цена) - тогда бы и просуммировалась цена. Но не в этом случае.
   ugorchina
 
61 - 20.04.18 - 14:17
(60) почему ерунда?
я понимаю что в коде мы работаем в запросе и он сразу выдает по арт максимум цены НО я писал в (56) данные до Функции мксимум()
   ugorchina
 
62 - 20.04.18 - 14:18
+(61) (56) это не результат моего зарпоса а результат только части его!
   ugorchina
 
63 - 20.04.18 - 14:20
+(62)
 Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    ТЗЦеныТоваров1.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    ТЗ.Цена КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул";
    
    Запрос.УстановитьПараметр("ТЗЦеныТоваров1",ТЗЦеныТоваров1);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Арт = ВыборкаДетальныеЗаписи.Артикул;
        Цен = ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;

например так что мы получим в выборке? разве не второй вариант из (56) ?
   ugorchina
 
64 - 20.04.18 - 14:46
+(63) тестанул получаю тоже что и таблице значений
))))
   Вафель
 
65 - 20.04.18 - 14:47
(63) А где МАКСИМУМ?
   ugorchina
 
66 - 20.04.18 - 14:49
(65) я уюрал специально что бы показать что это не бред для (60)
   Ненавижу 1С
 
67 - 20.04.18 - 14:50
эх, не завезли еще в коллекции 1С LINQ
   singlych
 
68 - 20.04.18 - 14:50
(63) так мы получим "Поле не входит в группу Цена"
   ugorchina
 
69 - 20.04.18 - 14:54
(68) ок а так?

 Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    ТЗЦеныТоваров1.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    ТЗ.Цена КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул,
    |    ТЗ.Цена";
   Ненавижу 1С
 
70 - 20.04.18 - 14:55
(69) только надо так:

 Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    ТЗЦеныТоваров1.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗ.Цена) КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул";
   lEvGl
 
71 - 20.04.18 - 14:56
71!
   Вафель
 
72 - 20.04.18 - 14:56
все-таки лучше через построитель
   lEvGl
 
73 - 20.04.18 - 14:58
еще через адодб в экселе, например, намутить в скл хранимую процедуру, подсоединиться, вычислить и еще много много вариантов
   ugorchina
 
74 - 20.04.18 - 15:01
(73) :-)

(71) не понял
   ugorchina
 
75 - 20.04.18 - 15:01
(70) кто о чем )
   ugorchina
 
76 - 20.04.18 - 15:03
+(75) я о (56) а Вы уважаемый (70)?
   ugorchina
 
77 - 20.04.18 - 15:03
в общем чего мы спорим вот так все работает как надо!

Процедура УстановитьНовуюЦену(ТЗЦеныТоваров)    
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    ТЗЦеныТоваров.Артикул КАК Артикул,
    |    ТЗЦеныТоваров.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров КАК ТЗЦеныТоваров;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗ.Цена) КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул";
    
    Запрос.УстановитьПараметр("ТЗЦеныТоваров",ТЗЦеныТоваров);
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    ДокОст = Документы.КорректировкаЗаписейРегистров.СоздатьДокумент();
    
    ДокОст.Дата = ТекущаяДата();
    ДокОст.Комментарий = "Установка Цен сформирован при обмене с 1с 7" ;
    ДокОст.Ответственный =  ПараметрыСеанса.ТекущийПользователь;
    
    НовСтр = ДокОст.ТаблицаРегистровСведений.Добавить();
    
    НовСтр.Имя = "ЦеныНоменклатуры";
    НовСтр.Представление = "Цены номенклатуры";
    
    ДокОст.Записать();
    
    НовыеДанные = ДокОст.Ссылка;
    НаборЗаписей = РегистрыСведений.ЦеныНоменклатуры.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(НовыеДанные);
    Записывать = Ложь;
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Записывать = Истина; 
        НоменклНовЦена = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",СокрЛП(ВыборкаДетальныеЗаписи.Артикул)).Ссылка;
        Если НоменклНовЦена <> Справочники.Номенклатура.ПустаяСсылка() Тогда
            НоваяЗапись                  = НаборЗаписей.Добавить();
            НоваяЗапись.Период           = НовыеДанные.Дата;
            НоваяЗапись.Активность       = Истина;
            НоваяЗапись.ТипЦен           = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001").Ссылка;
            НоваяЗапись.Номенклатура     = НоменклНовЦена;
            Новаязапись.Валюта           = Справочники.Валюты.НайтиПоКоду("974").Ссылка;
            НоваяЗапись.Цена             = ВыборкаДетальныеЗаписи.Цена;
            Новаязапись.ЕдиницаИзмерения = НоменклНовЦена.ЕдиницаХраненияОстатков.Ссылка;
        КонецЕсли;
    КонецЦикла;
    Если Записывать = Истина Тогда
        НаборЗаписей.Записать();
    КонецЕсли;
КонецПроцедуры
   ugorchina
 
78 - 20.04.18 - 15:04
(54) Вы не правы!
   pasha_d
 
79 - 20.04.18 - 15:50
(78) если вы свернете методом ТЗ.Свернуть("Арт", "Цена");
то из Вашей таблицы из (1) останется 2 строчки:
123 75
321 115

как Вы хотите получить максимум по каждому артикулу после этого?  
после этого метода можно получить лишь 1 максимум по всей таблице артикулов - то есть 115.
Или я просто не понял того, что Вы хотите получить в итоге?
   ugorchina
 
80 - 20.04.18 - 16:29
(79) я уже все получил что касаемо последних сообщений я пытался доказать в (54) что он (она) не прав(а) !


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует