Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
17 июн 2024, 14:41

Начисление ЗП из экселя

Автор korvindeson, 22 апр 2013, 16:57

0 Пользователей и 1 гость просматривают эту тему.

korvindeson

Добрый день! Имею 1с 8.2, ЗУП 2.5. Пытаюсь сворганить внешнюю обработку, которая бы мне создавала документы начисления зарплаты работникам организации.

Получается следующее.

Процедура КнопкаВыполнитьНажатие(Кнопка)

ОбъектExcel = Новый COMОбъект("Excel.Application");
Книга = ОбъектExcel.Workbooks.Open("C:\Начисления.xls");
Лист = Книга.WorkSheets(1);

i = 1;
   Док = Документы.НачислениеЗарплатыРаботникамОрганизаций.СоздатьДокумент();
   Док.Организация = Справочники.Организации.НайтиПоНаименованию("Организация", Истина);
   Док.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);
   Док.Ответственный=Справочники.Пользователи.НайтиПоНаименованию("2");
   Док.ПериодРегистрации = ТекущаяДата();
   Док.Дата=ТекущаяДата();

i=i+1;

НоваяСтрокаТабличнойЧасти = Док.Начисления.Добавить();
НоваяСтрокаТабличнойЧасти.Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);
НоваяСтрокаТабличнойЧасти.ПодразделениеОрганизации = Док.ПодразделениеОрганизации;
НоваяСтрокаТабличнойЧасти.Результат = Лист.Cells(i , 2).Value;

НоваяСтрокаТабличнойЧасти.ВидРасчета = НоваяСтрокаТабличнойЧасти.ВидРасчета.БазовыеВидыРасчета.Найти(Лист.Cells(i , 3).Value);



НоваяСтрокаТабличнойЧасти.ДатаНачала = НачалоМесяца(ТекущаяДата());
НоваяСтрокаТабличнойЧасти.ДатаОкончания = КонецМесяца(ТекущаяДата());

НоваяСтрокаТЧНДФЛ = Док.НДФЛ.Добавить();
НоваяСтрокаТЧНДФЛ.МесяцНалоговогоПериода = ТекущаяДата();
НоваяСтрокаТЧНДФЛ.ПодразделениеОрганизации = НоваяСтрокаТабличнойЧасти.ПодразделениеОрганизации;
НоваяСтрокаТЧНДФЛ.ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);

Док.Записать();
Док.РассчитатьНДФЛ();
Док.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры


Беды следующие (на картинке графически):
1) Не могу разобраться как поставить режим начисления на "Текущий месяц"
2) Не могу понять как поставить отметку на "Признак автоматического расчета"
3) Что-то делаю не так, вид начисления не заполняется
4) Дата начала визуально стоит, но при попытке провести документ, выдаёт ошибку "Не указана дата начала события". Причём если ручками клацнуть, то всё проводится.
5) Документ открывается какой-то глючный. К примеру не хочет рассчитываться, просто моргает. Но, если к примеру зайти вверху слева: Операция -> Расчёт начислений -> Потом назад на "Полный расчёт". Тогда всё оживает.

По первым трём пунктам просто команд не знаю, и нарыть за целый день не получилось. 4 и 5 без понятия как лечить. Помогите пожалуйста :btbzdb:

Yura063

Везде посмотрите, каким реквизитам присвоены какие значения, те значения и подставляйте (на что ссылаются реквизиты).
Помогли, отблагодари!

korvindeson

Цитата: Yura063 от 22 апр 2013, 17:44
Везде посмотрите, каким реквизитам присвоены какие значения, те значения и подставляйте (на что ссылаются реквизиты).
Не понял. Можно как дураку? Или ссылочку на почитать по теме
Добавлено: 23 апр 2013, 00:39


Цитата: Yura063 от 22 апр 2013, 17:44
Везде посмотрите, каким реквизитам присвоены какие значения, те значения и подставляйте (на что ссылаются реквизиты).
Ковырял в носу, включил мозг, осознал. Спасибо большое, все вопросы снял!

pavl_vs

Цитата: korvindeson от 22 апр 2013, 16:57
Беды следующие (на картинке графически):
1) Не могу разобраться как поставить режим начисления на "Текущий месяц"
2) Не могу понять как поставить отметку на "Признак автоматического расчета"
3) Что-то делаю не так, вид начисления не заполняется
4) Дата начала визуально стоит, но при попытке провести документ, выдаёт ошибку "Не указана дата начала события". Причём если ручками клацнуть, то всё проводится.
5) Документ открывается какой-то глючный. К примеру не хочет рассчитываться, просто моргает. Но, если к примеру зайти вверху слева: Операция -> Расчёт начислений -> Потом назад на "Полный расчёт". Тогда всё оживает.

По первым трём пунктам просто команд не знаю, и нарыть за целый день не получилось. 4 и 5 без понятия как лечить. Помогите пожалуйста :btbzdb:

Мне кажется Вам следует изучить заполнение документа "естественным" путем. Открыв конфигуратор Вы получите ответы по крайней мере на вопросы 1 и 3; Что же касается дат, то насколько мне известно в Excel'е состав даты есть "Дата", а 1С - "Дата и время", правда, не везде, нужно выяснять.

korvindeson

Цитата: pavl_vs от 23 апр 2013, 00:40
Мне кажется Вам следует изучить заполнение документа "естественным" путем. Открыв конфигуратор Вы получите ответы по крайней мере на вопросы 1 и 3; Что же касается дат, то насколько мне известно в Excel'е состав даты есть "Дата", а 1С - "Дата и время", правда, не везде, нужно выяснять.
Да уже разобрался, второй или третий раз конфигуратор вскрыл, где что искать не понятно поначалу. Тяжёлая 1с-ка, во всяком случае если пытаться нахрапом взять, толком не почитав) Однако получилось. Медленно, но пашет ниже выкладываю код, может кому сгодится. Есть у меня подозрение, что работает так медленно, как это вообще возможно, но как по мне работает и ладно. Ну, займут у меня 1000 человек не 5, а 15 минут или 20, мне не жалко, руками дня 2 втроём занимало.

Загружает начисления из файла .xls вида

|Подразделение 1|
|__Сотрудник 1__|_Сумма_|_Вид начисления_|
|__Сотрудник 2__|_Сумма_|_Вид начисления_|
|__Сотрудник ..._|_Сумма_|_Вид начисления_|
|Подразделение 2|
|__Сотрудник 1__|_Сумма_|_Вид начисления_|
|__Сотрудник 2__|_Сумма_|_Вид начисления_|
|__Сотрудник ..._|_Сумма_|_Вид начисления_|
|Подразделение...|
...

Работает с основными и дополнительными начислениями, ставит НДФЛ, рассчитывает и проводит. Создаёт отдельные документы начисления зар. платы по каждому подразделению.


ОбъектExcel = Новый COMОбъект("Excel.Application");
Книга = ОбъектExcel.Workbooks.Open(Путь + "\Начисления.xls");
Лист = Книга.WorkSheets(1);
    i = 1;


Пока Не Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина).Пустая() Цикл

   Док = Документы.НачислениеЗарплатыРаботникамОрганизаций.СоздатьДокумент();
       Док.ПодразделениеОрганизации = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);
//Заполнение шапки реквизитов документа
   Док.Организация = Справочники.Организации.НайтиПоНаименованию("Организация", Истина);
   Док.Ответственный=Справочники.Пользователи.НайтиПоНаименованию("2");
   Док.ПериодНачисления = Перечисления.ПериодНачисленияЗарплаты.ТекущийМесяц;
   Док.ПериодНачисленияДатаНачала = НачалоМесяца(ТекущаяДата());
   Док.ПериодНачисленияДатаОкончания = КонецМесяца(ТекущаяДата());
   Док.ПериодРегистрации = ТекущаяДата();
   Док.Дата=ТекущаяДата();
   Док.ВидОперации = Перечисления.ВидыОперацийНачислениеЗарплатыРаботникамОрганизаций.ПолныйРасчет;
   i=i+1;
   
Пока Не Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина).Пустая() Цикл   


Если Не ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 3).Value, Истина).Пустая() Тогда
НоваяСтрокаТабличнойЧасти = Док.Начисления.Добавить();
НоваяСтрокаТабличнойЧасти.Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);
НоваяСтрокаТабличнойЧасти.ПодразделениеОрганизации = Док.ПодразделениеОрганизации;
НоваяСтрокаТабличнойЧасти.ВидРасчета = ПланыВидовРасчета.ОсновныеНачисленияОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 3).Value, Истина);
НоваяСтрокаТабличнойЧасти.Показатель1 = Лист.Cells(i , 2).Value;
НоваяСтрокаТабличнойЧасти.Авторасчет = Истина;

НоваяСтрокаТабличнойЧасти.ДатаНачала = НачалоМесяца(ТекущаяДата());
НоваяСтрокаТабличнойЧасти.ДатаОкончания = КонецМесяца(ТекущаяДата());
НоваяСтрокаТабличнойЧасти.ДатаНачалаСобытия = НачалоМесяца(ТекущаяДата());

НоваяСтрокаТЧНДФЛ = Док.НДФЛ.Добавить();
НоваяСтрокаТЧНДФЛ.МесяцНалоговогоПериода = ТекущаяДата();
НоваяСтрокаТЧНДФЛ.ПодразделениеОрганизации = НоваяСтрокаТабличнойЧасти.ПодразделениеОрганизации;
НоваяСтрокаТЧНДФЛ.ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);
Иначе
НоваяСтрокаДОП = Док.ДополнительныеНачисления.Добавить();
НоваяСтрокаДОП.Сотрудник = Справочники.СотрудникиОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 1).Value, Истина);
НоваяСтрокаДОП.ПодразделениеОрганизации = Док.ПодразделениеОрганизации;
НоваяСтрокаДОП.ВидРасчета = ПланыВидовРасчета.ДополнительныеНачисленияОрганизаций.НайтиПоНаименованию(Лист.Cells(i , 3).Value, Истина);
НоваяСтрокаДОП.Показатель1 = Лист.Cells(i , 2).Value;
НоваяСтрокаДОП.Авторасчет = Истина;

КонецЕсли;



i=i+1;
КонецЦикла;

Док.Записать();
Док.РассчитатьВсе();
Док.Записать(РежимЗаписиДокумента.Проведение);

КонецЦикла;

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск