Файл: «Разработка приложения для управления салоном красоты на платформе 1С».pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 16.06.2023

Просмотров: 1275

Скачиваний: 26

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

СуммаТЧ= СуммаТЧ+ СтрокаТабличнойЧасти.Цена;

КонецЦикла;

Объект.СуммаЗаписи= СуммаТЧ;

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

&НаКлиенте

Процедура ПослеЗаписи(ПараметрыЗаписи)

Оповестить("Записано"); //для сервера

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

&НаКлиенте

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)

//проверка на возможность проведения

Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение И Объект.Завершено = Ложь

Тогда Сообщить("Для проведения услуга должна быть завершена галочкой");

Отказ = Истина;

КонецЕсли;

Если ПараметрыЗаписи.РежимЗаписи = РежимЗаписиДокумента.Проведение И Объект.Окончание > ТекущаяДата()

Тогда Сообщить("Для проведения услуга должна быть завершена по времени");

Отказ = Истина;

КонецЕсли;

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

&НаКлиенте

Процедура ПриОткрытии(Отказ)

//автоматическая установке текущей даты в записи, если она не определена при открытии

ЕСЛИ Объект.ДатаЗаписи = Дата("00010101000000") Тогда

Объект.ДатаЗаписи=ТекущаяДата();

КонецЕсли;

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

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

//если не установлены даты начала и даты конца

//Сообщить (Объект.Начало);

ЕСЛИ Объект.Начало= Дата("00010101000000") ИЛИ Объект.Окончание= Дата("00010101000000") Тогда

Объект.Начало=Параметры.Начало;

Объект.Окончание=Параметры.Конец;

//Объект.Мастер=Параметры.Мастер;

Конецесли;

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

Код общего модуля ПроведениеРасчетов

Процедура ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт

// Здесь следует выбрать из набора записей перерасчета записи в следующей последовательности:

// записи документа1 для сотрудников из списка,

// записи документа2 для сотрудников из списка и т. д.

Запрос = Новый Запрос(

"ВЫБРАТЬ

| НачисленияПерерасчет.ОбъектПерерасчета,

| НачисленияПерерасчет.Сотрудник

|ИЗ

| РегистрРасчета.Начисления.Перерасчет КАК НачисленияПерерасчет

|ГДЕ

| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета

|ИТОГИ ПО

| НачисленияПерерасчет.ОбъектПерерасчета");

Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);

СписокСотрудников = Новый СписокЗначений;

// Перебрать группировку по регистратору.

ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаПоРегистратору.Следующий() Цикл

Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;


// Перебрать группировку по сотрудникам для выбранного регистратора и создать список сотрудников.

ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();

СписокСотрудников.Очистить();

Пока ВыборкаПоСотрудникам.Следующий() Цикл

СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);

КонецЦикла;

// Получить набор записей регистра расчета для выбранного регистратора.

НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;

НаборЗаписей.Прочитать();

РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);

НаборЗаписей.Записать( , Истина);

// Очистить перерассчитанные записи в перерасчете.

НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();

НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;

НаборЗаписейПерерасчета.Записать();

КонецЦикла;

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

Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт

Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

// Рассчитать первичные записи

Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма,

| НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт,

| НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки

|ИЗ

| РегистрРасчета.Начисления.ДанныеГрафика(Регистратор = &Регистратор И

| ВидРасчета = &ВидРасчета И Сотрудник В (&СписокСотрудников))

| КАК НачисленияДанныеГрафика";

Запрос.УстановитьПараметр("Регистратор", Регистратор);

Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);

Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

ВыборкаРезультата = Запрос.Выполнить().Выбрать();

Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл

СтруктураНомер = Новый Структура("НомерСтроки");

СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;

ВыборкаРезультата.Сбросить();

Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда

Если ВыборкаРезультата.Норма = 0 Тогда

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Вид расчета: Оклад – Нет рабочих дней в заданном периоде";


Сообщение.Сообщить();

ЗаписьРегистра.Результат = 0;

Иначе

// Рассчитать оклад по фактическому периоду и исходным данным

ЗаписьРегистра.Результат = (ЗаписьРегистра.ИсходныеДанные /ВыборкаРезультата.Норма) *ВыборкаРезультата.Факт;

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Выполнен расчет " + ЗаписьРегистра.Регистратор + " – " + ЗаписьРегистра.ВидРасчета + " – " + ЗаписьРегистра.Сотрудник;

Сообщение.Сообщить();

КонецЕсли;

КонецЕсли;

КонецЦикла;

// Рассчитать вторичные записи

ИначеЕсли ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| НачисленияБазаНачисления.РезультатБаза КАК База,

| НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки

|ИЗ

| РегистрРасчета.Начисления.БазаНачисления(&ИзмеренияОсновного, &ИзмеренияБазового, , Регистратор = &Регистратор И ВидРасчета = &ВидРасчета И Сотрудник В (&СписокСотрудников))

| КАК НачисленияБазаНачисления";

Измер = Новый Массив(1);

Измер[0] = "Сотрудник";

Запрос.УстановитьПараметр("ИзмеренияОсновного", Измер);

Запрос.УстановитьПараметр("ИзмеренияБазового", Измер);

Запрос.УстановитьПараметр("Регистратор", Регистратор);

Запрос.УстановитьПараметр("ВидРасчета", ТребуемыйВидРасчета);

Запрос.УстановитьПараметр("СписокСотрудников", СписокСотрудников);

ВыборкаРезультата = Запрос.Выполнить().Выбрать();

Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл

СтруктураНомер = Новый Структура("НомерСтроки");

СтруктураНомер.НомерСтроки = ЗаписьРегистра.НомерСтроки;

ВыборкаРезультата.Сбросить();

Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда

ЗаписьРегистра.Результат = ВыборкаРезультата.База * (ПолучениеКонстант.ПолучитьПремия() / 100);

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = "Выполнен расчет " + ЗаписьРегистра.Регистратор + " – " + ЗаписьРегистра.ВидРасчета + " – " + ЗаписьРегистра.Сотрудник;

Сообщение.Сообщить();

КонецЕсли;

КонецЦикла;

КонецЕсли;

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

Код модуля объекта документа НачисленияСотрудникам

Процедура ОбработкаПроведения(Отказ, Режим)

//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Данный фрагмент построен конструктором.

// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

// регистр Начисления

Движения.Начисления.Записывать = Истина;


Для Каждого ТекСтрокаНачисления Из Начисления Цикл

Движение = Движения.Начисления.Добавить();

Движение.Сторно = Ложь;

Движение.ВидРасчета = ТекСтрокаНачисления.ВидРасчета;

Движение.ПериодДействияНачало = ТекСтрокаНачисления.ДатаНачала;

Движение.ПериодДействияКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);

Движение.ПериодРегистрации = Дата;

Движение.БазовыйПериодНачало = ТекСтрокаНачисления.ДатаНачала;

Движение.БазовыйПериодКонец = КонецДня(ТекСтрокаНачисления.ДатаОкончания);

Движение.Сотрудник = ТекСтрокаНачисления.Сотрудник;

Движение.ГрафикРаботы = ТекСтрокаНачисления.ГрафикРаботы;

Движение.ИсходныеДанные = ТекСтрокаНачисления.Начислено;

КонецЦикла;

//}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ

// Записываем движения регистров

Движения.Начисления.Записать();

// Получим список всех сотрудников, содержащихся в документе

Запрос = Новый Запрос(

"ВЫБРАТЬ РАЗЛИЧНЫЕ

| НачисленияСотрудникамНачисления.Сотрудник

|ИЗ

| Документ.НачисленияСотрудникам.Начисления КАК НачисленияСотрудникамНачисления

|

|ГДЕ

| НачисленияСотрудникамНачисления.Ссылка = &ТекущийДокумент");

Запрос.УстановитьПараметр("ТекущийДокумент", Ссылка);

// Сформируем список сотрудников

ТаблЗнач = Запрос.Выполнить().Выгрузить();

МассивСотрудников = ТаблЗнач.ВыгрузитьКолонку("Сотрудник");

// Вызов процедуры РассчитатьНачисления из общего модуля

ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Оклад, МассивСотрудников);

Движения.Начисления.Записать( , Истина);

ПроведениеРасчетов.РассчитатьНачисления(Движения.Начисления, ПланыВидовРасчета.ОсновныеНачисления.Премия, МассивСотрудников);

Движения.Начисления.Записать( , Истина);

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

Код общего модуля ПолучениеКонстант

Функция ПолучитьНачалоДня() Экспорт

Возврат (Константы.НачалоДня.Получить());

КонецФункции

Функция ПолучитьДоКонцаДня() Экспорт

Возврат (Константы.ДоКонцаДня.Получить());

КонецФункции

Функция ПолучитьПремия() Экспорт

Возврат (Константы.Премия.Получить());

КонецФункции

Код общего модуля РаботаСоСправочниками

Функция РозничнаяЦена(АктуальнаяДата, ЭлементНоменклатуры) Экспорт

// Создать вспомогательный объект "Отбор".

Отбор = Новый Структура("Номенклатура", ЭлементНоменклатуры);

// Получить актуальные значения ресурсов регистра.


ЗначенияРесурсов = РегистрыСведений.Цены.ПолучитьПоследнее(АктуальнаяДата, Отбор);

Возврат ЗначенияРесурсов.Цена;

КонецФункции

Код общего модуля ПроведениеРасчетов

Процедура ПерерассчитатьНачисления(ТребуемыйВидРасчета) Экспорт

// Здесь следует выбрать из набора записей перерасчета записи в следующей последовательности:

// записи документа1 для сотрудников из списка,

// записи документа2 для сотрудников из списка и т. д.

Запрос = Новый Запрос(

"ВЫБРАТЬ

| НачисленияПерерасчет.ОбъектПерерасчета,

| НачисленияПерерасчет.Сотрудник

|ИЗ

| РегистрРасчета.Начисления.Перерасчет КАК НачисленияПерерасчет

|ГДЕ

| НачисленияПерерасчет.ВидРасчета = &ТребуемыйВидРасчета

|ИТОГИ ПО

| НачисленияПерерасчет.ОбъектПерерасчета");

Запрос.УстановитьПараметр("ТребуемыйВидРасчета", ТребуемыйВидРасчета);

СписокСотрудников = Новый СписокЗначений;

// Перебрать группировку по регистратору.

ВыборкаПоРегистратору = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

Пока ВыборкаПоРегистратору.Следующий() Цикл

Регистратор = ВыборкаПоРегистратору.ОбъектПерерасчета;

// Перебрать группировку по сотрудникам для выбранного регистратора и создать список сотрудников.

ВыборкаПоСотрудникам = ВыборкаПоРегистратору.Выбрать();

СписокСотрудников.Очистить();

Пока ВыборкаПоСотрудникам.Следующий() Цикл

СписокСотрудников.Добавить(ВыборкаПоСотрудникам.Сотрудник);

КонецЦикла;

// Получить набор записей регистра расчета для выбранного регистратора.

НаборЗаписей = РегистрыРасчета.Начисления.СоздатьНаборЗаписей();

НаборЗаписей.Отбор.Регистратор.Значение = Регистратор;

НаборЗаписей.Прочитать();

РассчитатьНачисления(НаборЗаписей, ТребуемыйВидРасчета, СписокСотрудников);

НаборЗаписей.Записать( , Истина);

// Очистить перерассчитанные записи в перерасчете.

НаборЗаписейПерерасчета = РегистрыРасчета.Начисления.Перерасчеты.Перерасчет.СоздатьНаборЗаписей();

НаборЗаписейПерерасчета.Отбор.ОбъектПерерасчета.Значение = Регистратор;

НаборЗаписейПерерасчета.Записать();

КонецЦикла;

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

Процедура РассчитатьНачисления(НаборЗаписейРегистра, ТребуемыйВидРасчета, СписокСотрудников) Экспорт

Регистратор = НаборЗаписейРегистра.Отбор.Регистратор.Значение;

// Рассчитать первичные записи

Если ТребуемыйВидРасчета = ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда