Документ "Начисление отпуска"
Добрый день!
Необходимо немного доработать документ "Начисление отпуска" (по необходимости)...
Нужно добавить реквизит "Подразделение" (тип значения: Справочник.Подразделения) на форму, чтобы при выборе сотрудника, автоматически появлялось Подразделение.
Подскажите пожалуйста, как мне это сделать.. Я пробовала, но у меня не вышло..
Необходимо немного доработать документ "Начисление отпуска" (по необходимости)...
Нужно добавить реквизит "Подразделение" (тип значения: Справочник.Подразделения) на форму, чтобы при выборе сотрудника, автоматически появлялось Подразделение.
Подскажите пожалуйста, как мне это сделать.. Я пробовала, но у меня не вышло..
По теме из базы знаний
- Заполнение документа "Зарплата к выплате организаций" по документу "Начисление отпуска сотрудникам организаций"
- Пакетное проведение документов "Начисление отпуска"
- Печать формы Т-60 из документа Начисление отпуска сотрудникам организаций (УПП 1.3)
- Контроль для 6-НДФЛ по документу "Начисление отпуска сотрудникам организации". УПП
- Контроль для 6-НДФЛ по документу "Начисление отпуска сотрудникам организации". ЗУП
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Помогите пожалуйста , отчет не формируется...
//*******************************************
Процедура Очистить()
ВыбПодразделения='';
КонецПроцедуры
Процедура Сформировать()
Перем Запрос, ТекстЗапроса, Таб;
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Сотрудник = Документ.НачислениеОтпуска.Сотрудник.ТекущийЭлемент;
|Начало = Документ.НачислениеОтпуска.Начало;
|Окончание = Документ.НачислениеОтпуска.Окончание;
|КоличествоДнейДополнительногоОтпуска = Документ.НачислениеОтпуска.КоличествоДнейДополнительногоОтпуска;
|КоличествоДнейОтпуска = Документ.НачислениеОтпуска.КоличествоДнейОтпуска;
|Подразделения = Документ.НачислениеОтпуска.Сотрудник.Подразделение.ТекущийЭлемент;
|ВидОтпуска = Документ.НачислениеОтпуска.ВидОтпуска;
|Группировка Подразделения упорядочить по Подразделения.Наименование;
|Группировка Сотрудник без групп;
|Группировка Начало;
|Группировка Окончание;
|Группировка КоличествоДнейОтпуска;
|Группировка КоличествоДнейДополнительногоОтпуска;
|Условие(Подразделения в ВыбПодразделения);
|"//}}ЗАПРОС
;
// Если ошибка в запросе, то выход из процедуры
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
сообщить (запрос.сотрудник);
// Подготовка к заполнению выходных форм данными запроса
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Сформировать");
// Заполнение полей "Заголовок"
Таб.ВывестиСекцию("Заголовок");
Состояние("Заполнение выходной таблицы...");
Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);
Пока Запрос.Группировка(1) = 1 Цикл
// Заполнение полей Подразделения
Таб.ВывестиСекцию("Подразделения");
Пока Запрос.Группировка(2) = 1 Цикл
Пока Запрос.Группировка(3) = 1 Цикл
Пока Запрос.Группировка(4) = 1 Цикл
Пока Запрос.Группировка(5) = 1 Цикл
Пока Запрос.Группировка(6) = 1 Цикл
Пока Запрос.Группировка(7) = 1 Цикл
Пока Запрос.Группировка(8) = 1 Цикл
Если Запрос.ВидОтпуска = ВидРасчета.ОтпускОчередной Тогда
Таб.ВывестиСекцию("КоличествоДнейДополнительногоОтпуска");
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецЦикла;
// Вывод заполненной формы
Таб.ТолькоПросмотр(1);
Таб.Показать("Сформировать", "");
КонецПроцедуры
//***************************************
ВыбНачПериода=НачГода(ТекущаяДата());
ВыбКонПериода=ТекущаяДата();
Показать
(22) Irina_Su, запрос делать не по документу, а по журналу расчетов с условием по виду расчета. Пока времени нет точнее описать.
P.S. у вас в условие стоит а выводите Если очередной отпуск, то выводим дополнительный? Там всё правильно?
P.S. у вас в условие стоит
Если Запрос.ВидОтпуска = ВидРасчета.ОтпускОчередной Тогда
Таб.ВывестиСекцию("КоличествоДнейДополнительногоОтпуска");
(3) Irina_Su,
Это называется "из пушке по воробьям". В любом отчете подразделение сотрудника, ушедшего в отпуск, определяется одной строчкой:
Подразделение = ДокументОтпуска.Сотрудник.Подразделение.Получить(ДокументОтпуска.Начало);
И нечего огород городить.
Для отчета Количество дней основного и дополнительно отпуска, по цехам...
Чтобы не писать дополнительный ОТЧЕТ, решили добавить в документ, данный реквизит. И готово)))
Чтобы не писать дополнительный ОТЧЕТ, решили добавить в документ, данный реквизит. И готово)))
Это называется "из пушке по воробьям". В любом отчете подразделение сотрудника, ушедшего в отпуск, определяется одной строчкой:
Подразделение = ДокументОтпуска.Сотрудник.Подразделение.Получить(ДокументОтпуска.Начало);
И нечего огород городить.
Чтобы не писать дополнительный ОТЧЕТ, решили добавить в документ, данный реквизит. И готово)))
Боюсь, у вас весьма романтическое представление о готовности программы самой делать то, что вам хочется.
Сначала попробуйте просто добавить реквизит "Подразделение", без автозаполнения, и посмотреть - а получилось ли "и готово"?
Если получилось, то следующим этапом будет подумать над вопросом: какое одно подразделение должно появиться в случаях:
1. Перехода сотрудником из одного подразделения в другое в течение, например, последнего года.
2. Совместительства сотрудника должностей из разных подразделений.
(5) Ффух! Да поможем, поможем... Вы сначала попробуйте заполнить этот реквизит вручную (выбрать кнопкой), записать документ и сформировать этот свой отчет "Количество дней основного и дополнительно отпуска" - повлияет на него само наличие реквизита "Подразделение" в документе или нет? А то лично я что-то сомневаюсь...
(7) Ну, раз формируется, то как обещал:
В свойства реквизита "Сотрудник" ("Формула" на закладке "Дополнительно") вставляем: ПриВыбореСотрудника()
А в тексте модуля пишем:
P.S. Подразделение будет выбираться на дату документа, как просили. Если все-таки надо на дату начала отпуска, то ДатаДок заменяется на Начало
В свойства реквизита "Сотрудник" ("Формула" на закладке "Дополнительно") вставляем: ПриВыбореСотрудника()
А в тексте модуля пишем:
Процедура ПриВыбореСотрудника()
Если Сотрудник.Выбран()=1 Тогда
Подразделение = Сотрудник.Подразделение.Получить(ДатаДок);
КонецЕсли;
КонецПроцедуры
P.S. Подразделение будет выбираться на дату документа, как просили. Если все-таки надо на дату начала отпуска, то ДатаДок заменяется на Начало
(9) Cooler, Ну да, ну да. А если после дату поменять, то тоже надо подразделение обновить. А если при вводе нового документа или при вводе "на основании" Сотрудник автоматически заполняется, то тоже подразделение нужно установить. Только не вижу вообще в этом смысла.
(11) Да, действительно, я не посмотрел, что формула там уже есть. Ну что ж, это не проблема, а проблемка, которая решается как минимум двумя способами:
1. В процедуру ПриИзмененииСотрудника() вставляем вызов нашей процедурки, во избежание путаницы лучше ее переименовать во что-то типа ЗаполнениеПодразделения()
2. Добавляем в формулу вызов второй процедуры через точку с запятой: "ПриИзмененииСотрудника();ЗаполнениеПодразделения()"
С учетом замечаний jack19 в (10), который, безусловно, прав, такую же манипуляцию проделываем с процедурой ПриИзмененииДатыДокумента() или с полем "ДатаДок".
И с вводом на основании все несложно: в процедуре ВводНаОсновании(ДокументОснование) в двух местах после
вставляем строчку:
1. В процедуру ПриИзмененииСотрудника() вставляем вызов нашей процедурки, во избежание путаницы лучше ее переименовать во что-то типа ЗаполнениеПодразделения()
2. Добавляем в формулу вызов второй процедуры через точку с запятой: "ПриИзмененииСотрудника();ЗаполнениеПодразделения()"
С учетом замечаний jack19 в (10), который, безусловно, прав, такую же манипуляцию проделываем с процедурой ПриИзмененииДатыДокумента() или с полем "ДатаДок".
И с вводом на основании все несложно: в процедуре ВводНаОсновании(ДокументОснование) в двух местах после
Сотрудник = ДокументОснование.Сотрудник;
вставляем строчку:
ЗаполнениеПодразделения();
(25) Irina_Su, Вы делаете для определенного подразделения? Иначе говоря, ВыбПодразделения (видимо на форме) выбран? Короче правильнее будет:
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Сотрудник = Документ.НачислениеОтпуска.Сотрудник.ТекущийЭлемент;
|Начало = Документ.НачислениеОтпуска.Начало;
|Окончание = Документ.НачислениеОтпуска.Окончание;
|КоличествоДнейДополнительногоОтпуска = Документ.НачислениеОтпуска.КоличествоДнейДополнительногоОтпуска;
|КоличествоДнейОтпуска = Документ.НачислениеОтпуска.КоличествоДнейОтпуска;
|Подразделения = Документ.НачислениеОтпуска.Сотрудник.Подразделение.ТекущийЭлемент;
|ВидОтпуска = Документ.НачислениеОтпуска.ВидОтпуска;
|Группировка Подразделения упорядочить по Подразделения.Наименование;
|Группировка Сотрудник без групп;
|Группировка Начало;
|Группировка Окончание;
|Группировка КоличествоДнейОтпуска;
|Группировка КоличествоДнейДополнительногоОтпуска;";
Если ПустоеЗначение(ВыбПодразделения)=0 Тогда
ТекстЗапроса = ТекстЗапроса + "
|Условие(Подразделения в ВыбПодразделения);";
КонецЕсли;
ТекстЗапроса = ТекстЗапроса + "
|"//}}ЗАПРОС
Показать
(27) Irina_Su, вот так
КалендарьОтпуска = СоздатьОбъект("Календарь." + ?(Запрос.ТекущийДокумент.ТипРасчетаОтпуска = Перечисление.ТипРасчетаОтпуска.ПоШестидневке, "Шестидневка", "ДляРасчетаОтпускаПоКалендДням"));
ДнейОтпуска = КалендарьОтпуска.Дней(Запрос.ДатаНачала, Запрос.ДатаОкончания);
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)