Добрый день.
Может кто сталкивался с такой проблемой:
в начале месяца заполняем табель с данными по графику и выгружаем в Excel. Табельщицы ведут его на участке, а в конце месяца приезжают и загружают файлы в программу. Перед загрузкой желательно перезаполнить данные по сотрудникам в табеле 1С, что бы сверить данные по сотруднику(отпуск, командировка и т.д). Воспользоваться кнопкой Заполнить нельзя т.к. в табеле не все сотрудники из подразделения (может быть бригада, звено или еще какая-то группа сотрудников). Если поиграть с кнопкой "Данные за", табель очищается. С созданием подразделения, в котором не было бы "лишних" сотрудников, тоже не вариант. Поэтому сейчас приходится перезаполнять, перевыбирая сотрудника. Так вот, вопрос такой: нельзя как-то перезаполнить данные всем сотрудникам в этом табеле нажатием одной кнопки?
(1) возможно уже не актуально, но я дорабатывал экранную форму документа табель, добавлял кнопку "Перезаполнить по сотруднику"... перезаполнялся не весь документ, а только выбранный сотрудник, так просил заказчик...
//[ПерезаполненияТабеляПострочно]
&НаКлиенте
Процедура лПерезаполнитьТекущаяСтрока(Команда)
ОчиститьСообщения();
ИдентификаторДанных = ИдентификаторДанныхИзСтрокиПредставления(ДанныеТабеляПредставление.ТекущаяОбласть);
Если ИдентификаторДанных = Неопределено Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не указана строка табеля!";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных);
КонецПроцедуры
//[ПерезаполненияТабеляПострочно]
&НаСервере
Процедура лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных)
Если ИдентификаторДанных = Неопределено Тогда
Возврат;
КонецЕсли;
СписокСотрудников = Новый Массив;
СтрокиДанных = СтрокиДанныхПоИдентификаторуДанных(ИдентификаторДанных);
Если СтрокиДанных.Количество() > 0 Тогда
СписокСотрудников.Добавить(СтрокиДанных[0].Сотрудник);
Иначе
Возврат;
КонецЕсли;
ДобавляемыеДанные = Документы.ТабельУчетаРабочегоВремени.ТаблицаДанныхДляЗаполнения(Объект, СписокСотрудников);
ИндексСтрокиДанных = Неопределено;
Для Каждого СтрокаДанных Из Объект.ДанныеОВремени.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
Если ИндексСтрокиДанных = Неопределено Тогда
ИндексСтрокиДанных = Объект.ДанныеОВремени.Индекс(СтрокаДанных);
КонецЕсли;
Объект.ДанныеОВремени.Удалить(СтрокаДанных);
КонецЦикла;
ДобавленныеСтрокиДанных = Новый Массив;
Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.ДанныеОВремени Цикл
Если ИндексСтрокиДанных = Неопределено Тогда
СтрокаДанных = Объект.ДанныеОВремени.Добавить();
Иначе
СтрокаДанных = Объект.ДанныеОВремени.Вставить(ИндексСтрокиДанных);
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, СтрокаДобавляемыхДанных);
СтрокаДанных.ИдентификаторДанных = ИдентификаторДанных;
ДобавленныеСтрокиДанных.Добавить(СтрокаДанных);
КонецЦикла;
ИндексСтрокиСмен = Неопределено;
Для Каждого СтрокаСмен Из Объект.Смены.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
Если ИндексСтрокиСмен = Неопределено Тогда
ИндексСтрокиСмен = Объект.Смены.Индекс(СтрокаСмен);
КонецЕсли;
Объект.Смены.Удалить(СтрокаСмен);
КонецЦикла;
ДобавляемыеСтрокиСмен = Новый Массив;
Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.Смены Цикл
Если ИндексСтрокиСмен = Неопределено Тогда
СтрокаСмен = Объект.Смены.Добавить();
Иначе
СтрокаСмен = Объект.Смены.Вставить(ИндексСтрокиСмен);
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаСмен, СтрокаДобавляемыхДанных);
СтрокаСмен.ИдентификаторДанных = ИдентификаторДанных;
ДобавляемыеСтрокиСмен.Добавить(СтрокаСмен);
КонецЦикла;
ПослеОбновленииСтрокДанныхТабеля(ДобавленныеСтрокиДанных, ДобавляемыеСтрокиСмен);
Модифицированность = Истина;
КонецПроцедуры
(1) возможно уже не актуально, но я дорабатывал экранную форму документа табель, добавлял кнопку "Перезаполнить по сотруднику"... перезаполнялся не весь документ, а только выбранный сотрудник, так просил заказчик...
//[ПерезаполненияТабеляПострочно]
&НаКлиенте
Процедура лПерезаполнитьТекущаяСтрока(Команда)
ОчиститьСообщения();
ИдентификаторДанных = ИдентификаторДанныхИзСтрокиПредставления(ДанныеТабеляПредставление.ТекущаяОбласть);
Если ИдентификаторДанных = Неопределено Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не указана строка табеля!";
Сообщение.Сообщить();
Возврат;
КонецЕсли;
лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных);
КонецПроцедуры
//[ПерезаполненияТабеляПострочно]
&НаСервере
Процедура лПерезаполнитьТекущаяСтрокаНаСервере(ИдентификаторДанных)
Если ИдентификаторДанных = Неопределено Тогда
Возврат;
КонецЕсли;
СписокСотрудников = Новый Массив;
СтрокиДанных = СтрокиДанныхПоИдентификаторуДанных(ИдентификаторДанных);
Если СтрокиДанных.Количество() > 0 Тогда
СписокСотрудников.Добавить(СтрокиДанных[0].Сотрудник);
Иначе
Возврат;
КонецЕсли;
ДобавляемыеДанные = Документы.ТабельУчетаРабочегоВремени.ТаблицаДанныхДляЗаполнения(Объект, СписокСотрудников);
ИндексСтрокиДанных = Неопределено;
Для Каждого СтрокаДанных Из Объект.ДанныеОВремени.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
Если ИндексСтрокиДанных = Неопределено Тогда
ИндексСтрокиДанных = Объект.ДанныеОВремени.Индекс(СтрокаДанных);
КонецЕсли;
Объект.ДанныеОВремени.Удалить(СтрокаДанных);
КонецЦикла;
ДобавленныеСтрокиДанных = Новый Массив;
Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.ДанныеОВремени Цикл
Если ИндексСтрокиДанных = Неопределено Тогда
СтрокаДанных = Объект.ДанныеОВремени.Добавить();
Иначе
СтрокаДанных = Объект.ДанныеОВремени.Вставить(ИндексСтрокиДанных);
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаДанных, СтрокаДобавляемыхДанных);
СтрокаДанных.ИдентификаторДанных = ИдентификаторДанных;
ДобавленныеСтрокиДанных.Добавить(СтрокаДанных);
КонецЦикла;
ИндексСтрокиСмен = Неопределено;
Для Каждого СтрокаСмен Из Объект.Смены.НайтиСтроки(Новый Структура("ИдентификаторДанных", ИдентификаторДанных)) Цикл
Если ИндексСтрокиСмен = Неопределено Тогда
ИндексСтрокиСмен = Объект.Смены.Индекс(СтрокаСмен);
КонецЕсли;
Объект.Смены.Удалить(СтрокаСмен);
КонецЦикла;
ДобавляемыеСтрокиСмен = Новый Массив;
Для Каждого СтрокаДобавляемыхДанных Из ДобавляемыеДанные.Смены Цикл
Если ИндексСтрокиСмен = Неопределено Тогда
СтрокаСмен = Объект.Смены.Добавить();
Иначе
СтрокаСмен = Объект.Смены.Вставить(ИндексСтрокиСмен);
КонецЕсли;
ЗаполнитьЗначенияСвойств(СтрокаСмен, СтрокаДобавляемыхДанных);
СтрокаСмен.ИдентификаторДанных = ИдентификаторДанных;
ДобавляемыеСтрокиСмен.Добавить(СтрокаСмен);
КонецЦикла;
ПослеОбновленииСтрокДанныхТабеля(ДобавленныеСтрокиДанных, ДобавляемыеСтрокиСмен);
Модифицированность = Истина;
КонецПроцедуры
(5) в догонку, чтобы красиво было нужны еще 2 процедуры
//[ПерезаполненияТабеляПострочно]
&НаСервере
Функция лПолучитьПредставлениеСотрудника(ИдентификаторДанных)
Сотрудник = Неопределено;
Если ИдентификаторДанных <> Неопределено Тогда
СтрокиДанных = СтрокиДанныхПоИдентификаторуДанных(ИдентификаторДанных);
Если СтрокиДанных.Количество() > 0 Тогда
Сотрудник = СтрокиДанных[0].Сотрудник;
КонецЕсли;
КонецЕсли;
Если Сотрудник = Неопределено Тогда
Возврат "не выбран сотрудник";
Иначе
Возврат Сотрудник.Наименование;
КонецЕсли;
КонецФункции
//[ПерезаполненияТабеляПострочно]
&НаКлиенте
Процедура лДанныеТабеляПредставлениеПриАктивизацииОбласти(Элемент)
ИдентификаторДанных = ИдентификаторДанныхИзСтрокиПредставления(ДанныеТабеляПредставление.ТекущаяОбласть);
ПредставлениеСотрудника = лПолучитьПредставлениеСотрудника(ИдентификаторДанных);
Элементы.лПерезаполнитьТекущаяСтрока.Заголовок = "Перезаполнить (" + ПредставлениеСотрудника + ")";
КонецПроцедуры
Показать
Естественно привязав событие ПриАктивизацииОбласти,
а также стоит учитывать что, это решение для "альтернативной" формы табеля... под "обычную" не делал...
(2)Больничные, командировки, отпуска оформляются штатными документами 1С. Табельщик привозит в конце месяца свой файл Excel и чтобы сверить данные фактических выходов (по ее данным) и тех, что проведены в 1С (возможно какие-то неявки не проведены в 1С или табельщик у себя ставит один вид времени, а по приказу другой). Для этого надо обновить данные в табеле данными 1С. И проблема в том, чтобы это сделать ВСЕМ СОТРУДНИКАМ В ТАБЕЛЕ на начало месяца. На основании табеля никаких документов не создаем. Если есть расхождения, выясняем кто прав и приводим в соответствие либо табель, либо кадровые документы.
P.S. Для выгрузки/загрузки табеля пользуемся обработкой от m1cr0sh https://infostart.ru/public/1214144/