Документ "Начисление отпуска"

1. АЛИСА В СТРАНЕ ЧУДЕС 20.08.14 15:23 Сейчас в теме
Добрый день!

Необходимо немного доработать документ "Начисление отпуска" (по необходимости)...
Нужно добавить реквизит "Подразделение" (тип значения: Справочник.Подразделения) на форму, чтобы при выборе сотрудника, автоматически появлялось Подразделение.
Подскажите пожалуйста, как мне это сделать.. Я пробовала, но у меня не вышло..
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. jack19 148 20.08.14 16:16 Сейчас в теме
(1) Irina_Su, А, если не секрет, зачем это нужно? А то может и не надо ничего добавлять.
+
14. АЛИСА В СТРАНЕ ЧУДЕС 27.08.14 11:32 Сейчас в теме
Помогите пожалуйста , отчет не формируется...

//*******************************************

Процедура Очистить()
          ВыбПодразделения='';
КонецПроцедуры

Процедура Сформировать()
	Перем Запрос, ТекстЗапроса, Таб;
	
	Запрос = СоздатьОбъект("Запрос");
	ТекстЗапроса = 
	"//{{ЗАПРОС(Сформировать)
	|Период с ВыбНачПериода по ВыбКонПериода;
	|Обрабатывать НеПомеченныеНаУдаление;
	|Сотрудник = Документ.НачислениеОтпуска.Сотрудник.ТекущийЭлемент;
	|Начало = Документ.НачислениеОтпуска.Начало;
	|Окончание = Документ.НачислениеОтпуска.Окончание;
	|КоличествоДнейДополнительногоОтпуска = Документ.НачислениеОтпуска.КоличествоДнейДополнительногоОтпуска;
	|КоличествоДнейОтпуска = Документ.НачислениеОтпуска.КоличествоДнейОтпуска;
	|Подразделения = Документ.НачислениеОтпуска.Сотрудник.Подразделение.ТекущийЭлемент;
	|ВидОтпуска = Документ.НачислениеОтпуска.ВидОтпуска;
	|Группировка Подразделения упорядочить по Подразделения.Наименование;
	|Группировка Сотрудник без групп;
	|Группировка Начало;
	|Группировка Окончание;
	|Группировка КоличествоДнейОтпуска;
	|Группировка КоличествоДнейДополнительногоОтпуска;
	|Условие(Подразделения в ВыбПодразделения);
	|"//}}ЗАПРОС
	;
	// Если ошибка в запросе, то выход из процедуры
	Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
		Возврат;
	КонецЕсли;
   сообщить (запрос.сотрудник);
	// Подготовка к заполнению выходных форм данными запроса
	Таб = СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица("Сформировать");
	// Заполнение полей "Заголовок"
	Таб.ВывестиСекцию("Заголовок");
	Состояние("Заполнение выходной таблицы...");
	Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0);


	Пока Запрос.Группировка(1) = 1 Цикл
		// Заполнение полей Подразделения
		Таб.ВывестиСекцию("Подразделения");
		Пока Запрос.Группировка(2) = 1 Цикл
				Пока Запрос.Группировка(3) = 1 Цикл
						Пока Запрос.Группировка(4) = 1 Цикл
				    			Пока Запрос.Группировка(5) = 1 Цикл
					       				Пока Запрос.Группировка(6) = 1 Цикл
						                		Пока Запрос.Группировка(7) = 1 Цикл
							                  			Пока Запрос.Группировка(8) = 1 Цикл
									 Если Запрос.ВидОтпуска = ВидРасчета.ОтпускОчередной Тогда
									
									Таб.ВывестиСекцию("КоличествоДнейДополнительногоОтпуска");
							       КонецЕсли;
								КонецЦикла;
							КонецЦикла;
						КонецЦикла;
					КонецЦикла;
				КонецЦикла;
			КонецЦикла;
		КонецЦикла;
	КонецЦикла;
	
	// Вывод заполненной формы
	Таб.ТолькоПросмотр(1);
	Таб.Показать("Сформировать", "");
КонецПроцедуры

//***************************************
ВыбНачПериода=НачГода(ТекущаяДата());
ВыбКонПериода=ТекущаяДата();
Показать
+
15. Cooler 22 27.08.14 11:41 Сейчас в теме
(14)
Помогите пожалуйста , отчет не формируется...
А почему же 21.08.2014 в (7) было:

Отчет формируется. Если поставить вручную подразделение, то все хорошо.

"Поздравляю вас, гражданин, соврамши!"
+
16. АЛИСА В СТРАНЕ ЧУДЕС 27.08.14 11:46 Сейчас в теме
(15) Cooler, один отчёт у меня работает с тем, что мы с вами выше проделали..
А данный отчет не хочет
+
17. TaTaPuH-Magic 12 27.08.14 12:27 Сейчас в теме
(16) Irina_Su, а почему данный отчет не хочет? Ошибки какие ни будь выводит или пустой отчет получается?
+
18. Cooler 22 27.08.14 12:31 Сейчас в теме
(17) Я бы вообще просто порекомендовал отладчик, но почему-то сомневаюсь в полезности такого совета в данном случае.
+
19. АЛИСА В СТРАНЕ ЧУДЕС 27.08.14 13:54 Сейчас в теме
(17) TaTaPuH-Magic, получается пустой отчет
+
21. TaTaPuH-Magic 12 27.08.14 14:22 Сейчас в теме
(19) Irina_Su, в запросе у вас 6 группировок, а Циклов по Группировкам 8.
Зачем так много группировок в запросе?

Группировки по "Начало,Окончание,КоличествоДнейОтпуска,КоличествоДнейДополнительногоОтпуска" наверное не нужны.
+
22. АЛИСА В СТРАНЕ ЧУДЕС 27.08.14 14:28 Сейчас в теме
(21) TaTaPuH-Magic, согласна, лишнего написано (увлеклась)! Убрала, работает теперь. А как можно отпуск разбить на периоды... Например, сотрудник отгулял отпуск с 30.07 по 01.09.2014г. А отчет формируем на 31.08.2014г..Надо, чтобы в отчет вошел только август
+
23. TaTaPuH-Magic 12 27.08.14 14:35 Сейчас в теме
(22) Irina_Su, запрос делать не по документу, а по журналу расчетов с условием по виду расчета. Пока времени нет точнее описать.

P.S. у вас в условие стоит
Если Запрос.ВидОтпуска = ВидРасчета.ОтпускОчередной Тогда
а выводите
Таб.ВывестиСекцию("КоличествоДнейДополнительногоОтпуска");
Если очередной отпуск, то выводим дополнительный? Там всё правильно?
+
24. АЛИСА В СТРАНЕ ЧУДЕС 27.08.14 14:37 Сейчас в теме
(23) TaTaPuH-Magic, В документе Начисление отпуска есть Основные дни и дополнительные, поэтому так прописано
+
3. АЛИСА В СТРАНЕ ЧУДЕС 20.08.14 16:20 Сейчас в теме
Для отчета Количество дней основного и дополнительно отпуска, по цехам...
Чтобы не писать дополнительный ОТЧЕТ, решили добавить в документ, данный реквизит. И готово)))
+
8. jack19 148 21.08.14 08:56 Сейчас в теме
(3) Irina_Su,
Для отчета Количество дней основного и дополнительно отпуска, по цехам...
Чтобы не писать дополнительный ОТЧЕТ, решили добавить в документ, данный реквизит. И готово)))

Это называется "из пушке по воробьям". В любом отчете подразделение сотрудника, ушедшего в отпуск, определяется одной строчкой:
Подразделение = ДокументОтпуска.Сотрудник.Подразделение.Получить(ДокументОтпуска.Начало);
И нечего огород городить.
+
4. Cooler 22 20.08.14 17:33 Сейчас в теме
Чтобы не писать дополнительный ОТЧЕТ, решили добавить в документ, данный реквизит. И готово)))
Боюсь, у вас весьма романтическое представление о готовности программы самой делать то, что вам хочется.

Сначала попробуйте просто добавить реквизит "Подразделение", без автозаполнения, и посмотреть - а получилось ли "и готово"?

Если получилось, то следующим этапом будет подумать над вопросом: какое одно подразделение должно появиться в случаях:

1. Перехода сотрудником из одного подразделения в другое в течение, например, последнего года.
2. Совместительства сотрудника должностей из разных подразделений.
+
5. АЛИСА В СТРАНЕ ЧУДЕС 20.08.14 19:18 Сейчас в теме
Реквизит Подразделение необходим на Дату документа Начисление отпуска. Реквизит добавлен, но автозаполения не получается. Если можете, помогите.
+
6. Cooler 22 20.08.14 21:27 Сейчас в теме
(5) Ффух! Да поможем, поможем... Вы сначала попробуйте заполнить этот реквизит вручную (выбрать кнопкой), записать документ и сформировать этот свой отчет "Количество дней основного и дополнительно отпуска" - повлияет на него само наличие реквизита "Подразделение" в документе или нет? А то лично я что-то сомневаюсь...
+
7. АЛИСА В СТРАНЕ ЧУДЕС 21.08.14 07:41 Сейчас в теме
(6) Cooler, Отчет формируется. Если поставить вручную подразделение, то все хорошо.
+
9. Cooler 22 21.08.14 10:32 Сейчас в теме
(7) Ну, раз формируется, то как обещал:

В свойства реквизита "Сотрудник" ("Формула" на закладке "Дополнительно") вставляем: ПриВыбореСотрудника()

А в тексте модуля пишем:

Процедура ПриВыбореСотрудника()

   Если Сотрудник.Выбран()=1 Тогда
      Подразделение = Сотрудник.Подразделение.Получить(ДатаДок);
   КонецЕсли;

КонецПроцедуры


P.S. Подразделение будет выбираться на дату документа, как просили. Если все-таки надо на дату начала отпуска, то ДатаДок заменяется на Начало
+
10. jack19 148 21.08.14 10:46 Сейчас в теме
(9) Cooler, Ну да, ну да. А если после дату поменять, то тоже надо подразделение обновить. А если при вводе нового документа или при вводе "на основании" Сотрудник автоматически заполняется, то тоже подразделение нужно установить. Только не вижу вообще в этом смысла.
+
11. АЛИСА В СТРАНЕ ЧУДЕС 21.08.14 10:47 Сейчас в теме
(9) Cooler, Я так уже делала..Единственное, что у меня не так. В стандартной конфигурации в формуле Сотрудника прописано уже "ПриИзмененииСотрудника()".. Как быть в таком случае?
+
12. Cooler 22 21.08.14 10:59 Сейчас в теме
(11) Да, действительно, я не посмотрел, что формула там уже есть. Ну что ж, это не проблема, а проблемка, которая решается как минимум двумя способами:

1. В процедуру ПриИзмененииСотрудника() вставляем вызов нашей процедурки, во избежание путаницы лучше ее переименовать во что-то типа ЗаполнениеПодразделения()

2. Добавляем в формулу вызов второй процедуры через точку с запятой: "ПриИзмененииСотрудника();ЗаполнениеПодразделения()"

С учетом замечаний jack19 в (10), который, безусловно, прав, такую же манипуляцию проделываем с процедурой ПриИзмененииДатыДокумента() или с полем "ДатаДок".

И с вводом на основании все несложно: в процедуре ВводНаОсновании(ДокументОснование) в двух местах после
Сотрудник = ДокументОснование.Сотрудник;

вставляем строчку:
ЗаполнениеПодразделения();
+
13. АЛИСА В СТРАНЕ ЧУДЕС 21.08.14 11:17 Сейчас в теме
(12) Cooler, В сотрудник добавила формулу.Теперь все получается.Сейчас посмотрю процедуру ПриИзмененииДатыДокумента() ... Спасибо за помощь, очень выручили )))
Если будут вопросы, я у вас уточню...
+
20. SpiritBad 27.08.14 14:21 Сейчас в теме
если исключить условие по подразделению, что выдает?
+
25. АЛИСА В СТРАНЕ ЧУДЕС 28.08.14 11:26 Сейчас в теме
Cпасите пожалуйста!!!
+
26. jack19 148 28.08.14 12:07 Сейчас в теме
(25) Irina_Su, Вы делаете для определенного подразделения? Иначе говоря, ВыбПодразделения (видимо на форме) выбран? Короче правильнее будет:
ТекстЗапроса = 
    "//{{ЗАПРОС(Сформировать)
    |Период с ВыбНачПериода по ВыбКонПериода;
    |Обрабатывать НеПомеченныеНаУдаление;
    |Сотрудник = Документ.НачислениеОтпуска.Сотрудник.ТекущийЭлемент;
    |Начало = Документ.НачислениеОтпуска.Начало;
    |Окончание = Документ.НачислениеОтпуска.Окончание;
    |КоличествоДнейДополнительногоОтпуска = Документ.НачислениеОтпуска.КоличествоДнейДополнительногоОтпуска;
    |КоличествоДнейОтпуска = Документ.НачислениеОтпуска.КоличествоДнейОтпуска;
    |Подразделения = Документ.НачислениеОтпуска.Сотрудник.Подразделение.ТекущийЭлемент;
    |ВидОтпуска = Документ.НачислениеОтпуска.ВидОтпуска;
    |Группировка Подразделения упорядочить по Подразделения.Наименование;
    |Группировка Сотрудник без групп;
    |Группировка Начало;
    |Группировка Окончание;
    |Группировка КоличествоДнейОтпуска;
    |Группировка КоличествоДнейДополнительногоОтпуска;";
    Если ПустоеЗначение(ВыбПодразделения)=0 Тогда
         ТекстЗапроса = ТекстЗапроса + "
         |Условие(Подразделения в ВыбПодразделения);";
    КонецЕсли;
    ТекстЗапроса = ТекстЗапроса + "
    |"//}}ЗАПРОС
Показать
+
27. АЛИСА В СТРАНЕ ЧУДЕС 28.08.14 14:46 Сейчас в теме
(26) jack19, сделала, как правильно! А если тянуть данные из журнала расчетов,как можно получить дни по календарю (просто в ЖР у нас - рабочие дни)
+
28. TaTaPuH-Magic 12 28.08.14 15:29 Сейчас в теме
(27) Irina_Su, вот так
	КалендарьОтпуска = СоздатьОбъект("Календарь." + ?(Запрос.ТекущийДокумент.ТипРасчетаОтпуска = Перечисление.ТипРасчетаОтпуска.ПоШестидневке, "Шестидневка", "ДляРасчетаОтпускаПоКалендДням"));
	ДнейОтпуска = КалендарьОтпуска.Дней(Запрос.ДатаНачала, Запрос.ДатаОкончания);
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот