Имя: Пароль:
1C
1С v8
Запросы в консоль запросов
🠗 (длинная ветка 19.02.2014 06:23)
, ,
0 kotokent
 
12.02.14
06:37
В консоли запросов нужно построить таблицу оборотов по Регистру "Товары организации",для определенной организации... Запрос должен быть сгруппирован по номенклатуре с подсчетом итогов по группировке и общие итоги... Добавить максимальный, минимальный остаток по номенклатуре и количество различных номенклатур!?!?!
И Это надо без условия ГДЕ сделать!!!
Вот запрос, не пойму как через параметры виртуальных таблиц это делать???

ВЫБРАТЬ
    ТоварыОрганизаций.Период КАК Период,
    ТоварыОрганизацийОстаткиИОбороты.Организация,
    ТоварыОрганизацийОстаткиИОбороты.Номенклатура,
    КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ТоварыОрганизаций.Количество) КАК ОстаткиКоличествоРазличных,
    МАКСИМУМ(ТоварыОрганизаций.Количество) КАК ОстаткиКоличествоМакс,
    МИНИМУМ(ТоварыОрганизаций.Количество) КАК ОстаткиКоличествоМин
ИЗ
    РегистрНакопления.ТоварыОрганизаций КАК ТоварыОрганизаций
        ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты КАК ТоварыОрганизацийОстаткиИОбороты
        ПО ТоварыОрганизаций.Организация = ТоварыОрганизацийОстаткиИОбороты.Организация
ГДЕ
    ТоварыОрганизаций.Организация = &Организация
    И ТоварыОрганизаций.Период МЕЖДУ &ДатаНачала И &ДатаКонца

СГРУППИРОВАТЬ ПО
    ТоварыОрганизацийОстаткиИОбороты.Номенклатура,
    ТоварыОрганизаций.Период,
    ТоварыОрганизацийОстаткиИОбороты.Организация

УПОРЯДОЧИТЬ ПО
    Период
ИТОГИ ПО
    ОБЩИЕ
436 kotokent
 
18.02.14
13:30
(435) это да
437 kotokent
 
18.02.14
13:30
простенький
438 Wobland
 
18.02.14
13:35
его фамилия начинается на Р
439 kotokent
 
18.02.14
13:38
(438) я там не понял
440 Серго62
 
18.02.14
13:39
(437) такой пойдет?

ВЫБРАТЬ                         // выбираем из справочника номенклатуры
    Номенклатура.Код,
    Номенклатура.Наименование
ПОМЕСТИТЬ СписокНоменклатуры  // и помещаем все что выбрали во временную таблицу
ИЗ
    Справочник.Номенклатура КАК Номенклатура
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ   // выбираем все что есть во временной таблице
    СписокНоменклатуры.Код,
    СписокНоменклатуры.Наименование
ИЗ
    СписокНоменклатуры КАК СписокНоменклатуры
441 kotokent
 
18.02.14
13:39
(438) скажи, мне в основном запросе выводить теже поля что и во временой таблице?
442 Wobland
 
18.02.14
13:41
(440) предлагаю дополнить ГДЕ НЕ Номенклатура.ЭтоГруппа
443 Wobland
 
18.02.14
13:43
(441) платформа позволить тебе вывести те же или немного не те же или вовсе не те же
444 kotokent
 
18.02.14
13:44
(443) я сути не понимаю, зачем она нужна
445 Серго62
 
18.02.14
13:45
(442) Не возражаю.
446 Wobland
 
18.02.14
13:46
(444) и страница 410 от тебя это скрывает за туманом русских слов
447 kotokent
 
18.02.14
13:46
(446) практическое применение не понимаю
448 Серго62
 
18.02.14
13:51
(447) вот здесь написано: http://kb.mista.ru/article.php?id=628
449 kotokent
 
18.02.14
13:55
(448) т.е. основная таблица она как бы и не нужна... главное сделать все что необходимо в таблице значений и потом выбрать все(*) из временой таблицы
450 kotokent
 
18.02.14
13:56
правильно?
451 Wobland
 
18.02.14
13:57
каша, сплошная каша...
тебе дают возможность сложить что-нибудь в ВТ и применять потом по вкусу
452 kotokent
 
18.02.14
13:58
(451) все делаем во ВТ и потом из основного запроса берем из нее что нужно
453 kotokent
 
18.02.14
13:59
(452) так?
454 Серго62
 
18.02.14
13:59
(449) Это ты где такое вычитал? Можешь пояснить ход своих мыслей, как ты пришел к таким выводам?
455 kotokent
 
18.02.14
14:00
(454) в основном запросе только обращаемся к данным из временой таблицы
456 Wobland
 
18.02.14
14:02
(455) у тебя имеется возможность так делать, да
457 Серго62
 
18.02.14
14:02
(455) ну вообще то никто не запрещает в основном запросе и к другим таблицам обращаться
458 kotokent
 
18.02.14
14:02
(456) я анализирую то чно написано
459 Wobland
 
18.02.14
14:04
за километры постов, наконец, проникся этой необходимостью?
460 kotokent
 
18.02.14
14:06
(459) русским языком можно сказать что и зачем она нужна
461 kotokent
 
18.02.14
14:06
по басяцки
462 Wobland
 
18.02.14
14:06
кстати, после 500го поста ветка превратиться в длинную и начнёт тонуть
463 Wobland
 
18.02.14
14:06
(460) тебе дают возможность сложить что-нибудь в ВТ и применять потом по вкусу
тебе дают возможность сложить что-нибудь в ВТ и применять потом по вкусу
464 Серго62
 
18.02.14
14:06
(458) Когда закончишь анализ попробуй применить его результаты к своему запросу.
465 kotokent
 
18.02.14
14:09
(463) (464) а таблица значений - это у меня получается первый запрос
466 kotokent
 
18.02.14
14:09
?
467 Wobland
 
18.02.14
14:09
есть ещё одна ценная босяцкая мысль. запрос (точнее, секция ИЗ) работает _только_ с таблицами. одной из таких таблиц может быть временная
468 Wobland
 
18.02.14
14:09
(465) ТЗ - это двумерный массив ваще-т
469 kotokent
 
18.02.14
14:11
(468) (467) а несколько таблиц ВТ тоже можо сделать!!??
470 kotokent
 
18.02.14
14:11
и к ним обращаться
471 Серго62
 
18.02.14
14:12
(469) Ты не поверишь, можно!!!
472 Серго62
 
18.02.14
14:13
(470) их даже соединять между собой можно и с основными таблицами тоже можно
473 Wobland
 
18.02.14
14:15
(469) сам догадался? молодец какой
474 Серго62
 
18.02.14
14:16
+ (472) И даже из одной временной таблицы (а может и не одной) можно в другую ВТ данные выбрать. Круто, правда?
475 kotokent
 
18.02.14
14:20
я думаю
476 kotokent
 
18.02.14
14:21
как и что к чему
477 kotokent
 
18.02.14
14:21
и к стати, я сначала вообще про другое в этой ветке говорил, но дошел до этого
478 Wobland
 
18.02.14
14:22
(475) запиши, как это делается, до наступления ночи. забудешь потом
479 kotokent
 
18.02.14
14:24
(478) мож функцию с этой таблицей сделать, чтобы основную процедуру не загромождать
480 Wobland
 
18.02.14
14:25
святая корова! он знает про функции!
481 Wobland
 
18.02.14
14:25
я ведь я помню, как ты круглыми глазами на мою смотрел
482 kotokent
 
18.02.14
14:26
(481) не ври... ты не видел)))
483 Серго62
 
18.02.14
14:26
(479) мож сначала на бумаге (или в файле) ход решения задачи написать?
484 Wobland
 
18.02.14
14:27
не откажу себе в удовольствии немного поцитировать

это ты мне написал как надо?

у меня что, вообще не то?

а переменную "стр" надо где объявлять

ты мне скажи где переменную объявить и как к этим функциям теперь обращаться
485 kotokent
 
18.02.14
14:28
(484) прикольно
486 kotokent
 
18.02.14
14:28
(484) я теперь думаю как я результат буду выводить в текстовый файл
487 kotokent
 
18.02.14
14:29
табличный т.е.
488 kotokent
 
18.02.14
14:30
{Обработка.ОбработкаСТабличнойЧастью.Форма.Форма.Форма(19)}: Ошибка при вызове метода контекста (Выполнить)
    ТабличноеПоле1=Запрос.Выполнить().Выгрузить();
по причине:
{(4, 11)}: Временная таблица уже существует "ЦеныИОстатки"
ПОМЕСТИТЬ <<?>>ЦеныИОстатки


что за...?
489 Серго62
 
18.02.14
14:31
(486) Ты получил результат? Прими мои поздравления !!!
490 kotokent
 
18.02.14
14:33
(489) да... какой то хоть мне ошибка вышла, как удалить то ее... я все поудалял и теперь заново хочу начать
491 kotokent
 
18.02.14
14:41
как удалить то ее, чтобы я мог постоянно обращаться к ней
492 Серго62
 
18.02.14
14:42
(491) ты случайно не пытаешься в одном и том же запросе два раза поместить что-то в одну и ту же ВТ?
493 kotokent
 
18.02.14
14:43
(492) я удалил все, кроме моего основного запроса
494 kotokent
 
18.02.14
14:46
495 kotokent
 
18.02.14
14:58
ща нормальный пример нашел, мож пойму завтра что к чему
http://1cprofi.com/content/view/9/15/
496 Серго62
 
18.02.14
15:14
(495) Ты пытаешься повторно записать данные в существующую ВТ, поэтому возникает ошибка. У тебя же на картинке, зелеными буквами что то написано про удаление ВТ.
Попробуй перенести удаление ВТ в конец своей процедуры.
497 Wobland
 
18.02.14
15:53
всё просто. товарищ соврамши. ошибка не может возникнуть при таком коде
498 Wobland
 
18.02.14
15:54
(497) и этот товарищ - я. два раза выполняется запрос
499 Wobland
 
18.02.14
15:55
ну сделайте уже (500) кто-нибудь, и пусть эта ветка уйдёт в валгаллу
500 kotokent
 
19.02.14
06:07
500
501 kotokent
 
19.02.14
06:12
Процедура КнопкаВыполнитьНажатие(Кнопка)
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
        
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладах.Номенклатура,
        |    ТоварыНаСкладах.Количество
        |ПОМЕСТИТЬ ЦеныИОстатки
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах";

    Результат = Запрос.Выполнить();
    
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст = "";
    
    ТабличноеПоле1=Запрос.Выполнить().Выгрузить();
    ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
    
    Запрос3 = Новый Запрос;
    Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
    ТекстЗапроса = "
    | УНИЧТОЖИТЬ ЦеныИОстатки
    |";
    
    Запрос3.Текст = ТекстЗапроса;
    Запрос3.Выполнить();
    
КонецПроцедуры


такая же ошибка
502 Wobland
 
19.02.14
06:17
с ошибкой согласен
503 kotokent
 
19.02.14
06:23
(502) где команду ставить
504 kotokent
 
19.02.14
06:26
// Как удалить Временную Таблицу
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
// (Менеджер ВТ создан, в нем уже есть временная таблица ИмяВременнойТаблицы)
ТекстЗапpoca = "
| УНИЧТОЖИТЬ ИмяВременнойТаблицы
|";
Запрос.Текст = ТекстЗапроса;
Запрос.Выполнить()


написано сделать так, я и делаю, но ошибка остается
505 Wobland
 
19.02.14
06:26
предлагаю понять причину возникновения ошибки
506 kotokent
 
19.02.14
06:27
(505) ВТ есть в менеджере... но почему она не удаляется
507 kotokent
 
19.02.14
06:27
может менеджер ВТ закрыть?
508 kotokent
 
19.02.14
06:28
Процедура КнопкаВыполнитьНажатие(Кнопка)
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
        
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ТоварыНаСкладах.Номенклатура,
        |    ТоварыНаСкладах.Количество
        |ПОМЕСТИТЬ ЦеныИОстатки
        |ИЗ
        |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах";

    Результат = Запрос.Выполнить();
    
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    ТекстЗапроса = "
    | УНИЧТОЖИТЬ ЦеныИОстатки";
    Запрос2.Текст = ТекстЗапроса;
    Запрос2.Выполнить();
    
    ТабличноеПоле1=Запрос.Выполнить().Выгрузить();
    ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
    //
    //Запрос3 = Новый Запрос;
    //Запрос3.МенеджерВременныхТаблиц = МенеджерВТ;
    //ТекстЗапроса = "
    //| УНИЧТОЖИТЬ ЦеныИОстатки
    //|";
    //
    //Запрос3.Текст = ТекстЗапроса;
    //Запрос3.Выполнить();
    
КонецПроцедуры
509 kotokent
 
19.02.14
06:29
написал так, теперь он у меня в 1С выводит только "количество", ошибка пропала
510 Wobland
 
19.02.14
06:32
неплохо. героически придумывал себе ВТ, героически её удалял, героически создал ещё раз, и теперь не знает, что с этим делать
511 kotokent
 
19.02.14
06:35
(510) у меня есть план: 1 запрос - вибираем поля "номенклатура" и "Количество"
2 запрос - ВТ с полями "МаксЦена" и "Остаток"
3 запрос - ВТ объединение всего...
только вопрос в том как это сделать
512 Wobland
 
19.02.14
06:36
ёмаё, как я долго этого ждал - план
513 Wobland
 
19.02.14
06:37
делай шаг первый. вибири пару полей
514 kotokent
 
19.02.14
06:37
(513) ща
515 kotokent
 
19.02.14
06:41
1 запрос

МенеджерВТ = Новый МенеджерВременныхТаблиц;
    
    Запрос1 = Новый Запрос;
    Запрос1.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос1.Текст = "ВЫБРАТЬ
                    |    ТоварыНаСкладах.Номенклатура,
                    |    ТоварыНаСкладах.Количество
                    |ПОМЕСТИТЬ ВТНоменклатура
                    |ИЗ
                    |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах";
    Запрос1.Выполнить();
516 Wobland
 
19.02.14
06:44
действительно, два поля есть. ждём второй запрос
517 kotokent
 
19.02.14
06:44
2 запрос


Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст = "ВЫБРАТЬ
                    |    ЦеныНоменклатуры.Цена,
                    |    ТоварыНаСкладахОстатки.КоличествоОстаток
                    |ПОМЕСТИТЬ ЦенаСОстаток
                    |ИЗ
                    |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                    |        ПО ЦеныНоменклатуры.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура";
    Запрос2.Выполнить();
518 kotokent
 
19.02.14
06:44
Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст = "ВЫБРАТЬ
                    |    ЦеныНоменклатуры.Цена,
                    |    ТоварыНаСкладахОстатки.КоличествоОстаток
                    |ПОМЕСТИТЬ ЦенаСОстаток
                    |ИЗ
                    |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                    |        ПО ЦеныНоменклатуры.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура";
    Запрос2.Выполнить();
519 Wobland
 
19.02.14
06:45
прикольная бяка в конце будет. продолжай
520 kotokent
 
19.02.14
06:45
только вопрос... как они друг друга видеть будут по номенклатуре
521 kotokent
 
19.02.14
06:53
ЗапросИтог = Новый Запрос;
    ЗапросИтог.МенеджерВременныхТаблиц = МенеджерВТ;
    ЗапросИтог.Текст = "ВЫБРАТЬ
                    |    ТоварыНаСкладах.Номенклатура,
                    |    ТоварыНаСкладах.Количество
                    |ИЗ
                    |    ВТНоменклатура КАК ВТНоменклатура
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |    ЦеныНоменклатуры.Цена,
                    |    ТоварыНаСкладахОстатки.КоличествоОстаток
                    |ИЗ ЦенаСОстаток КАК ЦенаСОстаток";
                    
    ЗапросИтог.Выполнить();
522 kotokent
 
19.02.14
06:54
попробуем
523 kotokent
 
19.02.14
06:56
{Обработка.ОбработкаСТабличнойЧастью.Форма.Форма.Форма(41)}: Ошибка при вызове метода контекста (Выполнить)
    ЗапросИтог.Выполнить();
по причине:
{(2, 2)}: Поле не найдено "ТоварыНаСкладах.Номенклатура"
<<?>>ТоварыНаСкладах.Номенклатура,
524 kotokent
 
19.02.14
06:57
может потому что я руками писал
525 Wobland
 
19.02.14
07:00
там не поле не найдено, а таблица
526 kotokent
 
19.02.14
07:02
(525) это что тогда не так, вроде же поместил
527 Wobland
 
19.02.14
07:03
покажи мне таблицу ТоварыНаСкладах в ЗапросИтог
528 kotokent
 
19.02.14
07:04
(527) как
529 kotokent
 
19.02.14
07:05
в смысле
530 Wobland
 
19.02.14
07:06
такие серьёзные проблемы с выражением собственных мыслей7
531 kotokent
 
19.02.14
07:08
(530) ну я не понял о чем ты
532 kotokent
 
19.02.14
07:08
Процедура КнопкаВыполнитьНажатие(Кнопка)
    МенеджерВТ = Новый МенеджерВременныхТаблиц;
    
    Запрос1 = Новый Запрос;
    Запрос1.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос1.Текст = "ВЫБРАТЬ
                    |    ТоварыНаСкладах.Номенклатура,
                    |    ТоварыНаСкладах.Количество
                    |ПОМЕСТИТЬ ВТНоменклатура
                    |ИЗ
                    |    РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах";
    Запрос1.Выполнить();
    
    Запрос2 = Новый Запрос;
    Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
    Запрос2.Текст = "ВЫБРАТЬ
                    |    ЦеныНоменклатуры.Цена,
                    |    ТоварыНаСкладахОстатки.КоличествоОстаток
                    |ПОМЕСТИТЬ ЦенаСОстаток
                    |ИЗ
                    |    РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры
                    |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки
                    |        ПО ЦеныНоменклатуры.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура";
    Запрос2.Выполнить();
    
    ЗапросИтог = Новый Запрос;
    ЗапросИтог.МенеджерВременныхТаблиц = МенеджерВТ;
    ЗапросИтог.Текст = "ВЫБРАТЬ
                    |    ТоварыНаСкладах.Номенклатура,
                    |    ТоварыНаСкладах.Количество
                    |ИЗ
                    |    ВТНоменклатура КАК ВТНоменклатура
                    |
                    |ОБЪЕДИНИТЬ ВСЕ
                    |
                    |ВЫБРАТЬ
                    |    ЦеныНоменклатуры.Цена,
                    |    ТоварыНаСкладахОстатки.КоличествоОстаток
                    |ИЗ ЦенаСОстаток КАК ЦенаСОстаток";
                    
    ЗапросИтог.Выполнить();
    
    ТабличноеПоле1=ЗапросИтог.Выполнить().Выгрузить();
    ЭлементыФормы.ТабличноеПоле1.СоздатьКолонки();
    
КонецПроцедуры
533 kotokent
 
19.02.14
07:14
?
534 kotokent
 
19.02.14
07:28
я в тупике
535 Wobland
 
19.02.14
07:34
ты вчера думать начал. поступай на философский