Имя: Пароль:
1C
1С v8
Альфа-авто - зарплата ПОМОГИТЕ
0 KAROSTA
 
12.09.12
13:25
Доброе время суток у нас программа 1с: Предприятие 8.1(8.1.15.14),Конфигурация Альфа-авто (4.1.01.15)..Это пол беды. Сама проблема заключается в начисление зарплаты, большинство сотрудников сидит на процентах, то есть зп тоже начисляется от %. Программа высчитывает зп сотруднику правильно (кажется правильно) но есть одно но, почему то программа не выдает в столбце "сумма" по данному сотруднику сумму которая выдается в зп, как бы я не менял обработки и не восстанавливал из архивов бэкапы все равно одно и тоже. Допустим за июль показывает, а когда делаешь за август она тупо не выдает значение в ячейку. что может быть с программой? откликнитесь
1 pessok
 
12.09.12
13:39
(0) отладчик украли?
2 KAROSTA
 
12.09.12
14:45
отладчик показывает все впорядке и пропускает выполнение дальше функции заполнения сотрудников подразделения
3 Defender77
 
12.09.12
14:46
куда-куда отладчик показывает?
4 KAROSTA
 
12.09.12
15:16
// Модуль документа НачислениеЗарплаты

////////////////////////////////////////////////////////////////////////////////
// ПЕРЕМЕННЫЕ ОБЪЕКТА

Перем Права Экспорт;                // Переменная объекта - ссылка на коллекцию прав, настроек и переменных окружения
Перем РезультатОбработки Экспорт;    // Переменная для накопления результатов проведения по модулям наборов записей
Перем ОбработкаЗначенияСвойствОбъектов Экспорт; // Переменная для хранения значения свойств основания/объекта копирования

////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ДОПОЛНИТЕЛЬНЫХ МЕТОДОВ ОБЪЕКТА

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

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

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

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

// Функция проверяет, допустимо ли изменение объекта
//
// Параметры:
//  БлокироватьРеквизиты - структура, структура блокируемых на изменение реквизитов.
//
// Возвращаемое значение:
// Булево - Возвращает Истина, если изменения возможны, ложь иначе
//          Если изменения доступны частично, возвращает ложь и структуру блокируемых на изменение реквизитов.
//
Функция ДоступностьИзменения(БлокироватьРеквизиты=Неопределено) Экспорт
   // Здесь может быть прописано определение наличия ссылок, блокирующих изменение объекта
   Возврат Истина;
КонецФункции // ДоступностьИзменения()

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

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

// Расчет суммы документа
//
// Возвращаемое значение:
//  текСумма - число - сумма всего.
//
Функция РассчитатьСуммуВсего()Экспорт
   текСумма = 0;
   Для каждого Стр Из Сотрудники Цикл
       коэф = ?(Стр.НачислениеУдержание.НачислениеИлиУдержание = Перечисления.НачислениеИлиУдержание.Начисление, 1, -1);
       текСумма = текСумма + коэф*Стр.Сумма;
   КонецЦикла;
   Возврат текСумма;
КонецФункции // РассчитатьСуммуВсего()

// заполнение свойств из документа основания
Процедура ЗаполнитьСвойстваНаОсновании(Основание) Экспорт
//зарезервировано для описания заполнения свойств из свойств основания
КонецПроцедуры


#Если Клиент Тогда
Функция ПолучитьБазовуюСуммуИзМакета(ТекСтрока, НаименованиеОбработки)

   //период начисления
   ДатаНачала_ = ДатаНачала;
   ДатаКонца_  = ДатаКонца;

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

   //выполняем запрос
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
       
   Возврат ?(Выборка.БазоваяСумма = Неопределено,0,Выборка.БазоваяСумма);
   
КонецФункции // ПолучитьБазовуюСуммуИзМакета()

// получает базовую сумму из файла
//
// Параметры:
//  ТекСтрока             - Строка для которой надо получить сумму,
//  НаименованиеОбработки - Строка - путь к обработке.
//
Функция ПолучитьБазовуюСуммуИзФайла(ТекСтрока, НаименованиеОбработки)

   //период начисления
   ДатаНачала_ = ДатаНачала;
   ДатаКонца_  = ДатаКонца;
       
   //читаем файл с текстом запроса
   ТекстЗапроса = Новый ТекстовыйДокумент;
   ТекстЗапроса.Прочитать(НаименованиеОбработки,КодировкаТекста.ANSI);
   
   Запрос = Новый Запрос();
   Запрос.Текст = ТекстЗапроса.ПолучитьТекст();
   Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала_);
   Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца_);
   Запрос.УстановитьПараметр("Менеджер", ТекСтрока.Контрагент.Сотрудник);

   //выполняем запрос
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
       
   Возврат ?(Выборка.БазоваяСумма = Неопределено,0,Выборка.БазоваяСумма);

КонецФункции // ПолучитьБазовуюСуммуИзМакета()
#КонецЕсли

//ПОЛУЧАЕТ БАЗОВУЮ СУММУ ДЛЯ НАЧИСЛЕНИЯ ПРОЦЕНТОМ
//
// Параметры:
//  ТекСтрока - Строка для которой надо получить сумму
//
// Возвращаемое значение:
//  Возвращает "Базовую сумму" если запрос выполнился, иначе возвращает 0
//
Функция ПолучитьБазовуюСумму(ТекСтрока) Экспорт
   БазоваяСумма_ =0;
   ВидОбъекта = ТекСтрока.НачислениеУдержание.ВидОбъекта;
   НаименованиеОбработки = ТекСтрока.НачислениеУдержание.ПутьКОбъекту;
   Если ВидОбъекта=1 Тогда
       //Встроенный запрос из текстового макета
       Попытка
           #Если Клиент Тогда
           БазоваяСумма_ = ПолучитьБазовуюСуммуИзМакета(ТекСтрока, НаименованиеОбработки);
           #КонецЕсли
       Исключение
           Возврат 0;
       КонецПопытки;
   ИначеЕсли ВидОбъекта=2 Тогда
       //Внешний запрос из текстового файла
       Попытка
           #Если Клиент Тогда
           БазоваяСумма_ = ПолучитьБазовуюСуммуИзФайла(ТекСтрока, НаименованиеОбработки);
           #КонецЕсли
       Исключение
           Возврат 0;
       КонецПопытки;
   ИначеЕсли ВидОбъекта=3 Тогда
   //Встроенная обработка
       Попытка
           #Если Клиент Тогда
           ОбработкаПолученияБазовойСуммы = Обработки[НаименованиеОбработки].Создать();
           ОбработкаПолученияБазовойСуммы.Сотрудник = ТекСтрока.Контрагент.Сотрудник;
           ОбработкаПолученияБазовойСуммы.ДатаНачала = ДатаНачала;
           ОбработкаПолученияБазовойСуммы.ДатаКонца = ДатаКонца;
           БазоваяСумма_ = ОбработкаПолученияБазовойСуммы.БазоваяСумма();
           #КонецЕсли
       Исключение
           Возврат 0;
       КонецПопытки;
   ИначеЕсли ВидОбъекта=4 Тогда
   //Внешняя обработка
       Попытка
           #Если Клиент Тогда
           ОбработкаПолученияБазовойСуммы = ВнешниеОбработки.Создать(НаименованиеОбработки);
           ОбработкаПолученияБазовойСуммы.Сотрудник = ТекСтрока.Контрагент.Сотрудник;
           ОбработкаПолученияБазовойСуммы.ДатаНачала = ДатаНачала;
           ОбработкаПолученияБазовойСуммы.ДатаКонца = ДатаКонца;
           БазоваяСумма_ = ОбработкаПолученияБазовойСуммы.БазоваяСумма();            
           #КонецЕсли
       Исключение
           Возврат 0;
       КонецПопытки;
   КонецЕсли;
   Возврат БазоваяСумма_;
КонецФункции // ПолучитьБазовуюСумму()


#Если Клиент Тогда
////////////////////////////////////////////////////////////////////////////////
// ЭКСПОРТНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ ПЕЧАТИ ДОКУМЕНТА

// Формирует печатную форму "Начисление"
//
// Параметры:
//  ТабДокумент - табличный документ.
//
// Возвращаемое значение:
//  ТабДокумент - возвращает сформированный табличный документ.
//
Функция ПечатьНачисление(ТабДокумент) Экспорт
   Макет = ПолучитьМакет("Начисление");

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

   ОбластьПодвал.Параметры.Всего = Формат(СуммаВсего, ФорматВыводаСуммы);
   ОбластьПодвал.Параметры.ВалютаДокумента = ВалютаДокумента;
   ОбластьПодвал.Параметры.СуммаПрописью = обЧислоПрописью(СуммаВсего, ВалютаДокумента);
   ТабДокумент.Вывести(ОбластьПодвал);

   Возврат ТабДокумент;
КонецФункции // ПечатьНачисление()

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

// Возвращает доступные варианты печати документа
// Вовращаемое значение:
//  Струткура, каждая строка которой
//  соответствует одному из вариантов печати
//  Первый элемент структуры - форма по умолчанию
Функция ПолучитьСписокПечатныхФорм() Экспорт
   СтруктураМакетов=Новый Структура();
   СтруктураМакетов.Вставить("Начисление", "Начисление зарплаты");
   Возврат СтруктураМакетов;
КонецФункции // ПолучитьСписокПечатныхФорм()

#КонецЕсли
// Если Клиент Тогда - завершена клиентская часть


////////////////////////////////////////////////////////////////////////////////
// ОБРАБОТЧИКИ СОБЫТИЙ

Процедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс)
   Если НЕ дкПриУстановкеНовогоНомера(ЭтотОбъект, СтандартнаяОбработка, Префикс) Тогда Возврат; КонецЕсли;
КонецПроцедуры // ПриУстановкеНовогоНомера()

Процедура ОбработкаЗаполнения(Основание) Экспорт
   Если НЕ дкОбработкаЗаполнения(ЭтотОбъект, Основание) Тогда Возврат; КонецЕсли;
КонецПроцедуры // ОбработкаЗаполнения()

Процедура ПриКопировании(ОбъектКопирования)
   Если НЕ дкПриКопировании(ЭтотОбъект,
5 KAROSTA
 
12.09.12
15:17
Получает Базовую сумму для начисления процентом, ТУТ ЗАГВОСТКА? а так понимаю модуль должен ссылаться на определенную обработку, только не пойму где
6 Happy Bear
 
12.09.12
15:21
(0) начисление зарплаты и выплата зарплаты - разные вещи
7 KAROSTA
 
12.09.12
15:27
так в начеслениях ведь не показывает, сумму которая должна быть присвоена сотруднику, все остальные встроенные обработки работают а одна нет, и эта одна обработка в предыдущем месяце когда делаешь начисление зп показывает ЗАВЕТНУЮ сумму а в августе нет
8 mkostya
 
12.09.12
15:30
Форум разработчиков не???

http://rarus.ru/forum/forum7/