helpf.pro
Регистрация

v8: График работы

Bell
08.07.2013 19:17Прочитано: 699
Здравствуйте
Самописка
Хочу в регистр сведений записать Шаблон графика работы к примеру (2 через 3)
Что надо циклить в цикле, что не соображу.
Имею реквизиты в шапке
ГрафикРаботыПараметр - Это рабочие дне 2 Дня
ГрафикРаботыКоличествоНеРабочихДней - Это не рабочие дни 3 дня

Код 1C v 8.х
 Процедура  СформироватьГрафикПоШаблону_Особый();

Набор = РегистрыСведений.РС_ГрафикРаботы.СоздатьНаборЗаписей();
Набор.Отбор.ГрафикРаботы.Установить(ГрафикРаботы);
НП = НачалоДня(НачалоПериода);
КП = КонецДня(КонецПериода);

Пока НП <= КП Цикл
ЗРС = Набор.Добавить();
ЗРС.ДеньНеделиПрописью = ОбщегоНазначения.ПолучитьДеньНеделиПрописью(НП, Истина);
ЗРС.Дата = НП;
ЗРС.ГрафикРаботы = ГрафикРаботы;
ЗРС.Смена = Смена;
// ??????? Что с чем сравнивать надо?
ЗРС.Параметр = 1; Это дни в регистре
ЗРС.ПараметрЧасы = 24; Это часы в регистре
// ???????

НП = НП+24*3600;
КонецЦикла;

Набор.Записать();
Предупреждение("График по шаблону ЗАПОЛНЕН и ЗАПИСАН !!!", 5,"СООБЩЕНИЕ !!!");

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

Изменено 08.07.13 19:17:48
Yandex
Возможно, вас также заинтересует
Реклама на портале
E_Migachev
08.07.2013 21:16Ответ № 1
(0) Bell, а первый день месяца рабочий?
E_Migachev
08.07.2013 21:23Ответ № 2
как-то так
Код 1C v 8.2 УП
 
Раб=2; врРаб=0;
Вых=3; врВых=0;
Пока НП <= КП Цикл

ЗРС = Набор.Добавить();
ЗРС.ДеньНеделиПрописью = ОбщегоНазначения.ПолучитьДеньНеделиПрописью(НП, Истина);
ЗРС.Дата = НП;
ЗРС.ГрафикРаботы = ГрафикРаботы;
ЗРС.Смена = Смена;

Если врРаб<= Раб Тогда // +Рабочий день
ЗРС.Параметр = 1; Это дни в регистре
ЗРС.ПараметрЧасы = 24; Это часы в регистре
врРаб=врРаб+1;

ИначеЕсли врВых<= ВыхТогда // +Выходной
ЗРС.Параметр = 0; Это дни в регистре
ЗРС.ПараметрЧасы = 0; Это часы в регистре
врВых=врВых+1;

Иначе //Сбросим счетики
врРаб=0;
врВых=0;
КонецЕсли;
НП = НП+8640;
КонецЦикла;

Изменено 08.07.13 21:24:00
Bell
09.07.2013 10:10Ответ № 3
Вот так все работает при любых комбинациях, но логика отказыватся работать.
Объясните мне.
Код 1C v 8.х
       Раб   = 2;
врРаб = 0;
Вых = 3;
врВых = 0;

Пока НП <= КП Цикл
ЗРС = Набор.Добавить();
ЗРС.ДеньНеделиПрописью = ОбщегоНазначения.ПолучитьДеньНеделиПрописью(НП, Истина);
ЗРС.Дата = НП;
ЗРС.ГрафикРаботы = ГрафикРаботы;
ЗРС.Смена = Смена;

Если врРаб < Раб Тогда // +Рабочий день
// Было еще = ???????????

ЗРС.Параметр = 1;
ЗРС.ПараметрЧасы = 24;

врРаб = врРаб + 1;

ИначеЕсли врВых < ( Вых-1 ) Тогда // +Выходной
// Было еще = ???????????
// Минус 1 ???????????

ЗРС.Параметр = 0;
ЗРС.ПараметрЧасы = 0;

врВых = врВых+1;

Иначе //Сбросим счетики

врРаб = 0;
врВых = 0;

КонецЕсли;

НП = НП+24 * 3600; //У меня в меню редактирования стоит НП + двадцать четыре умноженное на три тысячи шетьсот , отражается другое НАВЕРНОЕ ГЛЮК

КонецЦикла;

Изменено 09.07.13 11:12:00
E_Migachev
09.07.2013 11:14Ответ № 4
А какой конкрентно момент не понятен?
чтобы работал мой код из (2) надо 0 на 1 заменить
Код 1C v 8.х
  Раб   = 2;
врРаб = 1;
Вых = 3;
врВых = 1;
Bell
09.07.2013 17:39Ответ № 5
По логике и врРаб и врВых должны быть с нолями,и по условию сравнения должен быть знак равно.

Все рано надо 1 отнимать, а то выходные на день больше.
ИначеЕсли врВых < ( Вых-1 ) Тогда

Выбрал варинат с 1 более логично.
Изменено 09.07.13 17:43:23
E_Migachev
09.07.2013 17:52Ответ № 6
значит надо 1 отнимать у выходных, я код не тестил, писал так, по логике *09
Bell
10.07.2013 10:12Ответ № 7
Вопрос закрыт!
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.