Заполнение табеля

1. 3 25.06.20 15:33 Сейчас в теме
Добрый день.
Может кто сталкивался с такой проблемой:
в начале месяца заполняем табель с данными по графику и выгружаем в Excel. Табельщицы ведут его на участке, а в конце месяца приезжают и загружают файлы в программу. Перед загрузкой желательно перезаполнить данные по сотрудникам в табеле 1С, что бы сверить данные по сотруднику(отпуск, командировка и т.д). Воспользоваться кнопкой Заполнить нельзя т.к. в табеле не все сотрудники из подразделения (может быть бригада, звено или еще какая-то группа сотрудников). Если поиграть с кнопкой "Данные за", табель очищается. С созданием подразделения, в котором не было бы "лишних" сотрудников, тоже не вариант. Поэтому сейчас приходится перезаполнять, перевыбирая сотрудника. Так вот, вопрос такой: нельзя как-то перезаполнить данные всем сотрудникам в этом табеле нажатием одной кнопки?
Найденные решения
5. m1cr0sh 62 20.11.20 10:48 Сейчас в теме
(1) возможно уже не актуально, но я дорабатывал экранную форму документа табель, добавлял кнопку "Перезаполнить по сотруднику"... перезаполнялся не весь документ, а только выбранный сотрудник, так просил заказчик...

//[ПерезаполненияТабеляПострочно]
&НаКлиенте
Процедура лПерезаполнитьТекущаяСтрока(Команда)
	
	ОчиститьСообщения();
	
	ИдентификаторДанных = ИдентификаторДанныхИзСтрокиПредставления(ДанныеТабеляПредставление.ТекущаяОбласть);
	                           
	Если ИдентификаторДанных = Неопределено Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не указана строка табеля!";
		Сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных);
	
КонецПроцедуры

//[ПерезаполненияТабеляПострочно]
&НаСервере
Процедура лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных)
	
	Если ИдентификаторДанных = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	СписокСотрудников = Новый Массив;
	
	СтрокиДанных = СтрокиДанныхПоИдентификаторуДанных(ИдентификаторДанных);
	Если СтрокиДанных.Количество() > 0 Тогда
		СписокСотрудников.Добавить(СтрокиДанных[0].Сотрудник);
	Иначе
		Возврат;
	КонецЕсли;
	
	ДобавляемыеДанные = Документы.ТабельУчетаРабочегоВремени.ТаблицаДанныхДляЗаполнения(Объект, СписокСотрудников);
	
	ИндексСтрокиДанных = Неопределено;
	Для Каждого СтрокаДанных Из Объект.ДанныеОВремени.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
		Если ИндексСтрокиДанных = Неопределено Тогда
			ИндексСтрокиДанных = Объект.ДанныеОВремени.Индекс(СтрокаДанных);
		КонецЕсли;
		Объект.ДанныеОВремени.Удалить(СтрокаДанных);
	КонецЦикла;
	ДобавленныеСтрокиДанных = Новый Массив;
	Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.ДанныеОВремени Цикл
		Если ИндексСтрокиДанных = Неопределено Тогда
			СтрокаДанных = Объект.ДанныеОВремени.Добавить();
		Иначе
			СтрокаДанных = Объект.ДанныеОВремени.Вставить(ИндексСтрокиДанных);
		КонецЕсли;
		ЗаполнитьЗначенияСвойств(СтрокаДанных, СтрокаДобавляемыхДанных);
		СтрокаДанных.ИдентификаторДанных = ИдентификаторДанных;
		ДобавленныеСтрокиДанных.Добавить(СтрокаДанных);
	КонецЦикла;	
	
	ИндексСтрокиСмен = Неопределено;
	Для Каждого СтрокаСмен Из Объект.Смены.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
		Если ИндексСтрокиСмен = Неопределено Тогда
			ИндексСтрокиСмен = Объект.Смены.Индекс(СтрокаСмен);
		КонецЕсли;
		Объект.Смены.Удалить(СтрокаСмен);
	КонецЦикла;
	ДобавляемыеСтрокиСмен = Новый Массив;
	Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.Смены Цикл
		Если ИндексСтрокиСмен = Неопределено Тогда
			СтрокаСмен = Объект.Смены.Добавить();
		Иначе
			СтрокаСмен = Объект.Смены.Вставить(ИндексСтрокиСмен);
		КонецЕсли;
		ЗаполнитьЗначенияСвойств(СтрокаСмен, СтрокаДобавляемыхДанных);
		СтрокаСмен.ИдентификаторДанных = ИдентификаторДанных;
		ДобавляемыеСтрокиСмен.Добавить(СтрокаСмен);
	КонецЦикла;	
	
	ПослеОбновленииСтрокДанныхТабеля(ДобавленныеСтрокиДанных, ДобавляемыеСтрокиСмен);
	
	Модифицированность = Истина;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
5. m1cr0sh 62 20.11.20 10:48 Сейчас в теме
(1) возможно уже не актуально, но я дорабатывал экранную форму документа табель, добавлял кнопку "Перезаполнить по сотруднику"... перезаполнялся не весь документ, а только выбранный сотрудник, так просил заказчик...

//[ПерезаполненияТабеляПострочно]
&НаКлиенте
Процедура лПерезаполнитьТекущаяСтрока(Команда)
	
	ОчиститьСообщения();
	
	ИдентификаторДанных = ИдентификаторДанныхИзСтрокиПредставления(ДанныеТабеляПредставление.ТекущаяОбласть);
	                           
	Если ИдентификаторДанных = Неопределено Тогда
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не указана строка табеля!";
		Сообщение.Сообщить();
		Возврат;
	КонецЕсли;
	
	лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных);
	
КонецПроцедуры

//[ПерезаполненияТабеляПострочно]
&НаСервере
Процедура лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных)
	
	Если ИдентификаторДанных = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	СписокСотрудников = Новый Массив;
	
	СтрокиДанных = СтрокиДанныхПоИдентификаторуДанных(ИдентификаторДанных);
	Если СтрокиДанных.Количество() > 0 Тогда
		СписокСотрудников.Добавить(СтрокиДанных[0].Сотрудник);
	Иначе
		Возврат;
	КонецЕсли;
	
	ДобавляемыеДанные = Документы.ТабельУчетаРабочегоВремени.ТаблицаДанныхДляЗаполнения(Объект, СписокСотрудников);
	
	ИндексСтрокиДанных = Неопределено;
	Для Каждого СтрокаДанных Из Объект.ДанныеОВремени.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
		Если ИндексСтрокиДанных = Неопределено Тогда
			ИндексСтрокиДанных = Объект.ДанныеОВремени.Индекс(СтрокаДанных);
		КонецЕсли;
		Объект.ДанныеОВремени.Удалить(СтрокаДанных);
	КонецЦикла;
	ДобавленныеСтрокиДанных = Новый Массив;
	Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.ДанныеОВремени Цикл
		Если ИндексСтрокиДанных = Неопределено Тогда
			СтрокаДанных = Объект.ДанныеОВремени.Добавить();
		Иначе
			СтрокаДанных = Объект.ДанныеОВремени.Вставить(ИндексСтрокиДанных);
		КонецЕсли;
		ЗаполнитьЗначенияСвойств(СтрокаДанных, СтрокаДобавляемыхДанных);
		СтрокаДанных.ИдентификаторДанных = ИдентификаторДанных;
		ДобавленныеСтрокиДанных.Добавить(СтрокаДанных);
	КонецЦикла;	
	
	ИндексСтрокиСмен = Неопределено;
	Для Каждого СтрокаСмен Из Объект.Смены.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
		Если ИндексСтрокиСмен = Неопределено Тогда
			ИндексСтрокиСмен = Объект.Смены.Индекс(СтрокаСмен);
		КонецЕсли;
		Объект.Смены.Удалить(СтрокаСмен);
	КонецЦикла;
	ДобавляемыеСтрокиСмен = Новый Массив;
	Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.Смены Цикл
		Если ИндексСтрокиСмен = Неопределено Тогда
			СтрокаСмен = Объект.Смены.Добавить();
		Иначе
			СтрокаСмен = Объект.Смены.Вставить(ИндексСтрокиСмен);
		КонецЕсли;
		ЗаполнитьЗначенияСвойств(СтрокаСмен, СтрокаДобавляемыхДанных);
		СтрокаСмен.ИдентификаторДанных = ИдентификаторДанных;
		ДобавляемыеСтрокиСмен.Добавить(СтрокаСмен);
	КонецЦикла;	
	
	ПослеОбновленииСтрокДанныхТабеля(ДобавленныеСтрокиДанных, ДобавляемыеСтрокиСмен);
	
	Модифицированность = Истина;
	
КонецПроцедуры
Показать
Прикрепленные файлы:
6. m1cr0sh 62 20.11.20 16:27 Сейчас в теме
(5) в догонку, чтобы красиво было нужны еще 2 процедуры
//[ПерезаполненияТабеляПострочно]
&НаСервере
Функция лПолучитьПредставлениеСотрудника(ИдентификаторДанных)
	
	Сотрудник = Неопределено;
	Если ИдентификаторДанных <> Неопределено Тогда
		СтрокиДанных = СтрокиДанныхПоИдентификаторуДанных(ИдентификаторДанных);
		Если СтрокиДанных.Количество() > 0 Тогда
			Сотрудник = СтрокиДанных[0].Сотрудник;
		КонецЕсли;	
	КонецЕсли;	
	
	Если Сотрудник = Неопределено Тогда
		Возврат "не выбран сотрудник";
	Иначе	
		Возврат Сотрудник.Наименование;
	КонецЕсли;
	
КонецФункции	

//[ПерезаполненияТабеляПострочно]
&НаКлиенте
Процедура лДанныеТабеляПредставлениеПриАктивизацииОбласти(Элемент)
	
	ИдентификаторДанных = ИдентификаторДанныхИзСтрокиПредставления(ДанныеТабеляПредставление.ТекущаяОбласть);
	ПредставлениеСотрудника = лПолучитьПредставлениеСотрудника(ИдентификаторДанных);
	Элементы.лПерезаполнитьТекущаяСтрока.Заголовок = "Перезаполнить (" + ПредставлениеСотрудника + ")";
	
КонецПроцедуры
Показать

Естественно привязав событие ПриАктивизацииОбласти,
а также стоит учитывать что, это решение для "альтернативной" формы табеля... под "обычную" не делал...
mart-artur; +1 Ответить
2. soft_wind 25.06.20 16:12 Сейчас в теме
а как вы из табеля грузите первичку? документы Больничный лист, Оформление командировки и др.?
3. pavl_vs 25.06.20 20:34 Сейчас в теме
как вы из табеля грузите первичку?

(2), Вы что-то не то пишете, наверно так: "как на основе полученного табеля создается какой-либо документ?".
4. mart-artur 3 26.06.20 06:22 Сейчас в теме
(2)Больничные, командировки, отпуска оформляются штатными документами 1С. Табельщик привозит в конце месяца свой файл Excel и чтобы сверить данные фактических выходов (по ее данным) и тех, что проведены в 1С (возможно какие-то неявки не проведены в 1С или табельщик у себя ставит один вид времени, а по приказу другой). Для этого надо обновить данные в табеле данными 1С. И проблема в том, чтобы это сделать ВСЕМ СОТРУДНИКАМ В ТАБЕЛЕ на начало месяца. На основании табеля никаких документов не создаем. Если есть расхождения, выясняем кто прав и приводим в соответствие либо табель, либо кадровые документы.
P.S. Для выгрузки/загрузки табеля пользуемся обработкой от m1cr0sh https://infostart.ru/public/1214144/
Оставьте свое сообщение
Вопросы с вознаграждением