Технологии
Решено
проблемма 1C - вопрос №11173
недавно столкнулся с такой проблеммой. в общем работа программы заключается в следующем: при формировании продок документа оплаты создается другой документ, а при удалении или распроведении документа созданный документ должен удаляться… оно так и работает при ручном формировании документов оплаты и распроведении, все удаляется. Вопрос: почему не выполняется команда ПриРаспроведении из глобального модуля при попытки распровести из внешнего файла обработки?
Дополнение автора от июнь 18, 2009 г., 12:23:22
версия программы 7.7 своя конфигурация, в главном модуле написано, Процедура ПриОтменеПроведенияДокумента(Докум) Если Докум.ДатаДок <= Константа.ДатаЗапретаРедактирования Тогда Предупреждение("Нельзя отменять проведение документов с датой, более ранней, чем дата запрета редактирования документов!"); СтатусВозврата(0); Возврат; КонецЕсли; Если (Докум.вид() = "Выписка") ИЛИ (Докум.вид() = "ПриходныйОрдер") Тогда счФактура = СоздатьОбъект("Документ.СчетФактура"); счФактура.ВыбратьДокументы(Докум.ДатаДок, Докум.ДатаДок); Пока счФактура.ПолучитьДокумент() = 1 Цикл Если счФактура.ДокументОснование = Докум.ТекущийДокумент() Тогда счФактура.Удалить(1); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры процедура не выполняется если из внешней обработки . вот код Процедура Сформировать() выписка = СоздатьОбъект("Документ.Выписка"); выписка.ВыбратьДокументы(Дата1, Дата2); Пока выписка.ПолучитьДокумент() = 1 Цикл выписка.СделатьНеПроведенным(); Сообщить("распроведен " + выписка.ТекущийДокумент()); КонецЦикла; прихордер = СоздатьОбъект("Документ.ПриходныйОрдер"); прихордер.ВыбратьДокументы(Дата1,Дата2); Пока прихордер.ПолучитьДокумент() = 1 Цикл прихордер.СделатьНеПроведенным(); Сообщить("распроведен " + прихордер.ТекущийДокумент()); КонецЦикла; КонецПроцедуры
Дополнение автора от июль 3, 2009 г., 17:31:09
спасибо ребята вы очень сильно помогли особенно "O-Planet", O-Planet как те добавить бал?
Владимир Гусев июнь 15, 2009 г.
-
Всего ответов: 8
-
какая версия платформы? вообще обработчик события называется ПриОтменеПроведения если я правильно помню
-
Добрый день! Сообщите версию платформы, название и версию конфигурации. С каким документом проблемы? Это типовое решение или внедренная конфигурация?
-
Потому чта процедура ПриРаспроведении не является предопределенной процедурой, которая вызывается по умолчанию, когда отменяется проведение документа. Таковой является процедура ОбработкаУдаленияПроведения(), которая размещается в модуле документа. Назначение: Предопределенная процедура обработки удаления проведения документа или удаления проведенных документов в любом режиме.
Лучший ответ по мнению автора -
По скольку при проведении/распроведении делаются манипуляции с другими документами, то это явно не типовое решение простое решение - пройтись отладчиком и поглядеть на ошибку обратить внимания на права доступа к оъектам и лучше покажи часть кода с ошибкой выполнения
-
1. Попробуйте в глобальнике указать Процедура ПриОтменеПроведенияДокумента(Докум) ЭКСПОРТ Если не помежет, то нужно в обработке перед строкой Выписка.СделатьНеПроведенным(); добавить строку ПриОтменеПроведенияДокумента(Выписка);
-
также и перед строкой Прихордер.СделатьНеПроведенным(); добавьте Процедура ПриОтменеПроведенияДокумента(Прихордер)
-
Вот не знаю! Наверное, в моем профайле можно что-то написать просто
-
а) Распроведение сч/ф при распроведении документа-основания - совершенно логичное решение, применяется во всех типовых конфигурациях б) В семерке обработчики событий НЕ ВЫЗЫВАЮТСЯ при ПРОГРАММНОЙ инициализации событий. Т.е. если Вы из внешней обработки (или любого другого места) производите программные манипуляции с объектом, то Вы должны САМОСТОЯТЕЛЬНО вызывать обработчики тех событий, которые автоматически вызываются при интерактивной работе. Решение. а) Процедуру глабального модуля сделать экспортируемой, как тут уже указывалось. Процедура ПриОтменеПроведенияДокумента(Докум) ЭКСПОРТ б) В том месте, где Вы распроводите документ, после того, как он записан в новом статусе, вызвать программно обработчик: выписка.СделатьНеПроведенным(); ПриОтменеПроведенияДокумента(выписка.ТекущийДокумент()); Замечу: в восьмерке все обработчики вызываются одинаково как при интерактивных, так и при программных действиях над объектом (есть исключения, но в данном вопросе это не актуально)
Похожие вопросы