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

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 Сейчас в теме
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, вот так
	КалендарьОтпуска = СоздатьОбъект("Календарь." + ?(Запрос.ТекущийДокумент.ТипРасчетаОтпуска = Перечисление.ТипРасчетаОтпуска.ПоШестидневке, "Шестидневка", "ДляРасчетаОтпускаПоКалендДням"));
	ДнейОтпуска = КалендарьОтпуска.Дней(Запрос.ДатаНачала, Запрос.ДатаОкончания);
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)