helpf.pro
Регистрация

Расчёты в ЗИКе - откуда берутся?

IKSparrow
18.03.2010 21:27Прочитано: 5343
Категорически не понимаю как система привязывает виды расчётов к конкретной ситуации. Пример - последний релиз ЗИКа. Демо-база. (вопрос вообще-то ЗИКа касается, 7.7, а не ЗУПа).
Смотрим сотрудника Антонова Сергея Михайловича. А точнее его закладку "Начисления и удержания". В демо-базе у него указан расчёт "Оплата по окладу". Начало действия 01.01.2007. Откуда взялся этот расчёт?! В системе нет ни одного документа, которым бы данному сотруднику присваивался этот расчёт. То ли я не понимаю логику работы программы то ли на лицо какой-то глюк...?
Поясните, плиз.
Yandex
Возможно, вас также заинтересует
Реклама на портале
IKSparrow
18.03.2010 22:16Ответ № 1
Вот нашёл такую ссылку (идущим по моему пути, если такие есть ) ). Но тему до конца это не раскрывает.
E_Migachev
18.03.2010 22:33Ответ № 2
А где у него указан расчёт "Оплата по окладу"?
Если мне не изменяет память это вводится доком Прием на работу и записывается в периодических реквизитах Сотрудника.

P.S. Давно уже в ЗиК не лазил *09
завтра на работе посмотрю... )
IKSparrow
18.03.2010 23:07Ответ № 3
А если посмотреть документ "Начисление зарплаты" №000001 от 31.01.07. Вернее его движения. Там по Антонову в графе "Вид расчёта" помимо прочих указан как раз "Оплата по окладу".

Сейчас ковыряюсь с конфигурацией... Мать-перемать, короче окончательно запутался. Я что-то вообще не понимаю, как содержимое "Виды расчётов" (Справочники ==> Расчёт зарплаты ==> Виды расчётов), вернее его содержимое привязывается к сотрудникам в той или иной ситуации. Идиотская конфигурация )
IKSparrow
19.03.2010 06:56Ответ № 4
Сделал самостоятельный расчёт "Штраф за курение" в демо-базе. Использовал документ "Ввод расчёта сотруднику". Указал сумму, период действия - всё работает. Вот так, по логике и книжке, и должно быть. Почему же действует и каким образом был прикреплён к сотруднику расчёт "Оплата по окладу" - не понимаю *11 *12
E_Migachev
19.03.2010 08:36Ответ № 5
) на самом деле конфигурация очень умная и продуманная, и надежная, в умелых руках считает как часы...

Что касается устройства конфы и привязки Вида расчета к сотруднику так смотри:
Есть справочник НачисленияУдержания, в нем и хранится все по сотруднику
А справ. Сотрудники это его владелец.

И при начислении ЗП, по владельцу(Сотруднику) получаются виды расчета и пишутся в журнал расчетов, а далее уже идет расчет(см. модуль каждаго вида расчета)

как-то так )
IKSparrow
19.03.2010 10:30Ответ № 6
О, про справочник не знал. Так вот где расчёты и удержания по сотруднику...
Так, тогда вот какой момент - в журналах расчётов у нас те расчёты, которые были задействованы в тот или иной момент по тому или иному сотруднику. Я правильно понимаю логику конфы? Если это верно, тогда вот такой вот код:
Код 1C v 8.х
 
ТЗВидыРасчётов = Новый ТаблицаЗначений;
ТЗВидыРасчётов.Колонки.Добавить("ВидРасчёта");

ЖРЗарплата = v7.CreateObject("ЖурналРасчетов.Зарплата");
ЖРЗарплата.ВыбратьЗаписи();
Пока ЖРЗарплата.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРЗарплата.ВидРасч.Наименование;
КонецЦикла;

ЖРДополнительный = v7.CreateObject("ЖурналРасчетов.Дополнительный");
ЖРДополнительный.ВыбратьЗаписи();
Пока ЖРДополнительный.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРДополнительный.ВидРасч.Наименование;
КонецЦикла;

ЖРНалогиСФОТ = v7.CreateObject("ЖурналРасчетов.НалогиСФОТ");
ЖРНалогиСФОТ.ВыбратьЗаписи();
Пока ЖРНалогиСФОТ.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРНалогиСФОТ.ВидРасч.Наименование;
КонецЦикла;

ЖРСтраховыеВзносы = v7.CreateObject("ЖурналРасчетов.СтраховыеВзносы");
ЖРСтраховыеВзносы.ВыбратьЗаписи();
Пока ЖРСтраховыеВзносы.ПолучитьЗапись() = 1 Цикл
СтрВидыРасчётов = ТЗВидыРасчётов.Добавить();
СтрВидыРасчётов.ВидРасчёта = ЖРСтраховыеВзносы.ВидРасч.Наименование;
КонецЦикла;



Я с помощью него пытаюсь получить из журналов расчётов только те расчёты, которые были реально использовались в системе. И выдаётся мне следующий список расчётов:

1. Оплата больничного листа за счёт работодателя (с 2007 года)
2. Оплата больничного листа за счёт работодателя (ЕНВД с 2007 года)
3. Оплата больничного листа, возмещаемая ФСС, по видам деятельности, облагаемым ЕНВД (с 2007 года)
4. Оплата больничного листа за счёт ФСС (с 2007 года)
5. Отпуск по беременности, возмещаемый ФСС, по видам деятельности, облагаемым ЕНВД (с 2007 года)
6. Отпуск по беременности за счёт ФСС (с 2007 года)
7. Ежегодный основной оплачиваемый отпуск
8. Ежегодный основной оплачиваемый отпуск
... ЕСН
... ПФР


И всё. А простите, где расчёты связанные с зарплатой? ) Например, тот же расчёт "Оплата по окладу"? Ведь он тоже должен упоминаться в журнале расчётов, а его там почему то нет.
IKSparrow
19.03.2010 11:48Ответ № 7
Кстати, после подсказки про справочник "Начислений/удержаний", посмотрел я его по сотрудникам в демо-конфе - пустой он. Фантастика просто.
IKSparrow
19.03.2010 12:00Ответ № 8
Вот тут показало расследование, что таблица расчётов начислений/удержаний на закладке соответствующей закладке у элемента справочника сотрудники, заполняются благодаря функции глобального модуля
Код 1C v 7.x
 
глПолучитьВсеРасчетыДействующиеПоСотруднику(Сотрудник,Знач Начало=0,Знач Окончание=0)

Посмотрел я эту функцию - в основном таблица составляется на анализе ряда реквизитов у сотрудника, перечислений, штатного расписания... Короче мрак. Каждая конфигурация от 1С ну та-а-акая замороченная. Не понимаю - зачем. Неужели проще нельзя было написать.
IKSparrow
19.03.2010 12:05Ответ № 9
А произвольный отчёт построенный по испоьзуемым видам расчёта в системе выдал вот, что:
Авторские вознаграждения
Выплата зарплаты
Текущее начальное сальдо
НДФЛ
НДФЛ удержанный
Оплата б/л, возмещаемая ФСС в части ЕНВД (по 2009 г.)
Оплата б/л за счет работодателя в части ЕНВД (по 2009 г.)
Оплата б/л за счет работодателя (по 2009 г.)
Оплата больничного листа (по 2009 г.)
Оплата по договору подряда
Оплата по окладу
Оплата по табелю
Оплата по тарифу
Отпуск очередной
Отпуск по беременности, возмещаемый ФСС в части ЕНВД (по 2009 г.)
Отпуск по беременности (по 2009 г.)
Пойду его копать, как он работает )
E_Migachev
19.03.2010 12:06Ответ № 10
Понял ты вроде все правильно, Оплата по окладу должна быть в ЖурналРасчетов.Зарплата!
а есть проведенные Начисления ЗП?

вот наткнулся случайно, может пригодится:

Работа с журналом расчетов в 1С7.7 из 1С 8.1 через Com соединение

Недавно делал перенос справочников и документов из 1С 7.7 "Зарплата и кадры" в 1С 8.1 "Управление торговым предприятием" через Com соединение. Во время переноса столкнулся с некоторыми проблемами. Одна из них - это при выполнении запроса очень важно правильно указать синтаксис передаваемых значений, особенно даты, иначе запрос не будет выполняться. Как правильно написать запрос? Смотрим:

Код 1C v 7.x
 
//Создадим Com объект для подключения к 1С 77
База77 = Новый COMObject("V77.Application");

//Устанавливаем соединение
Открыта = База77.Initialize(База77.RMTrade,"/d" + ПутьКБазе77,"NO_SPLASH_SHOW");

Если Открыта Тогда
Предупреждение("Ошибка открытия информационной базы!");
Иначе
Сообщить("БАЗА ОТКРЫТА УСПЕШНО!");
Конецесли;

//Определим дату из периода за который
//необходимо выбрать данные
ДатаПериода = ТекущаяДата();

//Подключимся к журналу расчетов
Зрп = База77.CreateObject("ЖурналРасчетов.Зарплата");

//Получим период журнала расчета по нашей дате
//переведем в формат без времени
НТП = Формат(Зрп.НачалоПериодаПоДате(ДатаПериода),"ДЛФ=Д");
КТП = Формат(Зрп.КонецПериодаПоДате(ДатаПериода),"ДЛФ=Д");

//Напишем текст запроса
//обратите внимание на установку периода в запросе
//Если неправильно написать, будет вылазить ошибка
ТекстЗапр = "//{{ЗАПРОС(ВидыРасч)
|Период с '" + НТП + "' по '" + КТП + "';
|Вир = ЖурналРасчетов.Зарплата.ВидРасч;
|Рез = ЖурналРасчетов.Зарплата.Результат;
|Дни = ЖурналРасчетов.Зарплата.Дни;
|ДатаНачала = ЖурналРасчетов.Зарплата.ДатаНачала;
|ДатаОкончания = ЖурналРасчетов.Зарплата.ДатаОкончания;
|Часы = ЖурналРасчетов.Зарплата.Часы;
|Субконто = ЖурналРасчетов.Зарплата.Субконто;
|Сот = ЖурналРасчетов.Зарплата.Объект;
|КодОбъекта = ЖурналРасчетов.Зарплата.Объект.Код;
|Функция РезСумма = Сумма(Рез);
|Группировка Сот;
|Группировка Вир;
|"//}}ЗАПРОС
;

//Создаем объект типа запрос
Запр = База77.CreateObject("Запрос");

//Выполним запрос, если успешно делаем выборку
Если Запр.Выполнить(ТекстЗапр) <> 0 Тогда
Пока Запр.Группировка("Сот") = 1 Цикл
Пока Запр.Группировка("Вир") = 1 Цикл
//...................
//Здесь пишем код выборки и обработки полученных данных
Конеццикла;
Конеццикла;
Конецесли;


Если нам необходимо установить отбор в журнале, например по сотруднику, то сделать это можно следущим образом:

Код 1C v 7.x
 //в перечне полей добавляем поле код объекта (можно наименование)
"|КодОбъекта = ЖурналРасчетов.Зарплата.Объект.Код;"
//строка условия будет следующей
"|Условие(КодОбъекта = " + Сотр.код + ");"


Из журнала расчетов можно выбрать записи без запроса, методом прямой выборки. В некоторых ситуациях этот способ может быть даже удобней чем через запрос. В данном случае синтаксис будет довольно простым:


Код 1C v 7.x
 Запр = База77.CreateObject("ЖурналРасчетов.Зарплата");
Запр.ВыбратьЗаписиПоОбъекту(Сотр,НТП,КТП);
Пока Запр.ПолучитьЗапись() = 1 Цикл
//Делаем обработку выборки
Конеццикла;

Написал Валецкий Станислав
IKSparrow
19.03.2010 12:18Ответ № 11
Так... Код сейчас посмотрю, поэкспериментирую. А что касается начислений, да, в демо-базе цикл документов полный и все проведены.
E_Migachev
19.03.2010 12:24Ответ № 12
Значит как-то записи нужно выбирать по другому, хотя способа всего 2 *03 :

Код 1C v 7.x
 ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ДатаНач = '01.01.2002';
ДатаКон = '31.01.2002';
ЖЗ.ВыбратьЗаписи(ДатаНач, ДатаКон);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
//<действия с тек. записью>
КонецЦикла;


А теперь организуем перебор записей, введенных в январе.

Код 1C v 7.x
 ЖЗ = СоздатьОбъект("ЖурналРасчетов.Зарплата");
ДатаНач = '01.01.2002';
ЖЗ. ВыбратьПериод(ДатаНач);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
//<действия с тек. записью>
КонецЦикла;


Отличие методов ВыбратьЗаписи и ВыбратьПериод проявляется, если запись введена в другом месяце, но период ее действия лежит в январе. Например, в феврале сотруднику выдают премию за январь. Тогда запись будет введена в феврале (период регистрации), но период ее действия - январь. В первый цикл она попадет, а во второй нет.
IKSparrow
19.03.2010 14:03Ответ № 13
О, я таки докопался почему мне мой код туфту всякую выдавал - я не указывал в методе ВыбратьЗаписи даты выборки, наивно полагая, что как это реализовано во многих функциях 1С, система сделает мне выборку за весь период существования записей в базе. Хренушки!
При указании дат выдаёт теперь корректную информацию.
т.е. правильно будет
Код 1C v 7.x
 
ЖЗ.ВыбратьЗаписи(НачДата,КонДата);

а не
Код 1C v 7.x
 
ЖЗ.ВыбратьЗаписи();


Пойду разбираться с привязкой расчётов, дальше. Процедурка у них конечно замороченная слишком *15
IKSparrow
19.03.2010 14:04Ответ № 14
Кстати, благодаря твоему примеру с запросом разобрался *06 А то бы ещё ковырялся чёрт-знает-сколько *05
E_Migachev
19.03.2010 14:20Ответ № 15
)
IKSparrow
06.04.2010 10:04Ответ № 16
Подсказка: Для редактирования своего ответа щелкните по значку (справа)
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.