7.7 Вывести пустые ячейки

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

  1. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Не получается вывести ячейки, если не было за определенный период значения.
    Код:
    Процедура СформироватьКолонкиПоБригадам()
        Таб = СоздатьОбъект("Таблица");
        СзЦеховВсего = СоздатьОбъект("СписокЗначений");
        Таб.ИсходнаяТаблица("Сформировать");
        Таб.ВывестиСекцию("Заголовок|Основание");
        Состояние("Заполнение выходной таблицы...");
        Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
        Для н = 1 По сзБригады.РазмерСписка() Цикл
            БригадаВЗаголовок = сзБригады.ПолучитьЗначение(н);
            Таб.ПрисоединитьСекцию("Заголовок|Показатели");
        КонецЦикла;
    //    Таб.ПрисоединитьСекцию("Заголовок|ИтогоПоДням");
        сзДаты.Сортировать();
        Для н = 1 По сзДаты.РазмерСписка() Цикл
            ТекДатаИзСписка = сзДаты.ПолучитьЗначение(н);
            Таб.ВывестиСекцию("МПЗ|Основание");
            ТЗ.ВыбратьСтроки();
            Пока ТЗ.ПолучитьСтроку() = 1 Цикл
                ДатаИзТЗ = ТЗ.Дата;
                Если ТекДатаИзСписка = ДатаИзТЗ Тогда
                    Для а = 1 По сзБригады.РазмерСписка() Цикл
                        ТекБригада=сзБригады.ПолучитьЗначение(а);
                        Если (ТекБригада = ТЗ.Бригада) Тогда 
                            м3 =  (ТЗ.м3);
                            Сумма = ТЗ.Сумма;
                            Таб.ПрисоединитьСекцию("МПЗ|Показатели");
                        КонецЕсли;
                    КонецЦикла;
                КонецЕсли;
            КонецЦикла;
        //    Таб.ПрисоединитьСекцию("МПЗ|ИтогоПоДням");
        КонецЦикла; 
        Таб.ТолькоПросмотр(1);
        Таб.Показать("Движение", "");
    КонецПроцедуры
    

    Если нет за период Бригады "Полигон", то надо вывести пустую ячейку.
    Спасибо!

    Вложения:

    • ТЗ.JPG
      ТЗ.JPG
      Размер файла:
      133,6 КБ
      Просмотров:
      11
    • Печать.JPG
      Печать.JPG
      Размер файла:
      129,8 КБ
      Просмотров:
      9
    • форма.JPG
      форма.JPG
      Размер файла:
      79,8 КБ
      Просмотров:
      9
  2. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ВывелиБригаду=0;
    Для а = 1 По сзБригады.РазмерСписка() Цикл
    ТекБригада=сзБригады.ПолучитьЗначение(а);
    Если (ТекБригада = ТЗ.Бригада) Тогда
    м3 = (ТЗ.м3);
    Сумма = ТЗ.Сумма;
    Таб.ПрисоединитьСекцию("МПЗ|Показатели");
    ВывелиБригаду=1;
    прервать;//зачем гонять цикл до конца?
    КонецЕсли;
    КонецЦикла;

    Если ВывелиБригаду=0 Тогда
    //выводим пустую ячейку
    КонецЕсли;

    Если у вас ТЗ собирается запросом - все можно значительно ускорить. У вас явно лишние циклы есть.
  3. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Код:
        Для н = 1 По сзДаты.РазмерСписка() Цикл
            ТекДатаИзСписка = сзДаты.ПолучитьЗначение(н);
            Таб.ВывестиСекцию("МПЗ|Основание");
            ТЗ.ВыбратьСтроки();
            Пока ТЗ.ПолучитьСтроку() = 1 Цикл
                ДатаИзТЗ = ТЗ.Дата;
                Если ТекДатаИзСписка = ДатаИзТЗ Тогда
                    ВывелиБригаду=0;
                    Для а = 1 По сзБригады.РазмерСписка() Цикл
                        ТекБригада=сзБригады.ПолучитьЗначение(а);
                        Если (ТекБригада = ТЗ.Бригада) Тогда
                            м3 = (ТЗ.м3);
                            Сумма = ТЗ.Сумма;
                            Таб.ПрисоединитьСекцию("МПЗ|Показатели");
                            ВывелиБригаду=1;
                            прервать;//зачем гонять цикл до конца?
                        КонецЕсли;
                    КонецЦикла;   
                    Если ВывелиБригаду=0 Тогда
                        Таб.ПрисоединитьСекцию("МПЗ|ДляПолигона");   // пустая ячейка с рамкой.
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
            //    Таб.ПрисоединитьСекцию("МПЗ|ИтогоПоДням");
        КонецЦикла;
    Всё равно не выводит ячейки. ТЗ из запроса формируется, по регистру
  4. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Отладчиком смотреть не пробовали?
    2) Если запросом - то вообще плевое дело.
    Шахматку строить легко если у группировок добавить "все вошедшие в запрос".
    Т.о. в цикле по группировкам сформируются все значения. Даже если данных
  5. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    1) смотрел, он даже в условие не заходит
    Код:
       Если ВывелиБригаду=0 Тогда   
                        Таб.ПрисоединитьСекцию("МПЗ|ДляПолигона");   // пустая ячейка с рамкой.
                    КонецЕсли;
    
    2) Запрос, но он много чего перебирает: в начале идет группировка по бригадам (получаем бригады), потом Группировка День, и в конце уже по номенклатуре, чтобы получить цену. Пока даже мысли нет, как можно из запроса шахматку вывести
  6. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    группировки д.б. Дата/Блигада все вошедшие в запрос.
    Выложите обработку полностью, чтобы понять структуру.
  7. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Группировку МПз еще надо, чтобы перебрать номенклатуру и получить цену и кубометры из неё. Получаем всю номенклатуру за день, рассчитываем у нее стоимость и кубы, потом я сворачиваю по дням.

    Вложения:

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

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    конфа какая? Судя по именам реквизитов - сильно смахивает на ПУБ
  9. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    ПУБ, с дописками.
  10. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    ТекстЗапроса =
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |ВидМПЗ = Регистр.МестаХранения.ВидМПЗ;
    |МПЗ = Регистр.МестаХранения.МПЗ;
    |Склад = Регистр.МестаХранения.МестоХранения;
    |Качество = Регистр.МестаХранения.Качество;
    |Колич = Регистр.МестаХранения.Количество;
    |Бригада = Регистр.МестаХранения.Бригада;
    |Док = Регистр.МестаХранения.Документ;
    |Функция НеБракПриход = Приход(Колич) когда((ПустоеЗначение(Качество) = 1) или (Качество = Перечисление.КачествоМПЗ.Новое));
    |Функция СуммаМПЗ = Сумма(ВычислитьСумму(МПЗ)*НеБракПриход); //внешняя функция получения цены. Запрос будет медленнее. Но в целом время тоже останется.
    |Группировка День;";
    |Группировка Бригада все вошедшие в запрос;
    |Группировка МПЗ;";
    |Условие(ВидМПЗ = Перечисление.ВидыМПЗ.Продукция);
    |Условие(МПЗ в ВыбМПЗ);
    |Условие(Склад в ВыбСклад);
    |Условие(Бригада в ВыбБригада);
    |"//}}ЗАПРОС
    ;

    вот так примерно должен выглядеть ваш запрос... Вывод осуществляется циклом по группировкам. Только шапку придется выводить отдельно.
  11. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Процедуру печати сделать отдельно, как в шахматке?
    1. Используются только 1 пролет, 2 пролет, 3 пролет, Полигон. Можно сразу занести их в список и вывести шапку таблицы, когда полигона не будет, выводить просто ячейку с рамкой.
    2. В первой группировке вывожу день ( в отдельной процедуре печати)
    3.Во второй получаю бригаду
    4. В третьей группировке беру суммы за день по бригаде и вывожу
    Так получается? А как тогда проверить что бригада в шапке соответствует бригаде в группировке?

    даты вывожу, бригады присоединяю и значения суммы группировки мпз присоединяю
    Последнее редактирование: 27 мар 2014
  12. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    создал функцию, а в отладчике в не зайти не могу, главное сообщает, что функция выполняется, а не заходит.
  13. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    1) Я ошибся. Группировка по МПЗ не нужна
    2) Для вывода бригад можно использовать тот же цикл по группировкам. Только 1 раз, а потом юзаем ВНачалоВыборки
    3) Функция должна работать. Проверьте через сообщить
  14. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Сообщить. Сообщает, а когда пишу там код, то сообщает, а в отладчике не могу туда зайти. вот где мистика.
  15. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    так не бывает. А в другом месте останавливается?
  16. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Код:
    Функция ВычислитьСумму(МПЗ)   
        Сообщить("зашли в фунцию");
        Номен = СоздатьОбъект("Справочник.Номенклатура");
        БазЕд = СоздатьОбъект("Справочник.ЕдиницыНоменклатуры"); 
        ЦенаЕд = СоздатьОбъект("Справочник.ЕдиницыНоменклатуры");
       
        Номен = МПЗ.ТекущийЭлемент();
        Номен.ИспользоватьДату(ВыбНачПериода);
    .......
    ......
    
    Сообщить выводит, а в отладчике ни в какую не заходит
  17. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    результат запроса правильный?
  18. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Вывел значения, но они совсем не те. очень большое число получается. и выводит во всех ячейках, а не в нужных
    Последнее редактирование: 28 мар 2014
  19. Бухгалтерский угодник
    Offline

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

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    В качестве эксперимента: пусть функция возвращает единицу. Таблица заполняется?
  20. TopicStarter Overlay
    Mitay_D
    Offline

    Mitay_D Опытный в 1С

    Регистрация:
    16 фев 2010
    Сообщения:
    314
    Симпатии:
    0
    Баллы:
    26
    Да, он все выдает, но значения совсем не те.

Поделиться этой страницей