Обработка 1С распределения времени сотрудников в таблице значений

Здравствуйте, уважаемые читатели блога SoftMaker.kz! Не так давно я опубликовал статью, в которой привел ряд примеров программирования с таблицей значений. Хотя в сегодняшней обработке не используется ни один из примеров из той статьи, тем не менее весь расчет времени сотрудников основан на работе с таблицей значений.

Внешний вид обработки распределения времени сотрудников следующий:

Форма обработки 1С8 распределения времени сотрудников

Описание работы обработки распределения времени сотрудников

Часто на определенное задание или проект выделяется время и вам нужно быстро распределить его между исполнителями, выделив каждому равное количество. Данная обработка помогает это сделать буквально за один клик. Но для начала необходимо заполнить некоторые поля и таблицу значений.

  1. Заполните строки таблицы значений в колонке «Исполнитель». Для добавления строк можно воспользоваться кнопкой «Добавить (Ins)» в панели задач обработки (зеленая кнопка с белым плюсом).
  2. Введите общее количество времени (минуты), которое будет затрачено на проект, в поле «Общее время».
  3. Нажмите кнопку «Распределить» для распределения, указанного количества времени.
  4. Также можно изменить количество времени в поле «Время каждому», чтобы в первым в списке исполнителям было распределено именно это время, а остаток последнему. Это удобно, если вам нужно перераспределить время именно таким образом.

Поля, которые вы заполнили, будут сохранены для следующего сеанса работы. Когда вы откроете обработку снова, то увидите, что значения полей были сохранены.

Описание программного кода распределения времени на встроенном языке 1С

Когда вы нажимаете кнопку «Распределить» срабатывает процедура «Распределить» и происходит распределение времени из поля «Общее время». На основании значения из этого поля происходит расчет времени для каждого сотрудника. Заполняются колонки таблицы значений «Минуты» и «Примечание».

// Процедура распределяет время в таблице
Процедура Распределить(ПоКаждому = Истина)
	Если Заполнено() Тогда
		// Получим количество строк в таблице
		Количество = ТаблицаРаспределения.Количество();
		Если ПоКаждому Тогда
			...
		КонецЕсли;
		Мин = 0;
		Для каждого Стр Из ТаблицаРаспределения Цикл
			// Получим номер строки таблицы значений 
			Индекс = ТаблицаРаспределения.Индекс(Стр) + 1;
			Если Количество = Индекс Тогда
				Если Остаток = 0 Тогда
					Прервать;
				КонецЕсли;
				Стр.Минуты = Остаток;
				Стр.Примечание = ИзЧислаВоВремя(Мин, Остаток);
				Прервать;
			Иначе
				Стр.Минуты = ВремяКаждому;
				Стр.Примечание = ИзЧислаВоВремя(Мин, ВремяКаждому);
				Мин = Мин + ВремяКаждому;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;
КонецПроцедуры // Распределить()

Если вы нажимаете кнопку «Расчитать», так же срабатывает процедура «Распределить», но в этот раз за основу распределения времени берется значение из поля «Время каждому», то есть это значение присваивается каждому исполнителю, а остаток последнему в списке. Также заполняются колонки таблицы значений «Минуты» и «Примечание».

Сохранение результата обработки в текст или таблицу

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

Первый

  • Нажать правой кнопкой мыши на табличном поле и в выпадающем списке выбрать пункт «Вывести список».
  • В поле «Выводить в» выбрать подходящий для вас формат вывода («Табличный документ» или «Текстовый документ») и нажать кнопку «ОК». На экран будет выведен табличный документ.
  • Чтобы сохранить табличный документ на диск нужно выбрать пункт меню «Файл» | «Сохранить».
  • Затем выбрать подходящий формат, например, «.mxl» или «.xls», ввести название файла и нажать кнопку «Сохранить».

Второй

  • В обработке нажать кнопку «Вывести». На экран будет выведен табличный документ.
  • Чтобы сохранить табличный документ на диск нужно выбрать пункт меню «Файл» | «Сохранить».
  • Затем выбрать подходящий формат, например, «.mxl» или «.xls», ввести название файла и нажать кнопку «Сохранить».

Во втором способе сохранения результата обработки распределения времени использовался код, который помогает ответить на вопрос, как программно вывести табличное поле в табличный документ:

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

Как видно из этого кода, для вывода табличного поля в табличный документ используется построитель отчета. Этот способ очень удобен, если нужно сделать красивое оформление вывода данных из табличного поля в табличный документ. Также, вы можете ознакомится с обработкой, которая показывает пример работы с табличным полем.

Загрузка списка сотрудников из файла «.mxl»

Итак, у нас есть сохраненный файл «.mxl», который мы получили, используя первый способ сохранения результата обработки распределения времени. Он нам пригодится, чтобы автоматически загружать список сотрудников, не вбивая их по-новому каждый раз. Не правда ли удобно? Чтобы загрузить список сотрудников из файла нужно:

  • Заполнить поле «Путь загрузки», нажав на кнопку «…» и выбрав ранее сохраненный файл.
  • Затем нужно нажать кнопку «Загрузить». Произойдет заполнение колонки табличного поля «Исполнитель».

Хотелось бы особо отметить, что нужно использовать файл, который был получен при первом способе сохранения результата обработки распределения времени. Если использовать второй способ сохранения, то данные загружены не будут. Код для этой части обработки такой:

Процедура Кнопка2Нажатие(Элемент)
	// Укажем путь к файлу загрузки
	Режим = РежимДиалогаВыбораФайла.Открытие;
	ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
	ДиалогОткрытияФайла.ПолноеИмяФайла = ПутьЗагрузки;
	Фильтр = "Табличный документ .mxl (*.mxl)|*.mxl";
	ДиалогОткрытияФайла.Фильтр = Фильтр;
	ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
	ДиалогОткрытияФайла.Заголовок = "Выберите файл загрузки";
	Если ДиалогОткрытияФайла.Выбрать() Тогда
		ПутьЗагрузки = ДиалогОткрытияФайла.ПолноеИмяФайла;
	КонецЕсли;
КонецПроцедуры

Конечно, здесь опубликован не весь программный код обработки распределения времени. Но его можно увидеть, да и опробовать саму эту обработку, если скачать по ссылке.

Демонстрация работы обработки распределения времени сотрудников

ПОДПИСКА

4 ответы
  1. Марат говорит:

    Распределение времени между сотрудниками по конкретным задачам у нас на предприятии было введено недавно и когда мне стало необходимо сделать соответствующие расчеты в 1С8, конечно же я столкнулся с трудностями. В итоге сам не справился. Но на мое счастье я нашел ваше пособие и теперь запросто могу сделать распределение времени!

  2. Softmaker говорит:

    Марат, здорово, что вам пригодилась эта обработка по распределению времени в 1С!

  3. Артём говорит:

    Я распределение времени еще ни разу не делал между сотрудниками и меня интересует вот что: я могу раскидать время только по одному сотруднику в одной таблице, или скажем можно сделать так что один сотрудник занят сразу на нескольких мероприятиях? если да, как это сделать

  4. Softmaker говорит:

    Артём, будет ли сотрудник занят на нескольких мероприятиях решать вам. Вы можете сделать распределение в одной таблице, затем сохранить ее и сформировать другую с тем же сотрудником.

Комментарии закрыты.