Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной. |
Разработка расчетной подсистемы
Создадим форму обработки. Добавим в состав ее реквизитов следующие:
Период, Тип: СтандартныйПериод
График, Тип: СправочникСсылка.ГрафикиРаботы
Добавим семь логических реквизитов (тип данных – Булево) с именами Пн, Вт, Ср, Чт, Пт, Сб, Вс.
Добавим команду с именем Заполнить, создадим обработчик для нее и перетащим все созданные реквизиты и команду в область Элементы, реквизиты с наименованиями дней недели поместим в группу с именем УкажитеРабочиеДни, свойство группы Группировка установим в значение Горизонтальная, рис. 4.5.
Заполнение выбранного графика с учетом указания рабочих дней можно реализовать с помощью следующего кода
&НаКлиенте Процедура Заполнить(Команда) ЗаполнитьНаСервере(); Предупреждение("График заполнен"); КонецПроцедуры &НаСервере Процедура ЗаполнитьНаСервере() СекундВСутках=60*60*24; МассивРабочихДней=Новый Массив(7); МассивРабочихДней[0]=Пн; МассивРабочихДней[1]=Вт; МассивРабочихДней[2]=Ср; МассивРабочихДней[3]=Чт; МассивРабочихДней[4]=Пт; МассивРабочихДней[5]=Сб; МассивРабочихДней[6]=Вс; КоличествоДней = (НачалоДня(Период.ДатаОкончания) - НачалоДня(Период.ДатаНачала)) / СекундВСутках; Для НомерДня=0 По КоличествоДней Цикл ТекущаяДата=Период.ДатаНачала+СекундВСутках*НомерДня; Запись=РегистрыСведений.РабочиеДниПоГрафику.СоздатьМенеджерЗаписи(); Запись.График=График; Запись.Дата=ТекущаяДата; Запись.РабочийДень=?(МассивРабочихДней[ДеньНедели(ТекущаяДата)-1],1,0); Запись.Записать(); КонецЦикла; КонецПроцедуры
Процедура команды – это клиентская процедура, а нам нужно работать на сервере, так как мы собираемся выполнять операции с регистром сведений, а именно – создавать его элементы.
Мы вызываем из клиентской процедуры Заполнить() процедуру ЗаполнитьНаСервере().
В серверной процедуре мы сначала записываем в переменную СекундВСутках количество секунд в сутках – это значение пригодится нам в дальнейших вычислениях – при работе со значениями, представляющими собой дату, приходится оперировать именно секундами.
Далее, мы создаем новый массив, который называем МассивРабочихДней – этот массив будет содержать значения, установленные в логических реквизитах, размещенных на форме, то есть – либо значение Ложь, либо – значение Истина. В массиве семь элементов, по числу дней недели, нумерация элементов начинается с нуля.
Мы, в переменную КоличествоРабочихДней вносим количество дней, за которое нужно заполнить график. Получаем мы его, вычитая значение свойства ДатаНачала из значения ДатаОкончания – эти стандартные свойства получило поле Период, когда мы установили его тип как СтандартныйПериод. Полученное значение будет выражено в секундах, поэтому мы делим его на ранее найденное количество секунд в сутках.
Цикл Для оперирует счетчиком цикла НомерДня, который начинается с 0, что будет представлять дату начала и изменяется с шагом 1 до ранее найденного количества дней.
В цикле мы находим текущую дату, прибавляя к начальной дате произведение номера дня и количества секунд в сутках, после чего создаем новый менеджер записи для регистра сведений РабочиеДниПоГрафику, заполняем данные записи регистра.
При заполнении ресурса Рабочий день мы используем следующую конструкцию:
Запись.РабочийДень=?(МассивРабочихДней[ДеньНедели(ТекущаяДата)-1],1,0);
В ней мы сначала получаем значение массива МассивРабочихДней, индекс которого соответствует номеру дня в неделе. Метод ДеньНедели, вызванный для некоторой даты, возвращает номер дня в неделе для этой даты. Для понедельника он возвратит 1, для вторника – 2 и так далее. Наш массив имеет нумерацию, начинающуюся с 0, поэтому мы, получив номер дня в неделе, вычитаем из него 1, таким образом оказывается, что если ДеньНедели возвратит 1, что соответствует понедельнику, мы вычтем из этого числа 1, получим 0 и сможем получить значение, хранящееся в элементе массива с индексом 0, то есть – узнать, рабочий ли день в понедельник был выставлен при заполнении пользователем реквизитов формы.
Когда мы получили значение, хранящееся в массиве, мы, если оно истинно (то есть – день рабочий), устанавливаем его в 1, иначе – в 0.
Полученная нами обработка универсальна – она позволяет заполнять графики для любых сочетаний рабочих и нерабочих дней в неделе. На рис. 4.6 показан результат заполнения графика Пятидневка с помощью обработки.
Создадим новое перечисление. Назовем его МетодыРасчета, включим в состав подсистемы РасчетЗаработнойПлаты, введем следующие предопределенные элементы:
- ФиксированнаяСумма
- Процент
- ПоДням
- ПоСреднему
- ПоОтработанномуВремени
Создадим еще одно перечисление. Назовем его КатегорииРасчета, включим в состав подсистемы РасчетЗаработнойПлаты, зададим следующие предопределенные элементы
- Первичное
- ЗависимоеПервогоУровня
- ЗависимоеВторогоУровня
На рис. 4.7 вы можете видеть созданные перечисления