Вход | Регистрация


1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Отмена проведения в модуле документа

v7: Отмена проведения в модуле документа
Я
   Масянька
 
14.04.17 - 14:57
День добрый!
Если проведенный документ изменить (заведомо с ошибкой), то вываливается сообщение об ошибке + сообщение, что док-т не проводится, НО сам док-т остается проведенным.
Почему?
ТиС (в данном случае - стандарт).
Спасибо.
 
 
   АЛьФ
 
1 - 14.04.17 - 14:59
Транзакция?
   Ёпрст
 
2 - 14.04.17 - 14:59
(0) А что не устраивает ?
   Ёпрст
 
3 - 14.04.17 - 15:00
Документ просто при ошибке НЕ меняет своего исходного состояния
   Ёпрст
 
4 - 14.04.17 - 15:00
так и должно быть
   Масянька
 
5 - 14.04.17 - 15:01
(1) Да, нет там тран... короче.
(2) Логично, что должно отмениться проведение. Не?
   Масянька
 
6 - 14.04.17 - 15:02
(3) При проведении проведенного: отмена проведения, новое проведение. Не?
   АЛьФ
 
7 - 14.04.17 - 15:02
2(5) А куда же делась транзакция?
   АЛьФ
 
8 - 14.04.17 - 15:03
2(6) Не.
   Ёпрст
 
9 - 14.04.17 - 15:03
(6) Проведение - это всегда одна транзакция, которая не завершилась, что там унутри - фиолетово
   Масянька
 
10 - 14.04.17 - 15:05
(7) Откуда я знаю.
Процедура ОбработкаПроведения(ВидыДвижений)
    
    // Проверка заполненности обязательных реквизитов.

       Если глВсеРеквизитыДокументаЗаполнены(Контекст,
        "Фирма,Склад,Валюта,Контрагент,Договор")=0 Тогда
        Возврат;
    КонецЕсли;
                  
    Если (Склад.РозничныйСклад = 1) Тогда
        глНеПроводить(Контекст,"Документ """+ глНазваниеДокументаВЖурнале(Контекст)+""" можно
        |оформлять только с оптового склада!");
        Возврат;
    КонецЕсли;

    // Проведение по регистрам оперативного учета.    

    Если (ПустоеЗначение(ВидыДвижений) = 1) ИЛИ (Найти(ВидыДвижений, "Регистр") <> 0) Тогда
        ПроведениеПоРегистрам();
 
 Рекламное место пустует
   Масянька
 
11 - 14.04.17 - 15:07
Ладно...
В модуле док-та - как отменить проведение?
   АЛьФ
 
12 - 14.04.17 - 15:08
2(10) Так 1С сама транзакция открывает перед вызовом обработки проведения.
2(11) При проведении? Никак.
   Злопчинский
 
13 - 14.04.17 - 15:09
(12) не, извернутьяс можно, но это некузявый вариант
   АЛьФ
 
14 - 14.04.17 - 15:10
2(13) Не надо. Только еще больше ее запутаем.
   Злопчинский
 
15 - 14.04.17 - 15:12
(11) какое проведение?

если нужно отменить текущее проведение - то или ошибкой или СтатусВозврата(0)

если отменить ранее выполненное проведение - это тогда "извне"

еще есть (но я никогда не использовал)

НеПроводитьДокумент();
Синтаксис:
НеПроводитьДокумент()
Назначение:
Отмена проведения документа.
Замечание:
Метод доступен только в Модуле документа в предопределенной процедуре ОбработкаПроведения.
Подробнее см. в документации, глава 'Работа с Документами'
   Злопчинский
 
16 - 14.04.17 - 15:13
(11) в модуле проведения генеришь формексом асинхронное событие (?). Оно отрабатывает после окончания транзакции проведения (т.е. тпа как подписка на событие, у меня таких прилично). То есть когда сработает событие - ты уже будешь ВНЕ документа и можешь его распровести.
   Масянька
 
17 - 14.04.17 - 15:15
(15) Еще раз: док-т проведен, открыли, изменили, ошибка, но док-т остается проведенным.
НеПроводить.. - не арбайтен.
   Масянька
 
18 - 14.04.17 - 15:16
+ (17) А хочу, чтобы стал не проведенным. Вот.
   Злопчинский
 
19 - 14.04.17 - 15:16
(17) ошибка - не зафиксировалась. документ был проведенным норм? был! остался норм.проведенным - да!
   Злопчинский
 
20 - 14.04.17 - 15:16
(18) а я хочу мороженку лизнуть и еще кое что.. но - Пост...
   Злопчинский
 
21 - 14.04.17 - 15:19
(18) По кнопке проведения - хватай ссылку на документ. документ закрывай программно. по ссылке - проводи.

Если мойМажорныйДокумент.Провести()=0 Тогда
  Если мойМажорныйДокумент.Проведен()=1 Тогда 
      мойМажорныйДокумент.СделатьНепроведенным();
      ОткрытьФорму(мойМажорныйДокумент);
  КонецЕсли;
КонецВсемЕсли;
   Ёпрст
 
22 - 14.04.17 - 15:40
Это какой-то неправильный мёд
Масяня, прекращай есть всякую гадость
   Масянька
 
23 - 14.04.17 - 15:43
(22) Я мёд не люблю.
А гадость едят - пользователи. Причем, на мой взгляд, гадость абсолютно логичная.
   Злопчинский
 
24 - 14.04.17 - 15:45
(23) Обоснуй насчет "логичная"
   Это_mike
 
25 - 14.04.17 - 15:46
(22) может, она использует "ту" ложку? :-)
   Злопчинский
 
26 - 14.04.17 - 15:47
(23) на основании текущего правильного документа вводи "корректировочны" - проводи его - если не провелся - (__.__)

проведение дока по сложившимся соглашениям - отражение свершившегося факта хоз.жизни.

то есть кто-то "мухлюет" отражая то чего не было а потом ой.. либо у вас очень специфический колумбийский м.б. конопляный мед.
   Irbis
 
27 - 14.04.17 - 15:51
Логика автора реализуется путём насильной отмены проведения и повторным проведением. Нелогично давать править проведённый документ. Сначала отмена проведения, а потом редактирование.
   Масянька
 
28 - 14.04.17 - 15:52
(24) А чего обосновывать?
(26) В таком случае - изначально нужно было запрещать проведение проведенного. От слов "совсем никак".
А насчет мухлевки - не надо мерять по себе.
   Это_mike
 
29 - 14.04.17 - 15:52
(27) причем отмена не ПКМ-"отменить проведение", а бизнес-процессом, с аудиторским следом и всеми остальными причиндалами.
   Это_mike
 
30 - 14.04.17 - 15:53
(28) вся рота идет не в ногу?
   Злопчинский
 
31 - 14.04.17 - 15:54
(29) угу, так я про это и говорю когда про "корректировку"...
   Злопчинский
 
32 - 14.04.17 - 15:55
(28) это у вас там мухлюют. а у мну отмена проведенного документа = форсмажор и голова по таким поводам не болит.

и чем (21) не устраивает?
   Злопчинский
 
33 - 14.04.17 - 15:56
(30) у них там полуразвалившийся мост... поэтому все лазят как хотят наверное ;-)
 
 
   Масянька
 
34 - 14.04.17 - 15:57
(30) (31) Забавно...
А когда расчетчик не правильно начислит ЗП (в меньшую сторону) - будете ждать следующей выплаты?
   АЛьФ
 
35 - 14.04.17 - 15:57
2(28) Так и что же тебе мешает запретить проведение проведенного?
   Это_mike
 
36 - 14.04.17 - 16:00
(34) почему? отмена. через соответсвующую процедуру. если ошибки редкие - то ничего страшного. а если частые - нужно что-то поправлять в консерватории
   Злопчинский
 
37 - 14.04.17 - 16:11
(34) подожду. с возмещением задержки. и кучей гемора для конторы и расчетчика. ибо нехрен.
   Злопчинский
 
38 - 14.04.17 - 16:12
(34) так в итоге - (21) - чем не подходит?
   Масянька
 
39 - 14.04.17 - 16:13
(38) Костылем.
   Злопчинский
 
40 - 14.04.17 - 16:19
(39) ну извините, если система у вас переломана - то тут только костылями.. или в больничку на излечение...
   Злопчинский
 
41 - 14.04.17 - 16:19
ладно, скучно тут с нами, кремонами невменяемыми, борите дальше, я в спортзал мозги проветрить
   Смотрящий
 
42 - 14.04.17 - 16:20
(0)Праvами заруби корректироvку проvеденного документа.
   АЛьФ
 
43 - 14.04.17 - 16:20
А вот мне все же интересно что мешает запретить редактирование проведенного документа и требовать отмену проведения перед редактированием?
   Irbis
 
44 - 14.04.17 - 16:25
(43)Религия
   Масянька
 
45 - 14.04.17 - 16:28
(42) Зачем? Человеческий фактор никто (пока) не отменял.
(43) При открытии док-та спрашивать: "Просто посмотреть или будете ломать?" :)
   Irbis
 
46 - 14.04.17 - 16:30
(45) Нет. Проведённые документы открываются только на просмотр.
   Смотрящий
 
47 - 14.04.17 - 16:55
(45) Глюпая. Так ответственность на тебе, что порождает ветки типа этой (и юзера будут включать дурака); а сяк - юзер распровел док, вся ответственность на нем. Вон у Злопа ваще форсмажор.
   Масянька
 
48 - 14.04.17 - 17:07
(47) В данном случае: с юзерами полное взаимопонимание (сама поражаюсь :) ).
И мне вот все же интересно - что мешает при перепроведении сделать отмена проведения и провести по новой? Как я понимаю - вопрос риторический :)
А по поводу форс-мажоров - опять-таки, в данном случае не возникают (сама поражаюсь :) ).
   NSSerg
 
49 - 14.04.17 - 17:08
Как всё запущено.
СтатусВОзврата(0); пропущен.
Процедура ОбработкаПроведения(ВидыДвижений)
    
    // Проверка заполненности обязательных реквизитов.


       Если глВсеРеквизитыДокументаЗаполнены(Контекст,
        "Фирма,Склад,Валюта,Контрагент,Договор")=0 Тогда

  // NS

  // Тут либо глНеПроводить() по аналогии с кодом ниже

  // А в глНеПроводить написано Статусвозврата(0);

  // Либо прямо написать

        Статусвозврата(0);  
        Возврат;
  // Но естественно если документ был проведен, то просто

  // будет отменена транзакция, а документ останется проведенным

    КонецЕсли;
                  
    Если (Склад.РозничныйСклад = 1) Тогда
        глНеПроводить(Контекст,"Документ """+ глНазваниеДокументаВЖурнале(Контекст)+""" можно
        |оформлять только с оптового склада!");
        Возврат;
    КонецЕсли;
 
 Рекламное место пустует
   Это_mike
 
50 - 14.04.17 - 17:10
(40) думаешь, это излечимо?
   NSSerg
 
51 - 14.04.17 - 17:11
Виноват, скорей всего в глВсеРеквизитыЗаполнены() есть глНеПроводить()
Так что всё нормально, ветку можно закрывать.
(48) Кому мешает?
   Масянька
 
52 - 14.04.17 - 17:14
(51)
Процедура глНеПроводить(Конт,Сообщение) Экспорт

    СтатусВозврата(0);   
    глСообщениеПроведения(Сообщение, Конт.ТекущийДокумент(), 1,,1);
    глСообщениеПроведения("Документ не проводится!", Конт.ТекущийДокумент(), 1,,1);
    глПоказатьТрассировку(глСообщенияТрассировки);  
    глСообщенияТрассировки = 0;
КонецПроцедуры// глНеПроводить()


Функция глВсеРеквизитыДокументаЗаполнены(Конт,СписокРеквизитов) Экспорт
    
    Если Константа.РазрешитьПроводитьБудущейДатой = 0 Тогда
        Если Конт.ДатаДок>РабочаяДата() Тогда
            глНеПроводить(Конт,"Нельзя проводить документ будущей датой!");
            Возврат (0);
        КонецЕсли;                                             
    КонецЕсли;    
                
    Пока СтрДлина(СписокРеквизитов)>0 Цикл
        ПозЗапятой = Найти (СписокРеквизитов,",");
        Если ПозЗапятой = 0 Тогда
            ИдентРеквизита = СписокРеквизитов;
            СписокРеквизитов = "";
        Иначе
            ИдентРеквизита = Сред(СписокРеквизитов,1,ПозЗапятой-1);
            СписокРеквизитов = Сред(СписокРеквизитов,ПозЗапятой+1);
        КонецЕсли;
        Если ПустоеЗначение(Конт.ПолучитьАтрибут(ИдентРеквизита))=1 Тогда
            ВидДок = Конт.Вид();
            Если Метаданные.Документ(ВидДок).РеквизитШапки(ИдентРеквизита).Выбран()=1 Тогда
                Объект = Метаданные.Документ(ВидДок).РеквизитШапки(ИдентРеквизита);     
                
            ИначеЕсли Метаданные.ОбщийРеквизитДокумента(ИдентРеквизита).Выбран()=1 Тогда
                Объект = Метаданные.ОбщийРеквизитДокумента(ИдентРеквизита);
                
            ИначеЕсли Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита).Выбран()=1 Тогда
                Объект = Метаданные.Документ(ВидДок).РеквизитТабличнойЧасти(ИдентРеквизита);
                
            Иначе
                глНеПроводить(Конт,"ВсеРеквизитыДокументаЗаполнены(): Неверный реквизит:"+ИдентРеквизита);
                Возврат (0);
            КонецЕсли;
            ПредставлениеРеквизита = ?(ПустоеЗначение(Объект.Синоним)=0,Объект.Синоним,Объект.Идентификатор);
            глНеПроводить(Конт,"Не заполнен реквизит """+ПредставлениеРеквизита+"""");
            Возврат (0);
        КонецЕсли;
    КонецЦикла;
    
    Возврат (1);
    
КонецФункции// глВсеРеквизитыДокументаЗаполнены()


Ткни - где отмена проведения?
   NSSerg
 
53 - 14.04.17 - 17:17
(52) Тыкаю - статусвозврата(0) видишь?

И про какую отмену проведения идет речь?

Ты хочешь чтоб при перепроведении документа с ошибкой он становился непроведенным? Это уже не ко мне.
   Масянька
 
54 - 14.04.17 - 17:18
(53) А зачем пришел?
   NSSerg
 
55 - 14.04.17 - 17:22
(54) Ну если уж заставляешь ответить - ИМХО за тем же за чем и остальные пришли. Посмотреть на очередную клоунаду.

Если у тебя при перепроведении документа с ошибками он будет становиться непроведенным - то ты потом концов не сыщешь.
   Масянька
 
56 - 14.04.17 - 17:26
(55) То есть - если отменить проведение - с концами всё норм будет?
   Смотрящий
 
57 - 14.04.17 - 17:33
С концами и так все норм
   АЛьФ
 
58 - 14.04.17 - 17:38
2(56) Есть три осмысленных действия с документом:
- проведение
- отмена проведения
- перепроведение
Это абсолютно разные действия.
Ты хочешь, чтобы одно из действий вело себя, как составное из двух других. Так возьми и реализуй четвертое действие, которое будет состоять из двух транзакций: сначала отмена проведения, а потом проведение.
   Масянька
 
59 - 14.04.17 - 17:39
(58) Расскажи, что происходит при перепроведении.
   X Leshiy
 
60 - 14.04.17 - 17:42
(59) При перепроведении отмена и проведение в одной транзакции. Естественно, что при ошибке откатывает назад.
   Масянька
 
61 - 14.04.17 - 17:44
(60) То бишь все-таки - оно составное?
   X Leshiy
 
62 - 14.04.17 - 17:46
Да без разницы.

Хоть пятисоставное, хоть десяти.

Начинается транзакция, происходит всякое, если ошибка на любом этапе, откатывает назад.
   АЛьФ
 
63 - 14.04.17 - 17:49
2(59) При перепроведении происходит перепроведение. Это единый процесс.
   АЛьФ
 
64 - 14.04.17 - 17:51
2(61) Единое.
   NSSerg
 
65 - 14.04.17 - 21:39
(56) да, если отмена проведения будет происходить при отмене проведения - с концами будет всё ок.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует