Загрузил asproy

код программы 13.05.2024

реклама
КОД ПРОГРАММЫ
//Модуль объекта
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ШтатноеРасписаниеСрезПоследних.Период
|ИЗ
|
РегистрСведений.ШтатноеРасписание.СрезПоследних(&Дата, Отдел
= &Отдел) КАК ШтатноеРасписаниеСрезПоследних";
Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("Отдел", Отдел);
ДатаПоследнегоРасписания = Запрос.Выполнить().Выгрузить();
Движения.ШтатноеРасписание.Записывать = Истина;
Если ДатаПоследнегоРасписания.Количество() = 0 Тогда
Для Каждого ТекСтрокаСписокДолжностей Из
СписокДолжностей Цикл
Движение = Движения.ШтатноеРасписание.Добавить();
Движение.Период = Дата;
Движение.Отдел = Отдел;
Движение.Должность =
ТекСтрокаСписокДолжностей.Должность;
Движение.КолМест =
ТекСтрокаСписокДолжностей.КоличествоМест;
КонецЦикла;
Иначе
ДатаШР = ДатаПоследнегоРасписания[0].Период;
Если Месяц(ДатаШР) = Месяц(Дата) и Год(ДатаШР) =
Год(Дата) Тогда
Отказ = Истина;
Сообщить("В данном месяце штатное расписание уже было
утверждено!");
Иначе
Для Каждого ТекСтрокаСписокДолжностей Из
СписокДолжностей Цикл
Движение = Движения.ШтатноеРасписание.Добавить();
Движение.Период = Дата;
Движение.Отдел = Отдел;
Движение.Должность =
ТекСтрокаСписокДолжностей.Должность;
Движение.КолМест =
ТекСтрокаСписокДолжностей.КоличествоМест;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//Модуль формы штатного расписания
&НаКлиенте
Процедура СписокДолжностейДолжностьПриИзменении(Элемент)
СТЧ = Элементы.СписокДолжностей.ТекущиеДанные;
СписокДолжностейДолжностьПриИзмененииНаСервере(СТЧ.Должность,
СТЧ.Оклад);
КонецПроцедуры
&НаСервере
Процедура
СписокДолжностейДолжностьПриИзмененииНаСервере(Должность, оклад)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗаработнаяПлатаСрезПоследних.Сумма
|ИЗ
| РегистрСведений.ЗаработнаяПлата.СрезПоследних(&Дата,
Должность = &Должность) КАК ЗаработнаяПлатаСрезПоследних";
Запрос.УстановитьПараметр("Дата", Объект.Дата);
Запрос.УстановитьПараметр("Должность",Должность);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество()<>0 Тогда
Оклад = РезультатЗапроса[0].Сумма;
КонецЕсли;
КонецПроцедуры
//Модуль объекта принятие на работу
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СУММА(ВЫБОР
|
КОГДА
СведенияОСотрудникахОстатки.ВидЗанятости =
ЗНАЧЕНИЕ(Перечисление.ВидЗанятости.ОсновноеМестоРаботы)
|
ТОГДА 1
|
ИНАЧЕ 0.5
|
КОНЕЦ) КАК КоличествоЗанятыхМест,
|
СведенияОСотрудникахОстатки.Должность,
|
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ
СведенияОСотрудникахОстатки.Сотрудники) КАК Сотрудники
|ПОМЕСТИТЬ ЗанятыеМеста
|ИЗ
|
РегистрНакопления.СведенияОСотрудниках.Остатки(
|
&Дата,
|
Должность = &Должность
|
И Отдел = &Отдел) КАК
СведенияОСотрудникахОстатки
|
|СГРУППИРОВАТЬ ПО
| СведенияОСотрудникахОстатки.Должность
|;
|
|///////////////////////////////////////////////////////////////
//
///////////////
|ВЫБРАТЬ
|
ЕСТЬNULL(ШтатноеРасписаниеСрезПоследних.КолМест, 0) ЕСТЬNULL(ЗанятыеМеста.КоличествоЗанятыхМест, 0) КАК КолМест
|ИЗ
|
РегистрСведений.ШтатноеРасписание.СрезПоследних(
|
&Дата,
|
Должность = &Должность
|
И Отдел = &Отдел) КАК
ШтатноеРасписаниеСрезПоследних
|
ЛЕВОЕ СОЕДИНЕНИЕ ЗанятыеМеста КАК
ЗанятыеМеста
|
ПО
ШтатноеРасписаниеСрезПоследних.Должность =
ЗанятыеМеста.Должность";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Должность",Должность);
Запрос.УстановитьПараметр("Отдел", Подразделение);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если ВидЗанятости =
Перечисления.ВидЗанятости.ОсновноеМестоРаботы Тогда
СтавкаСотрудника = 1;
Иначе
СтавкаСотрудника = 0.5;
КонецЕсли;
Если РезультатЗапроса.Количество()<>0 и
РезультатЗапроса[0].КолМест>=СтавкаСотрудника Тогда
Сотрудник =
Справочники.Сотрудники.НайтиПоНаименованию(Фамилия + " " +
Лев(Имя,1) + " " +Лев(Отчество,1));
Если Сотрудник.Пустая() Тогда
НовыйСотрудник =
Справочники.Сотрудники.СоздатьЭлемент();
ФИО = Фамилия + " " + Лев(Имя,1) + " "
+Лев(Отчество,1);
НовыйСотрудник.Наименование = ФИО;
НовыйСотрудник.Фамилия = Фамилия;
НовыйСотрудник.Имя = Имя;
НовыйСотрудник.Отчество = Отчество;
СтрокаТч = НовыйСотрудник.Должности.Добавить();
СтрокаТч.Подразделение = Подразделение;
СтрокаТч.Должность = Должность;
СтрокаТч.ВидЗанятости = ВидЗанятости;
СтрокаТч.ДатаПриемаНаРаботу = Дата;
НовыйСотрудник.Записать();
Иначе
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СотрудникиДолжности.Подразделение,
| СотрудникиДолжности.Должность,
| СотрудникиДолжности.ВидЗанятости,
| СотрудникиДолжности.ДатаПриемаНаРаботу,
| СотрудникиДолжности.ДатаУвольнения
|ИЗ
| Справочник.Сотрудники.Должности КАК
СотрудникиДолжности
|ГДЕ
| СотрудникиДолжности.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Сотрудник);
Должности = Запрос.Выполнить().Выгрузить();
СотрудникОбъект = Сотрудник.ПолучитьОбъект();
Перепроведение = Ложь;
Для Каждого СтрокаТЧ из Должности Цикл
Если СтрокаТч.ДатаУвольнения = Дата(1,1,1)
Тогда
Если
НачалоДня(СтрокаТч.ДатаПриемаНаРаботу) = НачалоДня(Дата) Тогда
Перепроведение = Истина;
СтрокаТч.Подразделение =
Подразделение;
СтрокаТч.Должность = Должность;
СтрокаТч.ВидЗанятости = ВидЗанятости;
СтрокаТч.ДатаПриемаНаРаботу = Дата;
СотрудникОбъект.Должности.Загрузить(Должности);
СотрудникОбъект.Записать();
КонецЕсли;
Иначе
Сообщить("Данный сотрудник уволен,
изменение документа ""Принятие на работу"" невозможно!");
КонецЕсли;
КонецЦикла;
Если НЕ Перепроведение Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СУММА(ВЫБОР
|
КОГДА
СотрудникиДолжности.ВидЗанятости =
ЗНАЧЕНИЕ(Перечисление.ВидЗанятости.ОсновноеМестоРаботы)
|
ТОГДА 1
|
ИНАЧЕ 0.5
|
КОНЕЦ) КАК КолМест,
| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ
СотрудникиДолжности.Должность) КАК Должность,
| СотрудникиДолжности.Ссылка
|ИЗ
| Справочник.Сотрудники.Должности КАК
СотрудникиДолжности
|ГДЕ
| СотрудникиДолжности.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| СотрудникиДолжности.Ссылка";
Запрос.УстановитьПараметр("Ссылка", Сотрудник);
КоличествоМест =
Запрос.Выполнить().Выгрузить();
СотрудникОбъект = Сотрудник.ПолучитьОбъект();
Если КоличествоМест[0].КолМест < 1 Тогда
СтрокаТч =
СотрудникОбъект.Должности.Добавить();
СтрокаТч.Подразделение = Подразделение;
СтрокаТч.Должность = Должность;
СтрокаТч.ВидЗанятости = ВидЗанятости;
СтрокаТч.ДатаПриемаНаРаботу = Дата;
СотрудникОбъект.Записать();
Иначе
Сообщить("Данный сотрудник уже работает
на полной ставке.");
КонецЕсли;
КонецЕсли;
КонецЕсли;
Сотрудник =
Справочники.Сотрудники.НайтиПоНаименованию(Фамилия + " " +
Лев(Имя,1) + " " +Лев(Отчество,1));
Движения.СведенияОСотрудниках.Записывать = Истина;
Движение = Движения.СведенияОСотрудниках.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Сотрудники = Сотрудник;
Движение.Должность = Должность;
Движение.Отдел = Подразделение;
Движение.ВидЗанятости = ВидЗанятости;
Движение.Зарплата = Оклад;
Иначе
Отказ = Истина;
Сообщить("Свободных вакансий для данной должности нет");
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
Сотрудник =
Справочники.Сотрудники.НайтиПоНаименованию(Фамилия + " " +
Лев(Имя,1) + " " +Лев(Отчество,1));
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|
СотрудникиДолжности.Подразделение,
|
СотрудникиДолжности.Должность,
|
СотрудникиДолжности.ВидЗанятости,
|
СотрудникиДолжности.ДатаПриемаНаРаботу,
| СотрудникиДолжности.ДатаУвольнения
|ИЗ
| Справочник.Сотрудники.Должности КАК СотрудникиДолжности
|ГДЕ
| СотрудникиДолжности.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Сотрудник);
Должности = Запрос.Выполнить().Выгрузить();
ОбъектСотрудник = Сотрудник.ПолучитьОбъект();
Если Должности.Количество() = 1 Тогда
ОбъектСотрудник.Удалить();
Иначе
Для Каждого СтрокаТЧ из Должности Цикл
Если СтрокаТч.ДатаУвольнения = Дата(1,1,1) Тогда
Отбор = Новый
Структура("ДатаПриемаНаРаботу",НачалоДня(Дата));
//Отбор.Вставить("ДатаПриемаНаРаботу",Дата);
Строки = Должности.НайтиСтроки(Отбор);
Для Каждого Стр из Строки Цикл
Должности.Удалить(СТр);
ОбъектСотрудник.Должности.Загрузить(Должности);
ОбъектСотрудник.Записать();
КонецЦикла;
Иначе
Сообщить("Данный сотрудник уволен,отмена
проведения невозможна!");
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
//Модуль формы принятие на работу
&НаКлиенте
Процедура ПодразделениеПриИзменении(Элемент)
ПодразделениеПриИзмененииНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПодразделениеПриИзмененииНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЗаработнаяПлатаСрезПоследних.Сумма
|ИЗ
| РегистрСведений.ЗаработнаяПлата.СрезПоследних КАК
ЗаработнаяПлатаСрезПоследних
|ГДЕ
| ЗаработнаяПлатаСрезПоследних.Должность = &Должность";
Запрос.УстановитьПараметр("Должность", Объект.Должность);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество()<>0 Тогда
Если Объект.ВидЗанятости =
Перечисления.ВидЗанятости.ОсновноеМестоРаботы Тогда
Объект.Оклад = РезультатЗапроса[0].Сумма;
Иначе
Объект.Оклад = РезультатЗапроса[0].Сумма/2;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ВидЗанятостиПриИзменении(Элемент)
ПодразделениеПриИзмененииНаСервере();
КонецПроцедуры
//Модуль объекта
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|
СотрудникиДолжности.Подразделение,
|
СотрудникиДолжности.Должность,
|
ЗаработнаяПлатаСрезПоследних.Сумма КАК
Оклад,
|
СотрудникиДолжности.ВидЗанятости
|ПОМЕСТИТЬ СвободныеДолжности
|ИЗ
| Справочник.Сотрудники.Должности КАК
СотрудникиДолжности
|
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ЗаработнаяПлата.СрезПоследних(
|
&Дата,
|
Должность В
|
(ВЫБРАТЬ
|
СотрудникиДолжности.Должность
|
ИЗ
|
Справочник.Сотрудники.Должности КАК СотрудникиДолжности)) КАК
ЗаработнаяПлатаСрезПоследних
|
ПО СотрудникиДолжности.Должность =
ЗаработнаяПлатаСрезПоследних.Должность
|ГДЕ
| СотрудникиДолжности.Ссылка = &Ссылка
| И СотрудникиДолжности.ДатаУвольнения =
ДАТАВРЕМЯ(1, 1, 1)
| И СотрудникиДолжности.ДатаПриемаНаРаботу
<= &Дата
|;
|
|///////////////////////////////////////////////////////////////
//
///////////////
|ВЫБРАТЬ
| УвольнениеДолжности.Подразделение,
| УвольнениеДолжности.Должность,
| УвольнениеДолжности.Оклад ЕСТЬNULL(СвободныеДолжности.Оклад, 0) КАК Оклад,
| УвольнениеДолжности.ВидЗанятости
|ПОМЕСТИТЬ Итоговая
|ИЗ
| Документ.Увольнение.Должности КАК
УвольнениеДолжности
|
ЛЕВОЕ СОЕДИНЕНИЕ СвободныеДолжности
КАК СвободныеДолжности
|
ПО УвольнениеДолжности.Подразделение
= СвободныеДолжности.Подразделение
|
И УвольнениеДолжности.Должность
= СвободныеДолжности.Должность
|
И
УвольнениеДолжности.ВидЗанятости =
СвободныеДолжности.ВидЗанятости
|ГДЕ
| УвольнениеДолжности.Ссылка = &СсылкаДок
|;
|
|///////////////////////////////////////////////////////////////
//
///////////////
|ВЫБРАТЬ
| Итоговая.Подразделение,
| Итоговая.Должность,
| Итоговая.Оклад,
| Итоговая.ВидЗанятости
|ИЗ
| Итоговая КАК Итоговая
|ГДЕ
| Итоговая.Оклад > 0";
Запрос.УстановитьПараметр("Дата",НачалоДня(Дата));
Запрос.УстановитьПараметр("Ссылка",Сотрудник);
Запрос.УстановитьПараметр("СсылкаДок", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Количество()<>0 Тогда
Пока Выборка.Следующий() Цикл
Отказ = Истина;
Сообщить("Данный сотрудник не работает по специальности:
" + Выборка.Должность);
КонецЦикла;
КонецЕсли;
Если НЕ Отказ Тогда
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СотрудникиДолжности.Подразделение,
| СотрудникиДолжности.Должность,
| СотрудникиДолжности.ВидЗанятости,
| СотрудникиДолжности.ДатаПриемаНаРаботу,
| СотрудникиДолжности.ДатаУвольнения
|ИЗ
| Справочник.Сотрудники.Должности КАК
СотрудникиДолжности
|ГДЕ
| СотрудникиДолжности.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",Сотрудник);
ДолжностиСотрудника = Запрос.Выполнить().Выгрузить();
ОбъектСотрудник = Сотрудник.ПолучитьОбъект();
Для каждого СТЧ из Должности Цикл
Для Каждого Стр из ДолжностиСотрудника Цикл
Если Стр.Подразделение = СТЧ.Подразделение и
Стр.Должность = СТЧ.Должность и Стр.ВидЗанятости =
СТЧ.ВидЗанятости и Стр.ДатаПриемаНаРаботу <Дата Тогда
Стр.ДатаУвольнения = Дата;
ОбъектСотрудник.Должности.Загрузить(ДолжностиСотрудника);
ОбъектСотрудник.Записать();
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Движения.СведенияОСотрудниках.Записывать = Истина;
Для Каждого ТекСтрокаДолжности Из Должности Цикл
Движение = Движения.СведенияОСотрудниках.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Сотрудники = Сотрудник;
Движение.Должность = ТекСтрокаДолжности.Должность;
Движение.ВидЗанятости =
ТекСтрокаДолжности.ВидЗанятости;
Движение.Отдел = ТекСтрокаДолжности.Подразделение;
Движение.Зарплата = ТекСтрокаДолжности.Оклад;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|
СотрудникиДолжности.Подразделение,
|
СотрудникиДолжности.Должность,
|
СотрудникиДолжности.ВидЗанятости,
|
СотрудникиДолжности.ДатаПриемаНаРаботу,
| СотрудникиДолжности.ДатаУвольнения
|ИЗ
| Справочник.Сотрудники.Должности КАК СотрудникиДолжности
|ГДЕ
| СотрудникиДолжности.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Сотрудник);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
ОбъектСотрудник = Сотрудник.ПолучитьОбъект();
Для Каждого СтрокаТЧ из РезультатЗапроса Цикл
Отбор = Новый
Структура("ДатаУвольнения",НачалоДня(Дата));
Строки = РезультатЗапроса.НайтиСтроки(Отбор);
Для Каждого Стр из Строки Цикл
Стр.ДатаУвольнения = Дата(1,1,1);
ОбъектСотрудник.Должности.Загрузить(РезультатЗапроса);
ОбъектСотрудник.Записать();
КонецЦикла;
КонецЦикла;
КонецПроцедуры
//Модуль формы увольнение
&НаКлиенте
Процедура ЗаполнитьДолжности(Команда)
ЗаполнитьДолжностиНаСервере();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДолжностиНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = «ВЫБРАТЬ
|
СотрудникиДолжности.Подразделение,
|
СотрудникиДолжности.Должность,
|
ЗаработнаяПлатаСрезПоследних.Сумма КАК
Оклад,
|
СотрудникиДолжности.ВидЗанятости
|ИЗ
| Справочник.Сотрудники.Должности КАК
СотрудникиДолжности
|
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ЗаработнаяПлата.СрезПоследних(
|
&Дата,
|
Должность В
|
(ВЫБРАТЬ
|
СотрудникиДолжности.Должность
|
ИЗ
|
Справочник.Сотрудники.Должности КАК СотрудникиДолжности)) КАК
ЗаработнаяПлатаСрезПоследних
|
ПО СотрудникиДолжности.Должность =
ЗаработнаяПлатаСрезПоследних.Должность
|ГДЕ
| СотрудникиДолжности.Ссылка = &Ссылка
| И СотрудникиДолжности.ДатаУвольнения =
ДАТАВРЕМЯ(1, 1, 1)
| И СотрудникиДолжности.ДатаПриемаНаРаботу <
&Дата»;
Запрос.УстановитьПараметр(«Дата»,Объект.Дата);
Запрос.УстановитьПараметр(«Ссылка»,Объект.Сотрудник);
РезультатЗапрос = Запрос.Выполнить().Выгрузить();
Если РезультатЗапрос.Количество()<>0 Тогда
Объект.Должности.Загрузить(РезультатЗапрос);
КонецЕсли;
КонецПроцедуры
//Модуль объекта Начисление зарплаты
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| НачисленияСотрудникамОбороты.Регистратор
|ИЗ
|
РегистрНакопления.НачисленияСотрудникам.Обороты(, ,
Регистратор, ) КАК НачисленияСотрудникамОбороты
|ГДЕ
|
МЕСЯЦ(НачисленияСотрудникамОбороты.Регистратор.Дата) = &Месяц
| И
ГОД(НачисленияСотрудникамОбороты.Регистратор.Дата) = &Год
| И
НачисленияСотрудникамОбороты.Регистратор.Подразделение =
&Подразделение";
Запрос.УстановитьПараметр("Месяц", Месяц(Дата));
Запрос.УстановитьПараметр("Год", Год(Дата));
Запрос.УстановитьПараметр("Подразделение", Подразделение);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество()<>0 Тогда
Отказ = Истина;
Сообщить("В этом месяце заработная плата уже
начислялалась!");
КонецЕсли;
Если не Отказ Тогда
Движения.НачисленияСотрудникам.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| НачислениеЗарплатыСотрудники.НДФЛ,
| НачислениеЗарплатыСотрудники.Результат,
| НачислениеЗарплатыСотрудники.Начисление * 0.22 КАК
ПФР,
| НачислениеЗарплатыСотрудники.Начисление * 0.029 КАК
ФСС,
| НачислениеЗарплатыСотрудники.Начисление * 0.051 КАК
ФФОМС,
| НачислениеЗарплатыСотрудники.Сотрудник
|ИЗ
| Документ.НачислениеЗарплаты.Сотрудники КАК
НачислениеЗарплатыСотрудники
|ГДЕ
| НачислениеЗарплатыСотрудники.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Движение =
Движения.НачисленияСотрудникам.Добавить();
Движение.Период = Дата;
Движение.Сотрудник = Выборка.Сотрудник;
Движение.Зарплата = Выборка.Результат;
Движение.НДФЛ = Выборка.НДФЛ;
Движение.ПФР = Выборка.ПФР;
Движение.ФСС = Выборка.ФСС;
Движение.ФФОМС = Выборка.ФФОМС;
КонецЦикла;
КонецЕсли;
Если не Отказ Тогда
Для каждого СтрокаТЧ из Сотрудники Цикл
Движения.Хозрасчетный.Записывать = Истина;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт =
ПланыСчетов.Хозрасчетный.ОсновноеПроизводство;
Движение.СчетКт =
ПланыСчетов.Хозрасчетный.РасчетыСПерсоналом;
Движение.Сумма = СтрокаТЧ.Начисление;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт =
ПланыСчетов.Хозрасчетный.РасчетыСПерсоналом;
Движение.СчетКт = ПланыСчетов.Хозрасчетный.Касса;
Движение.Сумма = СтрокаТЧ.Начисление;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт =
ПланыСчетов.Хозрасчетный.РасчетыСПерсоналом;
Движение.СчетКт =
ПланыСчетов.Хозрасчетный.РасчетыПоНалогамИСборам;
Движение.Сумма = СтрокаТЧ.НДФЛ;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
//Модуль формы начисление зарплаты
&НаКлиенте
Процедура РасчитатьЗарплату(Команда)
РасчитатьЗарплатуНаСервере();
КонецПроцедуры
&НаСервере
Процедура РасчитатьЗарплатуНаСервере()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|
СотрудникиДолжности.Ссылка КАК Сотрудник,
|
СотрудникиДолжности.Должность,
|
ЗаработнаяПлатаСрезПоследних.Сумма КАК
Начисление,
|
ЗаработнаяПлатаСрезПоследних.Сумма * 0.13
КАК НДФЛ,
|
ЗаработнаяПлатаСрезПоследних.Сумма ЗаработнаяПлатаСрезПоследних.Сумма * 0.13 КАК Результат,
|
ЗаработнаяПлатаСрезПоследних.Сумма * 0.22
КАК ПФР,
|
ЗаработнаяПлатаСрезПоследних.Сумма * 0.029
КАК ФСС,
|
ЗаработнаяПлатаСрезПоследних.Сумма * 0.051
КАК ФФОМС
|ИЗ
| Справочник.Сотрудники.Должности КАК
СотрудникиДолжности
|
ЛЕВОЕ СОЕДИНЕНИЕ
РегистрСведений.ЗаработнаяПлата.СрезПоследних(&Дата, ) КАК
ЗаработнаяПлатаСрезПоследних
|
ПО СотрудникиДолжности.Должность =
ЗаработнаяПлатаСрезПоследних.Должность
|ГДЕ
| СотрудникиДолжности.Подразделение =
&Подразделение";
Запрос.УстановитьПараметр("Дата",Объект.Дата);
Запрос.УстановитьПараметр("Подразделение",
Объект.Подразделение);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Объект.Сотрудники.Загрузить(РезультатЗапроса);
Объект.Взносы.Загрузить(РезультатЗапроса);
КонецПроцедуры
//Модуль объекта Приходная накладнаяя
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаНоменклатура Из Номенклатура Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Партия = Ссылка;
Движение.Период = Дата;
Движение.Номенклатура =
ТекСтрокаНоменклатура.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = ТекСтрокаНоменклатура.Количество;
Движение.Цена = ТекСтрокаНоменклатура.Стоимость;
Движения.Хозрасчетный.Записывать = Истина;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт =
ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Кон
т рагенты] = Поставщик;
Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Дог
о воры] = Договор;
Движение.СчетКт = ПланыСчетов.Хозрасчетный.РасчетныйСчет;
Движение.Сумма = ТекСтрокаНоменклатура.Стоимость;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт = ПланыСчетов.Хозрасчетный.Товары;
Движение.СчетКт =
ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками;
Движение.СубконтоКТ[ПланыВидовХарактеристик.ВидыСубконто.Кон
т рагенты] = Поставщик;
Движение.СубконтоКТ[ПланыВидовХарактеристик.ВидыСубконто.Дог
о воры] = Договор;
Движение.Сумма = ТекСтрокаНоменклатура.Стоимость*0.72;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт = ПланыСчетов.Хозрасчетный.НДС;
Движение.СчетКт =
ПланыСчетов.Хозрасчетный.РасчетыСПоставщиками;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Кон
т рагенты] = Поставщик;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Дого
воры] = Договор;
Движение.Сумма = ТекСтрокаНоменклатура.Стоимость*0.18;
КонецЦикла;
КонецПроцедуры
//Модуль формы приходная накладная
&НаКлиенте
Процедура НоменклатураЦенаПриИзменении(Элемент)
СТЧ = Элементы.Номенклатура.ТекущиеДанные;
НоменклатураЦенаПриИзмененииНаСервере(СТЧ.Количество,СТЧ.Цена
,СТЧ.Стоимость);
КонецПроцедуры
&НаСервере
Процедура НоменклатураЦенаПриИзмененииНаСервере(Количество,
Цена,
Сумма)
Сумма = Количество*Цена;
КонецПроцедуры
//Модуль формы расходная накладная
&НаКлиенте
Процедура СписокНоменклатурыНоменклатураПриИзменении(Элемент)
СТЧ = Элементы.СписокНоменклатуры.ТекущиеДанные;
СписокНоменклатурыНоменклатураПриИзмененииНаСервере(СТЧ.Номен
клатура,СТЧ.Цена, СТЧ.Количество,СТЧ.Стоимость);
КонецПроцедуры
&НаСервере
Процедура
СписокНоменклатурыНоменклатураПриИзмененииНаСервере(Номенклатур
а,Ц ена,Количество,Стоимость)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&Дата,
Номенклатура = &Номенклатура) КАК
ЦеныНоменклатурыСрезПоследних";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Дата", Объект.Дата);
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Если РезультатЗапроса.Количество()<>0 Тогда
Цена = РезультатЗапроса[0].Цена;
Стоимость = Цена * Количество;
Иначе
Стоимость = Цена * Количество;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура РасчитатьСкидку(Команда)
РасчитатьСкидкуНаСервере();
КонецПроцедуры
&НаСервере
Процедура РасчитатьСкидкуНаСервере()
ТабЧасть = Объект.СписокНоменклатуры.Выгрузить();
Если Объект.Договор.Скидки =
Перечисления.ВидыСкидок.ФиксированнаяПроцентом Тогда
Скидка = (100 - Объект.Договор.ПроцентСкидки)/100;
Для Каждого СтрокаТч из ТабЧасть Цикл
СтрокаТч.Стоимость = СтрокаТч.Цена *
СтрокаТч.Количество * Скидка;
КонецЦикла;
Объект.СписокНоменклатуры.Загрузить(ТабЧасть);
Иначе Если Объект.Договор.Скидки =
Перечисления.ВидыСкидок.ОтСуммыПокупки Тогда
ОбщаяСтоимость = 0;
СуммаПокупки = Объект.Договор.СуммаПокупки;
Скидка = (100 - Объект.Договор.ПроцентСкидки)/100;
Для Каждого СтрокаТч из ТабЧасть Цикл
ОбщаяСтоимость = ОбщаяСтоимость +
СтрокаТч.Стоимость;
КонецЦикла;
Если ОбщаяСтоимость>=СуммаПокупки Тогда
Для Каждого СтрокаТч из ТабЧасть Цикл
СтрокаТч.Стоимость = СтрокаТч.Цена *
СтрокаТч.Количество * Скидка;
КонецЦикла;
Объект.СписокНоменклатуры.Загрузить(ТабЧасть);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
//Модуль объекта расходная накладная
Процедура ОбработкаЗаполнения(ДанныеЗаполнения,
СтандартнаяОбработка)
Если ТипЗнч(ДанныеЗаполнения) =
Тип("ДокументСсылка.ЗаказыКлиентов") Тогда
Клиент = ДанныеЗаполнения.Покупатель;
Для Каждого ТекСтрокаСписокТоваров Из
ДанныеЗаполнения.СписокТоваров Цикл
НоваяСтрока = СписокНоменклатуры.Добавить();
НоваяСтрока.Количество =
ТекСтрокаСписокТоваров.Количество;
НоваяСтрока.Номенклатура =
ТекСтрокаСписокТоваров.Номенклатура;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, Режим)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
|
РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
|
СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК
Количество,
|
РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Склад
|ПОМЕСТИТЬ ТабЧасть
|ИЗ
|
Документ.РасходнаяНакладная.СписокНоменклатуры КАК
РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
|
РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
|
РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
|
РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Склад
|;
|
|///////////////////////////////////////////////////////////////
//
///////////////
|ВЫБРАТЬ
| ТабЧасть.Номенклатура КАК Номенклатура,
| ОстаткиТоваровОстатки.Партия,
| ОстаткиТоваровОстатки.Склад,
|
ЕСТЬNULL(ОстаткиТоваровОстатки.КоличествоОстаток, 0) КАК
КоличествоОстаток,
|
ЕСТЬNULL(ОстаткиТоваровОстатки.ЦенаОстаток, 0) КАК
ЦенаОстаток,
| ТабЧасть.Количество КАК Количество,
| ОстаткиТоваровОстатки.Партия.Дата КАК Дата
|ИЗ
| ТабЧасть КАК ТабЧасть
|
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
РегистрНакопления.ОстаткиТоваров.Остатки(
|
&Дата,
|
Номенклатура В
|
(ВЫБРАТЬ
|
ТабЧасть.Номенклатура
|
ИЗ
|
ТабЧасть КАК
ТабЧасть)) КАК ОстаткиТоваровОстатки
|
ПО ТабЧасть.Номенклатура =
ОстаткиТоваровОстатки.Номенклатура
|
И ТабЧасть.Склад =
ОстаткиТоваровОстатки.Склад
|
|УПОРЯДОЧИТЬ ПО
| Дата
|ИТОГИ
| СУММА(КоличествоОстаток),
| МАКСИМУМ(Количество)
|ПО
| Номенклатура";
Запрос.УстановитьПараметр("Дата", Дата);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаНоменклатура =
РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Движения.ОстаткиТоваров.Записывать = Истина;
Движения.ОстаткиТоваров.Очистить();
Пока ВыборкаНоменклатура.Следующий() Цикл
ОсталосьСписать = ВыборкаНоменклатура.Количество;
Если ВыборкаНоменклатура.Количество >
ВыборкаНоменклатура.КоличествоОстаток Тогда
Отказ = Истина;
Сообщить("Недостаточно номенклатуры: " +
ВыборкаНоменклатура.Номенклатура + " в количестве: " +
(ВыборкаНоменклатура.Количество ВыборкаНоменклатура.КоличествоОстаток));
КонецЕсли;
ВыборкаДетальнойЗаписи = ВыборкаНоменклатура.Выбрать();
Пока ВыборкаДетальнойЗаписи.Следующий() Цикл
КоличествоСписания = мин(ОсталосьСписать,
ВыборкаДетальнойЗаписи.КоличествоОстаток);
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура =
ВыборкаДетальнойЗаписи.Номенклатура;
Движение.Склад = Склад;
Движение.Количество = КоличествоСписания;
Движение.Партия = ВыборкаДетальнойЗаписи.Партия;
Движение.Цена = ВыборкаДетальнойЗаписи.ЦенаОстаток *
(КоличествоСписания /
ВыборкаДетальнойЗаписи.КоличествоОстаток);
ОсталосьСписать = ОсталосьСписать КоличествоСписания;
Если ОсталосьСписать = 0 Тогда
прервать
КонецЕсли;
КонецЦикла;
КонецЦикла;
Если не Отказ Тогда
Для Каждого текСтрокаНоменклатура из СписокНоменклатуры
Цикл
Движения.Хозрасчетный.Записывать = Истина;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт =
ПланыСчетов.Хозрасчетный.РасчетныйСчет;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Кон
т рагенты] = Клиент;
Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконто.Дог
о воры] = Договор;
Движение.СчетКт =
ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
Движение.Сумма = ТекСтрокаНоменклатура.Стоимость;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт =
ПланыСчетов.Хозрасчетный.РасчетыСПокупателями;
Движение.СчетКт =
ПланыСчетов.Хозрасчетный.Продажи;
Движение.СубконтоДТ[ПланыВидовХарактеристик.ВидыСубконто.Кон
т рагенты] = Клиент;
Движение.СубконтоДТ[ПланыВидовХарактеристик.ВидыСубконто.Дог
о воры] = Договор;
Движение.Сумма = ТекСтрокаНоменклатура.Стоимость;
Движение = Движения.Хозрасчетный.Добавить();
Движение.Период = Дата;
Движение.СчетДт = ПланыСчетов.Хозрасчетный.Продажи;
Движение.СчетКт = ПланыСчетов.Хозрасчетный.Товары;
Движение.Сумма = ТекСтрокаНоменклатура.Стоимость*0.8;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
Скачать