ЗиК Подскажите
08.06.2005
14:49
#1
"Составил отчет, чтобы по одному коду ИМНС сосчитался НДФЛ по всем сотрудникам. Сотрудников перебирает, а вот НДФЛ не суммируется. Выводит только по первому сотруднику НДФЛ. Что здесь нетак?
Процедура Сформировать()
//Перем НДФЛ;
//НДФЛ=0;
Т=СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("Таблица");
ЖЗ=СоздатьОбъект("ЖурналРасчетов.Зарплата");
ЖЗ.ВыбратьЗаписи(ДатаНач, ДатаКон);
Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
КодИМН=Спр.КодИМНС;
Если КодИМН="1001" Тогда
ВыборСотрудника=Спр.ТекущийЭлемент();
Сообщить (КодИМН);
Сообщить (ВыборСотрудника);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
Если ЖЗ.Объект=ВыборСотрудника Тогда
Если ЖЗ.ВидРасч=ВидРасчета.НДФЛ Тогда
НДФЛ=НДФЛ+ЖЗ.Результат;
Сообщить (НДФЛ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Т.ВывестиСекцию("Секция_1");
Т.ТолькоПросмотр(1);
Т.Показать();
КонецПроцедуры"
Процедура Сформировать()
//Перем НДФЛ;
//НДФЛ=0;
Т=СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("Таблица");
ЖЗ=СоздатьОбъект("ЖурналРасчетов.Зарплата");
ЖЗ.ВыбратьЗаписи(ДатаНач, ДатаКон);
Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
КодИМН=Спр.КодИМНС;
Если КодИМН="1001" Тогда
ВыборСотрудника=Спр.ТекущийЭлемент();
Сообщить (КодИМН);
Сообщить (ВыборСотрудника);
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
Если ЖЗ.Объект=ВыборСотрудника Тогда
Если ЖЗ.ВидРасч=ВидРасчета.НДФЛ Тогда
НДФЛ=НДФЛ+ЖЗ.Результат;
Сообщить (НДФЛ);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Т.ВывестиСекцию("Секция_1");
Т.ТолькоПросмотр(1);
Т.Показать();
КонецПроцедуры"
08.06.2005
19:35
#2
"Нарушен порядок вложенности операций цикла, я бы сделал так:
НДФЛ = 0;
ЖЗ=СоздатьОбъект("ЖурналРасчетов.Зарплата");
Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
КодИМН=Спр.КодИМНС;
Если КодИМН="1001" Тогда
ВыборСотрудника=Спр.ТекущийЭлемент();
Сообщить (КодИМН);
Сообщить (ВыборСотрудника);
Если ЖЗ.ВыбратьЗаписиПоОбъекту(ВыборСотрудника,ДатаНач, ДатаКон) = 1 Тогда
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
Если ЖЗ.ВидРасч=ВидРасчета.НДФЛ Тогда
НДФЛ=НДФЛ+ЖЗ.Результат;
Сообщить (НДФЛ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Правильнее решать такие задачи при помощи запросов вида:
ТекстЗапроса =
"//({ЗАПРОС(НДФЛ)
| // Задаем интервал запроса
|Период с ДатаНач по ДатаКон;
| // Определяем внутренние переменные
|Рез = ЖурналРасчетов.Зарплата.Результат;
|Расч = ЖурналРасчетов.Зарплата.ВидРасч;
|ИМНС = ЖурналРасчетов.Зарплата.Объект.КодИМНС;
| // Назначаем группировки
|Группировка ИМНС без групп;
| // Назначаем функции
|Функция Сум = Сумма(Рез);
|Условие(Рез = ВидРасчета.НДФЛ);
|"//}}ЗАПРОС
"
НДФЛ = 0;
ЖЗ=СоздатьОбъект("ЖурналРасчетов.Зарплата");
Спр=СоздатьОбъект("Справочник.Сотрудники");
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент()=1 Цикл
КодИМН=Спр.КодИМНС;
Если КодИМН="1001" Тогда
ВыборСотрудника=Спр.ТекущийЭлемент();
Сообщить (КодИМН);
Сообщить (ВыборСотрудника);
Если ЖЗ.ВыбратьЗаписиПоОбъекту(ВыборСотрудника,ДатаНач, ДатаКон) = 1 Тогда
Пока ЖЗ.ПолучитьЗапись()=1 Цикл
Если ЖЗ.ВидРасч=ВидРасчета.НДФЛ Тогда
НДФЛ=НДФЛ+ЖЗ.Результат;
Сообщить (НДФЛ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Правильнее решать такие задачи при помощи запросов вида:
ТекстЗапроса =
"//({ЗАПРОС(НДФЛ)
| // Задаем интервал запроса
|Период с ДатаНач по ДатаКон;
| // Определяем внутренние переменные
|Рез = ЖурналРасчетов.Зарплата.Результат;
|Расч = ЖурналРасчетов.Зарплата.ВидРасч;
|ИМНС = ЖурналРасчетов.Зарплата.Объект.КодИМНС;
| // Назначаем группировки
|Группировка ИМНС без групп;
| // Назначаем функции
|Функция Сум = Сумма(Рез);
|Условие(Рез = ВидРасчета.НДФЛ);
|"//}}ЗАПРОС
"
Читают тему
(гостей: 1)