Версия для печати темы (https://pro1c.org.ua/index.php?s=85827e68b604cdd8cb8598906132bd60&showtopic=36190)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Помогите розобратся с запросом и его данными

Автор: leo10k10 27.03.17, 12:31

Подскажите что не так пишу или делаю.
Есть запрос

Запрос_1 = СоздатьОбъект("Запрос");
    ТекстЗапроса_1 =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ПриходнаяНакладная = Документ.ПриходнаяНакладная.ТекущийДокумент;
    |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ;
    |ПлотностьНа15Град = Документ.ПриходнаяНакладная.ПлотностьНа15Град;
    |ЛитрОтПлотности = Документ.ПриходнаяНакладная.ЛитрОтПлотности;
    |Группировка День;
    |Группировка ПриходнаяНакладная;
    |Группировка ТМЦ;
    |Группировка ПлотностьНа15Град;
    |Группировка ЛитрОтПлотности;
    |"//}}ЗАПРОС


создаю таблицу значений для заполнения ее данными запроса

Список_Прих = СоздатьОбъект("ТаблицаЗначений");
    Список_Прих.НоваяКолонка("День", "Дата");
    Список_Прих.НоваяКолонка("НомПрихНакл", "Строка");
    Список_Прих.НоваяКолонка("ИмяПрихТовара", "Строка");
    Список_Прих.НоваяКолонка("ПлотнПрихТовара", "Число");
    Список_Прих.НоваяКолонка("ПрихАкцизЛитр", "Число");


и заполняю ее на цикле последеней групировки

Пока Запрос_1.Группировка(5) = 1 Цикл
                    Сообщить (Запрос_1.ЛитрОтПлотности);
                    НомПрих = НомПрих + 1;
                    Список_Прих.НоваяСтрока(НомПрих);
                    Список_Прих.День = Запрос_1.День;
                                    Список_Прих.НомПрихНакл = Запрос_1.ПриходнаяНакладная;
                                    Список_Прих.ИмяПрихТовара = Запрос_1.ТМЦ;
                                    Список_Прих.ПлотнПрихТовара = Запрос_1.ПлотностьНа15Град;
                                    Список_Прих.ПрихАкцизЛитр = Запрос_1.ЛитрОтПлотности;
                КонецЦикла;


в результате неверная информация в полях таблици Список_Прих что не так не пойму

Автор: Acid 27.03.17, 12:56

leo10k10 @ Сегодня, 12:31 * ,
Таблицу создавать не нужно. Надо выгрузить результат выполнения запроса в таблицу. Список_Прих = Результат.Выгрузить();

Автор: leo10k10 27.03.17, 14:10

Цитата(Acid @ 27.03.17, 12:56) *
Таблицу создавать не нужно. Надо выгрузить результат выполнения запроса в таблицу. Список_Прих = Результат.Выгрузить();

Вот что получилось

Список_Прих = Результат<<?>>.Таб_1.Выгрузить();
{Отчет.новый3.Форма.Модуль(201)}: Переменная не определена (Результат)
При проверке модуля обнаружены синтаксические ошибки!

или так

Список_Прих = Результат<<?>>.Выгрузить();
{Отчет.новый3.Форма.Модуль(201)}: Переменная не определена (Результат)
При проверке модуля обнаружены синтаксические ошибки!

Автор: daveal 27.03.17, 14:36

Таб_1 = СоздатьОбъект("ТаблицаЗначений");
Запрос_1.Выгрузить(Таб_1,0,0);

Автор: Acid 27.03.17, 15:25

leo10k10 @ Сегодня, 14:10 * ,
Не правильно. Пример есть в Синтакс-Помощнике

Автор: leo10k10 27.03.17, 16:56

Цитата(Acid @ 27.03.17, 15:25) *
Не правильно. Пример есть в Синтакс-Помощнике


Заглянул я в Синтаксис там чорным по белому написано что это <ИдентификаторРегистра> а у меня работа с Документами да и примера там ни какого нету

Вот полный текс кода
//*******************************************
// Процедура генерации запроса Сформировать.
//
Процедура Сформировать()
    Перем Запрос_1, ТекстЗапроса_1, Таб_1, Список_Прих, НомПрих;
    //Создание объекта типа Запрос
    Запрос_1 = СоздатьОбъект("Запрос");
    ТекстЗапроса_1 =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |ПриходнаяНакладная = Документ.ПриходнаяНакладная.ТекущийДокумент;
    |ТМЦ = Документ.ПриходнаяНакладная.ТМЦ;
    |ПлотностьНа15Град = Документ.ПриходнаяНакладная.ПлотностьНа15Град;
    |ЛитрОтПлотности = Документ.ПриходнаяНакладная.ЛитрОтПлотности;
    |Группировка День;
    |Группировка ПриходнаяНакладная;
    |Группировка ТМЦ;
    |Группировка ПлотностьНа15Град;
    |Группировка ЛитрОтПлотности;
    |"//}}ЗАПРОС
;
    // Если ошибка в запросе, то выход из процедуры
    Если Запрос_1.Выполнить(ТекстЗапроса_1) = 0 Тогда
        Возврат;
    КонецЕсли;

    // Подготовка к заполнению выходных форм данными запроса
    Таб_1 = СоздатьОбъект("Таблица");
    Список_Прих = СоздатьОбъект("ТаблицаЗначений");
    Список_Прих.НоваяКолонка("День", "Дата");
    Список_Прих.НоваяКолонка("НомПрихНакл", "Строка");
    Список_Прих.НоваяКолонка("ИмяПрихТовара", "Строка");
    Список_Прих.НоваяКолонка("ПлотнПрихТовара", "Число");
    Список_Прих.НоваяКолонка("ПрихАкцизЛитр", "Число");
    НомПрих = 0;
    Таб_1.ИсходнаяТаблица("Сформировать");
    // Заполнение полей "Заголовок"
    Таб_1.ВывестиСекцию("Заголовок");
    Состояние("Заполнение выходной таблицы...");
    Таб_1.Опции(0, 0, Таб_1.ВысотаТаблицы(), 0);
    Пока Запрос_1.Группировка(1) = 1 Цикл
        Сообщить (Запрос_1.День);                           // результат == 04.01.2017
        Пока Запрос_1.Группировка(2) = 1 Цикл
            Сообщить (Запрос_1.ПриходнаяНакладная);         // результат == Прих. накл. ПН-0000001 (04.01.2017)
            Пока Запрос_1.Группировка(3) = 1 Цикл
                Сообщить (Запрос_1.ТМЦ);                    // результат == Паливо дизельне ДТ-Л-К5 сорт С ( УКТЕД 2710194300)
                Пока Запрос_1.Группировка(4) = 1 Цикл
                    Сообщить (Запрос_1.ПлотностьНа15Град);  // результат == 0.7625
                    Пока Запрос_1.Группировка(5) = 1 Цикл
                        Сообщить (Запрос_1.ЛитрОтПлотности);// результат == 36254
                        НомПрих = НомПрих + 1;
                        Список_Прих.НоваяСтрока(НомПрих);
                        Список_Прих.День = Запрос_1.День;
                        Список_Прих.НомПрихНакл = Запрос_1.ПриходнаяНакладная;
                        Список_Прих.ИмяПрихТовара = Запрос_1.ТМЦ;
                        Список_Прих.ПлотнПрихТовара = Запрос_1.ПлотностьНа15Град;
                        Список_Прих.ПрихАкцизЛитр = Запрос_1.ЛитрОтПлотности;
                    КонецЦикла;
                КонецЦикла;
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    
    
    // Заполнение строк поля "ПриходныйАКЦЫЗ"
    Список_Прих.ВыбратьСтроки();
    Пока Список_Прих.ПолучитьСтроку() = 1 Цикл
       Таб_1.ВывестиСекцию("ЛитрОтПлотности");
    КонецЦикла;
    
    // Заполнение полей через Список_Прих
    Список_Прих.ВыбратьСтроки();
    Пока Список_Прих.ПолучитьСтроку() = 1 Цикл
         Сообщить(Шаблон("[Список_Прих.День = Запрос_1.День] х [Список_Прих.НомПрихНаклра] х [Список_Прих.ИмяПрихТовара] х [Список_Прих.ПлотнПрихТовара]"));
    
    КонецЦикла;    // получил результат:       04.01.2017       Х             49943           Х            148       219         х            0.7625                    
                                                                
        
    // Вывод заполненной формы
    Таб_1.ТолькоПросмотр(1);
    Таб_1.Показать("Сформировать", "");
КонецПроцедуры


смысл в том что результат запроса мне надо записать в "Список_Прих" и дальше проводить ряд нонипуляций

leo10k10 @ Сегодня, 16:54 * ,
а я только дату и последние числовые значения нв нормальном виде имею а в остольном бред может это изза строковой переменной

Автор: daveal 28.03.17, 8:06

Список_Прих.НомПрихНакл = Запрос_1.ПриходнаяНакладная.НомерДок;
Список_Прих.ИмяПрихТовара = Запрос_1.ТМЦ.Наименование;

Автор: leo10k10 28.03.17, 9:43

Цитата(daveal @ 28.03.17, 8:06) *
Список_Прих.НомПрихНакл = Запрос_1.ПриходнаяНакладная.НомерДок;
Список_Прих.ИмяПрихТовара = Запрос_1.ТМЦ.Наименование;


Приятно иметь дело с специолистом который может розобратся в поставленом вопросе и дать дельный совет.
Спосибо за Ваше дрогоценное время потраченое на меня и мою проблему, но блогодаря Вам она решена 12201689.gif

leo10k10 @ Сегодня, 9:34 * ,
Я дико извеняюсь не хочу наглеть но хочу посоветоватца как лутше теперь перебрать полученый список чтобы просумировать поле "Список_Прих.ПрихАкцизЛитр" относительно одиного и товоже товара наименование когорого в поле "Список_Прих.ИмяПрихТовара" с учетом того что плотность этого товара указаная в поле "Список_Прих.ПлотнПрихТовара" должна быть одинаковой.

Автор: daveal 28.03.17, 9:51

Список_Прих.Свурнуть("День,НомПрихНакл,ИмяПрихТовара,ПлотнПрихТовара","ПрихАкцизЛитр");

Можно было это еще в запросе сделать "Функция СуммаЛитрОтПлотности = Сумма(ЛитрОтПлотности);". Только тогда нужно убрать группировку по ЛитрОтПлотности

Автор: nysysimara 28.03.17, 12:56

leo10k10,
можно вопрос:
почему вы не воспользовались этим
daveal @ Вчера, 14:36 * ,
советом?

Автор: leo10k10 28.03.17, 15:05

Цитата(nysysimara @ 28.03.17, 12:56) *
можно вопрос:
почему вы не воспользовались этим
daveal @ Вчера, 14:36 ,
советом?


Я до сих пор не понимаю такого маневра соотвецтвенно и не воспользовался.
Р.С. я не волшебник я только учусь

Цитата(daveal @ 28.03.17, 9:51) *
Список_Прих.Свурнуть("День,НомПрихНакл,ИмяПрихТовара,ПлотнПрихТовара","ПрихАкцизЛитр");

Можно было это еще в запросе сделать "Функция СуммаЛитрОтПлотности = Сумма(ЛитрОтПлотности);". Только тогда нужно убрать группировку по ЛитрОтПлотности



Может я неправильно выразился или чегото не понимаю но на мой взгляд так не пойдет видь мне не просто сумма нужна.
Сечас попробую обяснить на примере: допустим вчера мне на приход пришло два вида топлива ДТ и Бензин95 соотвецтвенно в поле "ИмяПрихТовара" два разных имени и у каждого имени может быть своя плотность указаная в поле "ПлотнПрихТовара" например ДТ было двух видов качества с плотностю 0,785 и 0,825 по сути имеем три строки, сегодня на приход мне прошло еще два вида ДТ с плотностями 0,776 и 0,825 тоесть еще две строчки подбивая итог я должен получить 4 строки и сумма будет лиш по одному виду топлива а именно ДТ с плотностью 0,825.

я пока это все писал думаю может стоит свертку произвести таким образом:
Список_Прих.Свурнуть("ИмяПрихТовара,ПлотнПрихТовара","ПрихАкцизЛитр");


Автор: daveal 28.03.17, 15:28

Суммирование в запросе происходит в разрезе объявленных группировок. Если сумма нужна только по плотности и ТМЦ, так и оставьте в запросе только эти группировки.

Автор: leo10k10 28.03.17, 16:21

Цитата(daveal @ 28.03.17, 15:28) *
Суммирование в запросе происходит в разрезе объявленных группировок. Если сумма нужна только по плотности и ТМЦ, так и оставьте в запросе только эти группировки.

да так и есть спс

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua