Почему в лекции 1 "Основы организации бухгалтерской подсистемы" курса "Разработка прикладных решений для платформы 1С:Предприятие 8.2 в режиме "Управляемое приложение"" совершенно нет информации о том что нужно на вкладке данные в табличной части создать табличную часть "ВидыСубконто" и также нет информации о том какие нужно добавить реквизиты и какие у этих реквизитов должен быть тип? Считаю лекцию 1 в данном вопросе недоработанной. |
Опубликован: 06.12.2011 | Уровень: специалист | Доступ: платный
Лекция 5:
Разработка расчетной подсистемы: расчет показателей, перерасчеты
Аннотация: В этой лекции рассматривается разработка механизмов расчета данных регистров расчета, работа с перерасчетами, разработка справочной системы прикладного решения, построение отчета для визуализации механизмов вытеснения и сторнирования
Ключевые слова: регистр расчета, ПО, очередь, регистр, цикла, вид расчета, параметр, базовый период, массив, базовый вид расчета, переменная, таблица, запись, график, значение, период действия, процент, отношение, план видов расчета, механизмы, вытесняющий вид расчета, HTML, меню, связь, запрос, поле, объект, реквизит, диаграмма, работ, модуль, интервал, двойной щелчок, пользователь, информация
Цель лекции: научиться программно рассчитывать результаты начислений в регистре расчета, работать с перерасчетами
Расчет в регистрах расчета
Предыдущая лекция завершилась на том, что мы сформировали движения по регистрам накопления и вызвали процедуру общего модуля РассчитатьЗарплату. Эта процедура находится в модуле РасчетЗарплаты, ниже приведен ее код:
Процедура РассчитатьЗарплату(Регистратор) Экспорт //Набор записей регистра расчета ОсновныеНачисления НаборЗаписейОсн=РегистрыРасчета.ОсновныеНачисления.СоздатьНаборЗаписей(); НаборЗаписейОсн.Отбор.Регистратор.Установить(Регистратор); НаборЗаписейОсн.Прочитать(); //Набор записей регистра расчета ДополнительныеНачисления НаборЗаписейДоп =РегистрыРасчета.ДополнительныеНачисления.СоздатьНаборЗаписей(); НаборЗаписейДоп.Отбор.Регистратор.Установить(Регистратор); НаборЗаписейДоп.Прочитать(); //Перебор категорий расчета Для Каждого Категория из Перечисления.КатегорииРасчета Цикл РассчитатьОсновныеНачисления(Регистратор, НаборЗаписейОсн, Категория); РассчитатьДополнительныеНачисления(Регистратор, НаборЗаписейДоп, Категория) КонецЦикла; Сообщить("Расчет зарплаты по документу " +Регистратор+" завершен"); КонецПроцедуры Процедура РассчитатьОсновныеНачисления(Регистратор, НаборЗаписейОсн, Категория) //Получаем базу Измерения=Новый Структура; Измерения.Вставить ("Сотрудник", "ОсновныеНачисления.Сотрудник"); Ресурсы=Новый Массив(2); Ресурсы[0]="ОсновныеНачисления.Сумма"; Ресурсы[1]="ОсновныеНачисления.ДнейОтработано"; ОтборРегистратор = Новый Структура; ОтборРегистратор.Вставить("Регистратор", Регистратор); База=РегистрыРасчета.ОсновныеНачисления.ПолучитьБазу (ОтборРегистратор, Ресурсы, Измерения); Для Каждого Запись из НаборЗаписейОсн Цикл Если Запись.ВидРасчета.КатегорияРасчета = Категория Тогда //Получаем данные для расчета записей Индекс=НаборЗаписейОсн.Индекс(Запись); БазаЗаписи=База[Индекс].Сумма; МетодРасчета=Запись.ВидРасчета.МетодРасчета; ДнейФактЗаписи=Запись.ПолучитьДанныеГрафика (ВидПериодаРегистраРасчета.ФактическийПериодДействия); //ДнейФакт[Индекс].РабочийДень; ДнейПланЗаписи=Запись.ПолучитьДанныеГрафика (ВидПериодаРегистраРасчета.ПериодДействия); //ДнейПлан[Индекс].РабочийДень; ДнейБазаЗаписи=База[Индекс].ДнейОтработано; ИсходныеДанные=Запись.ИсходныеДанные; ВлияетНаОтработанноеВремя=Запись.ВидРасчета.ВлияетНаОтработанноеВремя; //Различные алгоритмы расчета, зависящие от метода расчета Если МетодРасчета=Перечисления.МетодыРасчета.ФиксированнаяСумма Тогда Запись.Сумма=ИсходныеДанные; ИначеЕсли МетодРасчета=Перечисления.МетодыРасчета.Процент Тогда Запись.Сумма=БазаЗаписи*ИсходныеДанные/100; ИначеЕсли МетодРасчета=Перечисления.МетодыРасчета.ПоДням Тогда Запись.Сумма=ДнейФактЗаписи[0].РабочийДень*ИсходныеДанные; ИначеЕсли МетодРасчета=Перечисления.МетодыРасчета.ПоСреднему Тогда Запись.Сумма=БазаЗаписи/ДнейБазаЗаписи*ДнейФактЗаписи[0].РабочийДень; ИначеЕсли МетодРасчета=Перечисления.МетодыРасчета.ПоОтработанномуВремени Тогда Запись.Сумма=ИсходныеДанные*ДнейФактЗаписи[0].РабочийДень /ДнейПланЗаписи[0].РабочийДень; КонецЕсли; //Записываем отработанное время Если ВлияетНаОтработанноеВремя Тогда Запись.ДнейОтработано=ДнейФактЗаписи[0].РабочийДень; КонецЕсли; //Если сторно - записываем показатели со знаком "-" Если Запись.Сторно Тогда Запись.Сумма=-Запись.Сумма; Запись.ДнейОтработано=-Запись.ДнейОтработано; КонецЕсли; КонецЕсли; КонецЦикла; НаборЗаписейОсн.Записать(,,Ложь); КонецПроцедуры Процедура РассчитатьДополнительныеНачисления (Регистратор, НаборЗаписейДоп, Категория) Измерения=Новый Структура; Измерения.Вставить("Сотрудник", "ОсновныеНачисления.Сотрудник, ДополнительныеНачисления.Сотрудник"); Ресурсы=Новый Массив(1); Ресурсы[0]="ОсновныеНачисления.Сумма, ДополнительныеНачисления.Сумма"; ОтборРегистратор = Новый Структура; ОтборРегистратор.Вставить("Регистратор", Регистратор); База=РегистрыРасчета.ДополнительныеНачисления.ПолучитьБазу (ОтборРегистратор, Ресурсы, Измерения); Для Каждого Запись из НаборЗаписейДоп Цикл Если Запись.ВидРасчета.КатегорияРасчета=Категория Тогда Индекс=НаборЗаписейДоп.Индекс(Запись); БазаЗаписи=База[Индекс].Сумма; МетодРасчета=Запись.ВидРасчета.МетодРасчета; ИсходныеДанные=Запись.ИсходныеДанные; Если МетодРасчета=Перечисления.МетодыРасчета.ФиксированнаяСумма Тогда Запись.Сумма=ИсходныеДанные; ИначеЕсли МетодРасчета=Перечисления.МетодыРасчета.Процент Тогда Запись.Сумма=БазаЗаписи*ИсходныеДанные/100; КонецЕсли; КонецЕсли; КонецЦикла; НаборЗаписейДоп.Записать(); КонецПроцедуры