Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
25 ноя 2024, 20:09

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

Автор sten_d, 17 ноя 2010, 12:34

0 Пользователей и 1 гость просматривают эту тему.

sten_d

метод "Закрыть()" не помогает, он ставит только флаг на закрытие и обработка висит пока не завершаться все процедуры.

sten_d

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

sten_d

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

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

1cFree

Не совсем понятно, что Вы хотите. Попробуем на примере отчета налоговая отчетность/налоговая карточка 1-НДФЛ. Такой отчет Вы хотите получить?

sten_d

Цитата: 1cFree от 17 ноя 2010, 13:39
Не совсем понятно, что Вы хотите. Попробуем на примере отчета налоговая отчетность/налоговая карточка 1-НДФЛ. Такой отчет Вы хотите получить?

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

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

sten_d

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

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

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

prog1c7.7

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

1cFree

Как я понял, форма самой обработки не должна появляться на экране? Тогда в этой обработке  в процедуре "приОткрытии" вы принимаете параметры для расчета, вызываете процедуру расчета, готовите параметры для возврата и пишите СтатусВозврата(0); Возврат; 

1cFree


sten_d

Цитата: 1cFree от 17 ноя 2010, 15:37
Как я понял, форма самой обработки не должна появляться на экране? Тогда в этой обработке  в процедуре "приОткрытии" вы принимаете параметры для расчета, вызываете процедуру расчета, готовите параметры для возврата и пишите СтатусВозврата(0); Возврат; 

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

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск