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;
Вроде нехитро, но помучился тыканьем :)
Комментариев нет:
Отправить комментарий