|
Альфа-авто - зарплата ПОМОГИТЕ | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |