Имя: Пароль:
1C
1С v8
Средний часовой заработок
,
0 Vyacheslav 777
 
29.06.14
19:16
Подскажите как называется проц для прописываниея формулы  по расчету СЧЗ?
1 Отладчик
 
29.06.14
19:18
Что есть проц. Процедуро.
2 Отладчик
 
29.06.14
19:20
Мясо от слова бифштекс.
3 Отладчик
 
29.06.14
19:20
Пиво от слова пить.
4 Vyacheslav 777
 
29.06.14
19:22
Сказать от слово Помочь
5 Отладчик
 
29.06.14
19:22
(4) Логично.
6 Отладчик
 
29.06.14
19:23
Ну, я бы отладчиком нашел. Или гуглом. Ну кто тебе на память, на вскидку сейчас её назовет???
7 Vyacheslav 777
 
29.06.14
19:24
Мне нужно чтобы в печатной форме т60 рассчитывалось поле СЧЗ
8 Armando
 
29.06.14
19:24
Отладчик от слова "Отладчик"
9 Отладчик
 
29.06.14
19:24
Сформулируй вопрос грамотно. И пока будешь формулировать - сам и ответ найдешь. Серьезно! Со мной такое не раз бывало.
10 Отладчик
 
29.06.14
19:25
Армандо от слово Армандо.
11 Отладчик
 
29.06.14
19:26
Армандо, перечислите по памяти названия процедур в модуле глобального модуля в УПП 8.3 на вскидку. Иначе - Вы уволены.
12 Vyacheslav 777
 
29.06.14
19:26
уже второй день формулирую. Вот Задача Документ Начисления отпучка сотрудникам организации оставить одну печатную форму т60(Готово) В печатной форме т60 заполнить поле средней дневной зароботое
13 Vyacheslav 777
 
29.06.14
19:27
Перем мДлинаСуток;
Перем мСведенияОВидахРасчета;

////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

// Заполняет документ по перерассчитываемому документу
// ИсходныйДокумент - тип ДокументОбъект.НачислениеОтпускаРаботникамОрганизаций
//
Процедура ЗаполнитьПоПерерассчитываемомуДокументу(ИсходныйДокумент, Сотрудники = Неопределено) Экспорт
    
    ПерерассчитываемыйДокумент = ИсходныйДокумент.Ссылка;
    ЗаполнитьЗначенияСвойств(ЭтотОбъект,ИсходныйДокумент,,"Проведен, Дата, Номер, ПометкаУдаления, ПериодРегистрации, Комментарий, Ответственный, ПерерассчитываемыйДокумент");
    
КонецПроцедуры // ЗаполнитьПоПерерассчитываемомуДокументу()

// Процедура рассчитывает начисления по среднему и заполняет реквизит Результат таблицы начислений
// Параметры:
//        РассчитываемыеТаблицы  - структура из элементов, соответствующих табличным частям документа.
//                Значение Истина для каждого из элементов структуры означает необходимость расчета
//                соответствующей табличной части документа
//        РежимПерерасчета - булево - признак вызов расчета при перерасчете документа
Процедура Рассчитать(РассчитываемыеТаблицы, РежимПерерасчета = Ложь, ВыборкаПоШапкеДокумента = Неопределено) Экспорт
    
    //Перед вызовом процедуры документ должнен быть записан, движения должны быть удалены
    
    Отказ = Ложь;
    
    Если ВыборкаПоШапкеДокумента = Неопределено Тогда
        ВыборкаПоШапкеДокумента = СформироватьЗапросПоШапке().Выбрать();
        // позиционируем выборку
        ВыборкаПоШапкеДокумента.Следующий();
    КонецЕсли;
    
    Заголовок = ОбщегоНазначения.ПредставлениеДокументаПриПроведении(Ссылка);
    ПроверитьЗаполнениеШапки(ВыборкаПоШапкеДокумента, Отказ, Заголовок);
    
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // Создадим наборы записей используемых регистров
    НаборОсновныеНачисления = РегистрыРасчета.ОсновныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
    НаборОсновныеНачисления.Отбор.Регистратор.Значение = Ссылка;
        
    НаборДополнительныеНачисления = РегистрыРасчета.ДополнительныеНачисленияРаботниковОрганизаций.СоздатьНаборЗаписей();
    НаборДополнительныеНачисления.Отбор.Регистратор.Значение = Ссылка;
    
    НаборРасчетСреднего = РегистрыРасчета.РасчетСреднегоЗаработка.СоздатьНаборЗаписей();
    НаборРасчетСреднего.Отбор.Регистратор.Значение = Ссылка;
    
    Если Не РассчитываемыеТаблицы.РасчетСреднего Тогда
        
        // запишем движения по среднему заработку для расчета начислений
        // получим реквизиты табличной части РасчетСреднего
        РезультатЗапросаПоРасчетСреднего = СформироватьЗапросПоРасчетСреднего();
        ВыборкаПоРасчетСреднего = РезультатЗапросаПоРасчетСреднего.Выбрать();
        
        Пока ВыборкаПоРасчетСреднего.Следующий() Цикл
            // проверим очередную строку табличной части
            ПроверитьЗаполнениеСтрокиРасчетСреднего(ВыборкаПоШапкеДокумента, ВыборкаПоРасчетСреднего, Отказ, Заголовок);
            Если Не Отказ Тогда
                // Заполним записи в наборах записей регистров
                ДобавитьСтрокуРасчетаСреднего(ВыборкаПоШапкеДокумента, ВыборкаПоРасчетСреднего, НаборРасчетСреднего);
            КонецЕсли;
        КонецЦикла;
        
        НаборРасчетСреднего.Записать();
        
    КонецЕсли;
    
    Если Отказ Тогда
        Возврат;
    КонецЕсли;
    
    // Если это документ-исправление, тогда добавим сторно-записи из исправляемого документа.
    ПроведениеРасчетов.СформироватьСторноЗаписиПоПерерассчитываемомуДокументу(ПерерассчитываемыйДокумент,ВыборкаПоШапкеДокумента, НаборОсновныеНачисления, НаборДополнительныеНачисления);
    
    // Начисления документа.
    СформироватьДвиженияПоНачислениям(ВыборкаПоШапкеДокумента, НаборОсновныеНачисления, НаборДополнительныеНачисления);
    
    // Получим дополнительные записи, имеющие признак сторно, которые необходимо добавить
    // в текущий набор для того, чтобы в результате сохранения получился максимальный
    // фактический период действия
    ТаблицаСторноЗаписей = НаборОсновныеНачисления.ПолучитьДополнение();
    ТаблицаСторноЗаписей.Колонки.Удалить("ПериодРегистрации");
    ТаблицаСторноЗаписей.Колонки.ПериодРегистрацииСторно.Имя = "ПериодРегистрации";
    ТаблицаСторноЗаписей.Колонки.Удалить("ПериодДействияНачало");
    ТаблицаСторноЗаписей.Колонки.ПериодДействияНачалоСторно.Имя = "ПериодДействияНачало";
    ТаблицаСторноЗаписей.Колонки.Удалить("ПериодДействияКонец");
    ТаблицаСторноЗаписей.Колонки.ПериодДействияКонецСторно.Имя = "ПериодДействияКонец";
    ТаблицаСторноЗаписей.Колонки.Удалить("СторнируемыйДокумент");
    ТаблицаСторноЗаписей.Колонки.Регистратор.Имя = "СторнируемыйДокумент";
    Для каждого СтрокаСторно Из ТаблицаСторноЗаписей Цикл
        // Заполним записи в наборе записей регистра
        // и в табличной части
        
        // новая запись движений
        Движение = НаборОсновныеНачисления.Добавить();
        
        ЗаполнитьЗначенияСвойств(Движение,СтрокаСторно);
        
        // Свойства
        Движение.Сторно    = Истина;
        Движение.Авторасчет    = Истина;
        
    КонецЦикла;
    
    // получим список зависимых начислений
    Если ТаблицаСторноЗаписей.Количество() <> 0 Тогда
        // если таблица сторно-записей не пустая, получим таблицу
        // начислений, зависисяцих от тех начислений, которые зарегистрированы,
        
        ТаблицаОсновныхНачислений = ПроведениеРасчетов.ПолучитьТаблицуЗависимыхНачисленийОсновные(НаборОсновныеНачисления.Выгрузить());
        Для каждого СтрокаТаблицы Из ТаблицаОсновныхНачислений Цикл
            
            Если СтрокаТаблицы.Начислить > 0 Тогда
                
                // начисление зависит от сторнирующего, добавим не сторно
                Движение = НаборОсновныеНачисления.Добавить();
                ЗаполнитьЗначенияСвойств(Движение,СтрокаТаблицы);
                Движение.СторнируемыйДокумент = Неопределено;
                Движение.Сторно    = Ложь;
                Движение.Авторасчет    = Истина;
                
            КонецЕсли;
            
            Если СтрокаТаблицы.Сторнировать > 0 Тогда
                
                // начисление зависит от сторнируемого, добавим сторно
                Движение = НаборОсновныеНачисления.Добавить();
                ЗаполнитьЗначенияСвойств(Движение,СтрокаТаблицы);
                Движение.Сторно    = Истина;
                Движение.Авторасчет    = Ложь;
                
                Движение = НаборОсновныеНачисления.Добавить();
                ЗаполнитьЗначенияСвойств(Движение,СтрокаТаблицы);
                Движение.СторнируемыйДокумент = Неопределено;
                Движение.Сторно    = Ложь;
                Движение.Авторасчет    = Истина;
                
            КонецЕсли;    
            
        КонецЦикла;
        
        ТаблицаДополнительныхНачислений = ПроведениеРасчетов.ПолучитьТаблицуЗависимыхНачисленийДополнительные(ТаблицаСторноЗаписей);
        Для каждого СтрокаТаблицы Из ТаблицаДополнительныхНачислений Цикл
            
            Движение = НаборДополнительныеНачисления.Добавить();
            ЗаполнитьЗначенияСвойств(Движение,СтрокаТаблицы);
            Движение.Сторно    = Истина;
            Движение.Авторасчет    = Истина;
            
            Движение = НаборДополнительныеНачисления.Добавить();
            ЗаполнитьЗначенияСвойств(Движение,СтрокаТаблицы);
            Движение.СторнируемыйДокумент = Неопределено;
            Движение.Сторно    = Ложь;
            Движение.Авторасчет    = Истина;    
            
        КонецЦикла;
        
    КонецЕсли;
    
    // Очистим начисления
    Начисления.Очистить();
    
    // рассчитываем записи начислений и если надо, записи расчета среднего заработка
    Если РассчитываемыеТаблицы.Начисления Тогда
        
        Если НаборОсновныеНачисления.Количество() <> 0 Тогда
            Если РассчитываемыеТаблицы.РасчетСреднего Тогда
                ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("ОсновныеНачисленияРаботниковОрганизаций", НаборОсновныеНачисления, , НаборРасчетСреднего, ВыборкаПоШапкеДокумента.ГоловнаяОрганизация, ВыборкаПоШапкеДокумента.ОбособленноеПодразделение,,Истина);
            Иначе
                ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("ОсновныеНачисленияРаботниковОрганизаций", НаборОсновныеНачисления, , , ВыборкаПоШапкеДокумента.ГоловнаяОрганизация, ВыборкаПоШапкеДокумента.ОбособленноеПодразделение);
            КонецЕсли;
        КонецЕсли;
        
        Если НаборДополнительныеНачисления.Количество() > 0 Тогда
            
            НаборОсновныеНачисления.Записать(Истина, Истина);
            
            Если РассчитываемыеТаблицы.РасчетСреднего Тогда
                ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("ДополнительныеНачисленияРаботниковОрганизаций", НаборДополнительныеНачисления, , НаборРасчетСреднего, ВыборкаПоШапкеДокумента.ГоловнаяОрганизация, ВыборкаПоШапкеДокумента.ОбособленноеПодразделение);
            Иначе
                ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("ДополнительныеНачисленияРаботниковОрганизаций", НаборДополнительныеНачисления, , , ВыборкаПоШапкеДокумента.ГоловнаяОрганизация, ВыборкаПоШапкеДокумента.ОбособленноеПодразделение);
            КонецЕсли;
            НаборДополнительныеНачисления.Записать(Истина, Истина);
            
            // повторный расчет на случай зависимости основных начислений от дополнительных
            ПроведениеРасчетовПереопределяемый.РассчитатьЗаписиРегистраРасчета("ОсновныеНачисленияРаботниковОрганизаций", НаборОсновныеНачисления, , , ВыборкаПоШапкеДокумента.ГоловнаяОрганизация, ВыборкаПоШапкеДокумента.ОбособленноеПодразделение,,Истина);
            
        КонецЕсли;
        // перепишем записи основных начислений в документ
        ЗаписиНачислений = НаборОсновныеНачисления.Выгрузить();
        ЗаписиНачислений.Колонки.ПериодДействияНачало.Имя = "ДатаНачала";
        ЗаписиНачислений.Колонки.ПериодДействияКонец.Имя = "ДатаОкончания";
        Начисления.Загрузить(ЗаписиНачислений);
        
        Если НаборДополнительныеНачисления.Количество() > 0 Тогда
            // перепишем записи начислений в документ
            ЗаписиНачислений = НаборДополнительныеНачисления.Выгрузить();
            ЗаписиНачислений.Колонки.БазовыйПериодНачало.Имя = "ДатаНачала";
            ЗаписиНачислений.Колонки.БазовыйПериодКонец.Имя  = "ДатаОкончания";
            
            Для каждого СтрокаТаблицы Из ЗаписиНачислений Цикл
                СтрокаТабличнойЧасти = Начисления.Добавить();
                ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти,СтрокаТаблицы);
            КонецЦикла;
        КонецЕсли;
        
    ИначеЕсли РассчитываемыеТаблицы.РасчетСреднего Тогда
        НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        НаборДополнительныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        Если НаборОсновныеНачисления.Количество() > 0 Тогда
            ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего("ОсновныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
        КонецЕсли;
        Если НаборДополнительныеНачисления.Количество() > 0 Тогда
            ПроведениеРасчетовПереопределяемый.СформироватьИЗаписатьДанныеРасчетаСреднего("ДополнительныеНачисленияРаботниковОрганизаций", Ссылка, НаборРасчетСреднего);
        КонецЕсли;
    КонецЕсли;
    
    Если РассчитываемыеТаблицы.РасчетСреднего Тогда
        
        // перепишем записи расчета среднего заработка в документ
        РасчетСреднегоПоКалендарным.Очистить();
        РасчетСреднегоПоШестидневке.Очистить();
        
        ВременнаяТЗ = НаборРасчетСреднего.Выгрузить();
        ВременнаяТЗ.Свернуть("СпособРасчета,БазовыйПериодКонец,БазовыйПериодНачало,ВидРасчета,КоэффициентИндексации,НормаПоПятидневке,ОтработаноДней,ОтработаноПоПятидневке,ОтработаноЧасов,Результат,ЧислоМесяцев");
        
        // перепишем записи расчета среднего заработка в документ
        Для Каждого СтрокаНабора Из ВременнаяТЗ Цикл
            Если СтрокаНабора.СпособРасчета = Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням Тогда
                СтрокаТЧ = РасчетСреднегоПоКалендарным.Добавить();
                
            Иначе
                СтрокаТЧ = РасчетСреднегоПоШестидневке.Добавить();
                
            КонецЕсли;
            ЗаполнитьЗначенияСвойств(СтрокаТЧ,СтрокаНабора);
        КонецЦикла;
        
    КонецЕсли;
    
    Если ПроведениеРасчетовПереопределяемый.ЗаписыватьДвиженияПриРасчетеДокументаСреднегоЗаработка(РассчитываемыеТаблицы, РежимПерерасчета) Тогда
        
        Если НаборОсновныеНачисления.Модифицированность() Тогда
            НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        КонецЕсли;
        Если НаборДополнительныеНачисления.Модифицированность() Тогда
            НаборДополнительныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        КонецЕсли;
        Если НаборРасчетСреднего.Модифицированность() Тогда
            НаборРасчетСреднего.Записать(Истина, Ложь, Истина, Ложь);
        КонецЕсли;
        
        ПроведениеРасчетовПереопределяемый.ВыполнитьДополнительныеДействияПриРасчетеДокументаСреднегоЗаработка(ЭтотОбъект);
    КонецЕсли;
    
    Если Не РежимПерерасчета тогда

        // Удаляем движения для режима интерактивного расчета
        НаборОсновныеНачисления.Очистить();
        НаборОсновныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        
        НаборДополнительныеНачисления.Очистить();
        НаборДополнительныеНачисления.Записать(Истина, Ложь, Истина, Ложь);
        
        НаборРасчетСреднего.Очистить();
        НаборРасчетСреднего.Записать(Истина, Ложь, Истина, Ложь);
        
    КонецЕсли;
        
КонецПроцедуры // РассчитатьНачисления()

// Выполняет перерасчет по заданному списку физлиц
// Параметры
//    Физлица - массив - ссылки на физлиц
// Возвращаемое значение
//    Нет
//
Процедура Перерассчитать(Физлица = Неопределено) Экспорт
    
    // проверим можно ли что-то делать с документом
    ОписаниеПричиныОтказа = "";
    Если ПроведениеРасчетов.ДокументНельзяИзменятьЗаднимЧислом(Ссылка, ОписаниеПричиныОтказа) Тогда
        ВызватьИсключение(ОписаниеПричиныОтказа);
    КонецЕсли;
    
    ВыборкаПоШапкеДокумента = СформироватьЗапросПоШапке().Выбрать();
    ВыборкаПоШапкеДокумента.Следующий();
    
    // Выполним полный перерасчет документа
    Рассчитать(Новый Структура("Начисления,РасчетСреднего",Истина,Истина), Истина, ВыборкаПоШапкеДокумента);
    
    // Зафиксируем данные табличных частей после расчета
    Записать();
    
    НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ПереписатьПрочиеДвиженияПриПерерасчете(ЭтотОбъект, ВыборкаПоШапкеДокумента);
    
    // Удалим записи перерасчета по которым выполнен перерасчет
    ПроведениеРасчетов.УдалитьСведенияОПерерасчетеДокумента(Ссылка);
    
КонецПроцедуры // Перерассчитать()

// Возвращает доступные варианты печати документа
//
// Возвращаемое значение:
//    Структура, каждая строка которой соответствует одному из вариантов печати
//    
Функция ПолучитьСтруктуруПечатныхФорм() Экспорт
    
    СтруктураПечатныхФорм = НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ПолучитьСтруктуруРегламентированныхФорм(ЭтотОбъект);
    //СтруктураПечатныхФорм.Вставить("РасчетОсновногоОтпуска",        "Расчет среднего основного отпуска");
    //СтруктураПечатныхФорм.Вставить("РасчетДополнительногоОтпуска",    "Расчет среднего дополнительного отпуска");
    //СтруктураПечатныхФорм.Вставить("РасчетКомпенсацииОтпуска",        "Расчет среднего компенсации отпуска");
    
    Возврат СтруктураПечатныхФорм;
    
КонецФункции // ПолучитьСтруктуруПечатныхФорм()

Функция ОсновнойВариантРасчетаДокумента() Экспорт

    Если ОсновнойОтпуск Тогда
        Если ПорядокРасчетаОсновногоОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням Тогда
            Возврат Новый Структура("ВидРасчета, СпособРасчета", ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни,Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням)
        Иначе
            Возврат Новый Структура("ВидРасчета, СпособРасчета", ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпШестидневка, Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоШестидневке)    
        КонецЕсли;
    ИначеЕсли ДополнительныйОтпуск Тогда

        Возврат Новый Структура("ВидРасчета, СпособРасчета", ВидРасчетаДополнительногоОтпуска, ПроведениеРасчетов.ПолучитьСведенияОВидеРасчета(мСведенияОВидахРасчета, ВидРасчетаДополнительногоОтпуска).СпособРасчета);
        
    ИначеЕсли КомпенсацияОтпуска Тогда
        Если ПорядокРасчетаКомпенсацииОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням Тогда
            Возврат Новый Структура("ВидРасчета, СпособРасчета", ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаКалендарныеДниБезУвольнения, Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням)    
        Иначе
            Возврат Новый Структура("ВидРасчета, СпособРасчета", ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.КомпенсацияОтпускаШестидневкаБезУвольнения, Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоШестидневке)    
        КонецЕсли;
    Иначе
        Возврат Новый Структура("ВидРасчета, СпособРасчета",Неопределено,Неопределено)
    КонецЕсли;
    
КонецФункции // ОсновнойСпособРасчетаСреднего()

Процедура ОпределитьРасчетныйПериод() Экспорт

    Если ЗначениеЗаполнено(ДатаНачалаСобытия) Тогда
        
        ВидРасчета = ОсновнойВариантРасчетаДокумента().ВидРасчета;
        Если ЗначениеЗаполнено(ВидРасчета) Тогда
            СведениеОВидеРасчета = ПроведениеРасчетов.ПолучитьСведенияОВидеРасчета(мСведенияОВидахРасчета, ВидРасчета);
            МесяцевРасчетногоПериода = ?(СведениеОВидеРасчета.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка = Перечисления.ПорядокОпределенияРасчетногоПериодаСреднегоЗаработка.ПоКолдоговору,СведениеОВидеРасчета.ПериодРасчетаСреднегоЗаработка,НачислениеОтпускаРаботникамОрганизацийПереопределяемый.КоличествоМесяцевРасчетаПоЗакону(ЭтотОбъект));
        Иначе
            МесяцевРасчетногоПериода = 12
        КонецЕсли;
        
        ПериодРасчетаСреднегоЗаработкаНачало = ДобавитьМесяц(НачалоМесяца(ДатаНачалаСобытия), - МесяцевРасчетногоПериода);
        ПериодРасчетаСреднегоЗаработкаОкончание = НачалоМесяца(ДатаНачалаСобытия) - 1;
    Иначе
        ПериодРасчетаСреднегоЗаработкаНачало = "";
        ПериодРасчетаСреднегоЗаработкаОкончание = ""
    КонецЕсли;

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

#Если Клиент Тогда

// Процедура осуществляет печать документа. Можно направить печать на
// экран или принтер, а также распечатать необходимое количество копий.
//
//    Название макета печати передается в качестве параметра,
// по переданному названию находим имя макета в соответствии.
//
// Параметры:
//    НазваниеМакета - строка, название макета.
//
Функция Печать(ИмяМакета, КоличествоЭкземпляров = 1, НаПринтер = Ложь) Экспорт
        
    Если Не  Проведен Тогда
        РаботаСДиалогами.ВывестиПредупреждение("Документ можно распечатать только после расчета и проведения!");
        Возврат Неопределено;
    КонецЕсли;
        
    Если Не РаботаСДиалогами.ПроверитьМодифицированность(ЭтотОбъект) Тогда
        Возврат Неопределено;
    КонецЕсли;
    
    ОбработкаКомментариев = глЗначениеПеременной("глОбработкаСообщений");
    ОбработкаКомментариев.УдалитьСообщения();
    
    // Получить экземпляр документа на печать
    Если ИмяМакета = "РасчетОсновногоОтпуска" Тогда
        
        Если Не ОсновнойОтпуск Тогда
            ОбщегоНазначения.ВывестиИнформациюОбОшибке("По документу не оплачивается основной отпуск!");
        Иначе
            ВыборкаПоШапкеДокумента = СформироватьЗапросПоШапке().Выбрать();
            ВыборкаПоШапкеДокумента.Следующий();
            ТабДокумент = ФормированиеПечатныхФормЗК.ПечатьРасчетаСреднегоЗаработка(Ссылка, ДатаНачалаСобытия, ВыборкаПоШапкеДокумента.ПериодРасчетаОсновногоОтпуска, "с " + Формат(ДатаНачалаОсновногоОтпуска,"ДФ=dd.MM.yyyy") + " по " + Формат(ДатаОкончанияОсновногоОтпуска,"ДФ=dd.MM.yyyy"), ?(ПорядокРасчетаОсновногоОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням,Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням,Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоШестидневке), НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ИспользуетсяСреднеЧасовойЗаработок(ЭтотОбъект));
            Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,Метаданные().Синоним) + " (расчет среднего заработка основного отпуска)", ТабДокумент);
        КонецЕсли;
        
    ИначеЕсли ИмяМакета = "РасчетДополнительногоОтпуска" Тогда
        Если Не ДополнительныйОтпуск Тогда
            ОбщегоНазначения.ВывестиИнформациюОбОшибке("По документу не оплачивается дополнительный отпуск!");
            
        Иначе
            ВыборкаПоШапкеДокумента = СформироватьЗапросПоШапке().Выбрать();
            ВыборкаПоШапкеДокумента.Следующий();
            ТабДокумент = ФормированиеПечатныхФормЗК.ПечатьРасчетаСреднегоЗаработка(Ссылка, ДатаНачалаСобытия, ВыборкаПоШапкеДокумента.ПериодРасчетаДополнительногоОтпуска, "с " + Формат(ДатаНачалаДополнительногоОтпуска,"ДФ=dd.MM.yyyy") + " по " + Формат(ДатаОкончанияДополнительногоОтпуска,"ДФ=dd.MM.yyyy"), ВидРасчетаДополнительногоОтпуска.СпособРасчета, НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ИспользуетсяСреднеЧасовойЗаработок(ЭтотОбъект));
            Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,Метаданные().Синоним) + " (расчет среднего заработка дополнительного отпуска)", ТабДокумент);
            
        КонецЕсли;
        
    ИначеЕсли ИмяМакета = "РасчетКомпенсацииОтпуска" Тогда
        Если Не КомпенсацияОтпуска Тогда
            ОбщегоНазначения.ВывестиИнформациюОбОшибке("По документу не оплачивается компенсация отпуска!");
            
        Иначе
            ВыборкаПоШапкеДокумента = СформироватьЗапросПоШапке().Выбрать();
            ВыборкаПоШапкеДокумента.Следующий();
            ТабДокумент = ФормированиеПечатныхФормЗК.ПечатьРасчетаСреднегоЗаработка(Ссылка, ДатаНачалаСобытия, ВыборкаПоШапкеДокумента.ПериодРасчетаКомпенсацииОтпуска, "за " + ДнейЧасовКомпенсацииОтпуска + " дней(часов) компенсации отпуска", ?(ПорядокРасчетаКомпенсацииОтпуска = Перечисления.ПорядокРасчетаОтпуска.ПоКалендарнымДням,Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоКалендарнымДням,Перечисления.СпособыРасчетаОплатыТруда.ПоСреднемуЗаработкуДляОтпускаПоШестидневке), НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ИспользуетсяСреднеЧасовойЗаработок(ЭтотОбъект));
            Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,Метаданные().Синоним) + " (расчет среднего заработка компенсации отпуска)", ТабДокумент);
            
        КонецЕсли;
        
    ИначеЕсли ЗначениеЗаполнено(ИмяМакета) Тогда
        
        ТабДокумент = НачислениеОтпускаРаботникамОрганизацийПереопределяемый.РегламентированнаяПечатнаяФорма(ЭтотОбъект, ИмяМакета);
        Возврат УниверсальныеМеханизмы.НапечататьДокумент(ТабДокумент, КоличествоЭкземпляров, НаПринтер, ОбщегоНазначения.СформироватьЗаголовокДокумента(ЭтотОбъект,Метаданные().Синоним) + НачислениеОтпускаРаботникамОрганизацийПереопределяемый.ОписаниеРегламентированнойПечатнойФормы(ЭтотОбъект, ИмяМакета), ТабДокумент);
        
    КонецЕсли;
        
    ОбработкаКомментариев.ПоказатьСообщения();
    
    Возврат Неопределено;
    
КонецФункции // Печать()

#КонецЕсли

////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ОБЩЕГО НАЗНАЧЕНИЯ

// Выполняет проверку непрерывности интервалов начислений
//
Процедура ПроверитьНепрерывностьЗаписейНачислений(Отказ)
    
    Если Начисления.Количество() = 0  Тогда
        Возврат;
    КонецЕсли;
    
    ТНачислений = Начисления.Выгрузить();
    ТНачислений.Сортировать("ДатаНачала");
    
    ПредыдущаяДатаОкончания = '00010101';
    СтрокаНеПервая = Ложь;
    Для Каждого Строка ИЗ ТНачислений Цикл
        
        Если Строка.Сторно ИЛИ Строка.ВидРасчета <> ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпКалендарныеДни
            И Строка.ВидРасчета <> ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.ОплатаПоСреднемуОтпШестидневка
            И Строка.ВидРасчета <> ВидРасчетаДополнительногоОтпуска Тогда
            Возврат;
        КонецЕсли;
        
        // если встретили не первую строку начислений
        Если СтрокаНеПервая Тогда
            // строка не первая
            Если Строка.ДатаНачала <> ПредыдущаяДатаОкончания + мДлинаСуток Тогда
                СтрокаНачалаСообщенияОбОшибке = "В строке номер """+ СокрЛП(Строка.НомерСтроки) +
                """ табл. части ""Начисления"": ";
                ОбщегоНазначения.ВывестиИнформациюОбОшибке(СтрокаНачалаСообщенияОбОшибке + "нарушено требование непрерывности записей начислений!", Отказ);
            КонецЕсли;
            
        Иначе
            СтрокаНеПервая = Истина;
            
        КонецЕсли;
        ПредыдущаяДатаОкончания = Строка.ДатаОкончания;
        
    КонецЦикла;
    
КонецПроцедуры // ПроверитьНепрерывностьЗаписейНачислений()

// Формирует записи регистра "ОсновныеНачисленияРаботниковОрганизаций" по данным шапки документа
//
Процедура СформироватьДвиженияПоНачислениям(ВыборкаПоШапкеДокумента, Набор
14 Отладчик
 
29.06.14
19:29
Да ты зверь..
15 acanta
 
29.06.14
19:29
Я не знаю КакУВасВВосьмерке, но в 7.7 это было окошко в документе..
16 Отладчик
 
29.06.14
19:31
(15) Чо? ЗУП, равно как и ЗиК никогда не поддавался программированию. Ну, среди уважающих себя людей.
Промозговать то можно. Тока нах?
17 Vyacheslav 777
 
29.06.14
19:33
Армандо?
18 Vyacheslav 777
 
29.06.14
19:33
Можете просто просматрев сказать: Засунь вот сюда и все
19 Отладчик
 
29.06.14
19:33
(13) Завтра, извини. Если на работу выйду.
Я за домашним ноутом - у меня никаких подручных инструментов нету под рукой(только ключ на 42 в кармане).
20 Отладчик
 
29.06.14
19:35
(17) - Армандо умер.
- Мои соболезнования.
- Ооо! Армандо жив!
21 Vyacheslav 777
 
29.06.14
19:36
))) Завтра мне на работе вот это вот и надо бы)
22 acanta
 
29.06.14
19:37
ФормированиеПечатныхФормЗК.ПечатьРасчетаСреднегоЗаработка
а там чего?
23 Armando
 
29.06.14
20:14
(11) Уволь себя. Я автору предложил отладчиком попользоваться.
24 шаэс
 
29.06.14
20:45
(21) а Вы документ в пользовательском режиме открывали? Там же этот заработок в паре мест на форму выведен. Неужели не найдете?
25 mdocs
 
29.06.14
23:06
Отпуск уже года три только по дням считается, не мучий попу.
26 SeraFim
 
30.06.14
05:58
Не путай, что ты хочешь сделать?
Рассчитать средний заработок или вывести на печатную формулу?
27 SeraFim
 
30.06.14
05:58
*вывести на печатную форму
28 Vyacheslav 777
 
30.06.14
07:02
Хочу чтобы в печатной форме отображался Средний зароботок.
29 Фокусник
 
30.06.14
07:06
(28) волшебной палочкой не забыл взмахнуть?
А то желание не исполнится ;)
30 Vyacheslav 777
 
30.06.14
07:08
)))) У меня Борода)
31 Vyacheslav 777
 
30.06.14
07:09
Подскажите куда прописать код? В модуль объекта? а какая процедура?
32 SeraFim
 
30.06.14
07:57
Судя по всему
НачислениеОтпускаРаботникамОрганизацийПереопределяемый.РегламентированнаяПечатнаяФорма
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.