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

Тема в разделе "1C и всё что с ней связано", создана пользователем SeverBap, 29 сен 2008.

  1. SeverBap

    SeverBap Well-Known Member

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

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

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

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

    jcnby Гость

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



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

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

    SeverBap Well-Known Member

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

    jcnby Гость

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

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    это катит когда один налог а уменя целый справочник!!!!!!! .... могу кому надо скинуть!!!! (конечно с условием что ктонибудь поможет в данном вопросе!) :blink:
     
  6. jcnby

    jcnby Гость

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

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

    SeverBap Well-Known Member

    Регистрация:
    18 сен 2007
    Сообщения:
    440
    Симпатии:
    0
    Вот смотри конфигурацию!!!!

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

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

    Вложения:

    • ____.rar
      Размер файла:
      246,2 КБ
      Просмотров:
      7
  8. SeverBap

    SeverBap Well-Known Member

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

Поделиться этой страницей