Добрый день!
Необходимо немного доработать документ "Начисление отпуска" (по необходимости)...
Нужно добавить реквизит "Подразделение" (тип значения: Справочник.Подразделения) на форму, чтобы при выборе сотрудника, автоматически появлялось Подразделение.
Подскажите пожалуйста, как мне это сделать.. Я пробовала, но у меня не вышло..
Необходимо немного доработать документ "Начисление отпуска" (по необходимости)...
Нужно добавить реквизит "Подразделение" (тип значения: Справочник.Подразделения) на форму, чтобы при выборе сотрудника, автоматически появлялось Подразделение.
Подскажите пожалуйста, как мне это сделать.. Я пробовала, но у меня не вышло..
По теме из базы знаний
- Заполнение документа "Зарплата к выплате организаций" по документу "Начисление отпуска сотрудникам организаций"
- Пакетное проведение документов "Начисление отпуска"
- Печать формы Т-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);
Таб.Показать("Сформировать", "");
КонецПроцедуры
//***************************************
ВыбНачПериода=НачГода(ТекущаяДата());
ВыбКонПериода=ТекущаяДата();
Показать
(19) Irina_Su, в запросе у вас 6 группировок, а Циклов по Группировкам 8.
Зачем так много группировок в запросе?
Группировки по "Начало,Окончание,КоличествоДнейОтпуска,КоличествоДнейДополнительногоОтпуска" наверное не нужны.
Зачем так много группировок в запросе?
Группировки по "Начало,Окончание,КоличествоДнейОтпуска,КоличествоДнейДополнительногоОтпуска" наверное не нужны.
(21) TaTaPuH-Magic, согласна, лишнего написано (увлеклась)! Убрала, работает теперь. А как можно отпуск разбить на периоды... Например, сотрудник отгулял отпуск с 30.07 по 01.09.2014г. А отчет формируем на 31.08.2014г..Надо, чтобы в отчет вошел только август
(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, вот так
КалендарьОтпуска = СоздатьОбъект("Календарь." + ?(Запрос.ТекущийДокумент.ТипРасчетаОтпуска = Перечисление.ТипРасчетаОтпуска.ПоШестидневке, "Шестидневка", "ДляРасчетаОтпускаПоКалендДням"));
ДнейОтпуска = КалендарьОтпуска.Дней(Запрос.ДатаНачала, Запрос.ДатаОкончания);
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот