• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Помогите сообразить при написании одной функции

  • Автор темы SeverBap
  • Дата начала
S

SeverBap

Необходимо написать функцию по возврату количества дней отсрочек действия расчета пени на интервале;
Пока есть:
Код:
Функция ВернутьСИнтервалаДействиеКоличествоДнейОтсрочек(Налог,ДатаНачала,ДатаКонца)
ПериодическийРеквизит=СоздатьОбъект("Периодический");
ПериодическийРеквизит.ИспользоватьОбъект("СостояниеПени",Налог);
ПериодическийРеквизит.ВыбратьЗначения(ДатаНачала,ДатаКонца);
Пока ПериодическийРеквизит.ПолучитьЗначение()=1 Цикл
Если ПериодическийРеквизит.Значение=Перечисление.СостояниеПени.ОтсрочкаПени Тогда

КонецЕсли;
КонецЦикла;	
КонецФункции

В периодическом рекивзите хранятся так данные: если вводится документом (отсрочкаРасчетапени) отсрочка расчета пени (в документе указывается от того числа по такое) - в периодическом реквизите ставится значение в датуНачалаДействияОтсрочки значение ОтсрочкаПени, а на ДатаКонцаОтсрочки РасчетПени .... да еще есть понятие бессрочности датаНачала есть а конца нету!!

Долго соображал никак!!!!

листинг идей не привожу приводят в никуда!!!!!
:(
 
J

jcnby

А для пени есть разница в праздниках или выходных? Она вроде в календарных днях считается?
Если да, тогда календарь мучать нада. Как я понял- конфа ЗиК?



Код:
календарь=СоздатьОбъект("Календарь.Пеня");
Дни = Календ.Дней(ДатаНачал,ДатаКонца);

Предворительно должен быть создан Календарь с названием Пеня и заполнен ( количество часов в данном случае не имеет значение ) , но оно не должно равняться 0.
т.к.
Дней(<?>,)
Синтаксис:
Дней(<ДатаНачала>,<ДатаОкончания>)
Назначение:
Получить количество ''ненулевых'' дней за период.
Возвращает: целое положительное число - количество дней.

ну и
УчитыватьПраздники(1); чтобы при автозаполнении празники выбрасывались.
 
S

SeverBap

Так так поподробней!!!!!! (Вообще-то это не типовая конифигурация - конфу написал с нуля вообще!!!!!), классная идея с календарем чет я не подумал!!! надо разобратся... где мона почитать более подробно про метаданные.Календарь???? надо все надо!!!!!
а так пока решил и написал для схождения с результатом функцию:
Код:
Функция ВернутьСИнтервалаДействиеКоличествоДнейОтсрочек(Налог,ДатаНачала,ДатаКонца)
ЗначениеВозврата=0;
ДокументыОтсрочек=СоздатьОбъект("Документ");
ДокументыОтсрочек.ВыбратьПоЗначению(,,"Налог",Налог);
Пока ДокументыОтсрочек.ПолучитьДокумент()=1 Цикл
Если ДокументыОтсрочек.Вид()="ОтсрочкаРасчетаПени" Тогда
Если ПустоеЗначение(ДокументыОтсрочек.ПризнакБессрочности)=1 Тогда
Если ДокументыОтсрочек.ДатаКонца<=ДатаКонца Тогда
Если ДокументыОтсрочек.ДатаНачала<=ДатаНачала Тогда
ЗначениеВозврата=ЗначениеВозврата+(ДокументыОтсрочек.ДатаКонца-ДатаНачала);
Иначе
ЗначениеВозврата=ЗначениеВозврата+(ДокументыОтсрочек.ДатаКонца-ДокументыОтсрочек.ДатаНачала);
КонецЕсли;
ИначеЕсли ДокументыОтсрочек.ДатаКонца>ДатаКонца Тогда
Если ДокументыОтсрочек.ДатаНачала<=ДатаНачала Тогда
ЗначениеВовзрата=ДатаКонца-ДатаНачала;
Прервать;
ИначеЕсли ДокументыОтсрочек.ДатаНачала>ДатаНачала Тогда
ЗначениеВозврата=ЗначениеВозврата+(ДатаКонца-ДокументыОтсрочек.ДатаНачала);
КонецЕсли;	
КонецЕсли;	
ИначеЕсли ПустоеЗначение(ДокументыОтсрочек.ПризнакБессрочности)=0 Тогда
Если ДокументыОтсрочек.ДатаНачала<ДатаНачала Тогда
ЗначениеВозврата=ДатаКонца-ДатаНачала;
Прервать;
ИначеЕсли (ДокументыОтсрочек.ДатаНачала>ДатаНачала) И (ДокументыОтсрочек.ДатаНачала<ДатаКонца) Тогда
ЗначениеВозврата=ЗначениеВозврата+(ДатаКонца-ДокументыОтсрочек-ДатаНачала);
КонецЕсли;	
КонецЕсли;	
КонецЕсли;
КонецЦикла;	
Возврат ЗначениеВозврата;
КонецФункции

НЕЕЕЕЕ календарики некатят!!!! все попересморел!!!! :blink:
 
J

jcnby

Если у тебя установленная компонента "Расчет" то все катит....
Про календари прочитай в ЖКК.
Не забывай про авто заполнение и учитывать выходные и будет тебе щастье))) а то по твоему как в ЗиК-е дни считаются?)))))

Если Бессрочность=1 тогда забивай Текущую Дату
 
S

SeverBap

это катит когда один налог а уменя целый справочник!!!!!!! .... могу кому надо скинуть!!!! (конечно с условием что ктонибудь поможет в данном вопросе!) :blink:
 
J

jcnby

ну так.... емае...... как будто немцы и китайцы общаюцца)))).
Смысл такой - ты из справочника вытягиваешь то значение которое тебе нада - а календарь ( он не привязан ни к какой определенной скидке ) выдает тебе количество дней, которые с указанных тобою дат, определяются количеством ненулевых дней в данном периоде.

Кароче давай в студию все нужные данные и заделай код для вытягивания значений ( ДатаНач и ДатаКон ) .
 
S

SeverBap

Вот смотри конфигурацию!!!!

Обработка ПодсистемаПени!!!! :rolleyes:

Сначала надо заполнить тебе справочник налоговые периоды!!!! заполнить налоговые декларации ... а потом что тебе надо то и пойдет!!!! структура какая есть!!!! С компонентой FormEX без нее не куда!!!!
 

Вложения

  • ____.rar
    246,2 КБ · Просмотры: 96
S

SeverBap

Вот еще одна проблема, которую не могу решить при выборе алгоритма получения значения (это вообщем продолжение этой темы тока уже еще более узко!!!):
Необходимо вернуть значение (0 или 1) которое указывает что есть отсрочка расчета пени или нету!!!!
Код:
//************************************************************************
Функция ОпределитьДействиеОтсрочкиРасчетаПени(Элемент,ДатаОпределения)
Перем ТекущийДокументИзменения;
Результат=0;
СостояниеПениВиртуальное=Создатьобъект("Периодический");
СостояниеПениВиртуальное.ИспользоватьОбъект("СостояниеПени",Элемент);
Если СостояниеПениВиртуальное.НайтиЗначение(ДатаОпределения,-1)=1 Тогда
Если СостояниеПениВиртуальное.Значение=Перечисление.СостояниеПени.ОтсрочкаПени Тогда
ТекущийДокументИзменения=СостояниеПениВиртуальное.ТекущийДокумент();
Если ПустоеЗначение(ТекущийДокументИзменения.ПризнакБесрочности)=1 Тогда
Если ТекущийДокументИзменения.ДатаКонцаОтсрочки<ДатаОпределения Тогда
Результат=0; //Расчет пени произвести
ИначеЕсли ТекущийДокументИзменения.ДатаКонцаОтсрочки>=ДатаОпределения Тогда
Результат=1; //Отсрочка расчета пени
КонецЕсли;	
Иначе
Результат=1
КонецЕсли;
КонецЕсли;	
КонецЕсли;
Возврат Результат;
КонецФункции
Можно его как-нибудь укоротить???? много по времени жрет сволочь!!! :blink:
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!