Отказ в общем модуле

1. zaur_djumaev 23.09.20 17:58 Сейчас в теме
Всем доброго времени суток !! Сегодня наткнулся к такому вопросу :

Хочу создать условие в общем модуле в Обработке Проведения, т.е условно записывать движения документов.

Мой не рабочий код :


Процедура ОбработкаПроведения(Отказ, Режим)
	
	// регистр ВзаиморасчетыСПоставщиками Расход
	Если Не Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) тогда
	Движения.ВзаиморасчетыСПоставщиками.Записывать = Истина;
	Движение = Движения.ВзаиморасчетыСПоставщиками.Добавить();
	Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
	Движение.Период = Дата;
	Движение.Поставщик = Поставщик;
	Движение.ГруппаПоставщика = ГруппаПоставщика;
	Движение.Сумма = ОплатаПоставщику;
	Иначе
	Отказ = Истина;
	КонецЕсли;

	// регистр Деньги Приход
	Движения.Деньги.Записывать = Истина;
	Движение = Движения.Деньги.Добавить();
	Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
	Движение.Период = Дата;
	Движение.Кошелек = Кошелек;
	Движение.Сумма = Выручка;

	// регистр Управленческий 
	Движения.Управленческий.Записывать = Истина;
	Движение = Движения.Управленческий.Добавить();
	Движение.Период = Дата;
	Движение.СчетДт = СчетДт;
	Движение.СчетКт = СчетКт;
	Движение.Сумма = Выручка;

	// регистр Управленческий 
	Движения.Управленческий.Записывать = Истина;
	Движение = Движения.Управленческий.Добавить();
	Движение.Период = Дата;
	Движение.СчетДт = СчетДтОплатаПоставщикам;
	Движение.СчетКт = СчетКтОплатаПоставщикам;
	Движение.Сумма = ОплатаПоставщику;

КонецПроцедуры
Показать


или все таки что то я не понимаю ?
По теме из базы знаний
Найденные решения
3. FatPanzer 23.09.20 18:41 Сейчас в теме
Давайте уже учиться говорить правильно, а? Ну что за "отказ в общем модуле"? Что за "обработка проведения в общем модуле"?
Трудно написать "Использование флага Отказ в обработке проведения"? Трудно написать "обработка проведения в модуле объекта" (хотя больше её и находиться негде)?

По теме:
1. В случае, если необходимо, чтобы документ был проведен, но не формировались движения - тогда надо его проверять в начале и делать возврат, без всяких отказов.
Процедура ОбработкаПроведения(Отказ, Режим)
    Если Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
        Возврат;
    КонецЕсли;
КонецПроцедуры

2. В случае, если надо чтобы документ был записан, но не проведен - тогда такие вещи надо контролировать перед записью
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) 
    Если РежимЗаписи = РежимЗаписиДокумента.Проведение И Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
        РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
    КонецЕсли;
КонецПроцедуры

3. В случае, если надо просто запретить запись такого документа, то только тогда включаем флаг Отказа от транзакции:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) 
    Если Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
        Сообщить("Алярм!");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры
zaur_djumaev; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Азбука Морзе 105 23.09.20 18:06 Сейчас в теме
Нормально.
А если после Отказ = Истина; добавить Возврат;
то будет вообще бомба.
7. zaur_djumaev 23.09.20 18:57 Сейчас в теме
3. FatPanzer 23.09.20 18:41 Сейчас в теме
Давайте уже учиться говорить правильно, а? Ну что за "отказ в общем модуле"? Что за "обработка проведения в общем модуле"?
Трудно написать "Использование флага Отказ в обработке проведения"? Трудно написать "обработка проведения в модуле объекта" (хотя больше её и находиться негде)?

По теме:
1. В случае, если необходимо, чтобы документ был проведен, но не формировались движения - тогда надо его проверять в начале и делать возврат, без всяких отказов.
Процедура ОбработкаПроведения(Отказ, Режим)
    Если Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
        Возврат;
    КонецЕсли;
КонецПроцедуры

2. В случае, если надо чтобы документ был записан, но не проведен - тогда такие вещи надо контролировать перед записью
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) 
    Если РежимЗаписи = РежимЗаписиДокумента.Проведение И Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
        РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения;
    КонецЕсли;
КонецПроцедуры

3. В случае, если надо просто запретить запись такого документа, то только тогда включаем флаг Отказа от транзакции:
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) 
    Если Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
        Сообщить("Алярм!");
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры
zaur_djumaev; +1 Ответить
4. zaur_djumaev 23.09.20 18:49 Сейчас в теме
(3)
По теме:
1. В случае, если необходимо, чтобы документ был проведен, но не формировались движения - тогда надо его проверять в начале и делать возврат, без всяких отказов. Отказ выдаст ошибку проведения и отменит транзакцию.


так тоже пробовал не получается
9. FatPanzer 23.09.20 19:02 Сейчас в теме
(4) Автоматическое удаление движений у документа проверь. Если там нет автоматического удаления, то при перепроведении они останутся конечно же, если использовать мое условие.
11. zaur_djumaev 23.09.20 19:04 Сейчас в теме
(9)


Проведение: Разрешить
Оперативное проведение: Разрешить
Удаление движений: Удалять автоматически при отмене проведения

вот так стоит
12. FatPanzer 23.09.20 19:08 Сейчас в теме
(11) ОК. Тогда вот так
Процедура ОбработкаПроведения(Отказ, Режим)
    Движения.ВзаиморасчетыСПоставщиками.Записывать = Истина;
    Движения.Деньги.Записывать = Истина;
    Движения.Управленческий.Записывать = Истина;
    Если Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
        Возврат;
    КонецЕсли;
КонецПроцедуры
13. zaur_djumaev 23.09.20 19:20 Сейчас в теме
(12)
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ВзаиморасчетыСПоставщиками.Записывать = Истина;
Движения.Деньги.Записывать = Истина;
Движения.Управленческий.Записывать = Истина;
Если Поставщик = Справочники.Поставщики.НайтиПоНаименованию("Наша фирма",1) Тогда
Возврат;
КонецЕсли;
КонецПроцедуры


так вообще перестал записывать
14. FatPanzer 23.09.20 19:47 Сейчас в теме
(13) Что перестал записывать? Движения? Так и не должен. Я же написал - у документа должен стоять признак проведен, но движения формироваться не должны.
Именно так и твой код работает.

Можно как-то подробнее расшифровывать свои ответы? У меня столько пива нет, чтобы пытаться фантазировать...
15. zaur_djumaev 24.09.20 02:18 Сейчас в теме
(14)значит так. У меня документ оказания услуг в котором есть реквизиты: "Номенклатура", "Поставщик", "СуммаПоставщика". Этот документ сейчас формирует Движения по "РегистрНакопления.ВзаиморасчетыСПоставщиками" Измерения: "Поставщик", Ресурс: "СуммаПоставщика".

Теперь вопрос:

Я хочу условно записывать эти движения. Допустим если в документе реквизит"Поставщик" = "Наша фирма" тогда не записывать движения (здесь имеется ввиду движения по регистру накопления). А все остальное как обычно, ничего не должно меняться. Еще раз повторяю: - Нужно пропускать только записи движения по Регистру Накопления при выполнении условии !
17. FatPanzer 24.09.20 09:12 Сейчас в теме
(15) Тогда условия надо ставить только на один регистр. И Отказ не использовать вообще. Потому что Отказ действет на ВСЮ транзакцию. Убери выделенное условие.
Прикрепленные файлы:
5. zaur_djumaev 23.09.20 18:50 Сейчас в теме
(3) все равно движения записывается
16. zaur_djumaev 24.09.20 02:28 Сейчас в теме
(3) Оказывается условие не выполняется из-за дублей
Прикрепленные файлы:
6. zaur_djumaev 23.09.20 18:57 Сейчас в теме
После того как перепробовал все отказы, возвраты подумал может дело все таки в общем модуле ? а вообще есть возможность задать условия в Общем модуле документа (в Процедуре Обработка проведения) ?
8. FatPanzer 23.09.20 18:59 Сейчас в теме
(6) Обработка проведения не может располагаться в общем модуле. У документа нет общего модуля.
10. zaur_djumaev 23.09.20 19:02 Сейчас в теме
(8)оувв извиняюсь в модуле объекта.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот