Имя: Пароль:
1C
1C 7.7
v7: Отчет о движении товаров выводит группы
,
0 vadim777
 
03.07.16
14:27
ТекстЗапроса =
        "//{{ЗАПРОС(ТоварыЗаПериоды)
        |ПЕРИОД С Дата1 По Дата2;
        |Склад=Регистр.Остатки.Склад;
        |Товар=Регистр.Остатки.Номенклатура;
        |Док=Регистр.Остатки.ТекущийДокумент;
        |Кол=Регистр.Остатки.Остаток;
        |Функция НачКол  = НачОст(Кол);
        |Функция КонКол  = КонОст(Кол);
        |Функция ПрихКол = Приход(Кол);
        |Функция РасхКол = Расход(Кол);
        |Группировка Товар Без Групп;
        |";
...
Пока Запрос.Группировка("Товар") = 1 Цикл
        НаимТовара = Запрос.Товар.Наименование;
        ПечНачКол=Запрос.НачКол;
        ПечПрихКол=Запрос.ПрихКол;
        ПечРасхКол=Запрос.РасхКол;
        ПечКонКол=Запрос.КонКол;
        Если Запрос.Товар.ЭтоГруппа()=1 Тогда
            Отступы = Лев("                     ", Запрос.Товар.Уровень()*2);
            Т.ВывестиСекцию("Группа");
            Продолжить;
        Иначе
            Т.ВывестиСекцию("Товар");
        КонецЕсли
КонецЦикла;
...
На выходе:
Браво 15шт    0    2    0    2
Браво+ 60шт    0    -3    0    -3
    Бюбхен    0    -1    0    -1
детская щетка    0    -3    0    -3
Детский жемчуг 50мл    0    1    0    1
для детей/мам 120шт    0    4    0    4
    зубн/п    0    4    0    4
    зубн/щ    0    1    0    1
    Карапуз    0    -1    0    -1
    крем    0    2    0    2
крем от ушибов и ссадин    0    -1    0    -1
    Ласковая мама    0    -2    0    -2
Львенок черепаха    0    1    0    1
масло дет с алоэ и чередой 0+    0    -2    0    -2
масло подсол/карите    0    -1    0    -1
Мир детсва Крем п\подг    0    1    0    1
    мыло    0    -1    0    -1
мыло антибакт с подорожн и масл чайн дер    0    -1    0    -1
мыло ром    0    -1    0    -1

В чем причина?
1 Chameleon1980
 
03.07.16
14:36
чет я не понял, а зачем:

Если Запрос.Товар.ЭтоГруппа()=1 Тогда

если в тексте запроса -
Группировка по номенклатуре Без групп

организуйте что нить типа испытательного стенда

типа обработки на которой будет ТЗ и туда будет выгружаться результат вашего запроса. + по клику на таблице сделайте открытие элемента текущей ячейки. типа так.

я в свое время всегда использовал обработку типа ПросмотрТСЗ. которая через параметр принимала СЗ, ТЗ или запрос и показывала его на форме.

вот и отладите запрос - посмотрите результат.
2 Chameleon1980
 
03.07.16
14:39
вот это в глобальный модуль:

Процедура глПросмотрТСЗ(Знач ТСЗ, НазваниеТСЗ="") Экспорт
    Путь="" + КаталогИБ() + "ExtForms\ПросмотрТСЗ.ert";
    Если ФС.СуществуетФайл(Путь)=1 Тогда
        Если (ТипЗначенияСтр(ТСЗ)="ТаблицаЗначений") или
        (ТипЗначенияСтр(ТСЗ)="СписокЗначений") Тогда
            Параметры=СоздатьОбъект("СписокЗначений");
            Параметры.УдалитьВсе();
            Параметры.ДобавитьЗначение(ТСЗ,"ТСЗ");
            Параметры.ДобавитьЗначение(НазваниеТСЗ,"НазваниеТСЗ");
            ОткрытьФорму("Отчет#",Параметры,Путь);
        ИначеЕсли ТипЗначенияСтр(ТСЗ)="Запрос" Тогда
            Параметры=СоздатьОбъект("СписокЗначений");
            Параметры.УдалитьВсе();
            _Т_=СоздатьОбъект("ТаблицаЗначений");
            ТСЗ.Выгрузить(_Т_);
            Параметры.ДобавитьЗначение(_Т_,"ТСЗ");
            Параметры.ДобавитьЗначение("Запрос: "+НазваниеТСЗ,"НазваниеТСЗ");
            ОткрытьФорму("Отчет#",Параметры,Путь);
        Иначе
            Сообщить("В процедуру глПросмотрТСЗ передана не ТЗ или СЗ с именем " + НазваниеТСЗ + "!!!");
            Сообщить(ТипЗначенияСтр(ТСЗ));
        КонецЕсли;
    Иначе
        //Сообщить("Отсутствует файл по пути " + Путь);
    КонецЕсли;
КонецПроцедуры // глПросмотрТСЗ
3 Chameleon1980
 
03.07.16
14:41
вот это в текст обработки
ExtForms\ПросмотрТСЗ.ert


//*****************************************************************************
Процедура ПриОткрытии()
    Парам=Форма.Параметр;
    Если ТипЗначенияСтр(Парам)<>"СписокЗначений" Тогда
        Возврат;
    КонецЕсли;
    ТСЗ=Парам.Получить("ТСЗ");
    Попытка
        Форма.Заголовок(Парам.Получить("НазваниеТСЗ"));
    Исключение
        ;
    КонецПопытки;
    //Если (ТипЗначенияСтр(Парам)<>"ТаблицаЗначений") И (ТипЗначенияСтр(Парам)<>"СписокЗначений") Тогда
    Если (ТипЗначенияСтр(ТСЗ)<>"ТаблицаЗначений") И (ТипЗначенияСтр(ТСЗ)<>"СписокЗначений") Тогда
        Возврат;
    КонецЕсли;
    ТЗ.Загрузить(ТСЗ);
КонецПроцедуры // ПриОткрытии
//*****************************************************************************
Процедура Печать()
    Если ТЗ.КоличествоСтрок()=0 Тогда
        Возврат;
    КонецЕсли;
    Если ТЗ.КоличествоКолонок()=0 Тогда
        Возврат;
    КонецЕсли;
    Таб=СоздатьОбъект("Таблица");
    
    Заголовок="";
    ТЗ.ПолучитьПараметрыКолонки(1,,,,Заголовок);
    Таб.ВывестиСекцию("Шапка|Начало");
    КоличествоСтрок=ТЗ.КоличествоСтрок();
    КоличествоКолонок=ТЗ.КоличествоКолонок();
    Для Н=1 По КоличествоКолонок Цикл
        ТЗ.ПолучитьПараметрыКолонки(Н,,,,Заголовок);
        Таб.ПрисоединитьСекцию("Шапка|Колонка");
    КонецЦикла;
    Для Х=1 По КоличествоСтрок Цикл
        Таб.ВывестиСекцию("Строка|Начало");
        Для У=1 По КоличествоКолонок Цикл
            Значение=ТЗ.ПолучитьЗначение(Х,У);
            Таб.ПрисоединитьСекцию("Строка|Колонка");
        КонецЦикла;
    КонецЦикла;
    Таб.ТолькоПросмотр(1);
    Таб.ПараметрыСтраницы(1,,,1,1,1,1,0,0,1);
    Таб.Опции(0,0,4,0);
    Таб.Показать("ТЗ");
КонецПроцедуры // Печать
//*****************************************************************************
//Т=СоздатьОбъект("ТаблицаЗначений");
//ТЗ.Выгрузить(Т);
//ОткрытьФорму("Отчет",Т,"d:\nick\1С\Отчеты\ПоказатьТЗ.ert");
//*****************************************************************************
Процедура ПоЩелчкуНаТаблице()
    ТекущаяСтрока=ТЗ.ТекущаяСтрока();
    ТекущаяКолонка=ТЗ.ТекущаяКолонка();
    Если (ТекущаяСтрока=0) ИЛИ (ТекущаяКолонка=0) Тогда
        Возврат;
    КонецЕсли;
    Значение=ТЗ.ПолучитьЗначение(ТекущаяСтрока,ТекущаяКолонка);
    Если (ТипЗначенияСтр(Значение)="Документ") ИЛИ (ТипЗначенияСтр(Значение)="Справочник")  Тогда
        ОткрытьФорму(Значение);
    ИначеЕсли (ТипЗначенияСтр(Значение)="ТаблицаЗначений") ИЛИ (ТипЗначенияСтр(Значение)="СписокЗначений") Тогда
        ОткрытьФорму("Обработка.ПоказатьТЗ#",Значение);
    Иначе
        Сообщить("Тип значения: "+ТипЗначенияСтр(Значение));
        Сообщить("Значение: "+Значение);
    КонецЕсли;
КонецПроцедуры // ПоЩелчкуНаТаблице
//*****************************************************************************
4 Chameleon1980
 
03.07.16
14:41
На форме обработки

ТЗ с именем ТЗ, кнопка печать, да закрыть
5 Chameleon1980
 
03.07.16
14:42
такое использовалось еще лет 15 назад
6 Chameleon1980
 
03.07.16
14:44
в чем-то другом у вас затык
7 vadim777
 
03.07.16
14:45
(1) Группировку Без Групп добавил для отладки, ее изначально не было. Когда увидел, что выводятся лишние группы в конце, решил посмотреть, что будет без групп. И вот получил то что получил.
А вывод через таблицу сейчас будут пробовать.
8 Это_mike
 
03.07.16
14:46
Мизда-лучший отладчик!©
9 vadim777
 
03.07.16
15:17
(7) Может в структуре регистра Остатки? Подобный отчет без выкрутасов работает в ТиС, где регистр ОстаткиТоваров:
Измерения:
Фирма
Товар
Склад

В это конфигурации регистр Остатки:
Измерения:
Склад
Номенклатура
Партия
Размер
ЦенаПродажи
10 Chameleon1980
 
03.07.16
15:30
какая конфа?
ТиС ?

кинь отчет
11 Chameleon1980
 
03.07.16
15:31
+(10) нетленка, я так понял
12 vadim777
 
03.07.16
15:32
(10) ТиС для Украины 7.70.028
Старый отчет, почти не изменялся чуть-ли не с первого релиза конфы.
13 Chameleon1980
 
03.07.16
15:33
запрос - то и тут фигня.

не знаю. может так для профилактики - индексы убить, ТиИ попробовать ну и подобное чтонить?
14 vadim777
 
03.07.16
15:44
(13) ТИИ сделал в первую очередь. Просмотрел содержимое регистра Остатки с помощью RegisterExplorer, в нем также Движения показывает группы.
Минутку, гляну в конфу...
Разработчик дебил блд, пихает в регистр не только номенклатуру, но и группы:
...
//чисто остатки
        Регистр.Остатки.ПривязыватьСтроку(НомерСтроки);
        Регистр.Остатки.Склад=Склад;
        Регистр.Остатки.Номенклатура=Номенклатура;
        Регистр.Остатки.Партия=Партия;
        Регистр.Остатки.Размер=Партия.Размер;
        Регистр.Остатки.ЦенаПродажи=ЦенаПродажи;
        Регистр.Остатки.Остаток=Количество;
        Регистр.Остатки.СуммаЗакупки=Сумма;
        Регистр.Остатки.СуммаПродажи=ПродСумма;
        Регистр.Остатки.ДвижениеПриходВыполнить();
        //по родителю
        Регистр.Остатки.Склад=Склад;
        Регистр.Остатки.Номенклатура=Номенклатура.Родитель;
        Регистр.Остатки.Партия=ПустаяПартия;
        Регистр.Остатки.Размер=ПустойРазмер;
        Регистр.Остатки.ЦенаПродажи=0;
        Регистр.Остатки.Остаток=Количество;
        Регистр.Остатки.СуммаЗакупки=Сумма;
        Регистр.Остатки.СуммаПродажи=ПродСумма;
        Регистр.Остатки.ДвижениеПриходВыполнить();
...
И шо мне делать...
15 vadim777
 
03.07.16
15:47
Так понимаю, нужно озвучить конфу:
ИТДБ Магазин 2.12.8.16

Инфы в инете по ней не нашел.
16 Chameleon1980
 
03.07.16
16:01
(14) "...Разработчик дебил блд..."

может в этом какой-то скрытый смысл??? :)
хотя....


а в итоге то с группами что нужно делать?

при обходе результата пропускать группы да и все?

вобщем я цели не допойму.
17 Это_mike
 
03.07.16
18:11
(15) ну а что ж ты хотел от конфы, где автор прямым текстом "ИТ-ДБ"...
Н расстраивайся... Еще может быть в изменениях регистра поле "текущий документ". Или текстовое поле со значениями " приход" и "расход".
18 linoblack
 
03.07.16
20:26
маленький офф: что быстрее, перебирать в цикле значения упорядочивания объекта "запрос", или выгрузить запрос в ТЗ и перебирать строки ТЗ?
19 vadim777
 
05.07.16
06:34
(18) Быстрее вместо запроса использовать прямое обращение к регистрам.
20 Это_mike
 
05.07.16
08:00
(19) быстрее написать нормальный прямой запрос, который выполнится гораздо быстрее, и вернет результат в ТЗ, работать с которой тоже быстрее...
21 aka AMIGO
 
05.07.16
09:00
(18) Если уж очень интересно, и есть немного свободного времени - напиши эти два варианта и запусти отладку с "Замером производительности". Вот и сравнишь, и ответ получишь конкретно на свой вопрос.
22 пипец
 
05.07.16
09:05
(15) http://umakt.com/com/moscow/ac1b-itdb позвони ))) спроси )))