Имя: Пароль:
1C
1С v8
Как вычислить максимальное значение в ТЗ
0 ugorchina
 
19.04.18
11:20
Добрый день!

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

Арт | Цена

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

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

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

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

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

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

    ЗапросМакМин = Новый Запрос;
    ЗапросМакМин.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросМакМин.Текст = "ВЫБРАТЬ
                         |  РабТаблица._ПолеМакс КАК Макс,
                         |  РабТаблица._ПолеМин КАК Мин
                         |ПОМЕСТИТЬ РабочаяТаблица
                         |ИЗ
                         |  &РабТаблица КАК РабТаблица
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |ВЫБРАТЬ
                         |  МАКСИМУМ(РабочаяТаблица.Макс) КАК Макс,
                         |  МИНИМУМ(РабочаяТаблица.Мин) КАК Мин
                         |ИЗ
                         |  РабочаяТаблица КАК РабочаяТаблица
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |УНИЧТОЖИТЬ РабочаяТаблица";

    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМакс" , ПолеМакс);
    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМин" , ПолеМин);
    ЗапросМакМин.УстановитьПараметр("РабТаблица",  тзДанные);
    РезМаксМин = ЗапросМакМин.Выполнить().Выгрузить();

    Результат["Макс"]= РезМаксМин[0].Макс;
    Результат["Мин"] = РезМаксМин[0].Мин;

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

    ЗапросМакМин = Новый Запрос;
    ЗапросМакМин.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    ЗапросМакМин.Текст = "ВЫБРАТЬ
                         |  РабТаблица._ПолеМакс КАК Макс,
                         |  РабТаблица._ПолеМин КАК Мин
                         |ПОМЕСТИТЬ РабочаяТаблица
                         |ИЗ
                         |  &РабТаблица КАК РабТаблица
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |ВЫБРАТЬ
                         |  МАКСИМУМ(РабочаяТаблица.Макс) КАК Макс,
                         |  МИНИМУМ(РабочаяТаблица.Мин) КАК Мин
                         |ИЗ
                         |  РабочаяТаблица КАК РабочаяТаблица
                         |;
                         |
                         |////////////////////////////////////////////////////////////////////////////////
                         |УНИЧТОЖИТЬ РабочаяТаблица";

    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМакс" , ПолеМакс);
    ЗапросМакМин.Текст = СтрЗаменить(ЗапросМакМин.Текст, "_ПолеМин" , ПолеМин);
    ЗапросМакМин.УстановитьПараметр("РабТаблица",  тзДанные);
    РезМаксМин = ЗапросМакМин.Выполнить().Выгрузить();

    Результат["Макс"]= РезМаксМин[0].Макс;
    Результат["Мин"] = РезМаксМин[0].Мин;

    Возврат Результат;

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

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


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

СГРУППИРОВАТЬ ПО
    ВремТЗ.Арт
24 ugorchina
 
19.04.18
11:33
(21)с чего Вы взяли?
25 ugorchina
 
19.04.18
11:33
(230 спасибо! добрый человек!
26 ugorchina
 
19.04.18
11:35
потом запрос циклом перебирать верно?
27 PLUT
 
19.04.18
11:36
(26) можно в ТЗ выгрузить

ТЗ = Запрос.Выполнить().Выгрузить();
28 Вафель
 
19.04.18
11:37
а можно построителем запроса, он умеет напрямую из тз читать без обращения к серверу субд
29 ugorchina
 
19.04.18
11:41
(28) построителем запроса Вы имели в виду конструктором? я плохо еще знаю 1с 8
30 Вафель
 
19.04.18
11:42

Построитель = Новый ПостроительЗапроса;
Построитель.ИсточникДанных = Новый ИсточникДанных(ТЗ)
...
31 ugorchina
 
19.04.18
11:42
(23) погодите а это не дополнение к моему а новый запрос?
32 МихаилМ
 
19.04.18
11:43
за запрос надо увольнять за профнепригодность.

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

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

а алгоритм без полного перебора прост: копию тз, добавить поле счетчик, заполнить поле 1, свернуть в поле счетчик будет кол-во записей. тз сортировать , выбирать последние записи в группировке
33 ugorchina
 
19.04.18
11:45
так верно?

      //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ВремТЗ.Арт КАК Арт,
        |    МАКСИМУМ(ВремТЗ.Цена) КАК Цена
        |ИЗ
        |    ВремТЗ КАК ВремТЗ
        |
        |СГРУППИРОВАТЬ ПО
        |    ВремТЗ.Арт";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        // Вставить обработку выборки ВыборкаДетальныеЗаписи
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
34 Вафель
 
19.04.18
11:46
(32) мне кажется одинарный перебор будет быстрее сортирвоки и свертки
35 ugorchina
 
19.04.18
11:46
(32) если я пользую свернуть для ТЗ по артикулу

разве не не сложат все цифры цены?
36 ugorchina
 
19.04.18
11:47
(27) а для чего мне помещать то? мне надо регистр после этого записать эти данные! помещу я в еще одну ТЗ после ее всеравно перебирать НЕ?
37 МихаилМ
 
19.04.18
12:00
(35) цену не нужно сворачивать. нужно сворачивать поле счетчик, чтобы узнать кол-во записей в группировке.
38 ugorchina
 
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
39 ugorchina
 
19.04.18
12:02
(38) шо не так то?
40 Zmich
 
19.04.18
12:02
(38) ИЗ &ТЗЦеныТоваров1 + Запрос.УстановитьПараметр
41 ugorchina
 
19.04.18
12:04
(40) до РезультатЗапроса = Запрос.Выполнить();
или после?
42 ugorchina
 
19.04.18
12:05
(40) так верно?

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

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

по причине:
Содержимое объекта данных может быть выбрано только во временную таблицу
45 МихаилМ
 
19.04.18
12:10
(34) сортировка все равно будет. без сортировки и одной колонки можно с соответствием. все зависит от кол-ва строк и колва группировок
46 Zmich
 
19.04.18
12:12
(44).
"ВЫБРАТЬ
    |    ТЗЦеныТоваров1.Артикул КАК Артикул,
    |    ТЗЦеныТоваров1.Цена КАК Цена
    |ПОМЕСТИТЬ ТЗ
    |ИЗ
    |    &ТЗЦеныТоваров1 КАК ТЗЦеныТоваров1;
    |
    |ВЫБРАТЬ
    |    ТЗ.Артикул КАК Артикул,
    |    МАКСИМУМ(ТЗ.Цена) КАК Цена
    |ИЗ
    |    ТЗ
    |СГРУППИРОВАТЬ ПО
    |    ТЗ.Артикул";
47 Zmich
 
19.04.18
12:13
(44) + И тип поля Артикул в таблице значений тебе нужно явно описать.
48 ugorchina
 
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);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Арт = ВыборкаДетальныеЗаписи.Артикул;
        Цен = ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
49 Zmich
 
19.04.18
12:24
(48). 123 - не Строка, "123" - Строка
50 PLUT
 
19.04.18
12:28
+(49) варианты:
""+123;
"123";
Строка(123);
51 hhhh
 
19.04.18
12:29
(48) как-то так

ТЗЦеныТоваров1.Колонки.Добавить("Артикул", ОписаниеТипаСтрока);
52 hhhh
 
19.04.18
12:30
(50) по идее  СтрЦены.Артикул = 123; тоже правильно. преобразуется ведь
53 ugorchina
 
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);
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Арт = ВыборкаДетальныеЗаписи.Артикул;
        Цен = ВыборкаДетальныеЗаписи.Цена;
    КонецЦикла;
    
    //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
54 pasha_d
 
19.04.18
13:42
(24) с того, что если вы сгруппируете вашу ТЗ по артикулу, то максимальную цену вы уже не увидите, т.к. строки просуммируются и свернутся. Почитайте что-нибудь на досуге по 1С прежде чем такие вопросы задавать.
55 ugorchina
 
20.04.18
11:16
(54) ну так у меня то все получилось! при пользовании свернуть по артикулу да у нас цена суммируется но при группировке мы получаем сгруппированный тот же список по артикулу где и вычисляем самую максимальную с чего вы взяли что они при группировке суммируются?
56 ugorchina
 
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) Прикольно
58 catena
 
20.04.18
11:28
(56)Бред. Разберитесь в отличиях СГРППИРОВАТЬ и ИТОГИ.
59 pasha_d
 
20.04.18
12:23
(56) Класс, чо
60 Zmich
 
20.04.18
12:34
(56). Ерунда какая-то. Код из (53) выдаст только записи с максимальной ценой по каждому артикулу (по которому и сгруппировали). Остальные записи проигнорируются. И вообще не понял, кстати, (54) - с чего там будет суммирование? Если бы функция СУММА(Цена) использовалась вместо МАКСИМУМ(Цена) - тогда бы и просуммировалась цена. Но не в этом случае.
61 ugorchina
 
20.04.18
14:17
(60) почему ерунда?
я понимаю что в коде мы работаем в запросе и он сразу выдает по арт максимум цены НО я писал в (56) данные до Функции мксимум()
62 ugorchina
 
20.04.18
14:18
+(61) (56) это не результат моего зарпоса а результат только части его!
63 ugorchina
 
20.04.18
14:20
+(62)

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

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

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

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

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

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

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