Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
26 Сен 2020, 01:10
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: помогите найти ошибку!  (Прочитано 1918 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн smidv

  • *
  • Сообщений: 5
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2010-02-05
  • Сайт: 
помогите найти ошибку! :trhregerhg:
Не правильно формирует отчет по Мастерам-приёмщикам выдает общий отчет по всем мастера а не по каждому
Цитировать
Перем
   спГруппировки,         // Список группировок запроса
   Зап,РазмерГр,          // Запрос и его размерность
   Таб, Обновить,         // Переменные таблицы и запроса для отчета
   спВидовСвойств, КолВС,  // Список и количество видов свойств по подразделениям
   ВалютаОтчета;   

//-----------------------------------------------
Процедура СтрокаСтатуса(Знач _Текст="")
   Форма.СтрокаСтатуса.Заголовок(_Текст);
КонецПроцедуры   //СтрокаСтатуса

//-----------------------------------------------
Функция ПроверкаПорядкаСписка(Сп)
// проверяет порядок в списке группировки
   НомСв1=Сп.НайтиЗначение("Свойство1");
   НомСв2=Сп.НайтиЗначение("Свойство2");
   НомСв3=Сп.НайтиЗначение("Свойство3");
   НомПод=Сп.НайтиЗначение("Подразделение без групп");
   НомДок=Сп.НайтиЗначение("Документ");
   Возврат ?((НомПод<НомСв1) или (НомПод<НомСв2) или (НомПод<НомСв3) или (НомДок<спОбороты.РазмерСписка()), 0, 1);
КонецФункции   //ПроверкаПорядкаСписка()

//-----------------------------------------------
Функция ПриВыбореЗначения(Об="",ДопПараметр="")
   Если Об="" Тогда Об=Форма.АктивныйЭлемент(); КонецЕсли;
   
   Если Об="" Тогда
   ИначеЕсли Об="кнВверхОбороты" Тогда
      глСписокДействие(спОбороты,"Вверх");
   ИначеЕсли Об="кнВнизОбороты" Тогда
      глСписокДействие(спОбороты,"Вниз");
   ИначеЕсли Об="кнДобавитьСвойства" Тогда
      глОтчетДобавитьСвойства(спВидовСвойств, спПодразделения);
   Иначе Возврат глОтчетОбработкаФормы(Контекст,Об,ДопПараметр);
   КонецЕсли;   Возврат 1;
КонецФункции   // ПриВыбореЗначения

///////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ФОРМИРОВАНИЯ ОТЧЕТА
///////////////////////////////////////////////////////////////////////////
//-----------------------------------------------
Функция СтрокаФильтра()
// Формирует строку для вывода в отчет информации об установленном фильтре   
    Возврат
      глОтчетСтрокаФильтра(спПодразделения, "Подразделения")+
      глОтчетСтрокаФильтра(спСотрудники, "Исполнители", 1)+
      глОтчетСтрокаФильтра(спВидРемонта, "Виды ремонта", 1)+
      глОтчетСтрокаФильтра(спПереченьРабот, "Виды тех. операций", 1);
КонецФункции // СтрокаФильтра()

//-----------------------------------------------
Процедура ЦиклПоГруппировке(Знач ГрСп=1)
   Если спГруппировки.РазмерСписка()<ГрСп Тогда Возврат; КонецЕсли;
   
   
   ИмяГрп=глСтрокаНачало(спГруппировки.ПолучитьЗначение(ГрСп));
   
   Пока Зап.Группировка(ГрСп) = 1 Цикл
      // Получение объекта группировки и его представления
      ОбъектОтчета=""; СтрокаОтчета="";
      глОтчетПолучитьОбъект(Зап, ИмяГрп, ОбъектОтчета, СтрокаОтчета);
      // Установка параметра расшифровки
      глРасшифровка.Установить(ИмяГрп,ОбъектОтчета);
      // Формирование отступа для получения древовидности отчета
      
      глОтчетВывестиНачалоСтроки(Таб, "Строка", ГрСп-1, СтрокаОтчета, ОбъектОтчета);
      
      Количество=ФРМ(Зап.СумКоличество);
      Сумма=ФРМ(глПересчет(Зап.СумСумма,Константа.ОсновнаяВалюта,ДатаКонца,ВалютаОтчета,ДатаКонца));
      Время=ФРМ(Зап.СумВремя); КПД=?(Зап.СумВремя=0,"--",ФРМ(100*Зап.СумКоличество/Зап.СумВремя));
      Таб.ПрисоединитьСекцию("Строка|Показатели");
      глУровни[ГрСп]=ГрСп;
      глОтчетПараметрыСекции(Таб, ГрСп, РазмерГр, Таб.ШиринаТаблицы(), 1);
      глОживить(1, 10);
      
       ЦиклПоГруппировке(ГрСп+1);
      глСписокДействие(глРасшифровка, "Обрезать", ГрСп);   // Очистим лишние параметры расшифровки
   КонецЦикла;
КонецПроцедуры   //ЦиклПоГруппировке

//-----------------------------------------------
Процедура Сформировать(Реж=2)

   Состояние("Выполняю подготовку данных отчета");  
   
   ТекВалюта=СпВалюта.ТекущаяСтрока();
   ВалютаОтчета=СпВалюта.ПолучитьЗначение(СпВалюта.ТекущаяСтрока());
   
   // Заполним список разверток
   спГруппировки=СоздатьОбъект("СписокЗначений");
   глСписокЗагрузить(спГруппировки, спОбороты, 1, 2);
   
   РазмерГр=спГруппировки.РазмерСписка();
   Если глОтчетПроверитьРазмерГруппировок(РазмерГр, 1)=0 Тогда Возврат; КонецЕсли;
   
   СтрокаСтатуса("Подготовка данных...");
   // сформируем текст запроса
   тЗап=глОтчетШапкаЗапроса(Реж,Контекст,)+"
   |Фирма=Регистр.ОбъемРабот.Подразделение.Фирма;
   |Мастер = Документ.ЗаказНаряд.Мастер;
   |Подразделение=Регистр.ОбъемРабот.Подразделение;
   |Свойство1=Регистр.ОбъемРабот.Подразделение.ОсновноеСвойство1;
   |Свойство2=Регистр.ОбъемРабот.Подразделение.ОсновноеСвойство2;
   |Свойство3=Регистр.ОбъемРабот.Подразделение.ОсновноеСвойство3;
   |Исполнитель=Регистр.ОбъемРабот.Исполнитель;
   |ВидРемонта=Регистр.ОбъемРабот.ВидРемонта;
   |Работа=Регистр.ОбъемРабот.Номенклатура;
   |Процент=Регистр.ОбъемРабот.Процент;
   |Количество=Регистр.ОбъемРабот.Количество;
   |Время=Регистр.ОбъемРабот.Время;
   |Сумма=Регистр.ОбъемРабот.Сумма;";
    Для Сч=1 По спГруппировки.РазмерСписка() Цикл тЗап=тЗап+"
      |Группировка "+спГруппировки.ПолучитьЗначение(Сч)+";";
   КонецЦикла;   
   тЗап=тЗап+
   глОтчетУсловиеЗапроса(ВыбФирма, "ВыбФирма", "Фирма")+
   глОтчетУсловиеЗапроса(спПодразделения, "спПодразделения", "Подразделение", "Свойство", спВидовСвойств)+
   глОтчетУсловиеЗапроса(спСотрудники, "спСотрудники", "Исполнитель")+
   глОтчетУсловиеЗапроса(спВидРемонта, "спВидРемонта", "ВидРемонта")+
   глОтчетУсловиеЗапроса(спПереченьРабот, "спПереченьРабот", "Работа")+
   "Функция СумКоличество=Сумма(Количество);
   |Функция СумСумма=Сумма(Сумма);
    |Функция СумВремя=Сумма(Время);";
   // Расчет запроса
   Зап=СоздатьОбъект("Запрос");
   Если Зап.Выполнить(тЗап) = 0 Тогда
      Сообщить(?(Право[123]=1,тЗап,"Запрос не выполнен")); Возврат;
   КонецЕсли;
   //глТЗ_Показать(Зап);   // Эту строчку можно раскоментировать для отладки запроса
   
   // Инициализация таблицы отчета
   Если ТипЗначенияСтр(Таб)<>"Таблица" Тогда Таб=СоздатьОбъект("Таблица");
   Иначе Таб.Очистить();
   КонецЕсли;
   Если Обновить="Настройка" Тогда СтрокаДействийФормы="#Закрыть"; КонецЕсли;
   Если Константа.КонтрольВремениВыполнения=Перечисление.Булево.Да Тогда
       глИсходнаяТаблица(Таб,"Выработка_Эффективность");
   Иначе
      глИсходнаяТаблица(Таб,"Выработка");
   КонецЕсли;
   
   СтрокаСтатуса("Формирование таблицы отчета...");
   
   глОтчетВывестиНачалоСтроки(Таб, "Шапка");
   Таб.ПрисоединитьСекцию("Шапка|Показатели");
   глОтчетПараметрыСекции(Таб, "Шапка", 5, Таб.ШиринаТаблицы(), Таб.ВысотаТаблицы());
   глОживить(Таб.ВысотаТаблицы());
   Таб.Опции(0,0,Таб.ВысотаТаблицы(), 18);
    глРасшифровка=СоздатьОбъект("СписокЗначений");
   ЦиклПоГруппировке(1);
   Количество=ФРМ(Зап.СумКоличество);
      
   Сумма=ФРМ(глПересчет(Зап.СумСумма,Константа.ОсновнаяВалюта,ДатаКонца,ВалютаОтчета,ДатаКонца));
   Время=ФРМ(Зап.СумВремя);
   КПД=?(Зап.СумВремя=0,"--",ФРМ(100*Зап.СумКоличество/Зап.СумВремя));
   глОтчетВывестиНачалоСтроки(Таб, "Подвал",15);
   Таб.ПрисоединитьСекцию("Подвал|Показатели");
   глОтчетПараметрыСекции(Таб, "Подвал", , Таб.ШиринаТаблицы(), 1);
   глОживить(1);
   глОтчетПоказать(Контекст,Таб,,"Выработка производства");
   СтрокаСтатуса();
КонецПроцедуры   // Сформировать


//-----------------------------------------------
Процедура НастроитьГруппировку(ИмяГрп)
// выбор заранее предопределенных группировок
   СтрВСш=""; СтрВС="";
   глОтчетПолучитьШаблонНастройки(спВидовСвойств, СтрВСш, СтрВС);
    Меню=СоздатьОбъект("СписокЗначений");
   Меню.ДобавитьЗначение("1"+СтрВСш+"0100", "По фирмам   (фирма - хоз.операция)");
   Меню.ДобавитьЗначение("0"+СтрВСш+"1100", "По подразделениям   (подразделение - хоз.операция)");
   Меню.ДобавитьЗначение("0"+СтрВСш+"1110", "По подразделениям с аналитикой");
   Меню.ДобавитьЗначение("0"+СтрВСш+"0101", "Карточка   (хоз.операция - документ)");
   Ном=0;
   Если Меню.ВыбратьЗначение(Ном,,,,1)=1 Тогда
      глСписокДействие(спОбороты, "ВсеСнять");
      глСписокДействие(спОбороты, "Настройка", "Фирма, "+СтрВС+"Подразделение без групп, ХозОперация без групп, Аналитика без групп, Документ", Ном);
   КонецЕсли;
КонецПроцедуры   //НастроитьГруппировку(ИмяГрп)

///////////////////////////////////////////////////////////////////////////
// ПРЕДОПРЕДЕЛЕННЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ
///////////////////////////////////////////////////////////////////////////
//-----------------------------------------------
Процедура ОбработкаПодбора(Элемент,КонтПодб)
// Обрабатывает подборы всех справочников
   Если ТипЗначения(Элемент)<>11 Тогда Возврат; КонецЕсли;
   Если Элемент.Вид()="Подразделения" Тогда глСписокДействие(спПодразделения,"Добавить",Элемент);
   ИначеЕсли Элемент.Вид()="Сотрудники" Тогда глСписокДействие(спСотрудники,"Добавить",Элемент);
   ИначеЕсли Элемент.Вид()="ВидРемонта" Тогда глСписокДействие(спВидРемонта,"Добавить",Элемент);
   ИначеЕсли Элемент.Вид()="ПереченьРабот" Тогда глСписокДействие(спПереченьРабот,"Добавить",Элемент);   
      
   КонецЕсли;
КонецПроцедуры // ОбработкаПодбора

//-----------------------------------------------
// Вызывается при открытии отчета. Анализирует параметры вызова
Процедура ПриОткрытии(ФлагНастройки)
   Если глОтчетПриОткрытии(Контекст,"Выработка")=0 Тогда Возврат; КонецЕсли;

   Если спОбороты.РазмерСписка()<>5+КолВС Тогда
      спОбороты.УдалитьВсе();
      спОбороты.ДобавитьЗначение("Фирма","");
      спОбороты.ДобавитьЗначение("Мастер","Мастер-приёмщик");
      спОбороты.Пометка(2,1);
      Для Ном=1 по КолВС Цикл
         Представление="";
         ВидСвойства=спВидовСвойств.ПолучитьЗначение(Ном, Представление);
         НомСв=Сред(Представление, 8, 1);
         спОбороты.ДобавитьЗначение("Свойство"+НомСв, Представление);
      КонецЦикла;
      спОбороты.ДобавитьЗначение("Подразделение без групп","Цех");
      спОбороты.ДобавитьЗначение("Исполнитель без групп","Исполнитель");
      спОбороты.ДобавитьЗначение("ВидРемонта без групп","Вид ремонта");
      спОбороты.ДобавитьЗначение("Работа без групп","Работа");
      спОбороты.ДобавитьЗначение("Документ","Документы");
      спОбороты.ДобавитьЗначение("День","День");
      спОбороты.ДобавитьЗначение("Неделя","Неделя");
      спОбороты.ДобавитьЗначение("Месяц","Месяц");
      спОбороты.ДобавитьЗначение("Квартал","Квартал");
      спОбороты.ДобавитьЗначение("Год","Год");
      спОбороты.Пометка(2+КолВС,1);
      спОбороты.Пометка(3+КолВС,1);
   КонецЕсли;
   
   Если ТипЗначенияСтр(Форма.Параметр)="СписокЗначений" Тогда
      //глТЗ_Показать(Форма.Параметр);
      глОтчетУстановитьПараметры(Контекст, Форма.Параметр);
      Обновить=Форма.Параметр.Получить("ОбновитьНастроить");
      Если (Обновить="Обновить") или (Обновить="Настройка") Тогда   //обновить-настроить
         Таб=Форма.Параметр.Получить("Таблица");
         Если Обновить="Обновить" Тогда  
            спрВалют=СоздатьОбъект("Справочник.Валюты");
            спрВалют.ВыбратьЭлементы();
            Пока спрВалют.ПолучитьЭлемент()=1 Цикл
               Попытка
                  Если спрВалют.ЭтоНормочас=Перечисление.Булево.Да Тогда
                     Продолжить;
                  КонецЕсли;
               Исключение
                  СтрокаСтатуса(ОписаниеОшибки());
               КонецПопытки;
               СпВалюта.ДобавитьЗначение(спрВалют.ТекущийЭлемент());
            КонецЦикла;
            СпВалюта.ТекущаяСтрока(ТекВалюта);
            Сформировать();
            СтатусВозврата(0);
         КонецЕсли;
      Иначе   //по расшифровке
            спрВалют=СоздатьОбъект("Справочник.Валюты");
            спрВалют.ВыбратьЭлементы();
            Пока спрВалют.ПолучитьЭлемент()=1 Цикл
               Попытка
                  Если спрВалют.ЭтоНормочас=Перечисление.Булево.Да Тогда
                     Продолжить;
                  КонецЕсли;
               Исключение
                  СтрокаСтатуса(ОписаниеОшибки());
               КонецПопытки;
               СпВалюта.ДобавитьЗначение(спрВалют.ТекущийЭлемент());
            КонецЦикла;
            Поз=СпВалюта.НайтиЗначение(Константа.ОсновнаяВалюта);
            СпВалюта.ТекущаяСтрока(Поз);
         Сформировать();
         СтатусВозврата(0);
      КонецЕсли;
   КонецЕсли;
   спрВалют=СоздатьОбъект("Справочник.Валюты");
   спрВалют.ВыбратьЭлементы();
   Пока спрВалют.ПолучитьЭлемент()=1 Цикл
      Попытка
         Если спрВалют.ЭтоНормочас=Перечисление.Булево.Да Тогда
            Продолжить;
         КонецЕсли;
      Исключение
         СтрокаСтатуса(ОписаниеОшибки());
      КонецПопытки;
      СпВалюта.ДобавитьЗначение(спрВалют.ТекущийЭлемент());
   КонецЦикла;  
   Поз=СпВалюта.НайтиЗначение(Константа.ОсновнаяВалюта);
   СпВалюта.УстановитьЗначение(Поз,Константа.ОсновнаяВалюта,СокрЛП(Константа.ОсновнаяВалюта.Наименование)+" (без пересчета)");
   СпВалюта.ТекущаяСтрока(Поз);
   СтрокаСтатуса();
КонецПроцедуры // ПриОткрытии()

//-----------------------------------------------
// Здесь заполняется список параметров, влияющих на формирование отчета,
// Для автоматического заполнения расшифровки при формировании отчета
// Значение - Идентификатор реквизита диалога, Представление - Имя параметра
// Параметры периода добавляются автоматически при открытии отчета
спПараметровОтчета.УдалитьВсе();
спПараметровОтчета.Установить("Подразделение","спПодразделения");
спПараметровОтчета.Установить("Сотрудники","спСотрудники");
спПараметровОтчета.Установить("ТекВалюта","ТекВалюта");
спПараметровОтчета.Установить("ИмяОтчета","Выработка");

//-----------------------------------------------
спВидовСвойств=СоздатьОбъект("СписокЗначений");
глСвойстваЗаполнитьСписокВидов(спВидовСвойств, "Подразделения");
КолВС=спВидовСвойств.РазмерСписка();


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
67 Сообщений
oooo800
39 Сообщений
LexaK
31 Сообщений
Дмитрий Джей Дмитрий Джей
29 Сообщений
IL2016
28 Сообщений
antoneus antoneus
24 Сообщений
DmitriyF DmitriyF
17 Сообщений
Ann_
16 Сообщений
мадам брошкина
13 Сообщений
illiona
10 Сообщений

* Кто онлайн

  • Точка Гостей: 172
  • Точка Скрытых: 0
  • Точка Пользователей: 0

Нет пользователей онлайн.

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal