7.7 Альтернатива отчета Остатки ТМЦ

Тема в разделе "Отчеты и обработки для "1С:Предприятие 7.7"", создана пользователем Umptek, 26 июн 2014.

  1. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
    Тогда нужна группировка по этой переменной запроса
  2. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Вот тоже интересный момент. А зачем нужна группировка по цене, если перебирать результат запроса буду по номенклатуре, а смотреть реальный остаток и цену продажную?
    Без этой группировки вроде все ок в таблицу выгружается....
  3. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
    Группировка нужна чтобы выставить соответствие номенклатура-цена-остаток
  4. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    В тексте запроса указываю
    Код:
    |Группировка Номенклатура;
    В итоге выводит данные только о ненулевых остатках
    upload_2014-8-6_23-3-52.png


    Добавляя служебное слово "Все", начинает показывать и нулевые остатки тоже:
    Код:
    ТекстЗапроса="
    |Период с рабДат по рабДат;
    |Фирма = Регистр.ОстаткиТМЦ.Фирма;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
    |Количество=Регистр.ОстаткиТМЦ.Количество;
    |Функция реаКол=КонОст(Количество);
    |Группировка Номенклатура Все;
    |Условие(Склад = ВыбСклад);          
    |Условие(Фирма = ВыбРазделитель1);";
    Результат:

    upload_2014-8-6_23-5-51.png
    --- Объединение сообщений, 6 авг 2014 ---
    Теперь добавляю группировку по цене продажной:
    Код:
    ТекстЗапроса="
    |Период с рабДат по рабДат;
    |Фирма = Регистр.ОстаткиТМЦ.Фирма;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
    |Количество=Регистр.ОстаткиТМЦ.Количество;
    |Функция реаКол=КонОст(Количество);
    |Группировка Номенклатура Все;
    |Группировка ЦенаПрод;
    |Условие(Склад = ВыбСклад);          
    |Условие(Фирма = ВыбРазделитель1);";
    Вот результат:

    upload_2014-8-6_23-9-11.png

    По каждой позиции появилось несколько строчек. Причем по тем позициям, которые реально не нулевые какая-то неверная инфа.
    Для примера - Дисплей Alcatel 4010: Одна штука по цене 0р, ноль штук по цене 60р, одна штука по цене 420р.
    А в реальности в наличии на розничном складе только один дисплей с ценой 420. Как в таблице из предыдущего поста.

    upload_2014-8-6_23-15-38.png

    То есть добавление такой группировки добавляет ненужный перебор, да еще и с не совсем понятными данными.....
    --- Объединение сообщений, 6 авг 2014 ---
    И откуда эти позиции с нулевой ценой и нулевым количеством по номенклатуре, реально присутствующей на розничном складе?
    Последнее редактирование: 6 авг 2014
  5. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Откуда вообщше эта цена вылезла в 60 р....... на каждую позицию номенклатуры......??????
  6. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
    ТекстЗапроса="
    |Период с рабДат по рабДат;
    |Без итогов; //!
    |Фирма = Регистр.ОстаткиТМЦ.Фирма;
    |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
    |Склад = Регистр.ОстаткиТМЦ.Склад;
    |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
    |Количество=Регистр.ОстаткиТМЦ.Количество;
    |Функция реаКол=КонОст(Количество);
    |Группировка Номенклатура без групп все ВошедшиеВЗапрос; //!
    |Группировка ЦенаПрод;
    |Условие(Склад = ВыбСклад);
    |Условие(Фирма = ВыбРазделитель1);";
  7. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Неа-а-а-а....
    Опять что-то не то......
    При таком тексте запроса в списке отображаются только не нулевые позиции, а мне нужно чтобы в списке были и нулевые и ненулевые с ценой....
  8. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
    Добавьте условие ЦенаПрод<>0
  9. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Ника не влияет на появление нулевых позиций с последней ценой в списке...
    Шайтан какой-то с этим отчетом.....
  10. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
  11. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Конкретно какую часть кода выложить?

    P.S. Извиняюсь за долгое молчание, специфика работы подразумевает дальние командировки...
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
    Да весь отчет целиком и выкладывайте
  13. TopicStarter Overlay
    Umptek
    Offline

    Umptek

    Регистрация:
    17 фев 2014
    Сообщения:
    48
    Симпатии:
    0
    Баллы:
    1
    Код:
    //******************************************************************************
    // ВНЕШНИЙ ОТЧЕТ ДЛЯ ФОРМИРОВАНИЯ ДАННЫХ ДЛЯ ЗАГРУЗКИ НА САЙТ
    //******************************************************************************
    
    Процедура ПробаЗапроса()
       
       
        Перем ТекстЗапроса, тЗнач, ЗапС;
       
        ОчиститьОкноСообщений();
       
        тЗнач=СоздатьОбъект("ТаблицаЗначений");
        ЗапС=СоздатьОбъект("Запрос");
        рабДат=ДатаКонца;                        // Рабочую дату берем из элемента диалога
       
        //ТекстЗапроса="
        //|Период с рабДат по рабДат;
        //|Фирма = Регистр.ОстаткиТМЦ.Фирма;
        //|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
        //|Склад = Регистр.ОстаткиТМЦ.Склад;
        //|ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
        //|Количество=Регистр.ОстаткиТМЦ.Количество;
        //|Функция реаКол=КонОст(Количество);
        //|Группировка Номенклатура Все;
        //|Группировка ЦенаПрод;
        //|Условие(Склад = ВыбСклад);          
        //|Условие(Фирма = ВыбРазделитель1);";
       
       
        ТекстЗапроса="
        |Период с рабДат по рабДат;
        |Без итогов;
        |Фирма = Регистр.ОстаткиТМЦ.Фирма;
        |Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
        |Склад = Регистр.ОстаткиТМЦ.Склад;
        |ЦенаПрод = Регистр.ОстаткиТМЦ.ЦенаПрод;
        |Количество=Регистр.ОстаткиТМЦ.Количество;
        |Функция реаКол=КонОст(Количество);
        |Группировка Номенклатура без групп все ВошедшиеВЗапрос;
        |Группировка ЦенаПрод;
        |Условие(Склад = ВыбСклад);
        |Условие(Фирма = ВыбРазделитель1);
        |Условие(ЦенаПрод<>0);";
                        
       
       
        флаг=ЗапС.Выполнить(ТекстЗапроса);
        ЗапС.Выгрузить(тЗнач,1);
        тЗнач.ВыбратьСтроку(, "Запрос в таблице значений");
       
    КонецПроцедуры // ПробаЗапроса
    
    
    //******************************************************************************
    //
    // Процедцра СписокГрупп() формирует и выводит на экран таблицу со списком всех групп
    // в следующем порядке:
    // Первый столбец - код группы
    // Второй столбец - наименование группы
    //
    //******************************************************************************
    
    Процедура СписокГрупп()
       
        СпрНоменклатуры=СоздатьОбъект("Справочник.Номенклатура");  // Создаем привязку к справочнику номенклатуры
       
        ТабГруппа=СоздатьОбъект("Таблица");        // Создаем привязку к табличной части
        ТабГруппа.ИсходнаяТаблица("Категории");
       
        СпрНоменклатуры.ВыбратьЭлементы();              // Осуществляем перебор всего справочника номенклатуры
        Пока СпрНоменклатуры.ПолучитьЭлемент()=1 Цикл
            Если СпрНоменклатуры.ЭтоГруппа()=1 Тогда    // Если элемент справочника группа, то выводим в таблицу
                ПечКод=СпрНоменклатуры.Код;
                ПечГруппа=СпрНоменклатуры.Наименование;
                ТабГруппа.ВывестиСекцию("ОбщаяСекция");
            КонецЕсли;
        КонецЦикла;
       
        ТабГруппа.Показать("Категории");  // Показываем таблицу
       
    КонецПроцедуры // СпискоГрупп
    
              
    //******************************************************************************
    //
    // Процедцра СписокНоменклатурыВсей() формирует и выводит на экран таблицу со списком всей номенклатуры
    // в следующем порядке:
    // Первый столбец - код группы
    // Второй столбец - код родителя (группы к которой принадлежит номенклаутра)
    // Третий столбец - полное наименование номенклатуры
    //
    // Процедура возможно в двух вариантах:
    // 1) Отображение номенклатуры списком, вместе с названиями групп
    // 2) Отображение номенклатуры списком без названий групп, только товар
    //
    //******************************************************************************
    
    Процедура СписокНоменклатурыВсей() 
                 
        СпрНоменклатуры=СоздатьОбъект("Справочник.Номенклатура");  // Создаем привязку к справочнику номенклатуры
       
        ТабВсяНоменклатура=СоздатьОбъект("Таблица");        // Создаем привязку к табличной части
        ТабВсяНоменклатура.ИсходнаяТаблица("ВсяНоменклатура");  
       
        РегОстаткиТМЦ=СоздатьОбъект("Регистр.ОстаткиТМЦ");
           
       
        //******************************************************************************
        //  Вариант вывод всей номенклатуры, вместе с названиями групп
        //
        //СпрНоменклатуры.ВыбратьЭлементы();              // Осуществляем перебор всего справочника номенклатуры
        //Пока СпрНоменклатуры.ПолучитьЭлемент()=1 Цикл
        //    ПечКод=СпрНоменклатуры.Код;
        //    Если СпрНоменклатуры.ЭтоГруппа()=1 Тогда
        //        ПечНоменклатура=СпрНоменклатуры.Наименование;
        //    Иначе
        //        ПечНоменклатура=СпрНоменклатуры.ПолнНаименование;
        //    КонецЕсли;
        //    ПечРодитель=СпрНоменклатуры.Родитель.Код;
        //    ТабВсяНоменклатура.ВывестиСекцию("ОбщаяСекция");
        //КонецЦикла;
       
       
        //******************************************************************************
        // Вариант вывода номенклатуры без названий групп
        //
       
        СпрНоменклатуры.ВыбратьЭлементы();
        Пока СпрНоменклатуры.ПолучитьЭлемент()=1 Цикл
            Если СпрНоменклатуры.ЭтоГруппа()=0 Тогда   // Если не группа, то выводим данные
                ПечКод=СпрНоменклатуры.Код;
                ПечНоменклатура=СпрНоменклатуры.ПолнНаименование;
                ПечРодитель=СпрНоменклатуры.Родитель.Код;      
                ПечКоличество=РегОстаткиТМЦ.СводныйОстаток(ВыбРазделитель1,СпрНоменклатуры,ВыбСклад,,"Количество");
                ТабВсяНоменклатура.ВывестиСекцию("ОбщаяСекция");
            КонецЕсли;
        КонецЦикла;
       
        ТабВсяНоменклатура.Показать("Товары");  // Показываем таблицу   
       
    КонецПроцедуры   // СписокНоменклатурыВсей  
    
    
    //******************************************************************************
    // УправлениеДиалогом()
    //
    // Параметры:
    //    Нет
    //
    // Возвращаемое значение:
    //    Нет
    //
    // Описание:
    //    Управление доступностью элементов диалога.
    //
    Процедура УправлениеДиалогом()
    
        Если ЦенаТовара.ПолучитьЗначение(ЦенаТовара.ТекущаяСтрока()) = "из справочника цен" Тогда
            Форма.ЦенаИзСправочника.Видимость(1);
        Иначе
                Форма.ЦенаИзСправочника.Видимость(0);
        КонецЕсли;
       
    КонецПроцедуры //УправлениеДиалогом()
    
    
    //******************************************************************************
    // ПриВыбореСклада()
    //
    // Параметры:
    //  Нет   
    //
    // Возвращаемое значение:
    //    Нет
    //
    // Вызывается из формул элементов диалога:
    //   ВыбСклад и кнопки кнХСклад
    //
    // Описание:  
    //    Изменяет допустимые настройки отчета в зависимости от выбранного скалда.
    //    В частности, если выбран оптовый склад, то из списка цен исключаются розничные цены.
    //                                                                                     
    Процедура ПриВыбореСклада()   
        Оптовый = 0;
        Если ВыбСклад.Выбран() = 1 Тогда
            Если ВыбСклад.РозничныйСклад = 0 Тогда
                Оптовый = 1;
            КонецЕсли;
        КонецЕсли;
        Поз = ЦенаТовара.НайтиЗначение("отпускная цена (только розница)");   
        Если Оптовый = 1 Тогда
            Если Поз > 0 Тогда
                ЦенаТовара.УдалитьЗначение(Поз);
            КонецЕсли;
        Иначе
            Если Поз = 0 Тогда   
                ЦенаТовара.ВставитьЗначение(3, "отпускная цена (только розница)");
            КонецЕсли;
        КонецЕсли;       
    КонецПроцедуры // ПриВыбореСклада()       
    
    
    ////////////////////////////////////////////////////////////////////////////////
    // ОПЕРАТОРЫ ОСНОВНОЙ ПРОГРАММЫ
    //
    ДатаКонца=ПолучитьДатуТА();
    
    ПоказатьОстатки.УдалитьВсе();                            
    ПоказатьОстатки.ДобавитьЗначение("все ненулевые");
    ПоказатьОстатки.ДобавитьЗначение("все");                  
    //ПоказатьОстатки.ДобавитьЗначение("все отрицательные");
    //ПоказатьОстатки.ДобавитьЗначение("меньше мин. остатка");
    //ПоказатьОстатки.ДобавитьЗначение("все, имеющиеся в наличии");
    ПоказатьОстатки.ТекущаяСтрока(1);                                
    
    Показатель.УдалитьВсе();                            
    Показатель.ДобавитьЗначение("включая резерв");
    Показатель.ДобавитьЗначение("за минусом резервов");
    Показатель.ТекущаяСтрока(1);
    
    ЦенаТовара.УдалитьВсе();
    ЦенаТовара.ДобавитьЗначение("усредненная себестоимость с НДС");
    ЦенаТовара.ДобавитьЗначение("усредненная себестоимость без НДС");
    ЦенаТовара.ДобавитьЗначение("отпускная цена (только розница)");
    ЦенаТовара.ДобавитьЗначение("из справочника цен");
    ЦенаТовара.ДобавитьЗначение("не показывать");
    ЦенаТовара.ТекущаяСтрока(1); 
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    22.628
    Симпатии:
    542
    Баллы:
    204
    Код:
     |Группировка Номенклатура без групп все ;
    попробуйте так