суббота, 28 августа 2010 г.

Получаем через ком интерфейс данные о начислении ЗП

Июнь 6th, 2010

1C8.2 Комплексная конфигурация, пока в режиме 8.1.



Задача: Написать внешнюю w32 программу для обработки данных о начислении зарплаты в 1С8.2 КК в целях начисления премий по особому алгоритму и хранения их для последующего анализа.

Действие 1: Вытянуть данные о начислении ЗП в разрезе подразделений, сотрудников, видов начислений, периодов начислений, с учетом того, что документ проведен и не помечен на удаление. Часть данных находится в табличной части документа – Начисления.



Конектимся…



KomSRV:=CreateOleObject(‘v82.ComConnector’);

v0:=KomSRV.Connect(‘Srvr=”192.168.0.xx”;Ref=”Postgresql-server”;USR=”админ”;Pwd=”xxxxxxxxx”‘);


Используем лобовую атаку для пребора табличной части, перебор списка документов не вызывает проблем…

Берем документ 113

v1:=v0.Документы.НачислениеЗарплатыРаботникамОрганизаций.НайтиПоНомеру(‘00000000113′,’20100505′);

//ShowMessage(BoolToStr(v1.Проведен)); // если -1 то проведен, если 0 то нет

//ShowMessage(BoolToStr(v1.ПометкаУдаления)); //если -1 то помечен на удаление, если 0 то нет

//ShowMessage(v1.ПериодРегистрации);

//ShowMessage(v1.Организация.Наименование);

//ShowMessage(v1.ПодразделениеОрганизации.КПП);

//ShowMessage(v1.Комментарий);

//ShowMessage(v1.КраткийСоставДокумента);

//ShowMessage(v1.ПериодНачисленияДатаНачала);

//ShowMessage(v1.ПериодНачисленияДатаОкончания);

//ShowMessage(v1.Начисления.Количество()); //количество записей табличной части Начисления документа НачислениеЗарплатыРаботникамОрганизаций

for i := 0 to v1.Начисления.Количество()-1 do //перебор табличной части Начисления

begin

v2:=v1.Начисления.Получить(i); //вот так у меня получилось указать на очередную строку табличной части Начисления с возможностью получения данных реквизитов типа NEXT

ShowMessage(v2.Сотрудник.Код);

ShowMessage(v2.Сотрудник.Наименование);

ShowMessage(v2.ПодразделениеОрганизации.Наименование);

ShowMessage(v2.ВидРасчета.Наименование);

ShowMessage(v2.Результат);

ShowMessage(v2.ДатаНачала);

ShowMessage(v2.ДатаОкончания);

end;
Теперь можно перебором документов с учетом периода и видов расчета, а также учетом проведения и пометок удаления (а внутри каждого перебирать табличную часть) вытащить данные в любой датасет и там уже выполнить спецобработку…



Вроде нехитро, но помучился тыканьем :)

Комментариев нет:

Отправить комментарий