1С:Предприятие 7.70.027.Как принудительно завершить обработку в коде?

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

Статус темы:
Закрыта.
  1. Andrei85

    Andrei85 Гость

    Конфигурация Зарплата и Кадры. Правлю распределение НДФЛ по источникам финансирования. Для этого в глобальном модуле вызываю обработку "Форма1НДФЛ2009", чтобы получить данные по НДФЛ по отдельному человеку. При формировании любого отчета по определенному источнику финансирования для всех людей из списка данные берутся из первой налоговой карточки, потому что она не закрывается и соответственно не открывается новая. Метод "Закрыть()" поставил в процедуре "При открытии" в обработке "Форма1НДФЛ2009". метод "Закрыть()" не помогает, он ставит только флаг на закрытие и обработка висит пока не завершаться все процедуры. Что тут можно придумать?
     
  2. TimeDontWait

    TimeDontWait Well-Known Member

    Регистрация:
    4 янв 2010
    Сообщения:
    383
    Симпатии:
    0
    Волшебная кнопка Esc
     
  3. puh14

    puh14 Well-Known Member
    1C Team

    Регистрация:
    11 июл 2008
    Сообщения:
    1.412
    Симпатии:
    0
    Ну так не закрыть(), а Форма.Закрыть(0);
     
  4. Andrei85

    Andrei85 Гость

    Собственно я так и делаю: "Форма.Закрыть(0);"

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

    Получается так: я формирую отчет -->в отчета идет обращение к глобальному модулю --> здесь мой вызов обработку вот так: "ОткрытьФорму("Обработка.Форма1НДФЛ2009",Параметры1);". Для первого человека из списка все отработало, нормально. Для второго вот это "ОткрытьФорму("Обработка.Форма1НДФЛ2009",Параметры1);" уже не срабатывает, потому что эта обработка не закрылась после первого открытия. И собственно когда отчет сформировался обработка закрывается. Мне нужно чтобы для каждого человека из списка при формировании отчета вызывалась его налоговая карточка. Что делать?

    Добавлено:
    Нужно завершить обработку командой в коде!
     
  5. Andrei85

    Andrei85 Гость

    Я правлю распределение НДФЛ по источникам финансирования в глобальном модуле процедура "глПолучитьРаспределениеРезультата". Задача состоит в том чтобы получить в коде данные по НДФЛ(вычеты в этом месяце, облагаемая база с начала года, удержанный НДФЛ с начала года) и записать их в переменные. Потом я эти данные использую для распределения. Вот эта процедура "глПолучитьРаспределениеРезультата" вызывается во всех отчетах(расчетный листок, свод по зарплате, расчетная ведомость и т.д.), когда мы формируем отчет по определенному источнику финансирования. Так вот я все написал и когда я формирую любой отчет, а в список сотрудников ставлю отдного человека, тогда все работает отлично. Но когда в списке сотрудников несколько человек или мы формируем отчет "по всем", "по подразделению", тогда правильное распределение получается только для первого человека из списка.

    В процедуре "глПолучитьРаспределениеРезультата" я вызываю обработку вот так: "ОткрытьФорму("Обработка.Форма1НДФЛ2009",Параметры1);" и пытаюсь ее завершить вот так: "Форма.Закрыть(0);"(эта строчка стоит в конце процедуры "При открытии" в самой обработке.). После того как обработка запустилась в первый раз, она завершается только после окончания формирования отчета, и соответственно второй, третий и т.д. разы обработка не запускается потому что она уже запущена, а она должна запускаться для каждого человека из списка.

    Добавлено: Попробую объяснить пролему по другому(у меня проблемы с постановкой вопроса):

    Задача состоит в том чтобы вызвать обработку Форма1НДФЛ2009 для конкретного человека, записать нужные данные в константы и завершить ее. И так по списку для всех сотрудников.

    Вызываю я вот так: "ОткрытьФорму("Обработка.Форма1НДФЛ2009",Параметры1);"
    Завершить пытаюсь так: "Форма.Закрыть(0);"(эта строчка стоит в конце процедуры "При открытии" в самой обработке.) Обработка не завершается, пока мы не пройдем весь список. И получается что для всех людей мы используем данные из констант записанных для первого человека.
     
  6. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    ПриОткрытии()
    СтатусВозврата(0);
    В нужном месте, где требуется прервать выполнение процедуры
    Возврат;
     
  7. Andrei85

    Andrei85 Гость

    Спасибо. Теперь все работает.

    Только не понятно как.
    Что означает строчка "СтатусВозврата(0);"?
    Такое изменение не отразится на использовании этой обработки в других местах?
     
  8. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Обязательно отразится. Подумайте, когда вас стоит ставить статус возврата, а когда не стоит. Подскажу: не обязательно определять статус возврата в самом начале процедуры.
     
  9. Hryv

    Hryv Гость

    Конкретно в ПриОткрытии() это означает, что открывать не надо
    То есть форма не то чтобы закроется, а вообще не откроется
     
  10. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ой ли...
    Форма откроется, не отобразится и закроется.
    А то, о чем вы написали, называется ПередОткрытием.
     
Загрузка...
Статус темы:
Закрыта.

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