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

  • Автор темы Andrei85
  • Дата начала
Статус
Закрыто для дальнейших ответов.
A

Andrei85

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

puh14

Ну так не закрыть(), а Форма.Закрыть(0);
 
A

Andrei85

Ну так не закрыть(), а Форма.Закрыть(0);

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

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

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

Добавлено:
Волшебная кнопка Esc

Нужно завершить обработку командой в коде!
 
A

Andrei85

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

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

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

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

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

vitfil

ПриОткрытии()
СтатусВозврата(0);
В нужном месте, где требуется прервать выполнение процедуры
Возврат;
 
A

Andrei85

ПриОткрытии()
СтатусВозврата(0);
В нужном месте, где требуется прервать выполнение процедуры
Возврат;

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

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

vitfil

Такое изменение не отразится на использовании этой обработки в других местах?
Обязательно отразится. Подумайте, когда вас стоит ставить статус возврата, а когда не стоит. Подскажу: не обязательно определять статус возврата в самом начале процедуры.
 
V

vitfil

Конкретно в ПриОткрытии() это означает, что открывать не надо
То есть форма не то чтобы закроется, а вообще не откроется
Ой ли...
Форма откроется, не отобразится и закроется.
А то, о чем вы написали, называется ПередОткрытием.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

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