Имя: Пароль:
1C
1C 7.7
v7: Как убрать уволенных сотрудников из отчета?
0 Начинающий Админ
 
26.10.11
09:41
Здравствуйте! Я сделала отчет, который формирует сведения об отпусках за период на основе документа ПриказПоОтпуску, но в него попадают все сотрудники, в том числе и уволенные. Подскажите, пожалуйста, как убрать уволенных сотрудников из отчета? И как сделать, чтобы по сотруднику выводились не все его отпуска, а только последний?
1 aleks-id
 
26.10.11
09:45
>>Пол:Мужской
>>Я сделала отчет
ВТФ?
2 Amra
 
26.10.11
09:45
Объясняю:
1. Определиться с полом.
2. Если таки женский - вставить фотку в личку.
3. Рассказать, что именно не получается
3 Jaffar
 
26.10.11
09:58
а чем у вас уволенный сотрудник отличается от работающего? может реквизит ДатаОкончания заполнен? тогда и действовать соответственно (условие в запросе или фильтр при выводе).
а вот с последним отпуском интереснее будет. разве что сначала заполнить для каждого сотрудника таблицу с номерами документов по отпускам или датами начала и окончания отпуска (при заполнении заменять дату на более позднюю), а потом выводить.
4 aka AMIGO
 
26.10.11
10:08
(0) чтобы не попадали уволенные - напиши условие-фильтр по состоянию физлица "уволен"
ЗЫ. СостояниеФЛ - вычисляемый реквизит, если чо..
5 Начинающий Админ
 
01.11.11
09:59
И снова здравствуйте!
Пол - женский, фотку потом вставлю :)
Я совсем-совсем начинающий программист, поэтому такие вопросы задаю.
Из отчета убрала уволенных, а с последним отпуском еще не работала. Сейчас пытаюсь сделать сортировку по сотруднику, сделала таблицу значений, все условия поставила. Но вот вопрос, как вывести сам отчет? Если пишу ТабСотрудников.Показать(); то ошибка - поле агрегатного объекта не найдено (Показать). Если убираю эту строку, то обработка идет, но таблица не выводится. Помогите, плиз. Вот код:
   ТабСотрудников = СоздатьОбъект("ТаблицаЗначений");
   ТабСотрудников.НоваяКолонка("Сотрудник");
   ТабСотрудников.НоваяКолонка("Должность");
   ТабСотрудников.НоваяКолонка("Подразделение");
   ТабСотрудников.НоваяКолонка("НачалоПериода");
   ТабСотрудников.НоваяКолонка("ОкончаниеПериода");
   ТабСотрудников.НоваяКолонка("КоличествоДнейОтпуска");
   КадрДокументы = СоздатьОбъект("Документ.ПриказПоОтпуску");
   КадрДокументы.ВыбратьДокументы(МесяцНачало,МесяцОкончание);
   Пока КадрДокументы.ПолучитьДокумент() = 1 Цикл
       ТабСотрудников.НоваяСтрока();
       КадрДокумент = КадрДокументы.ТекущийДокумент();
       Сотрудник = КадрДокументы.Сотрудник;
       СостояниеСотрудника = Сотрудник.СостояниеФизЛица.Получить(МесяцОкончание);
       Если (СостояниеСотрудника = Перечисление.СостояниеФизлица.СотрудникОсновной) или (СостояниеСотрудника = Перечисление.СостояниеФизлица.СотрудникНеосновной)  Тогда
           ВидыОтпуска =  КадрДокументы.ВидОтпуска;
           Если ВидыОтпуска = ВидРасчета.ОтпускОчередной Тогда
               Сотрудник = КадрДокументы.Сотрудник;
               Должность = Сотрудник.Должность.Получить(МесяцОкончание);
               Подразделение = Сотрудник.Подразделение.Получить(МесяцОкончание);
               НачалоПериода = КадрДокумент.НачалоПериода;
               ОкончаниеПериода = КадрДокумент.ОкончаниеПериода;
               КоличествоДнейОтпуска = КадрДокумент.КоличествоДнейОтпуска;
           Иначе Продолжить;
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
   ТабСотрудников.Сортировать("Сотрудник+");
   ТабСотрудников.ВыбратьСтроки();
   Пока ТабСотрудников.ПолучитьСтроку() = 1 Цикл      
   КонецЦикла;
   ТабСотрудников.Показать();
КонецПроцедуры
6 borozavr
 
01.11.11
10:09
(5) Т=СоздатьОбъект("Таблица");
   ТабСотрудников.ВыбратьСтроки();
   Пока ТабСотрудников.ПолучитьСтроку() = 1 Цикл
      Т.ВывестиСекцию("Сотрудник")    
   КонецЦикла;
   Т.Показать("Отчет");

Ну и нарисовать макет.
7 Начинающий Админ
 
01.11.11
11:14
Сделала так. Пишет ошибку: Секция не найдена Сотрудник.
Макет есть.
 Т.Показать("Отчет"); - а в скобках название процедуры нужно писать?
8 ДенисЧ
 
01.11.11
11:15
(7) наверное, секций в макете нет? :-)
Нет, не нужно. И не процедура туда пишется.
9 Jaffar
 
01.11.11
11:16
(5) Показать() - это метод таблицы (печатной формы) - ее сначала заполнить нужно, перебирая строки ТаблицыЗначений ТабСотрудников.
(7) какие секции есть в макете? как сам макет называется? если не "Таблица" - то нужно написать еще Т.ИспользоватьТаблицу("ТутМоеИмяМакета");
10 ЧеловекДуши
 
01.11.11
11:17
Предлагаю их не включать в список
11 Начинающий Админ
 
01.11.11
11:43
Макет есть "Таблица". У меня там секции "Шапка" и "Строка". в "Строке" описаны <Сотрудник>, <Должность> и др. Если закомментировать ВывестиСекцию ("Сотрудник"), то обработка выполняется, но выводится совершенно пустая таблица, без шапки. Если оставить - пишет ошибку. Что-то я не соображу никак (((
12 zuza
 
01.11.11
11:48
(11) Т.ВывестиСекцию("Строка");
13 Jaffar
 
01.11.11
12:51
Т=СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Шапка");
ТабСотрудников.ВыбратьСтроки();
Пока ТабСотрудников.ПолучитьСтроку() = 1 Цикл
  Т.ВывестиСекцию("Сотрудник")    
КонецЦикла;
Т.Показать("Отчет");
14 Jaffar
 
01.11.11
12:54
то ест так:

Т=СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Шапка");
ТабСотрудников.ВыбратьСтроки();
Пока ТабСотрудников.ПолучитьСтроку() = 1 Цикл
  Т.ВывестиСекцию("Строка")    
КонецЦикла;
Т.Показать("Отчет");
15 Начинающий Админ
 
01.11.11
13:28
Спасибо!!! Получилось! Только вот беда - выводит данные самого первого работника во всех строках
16 Jaffar
 
01.11.11
13:50
(15) тогда в макете напиши
<ТабСотрудников.Сотрудник>, <ТабСотрудников.Должность>

или так:

Т=СоздатьОбъект("Таблица");
Т.ВывестиСекцию("Шапка");
ТабСотрудников.ВыбратьСтроки();
Пока ТабСотрудников.ПолучитьСтроку() = 1 Цикл
   Сотрудник = ТабСотрудников.Сотрудник;
   Должность = ТабСотрудников.Должность;
   Т.ВывестиСекцию("Строка")    
КонецЦикла;
Т.Показать("Отчет");

Так сможешь вычислить и вывести в таблицу произвольное значение.
17 Начинающий Админ
 
01.11.11
14:11
пробовала и так, и так, и оба способа вместе. При первом и втором способах исчезает из таблицы ФИО сотрудника, должность, а остальные данные - все одинаковые (опять по одному сотруднику). Если меняю в модуле и в таблице  
Сотрудник = ТабСотрудников.Сотрудник;
то выводится этот отчет, сотрудник не определен, и ошибка - Переменная не определена (ТабСотрудниковСотрудник)
18 Jaffar
 
01.11.11
14:18
(17) 1. ты определись - или присвоить все переменные макета в модуле и потом выводить уже их, или использовать в макете непосредственно реквизиты ТЗ.
я предпочитаю 1-й способ - так проще вносить изменения, не меняя макета.

2. Точка пропущена между "ТабСотрудников" и "Сотрудник"
19 Начинающий Админ
 
01.11.11
15:55
СПАСИБО!!! :) Наконец-то он получился! Я добавила еще присвоение ТабСотрудников в переменные условия Если и все пошло!!!! Сейчас буду разбираться с выводом только последнего отпуска сотрудника, а не всех отпусков за период.
20 Jaffar
 
01.11.11
16:16
(19) сложно, но возможно. например, в (5) перед ТабСотрудников.НоваяСтрока(); проверить, есть ли уже такой сотрудник в таблице. если есть - позиционироваться на нем и записать поверх существующей информации новую, если нет - тогда добавить новую строку и заполнить ее.
2 + 2 = 3.9999999999999999999999999999999...