Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Дополнительная обработка документа при записи, но после проведения          
vadim007 Подменю пользователя
сообщение 08.09.11, 13:04
Сообщение #1

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Как выполнить дополнительную обработку документа при записи, но после проведения?
Пояснение вопроса: предопределенная процедура ПриЗаписи() модуля формы вызывается ДО обработки проведения (в модуле документа). Необходимо же выполнить некие действия ПОСЛЕ успешности проведения, но в модуле формы.

Vofka Подменю пользователя
сообщение 08.09.11, 13:38
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4522 раз
Рейтинг: 3645.4

А в обработке проведения в конце вставить то, что надо нельзя?

vadim007 Подменю пользователя
сообщение 08.09.11, 13:48
Сообщение #3

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Нет, нельзя, потому что используются переменные, введенные в модуле формы.

-=VJ=- Подменю пользователя
сообщение 08.09.11, 14:00
Сообщение #4

Оратор
Иконка группы
Группа: Местный
Сообщений: 402
Из: Киев
Спасибо сказали: 73 раз
Рейтинг: 0

Цитата(vadim007 @ 08.09.11, 14:48) *
Нет, нельзя, потому что используются переменные, введенные в модуле формы.


Провести(<Режим>,<Знач>)
Назначение:
Выполнить проведение документа.
Возвращает: 1 - если проведение документа выполнено, 0 - иначе.
Параметры:
<Режим> - необязательный параметр. Число: 0 - проводить документ без сдвига ТА; 1 - проводить непроведенный документ реальным временем (со сдвигом ТА); 2 - перепроводить проведенный документ реальным временем (со сдвигом ТА); 3 - проводить любой (непроведенный, проведенный) документ реальным временем (со сдвигом ТА). Значение по умолчанию - 0.
<Знач> - выражение произвольного типа, которое передается при запуске предопределенной процедуры ОбработкаПроведения (


Signature
Живу на VJ.net.ua.
Спілкуюсь в ЖЖ

Спасибо сказали: vadim007,

mister-x Подменю пользователя
сообщение 08.09.11, 14:37
Сообщение #5

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Цитата
Необходимо же выполнить некие действия ПОСЛЕ успешности проведения, но в модуле формы.
ці дії, будуть ще раз змінювати об*єкт вже після проведення?

vadim007 Подменю пользователя
сообщение 08.09.11, 14:55
Сообщение #6

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Цитата(mister-x @ 08.09.11, 15:37) *
ці дії, будуть ще раз змінювати об*єкт вже після проведення?

Нет, они будут изменять другие объекты, но только в случае успешного проведения.

Цитата(-=VJ=- @ 08.09.11, 15:00) *
Провести(<Режим>,<Знач>)(

Кажется то что надо.

vadim007 Подменю пользователя
сообщение 08.09.11, 16:00
Сообщение #7

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Не получается использовать процедуру Провести(..) sad.gif
Попробую описать задачу: нужно составить Журнал регистрации доверенностей. В этом журнале есть колонка "Отметка об использовании доверенности", в которой указывается документ, которым доверенность закрыта. Обычно это два документа "Приходная накладная" и "Авансовый отчет". В этих документах я ввел дополнительный реквизит Доверенность. Это только половина дела - для возможности прямо из документа указывать доверенность, которую документ закрывает. Но чтобы в процессе построения отчета не перелопачивать массу документов в поисках доверенностей, в самой доверенности также есть ссылки на документы, которыми покрывается доверенность (одна доверенность может закрываться несколькими документами). Как храню эти ссылки - это отдельная песня. Суть в другом: обновление ссылок в документе Доверенность из Авансового отчета производится из процедуры ПриЗаписи(). Запись происходит ДО проведения документа. Если были ошибки ввода, то документ не проводится. Если он был не проведен, то документ можно сохранить - сохранится и ссылка на выбранную доверенность. Если до этого он был проведен, а мы пытаемся его перепровести, то документ не проводится и не сохраняется. Ссылка на выбранную доверенность конечно не сохранится, но в самой доверенности ссылка на Авансовый отчет уже записана, т.к. процедура ПриЗаписи() вызывается ДО проведения. Хотя проверки на правильность заполнения производятся ПРИ проведении.
Было бы логично процедуру ПриЗаписи() обозвать ПередПроведением(), а сама ПриЗаписи() вызывалась-бы системой именно при записи, а не перед проведением.

kalyamov Подменю пользователя
сообщение 08.09.11, 16:21
Сообщение #8

Завсегдатай
Иконка группы
Группа: Местный
Сообщений: 186
Спасибо сказали: 31 раз
Рейтинг: 0

Цитата(vadim007 @ 08.09.11, 17:00) *
Не получается использовать процедуру Провести(..) sad.gif
Попробую описать задачу: нужно составить Журнал регистрации доверенностей. В этом журнале есть колонка "Отметка об использовании доверенности", в которой указывается документ, которым доверенность закрыта. Обычно это два документа "Приходная накладная" и "Авансовый отчет". В этих документах я ввел дополнительный реквизит Доверенность. Это только половина дела - для возможности прямо из документа указывать доверенность, которую документ закрывает. Но чтобы в процессе построения отчета не перелопачивать массу документов в поисках доверенностей, в самой доверенности также есть ссылки на документы, которыми покрывается доверенность (одна доверенность может закрываться несколькими документами). Как храню эти ссылки - это отдельная песня. Суть в другом: обновление ссылок в документе Доверенность из Авансового отчета производится из процедуры ПриЗаписи(). Запись происходит ДО проведения документа. Если были ошибки ввода, то документ не проводится. Если он был не проведен, то документ можно сохранить - сохранится и ссылка на выбранную доверенность. Если до этого он был проведен, а мы пытаемся его перепровести, то документ не проводится и не сохраняется. Ссылка на выбранную доверенность конечно не сохранится, но в самой доверенности ссылка на Авансовый отчет уже записана, т.к. процедура ПриЗаписи() вызывается ДО проведения. Хотя проверки на правильность заполнения производятся ПРИ проведении.
Было бы логично процедуру ПриЗаписи() обозвать ПередПроведением(), а сама ПриЗаписи() вызывалась-бы системой именно при записи, а не перед проведением.

В кнопке ОК - снкачала проведите, а потом, если провелось успешно, Записать ().

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

mister-x Подменю пользователя
сообщение 08.09.11, 17:11
Сообщение #9

...
Иконка группы
Модератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 3477
Из: Тернопіль
Спасибо сказали: 1417 раз
Рейтинг: 0

Спочатку запишіть документ без закриття форми (тобто мають дві кнопки: Записати і Провести із закриттям форми або 3: Записати, Провести, Закрити), а далі проводьте.
Цитата
Нет, они будут изменять другие объекты, но только в случае успешного проведения.
у даному випадку пропоную ці дії помістити в процедуру ПриЗакрытии(), при закритті форми документу можна змінювати інші об*єкти.

-=VJ=- Подменю пользователя
сообщение 08.09.11, 22:02
Сообщение #10

Оратор
Иконка группы
Группа: Местный
Сообщений: 402
Из: Киев
Спасибо сказали: 73 раз
Рейтинг: 0

Цитата(vadim007 @ 08.09.11, 17:00) *
Не получается использовать процедуру Провести(..) sad.gif


Всё равно ничего не понял.
У Вас есть процедура "Провести", которая может получать значение от формы
У Вас есть процедура "ОбработкаПроведения", которая может получать значение от "Провести"
Если ОбработкаПроведения дошла до конца - значит документ провелся нормально и перед "КонецПроцедуры" с ним можно продолжать свои операции.
Что не так?


Signature
Живу на VJ.net.ua.
Спілкуюсь в ЖЖ

igmig65 Подменю пользователя
сообщение 08.09.11, 22:54
Сообщение #11

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 613
Из: Донецкая обл
Спасибо сказали: 168 раз
Рейтинг: 140.9

Судя из описанного, что понял: У вас в кнопке провести записано: #Записать Провести? Закрыть. Значит первой у вас вызывается процедура ПриЗаписи(), потом ОбработкаПроведения(). Получается вы при записи Авансового отчета прописываете ссылку на него в Доверенность, выбранную в этом Авансовом. И по том если сам авансовый непроводится, то в доверенности всеравно остается ссылка на него, хоть он и непровелся, так как вы уже записали АО.
Вот тут ошибка, вдруг вы в этом АО замените ссылку на другую доверенность, соответственно ПриЗаписи(), вы запишите уже в другую доверенность ссылку на этот АО. А в старой доверенности останется ссылка на это же АО, хотя он уже к ней никак непривязан.
Выход, нужно использовать ОбработкуПроведения() и ОбработкуУдаленияПроведения() для удаления ссылок на АО.
Цитата
Нет, нельзя, потому что используются переменные, введенные в модуле формы.

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

vadim007 Подменю пользователя
сообщение 09.09.11, 9:14
Сообщение #12

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Цитата(igmig65 @ 08.09.11, 23:54) *
Судя из описанного, что понял: У вас в кнопке провести записано: #Записать Провести? Закрыть. Значит первой у вас вызывается процедура ПриЗаписи(), потом ОбработкаПроведения(). Получается вы при записи Авансового отчета прописываете ссылку на него в Доверенность, выбранную в этом Авансовом. И по том если сам авансовый непроводится, то в доверенности всеравно остается ссылка на него, хоть он и непровелся, так как вы уже записали АО.
Вот тут ошибка, вдруг вы в этом АО замените ссылку на другую доверенность, соответственно ПриЗаписи(), вы запишите уже в другую доверенность ссылку на этот АО. А в старой доверенности останется ссылка на это же АО, хотя он уже к ней никак непривязан.
Выход, нужно использовать ОбработкуПроведения() и ОбработкуУдаленияПроведения() для удаления ссылок на АО.

Если документ в 1С не проведен, и есть ошибки, которые не дают документу провестись, то документ хотя-бы сохраняется.
Если-же документ был проведен, и мы что-то в нем изменили, и возникли ошибки, из-за которых документ не проводится, то документ не сохраняется. Но процедура ПриЗаписи() отрабатывается. Наверное, стоит поменять местами вызовы #Записать Провести? в кнопке ОК.
Попробовал. Вывод: если ранее проведенный документ не перепровелся, то он и не сохраняется. В принципе это логично.
В моем случае не нужно привязываться к проведению. Мне важен сам факт, что документ был сохранен. И в случае успешного сохранения - выполнить свои действия.
Процедура ПриЗаписи(), получается, не подходит. Если-бы было что-то типа ПослеЗаписи(), или ПослеСохранения().
Т.е мне нужно отслеживать результат события не ДО его возникновения ( ПриЗаписи() ), а после его отработки. Как-бы это смоделировать в рамках 1с?

Эврика! Нашел! Значит делаем так:
В процедуре ПриОткрытии() комментируем вызов ПриЗаписиПерепроводить(1);
В процедуре ПриЗаписи() добавляем строки:
Процедура ПриЗаписи()
    Автор = Пользователь;
    глПроверкаДатыДок(Контекст,"Запись");
    //! Ручное перепроведение
    Если Проведен() = 1 Тогда
        Если Провести() = 0 Тогда
            СтатусВозврата(0);
            Возврат;
        КонецЕсли;
    КонецЕсли;
    //! Обновление реквизита Документы связанных Доверенностей
    УчестьИзмененияДоверенности(Доверенность, 0);
    Если СтатусВозврата() = 0 Тогда
        Возврат;
    КонецЕсли;
    Если ПрежняяДоверенность <> Доверенность Тогда
        УчестьИзмененияДоверенности(ПрежняяДоверенность, 1);
    КонецЕсли;
    Если СтатусВозврата() = 0 Тогда
        Возврат;
    КонецЕсли;
    ПрежняяДоверенность = Доверенность;
    //! Конец вставки
КонецПроцедуры

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 22.05.24, 8:58
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!