КОД ПРОГРАММЫ //Модуль объекта Процедура ОбработкаПроведения(Отказ, Режим) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ШтатноеРасписаниеСрезПоследних.Период |ИЗ | РегистрСведений.ШтатноеРасписание.СрезПоследних(&Дата, Отдел = &Отдел) КАК ШтатноеРасписаниеСрезПоследних"; Запрос.УстановитьПараметр("Дата",Дата); Запрос.УстановитьПараметр("Отдел", Отдел); ДатаПоследнегоРасписания = Запрос.Выполнить().Выгрузить(); Движения.ШтатноеРасписание.Записывать = Истина; Если ДатаПоследнегоРасписания.Количество() = 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; КонецЦикла; КонецЕсли; КонецПроцедуры