Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с модулем.  (Прочитано 7903 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ксюфка
Гость
« : 04-12-2009 06:48 » 

Здравствуйте! Помогите мне, пожалуйста!!!  Я плохо разбираюсь в модуле. А мне нужно сделать следующее. В отчете «Сезонники»  попросили добавить две колонки «Дату приема» и «Номер приказа (о приеме)» Я очень долго возилась, в итоге у меня получилось следующее: в первом случае, когда я оставляю обращение к справочнику, я не могу правильно составить дополнительный запрос на документ «О приеме» (где есть дата и номер) – у меня просто знаний не хватает, вечно ошибки. Во втором случае, когда я полностью весь запрос обращаю на документ «О приеме», все выходит замечательно, с той лишь разницей, что он перестает учитывать «СостояниеФизлица» (то есть, по-русски, выводит даже тех, кто уволен) и выдает не по факту работающих в заданный период, а тех, кто был ПРИНЯТ в данный период. В общем, как ни крути, но у меня уже 4й день не получается. Этот модуль мне весь мозг проел. Я его как только ни переписывала. Пожалуйста, кто-нибудь, помогите!!!!!
Вот, собственно, оригинальный модуль до добавления туда моих изменений:




Процедура Сезонники()
     Лет = 0; Месяцев = 0; Дней = 0;
   ДатаНачала = Дата1;
   ДатаКонца =  Дата2;
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса = "
   |//{{ЗАПРОС(Сезонники)
   |Период с ДатаНачала по ДатаКонца;
   |ОбрабатыватьДокументы Все;
   |Сотрудник          = Справочник.Сотрудники.ТекущийЭлемент;  
   |Подразделение       = Справочник.Сотрудники.ТекущийЭлемент.Подразделение;
   |Должность          = Справочник.Сотрудники.ТекущийЭлемент.Должность;
   |ГрафикРаботы       = Справочник.Сотрудники.ГрафикРаботы;
   |СостояниеФизлица    = Справочник.Сотрудники.СостояниеФизлица;
   |Функция Кол   =    Счётчик();
   |Группировка Подразделение;   
   |Группировка Сотрудник;                            
   |Условие(Найти(ГрафикРаботы,"""+"Сезонная"+""")>0);
   |Условие((ПустоеЗначение(СостояниеФизлица)=0)
   |и (Подразделение в СписокПодразделений));";
   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
      Возврат;
   КонецЕсли;
  
   Сотрудник=СоздатьОбъект("Справочник.Сотрудники");
   Структура=СоздатьОбъект("Справочник.Структура");
   Таблица=СоздатьОбъект("Таблица");
   Таблица.ИсходнаяТаблица("Сезонники");
   Таблица.ВывестиСекцию("Шапка");     
   Структура.ПорядокКодов();
   Структура.ИспользоватьДату(КонГода(Дата2));
   Сотрудник.ИспользоватьДату(КонГода(Дата2));
   Структура.ВыбратьЭлементы();
   Подр="";К=0;
   Запрос.ВНачалоВыборки();
   Пока Запрос.Группировка("Подразделение")=1 Цикл
      Таблица.ВывестиСекцию("Заголовок");
      //Пока Запрос.Группировка("Должность")=1 Цикл                
         Пока Запрос.Группировка("Сотрудник")=1 Цикл
            ТекстСтажРабочий = глСтажРаботыНаПредприятии(Запрос.Сотрудник,Дата2);
            Таблица.ВывестиСекцию("Строка");
         КонецЦикла;
      //КонецЦикла;  
   КонецЦикла;
      
   Таблица.ВывестиСекцию("Подвал");
   Таблица.Опции(0,0,7,0,"_ПАРАМЕТРЫ_ПЕЧАТИ_Ф");
   Таблица.ПараметрыСтраницы(2,,,0,0,0,0,,,,1,);
   Таблица.ТолькоПросмотр(1);
   Таблица.Показать("Унифицированная форма № ");
КонецПроцедуры   // Сезонники
« Последнее редактирование: 04-12-2009 06:55 от Sel » Записан
Ксюфка
Гость
« Ответ #1 : 04-12-2009 07:32 » 

А это- второй случай, когда обращение идет к приказу. Но, как я уже сказала, он путается в «ВИнтервале» и «СостояниеФизлица»

Процедура Сезонники2()
     Лет = 0; Месяцев = 0; Дней = 0;
   ДатаНачала = Дата1;
   ДатаКонца =  Дата2;
   Запрос = СоздатьОбъект("Запрос");
   ДатаЗапроса = РабочаяДата();
   ТекстЗапроса = "
   |//{{ЗАПРОС(Сезонники)
   |ОбрабатыватьДокументы Проведенные;
   |Сотрудник     = Документ.ПриказОПриемеНаРаботу.Сотрудник;
   |НомерДок      = Документ.ПриказОПриемеНаРаботу.НомерДок;
   |ДатаПр        = Документ.ПриказОПриемеНаРаботу.ДатаПриема;
   |Подразделение = Документ.ПриказОПриемеНаРаботу.Сотрудник.Подразделение;
   |Категория     = Документ.ПриказОПриемеНаРаботу.Сотрудник.Должность.Категория;
   |ГрафикРаботы  = Документ.ПриказОПриемеНаРаботу.Сотрудник.ГрафикРаботы;
   |Условие(ВИнтервале(ДатаНачала,ДатаКонца,ДатаЗапроса)=1);
   |Условие(Найти(ГрафикРаботы,"""+"Сезонная"+""")>0);
   |Функция Кол   =    Счётчик();
   |Группировка Подразделение;   
   |Группировка Сотрудник;";
   
   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
      возврат;
   КонецЕсли;
 
   Сотрудник=СоздатьОбъект("Справочник.Сотрудники");
   Структура=СоздатьОбъект("Справочник.Структура");
   Таблица=СоздатьОбъект("Таблица");
   Таблица.ИсходнаяТаблица("Сезонники2");
   Таблица.ВывестиСекцию("Шапка");      
   Структура.ПорядокКодов();
    Структура.ИспользоватьДату(КонГода(Дата2));
   Сотрудник.ИспользоватьДату(КонГода(Дата2));
   Структура.ВыбратьЭлементы();
   Подр="";К=0;
   Запрос.ВНачалоВыборки();
   Пока Запрос.Группировка("Подразделение")=1 Цикл
      Таблица.ВывестиСекцию("Заголовок");
      //Пока Запрос.Группировка("Должность")=1 Цикл               
         Пока Запрос.Группировка("Сотрудник")=1 Цикл
            ТекстСтажРабочий = глСтажРаботыНаПредприятии(Запрос.Сотрудник,Дата2);
            Таблица.ВывестиСекцию("Строка");
         КонецЦикла;
      //КонецЦикла;
   КонецЦикла;
      
   Таблица.ВывестиСекцию("Подвал");
   Таблица.Опции(0,0,7,0,"_ПАРАМЕТРЫ_ПЕЧАТИ_Ф");
   Таблица.ПараметрыСтраницы(2,,,0,0,0,0,,,,1,);
   Таблица.ТолькоПросмотр(1);
   Таблица.Показать("Унифицированная форма № ");
КонецПроцедуры   // Сезонники2
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 04-12-2009 12:57 » 

Оставь все как было, но внутри цикла
Код:
         Пока Запрос.Группировка("Сотрудник")=1 Цикл
            ТекстСтажРабочий = глСтажРаботыНаПредприятии(Запрос.Сотрудник,Дата2);
            // Здесь ищем документ ПриказОПриемеНаРаботу по сотруднику
            Таблица.ВывестиСекцию("Строка");
         КонецЦикла;
ищи документ прием на работу.
Как именно [оптимально] искать не скажу не зная структуры данных (конфигурацию, как минимум)
Записан
Ксюфка
Гость
« Ответ #3 : 04-12-2009 15:45 » 

Я так делала. Не выходит. Видимо, я допускаю какую-то ошибку.
« Последнее редактирование: 04-12-2009 17:40 от Sel » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 05-12-2009 18:06 » 

Напиши код, как ищеш документ.
« Последнее редактирование: 07-12-2009 07:56 от Sel » Записан
Ксюфка
Гость
« Ответ #5 : 06-12-2009 08:34 » new

Спасибо. У меня получилось. Правда, выходит не красиво. Но это хотя бы чт0-то. При обращении к глобальному модулю он стал выдавать  номер и дату- слепленные в одну строку)))
« Последнее редактирование: 07-12-2009 07:57 от Sel » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines