Имя: Пароль:
1C
1C 7.7
v7: Отслеживание измененной операции вручную
,
0 buhkiller
 
24.09.13
20:02
Надо отслеживать при перепроведении документа. Сделал флаг (0/1) в общих реквизитах, после редактирования операции в форме флаг только на чтение.  Как сделать, чтобы после записи операции из формы флаг стал в 1, он же при редактировании только на чтение.
1 Стрелок
 
24.09.13
20:06
поток сознания
2 Стрелок
 
24.09.13
20:07
открыть секрет что у ручной операции тоже есть форма?
3 buhkiller
 
24.09.13
20:08
(2) Я ж об этом. В форме операции ПриЗаписи ставлю Документ.Флаг = 1, а он не записывается.
4 Стрелок
 
24.09.13
20:09
а что есть "документ"?
5 Стрелок
 
24.09.13
20:10
а с чеговзял что не записывает?
6 buhkiller
 
24.09.13
20:24
Операции и проводки
Атрибуты

Документ
Синтаксис:
Документ
Назначение:
Атрибут служит для обращения к документу, которому принадлежит бухгалтерская операция. Является атрибутом ''только для чтения''.

Как обмануть только для чтения и записать общий реквизит ? Через создатьобъект не получается - док заблокирован.
7 Стрелок
 
24.09.13
20:29
я бы не торопился про "только для чтения"...

Процедура ПриЗаписи()
    глПроверкаДатыДок(Контекст,"Запись");

    Документ.Автор = Пользователь;

    глВсеВыбрано = 1;
    ВыбФирма = 0;
    ОднаФирма = 1;
    
    ВыбратьПроводки();
    Пока ПолучитьПроводку() = 1 Цикл
        
        глВыбранЛи(НашаФирма,"Фирма", НомерПроводки());
        
        Если НашаФирма <> ВыбФирма Тогда
            Если ПустоеЗначение(ВыбФирма) = 1 Тогда
                ВыбФирма = НашаФирма;
            Иначе
                ОднаФирма = 0;
            КонецЕсли;
        КонецЕсли;
        
        Если Дебет.Счет.ВидСубконто(2) = ВидыСубконто.МесяцНачисленияЗП Тогда
            Дебет.МесяцНачисленияЗП = НачМесяца(Дебет.МесяцНачисленияЗП);
        КонецЕсли;
        Если Кредит.Счет.ВидСубконто(2) = ВидыСубконто.МесяцНачисленияЗП Тогда
            Кредит.МесяцНачисленияЗП = НачМесяца(Кредит.МесяцНачисленияЗП);
        КонецЕсли;
    КонецЦикла;
    Если глВсеВыбрано = 0 Тогда
        глКомментарий(" "+Документ+" от "+ДатаОперации+" не проводится!",0,,"!!");
        СтатусВозврата(0);
    КонецЕсли;

    // если во всех проводках указана одна и та же фирма,
    // запишем ее в реквизит шапки Фирма, иначе очистим его
    Если ОднаФирма = 1 Тогда
        Документ.Фирма = ВыбФирма;
    Иначе
        Документ.Фирма = 0;
    КонецЕсли;
КонецПроцедуры


это код из типовой. Флаг точно общий реквизит?
8 Стрелок
 
24.09.13
20:30
ответь на 5
9 buhkiller
 
24.09.13
20:38
(7) Это работает, когда операция ручная полностью, без док-та ее создавшую.
(5) в процедуре ПриЗаписи ставлю значение, смотрю отладчиком
10 Стрелок
 
24.09.13
20:49
(9) не понял ничего. мы говорим о ручной операции или об операции вообще?
11 buhkiller
 
24.09.13
20:55
(10) об операции вообще с документом, который ее сделал. Формекс поймает форму операции ПослеЗакрытия(Контекст) ?
12 Стрелок
 
24.09.13
20:59
(11) и зачем это? не понимаю вообще ничего

если есть документ создавший операцию то править её нельзя (ну нормальные люди так делают) а флаг назначай в ОбработкаПроведения. в чём дело то?
13 buhkiller
 
24.09.13
21:02
Подгонка данных прошлых периодов без перепроведения. Так решило руководство  у заказчика. Аудит типа ))) Но надо зафиксировать где-то факт изменения операции вручную, чтобы при проведении был отказ с этим флагом у документа.
14 buhkiller
 
24.09.13
21:05
Операцией корректировки отдельно не хотят.
15 Стрелок
 
24.09.13
21:06
(14) ну нафик. есть же здоровый глузд в этом мире. а это долбо...зм
16 Стрелок
 
24.09.13
21:07
Исправили - хай ставят руками галку на форме
17 buhkiller
 
24.09.13
21:13
(15) Согласен. Старые клиенты, очень много с ними связано, но упертые как бараны и платят хорошо.
Блин, Формекс не отрабатывает ПослеЗакрытия, а ПослеОткрытия ловит.
18 Сияющий Асинхраль
 
24.09.13
21:23
Ну сделай обработку, которая будет править проводки выбранного дока и эта же обработка пусть правит док и сохраняет не перепроводя
19 Стрелок
 
24.09.13
21:24
(18) я так понял там ювелирная работа вручную с каждой проводкой. нет общего алгоритма потому как твоя мысль лежитна поверхности
20 Стрелок
 
24.09.13
21:26
а в принципе если развить 18 то получается

1. создаём юзера например "аудит"
2. в ПриОткрытии документа ставим проверку на имя пользователя и открываем не документ а обработку с ТЗ в которую высыпаны проводки документа
3. дядьки правят проводки и клацают на кнопку "записать"
4. обработка ставит отметку флаг=1 и записывает новые проводки документа
21 Стрелок
 
24.09.13
21:27
не забываем вернуть галку "запретить ручное изменение операций" на место
22 Сияющий Асинхраль
 
24.09.13
21:29
Не обязательно вручную, скажем, я так не перепроводя доки доставлял в старые новое субконто, которого раньше не было. Сразу за пару лет обработкой, просто задачи помечать доки не было
23 Стрелок
 
24.09.13
21:32
(22) они итоги правят думаю меняют суммы подгоняя под данные нужные
24 buhkiller
 
24.09.13
21:32
Решил проблему формексом

Перем модиф;
Процедура ПриЗаписи()
модиф = 1;
// все остальное как обычно
КонецПроцедуры

// спасибо формексу
Процедура ПослеЗакрытия()
  Если Модиф = 1 ТОгда
    Док = СоздатьОбъект("Документ");
    Если Док.НайтиДокумент(Документ) = 1 Тогда
        // все что надо )))
    КонецЕсли;
  КонецЕсли;
КонецПроцедуры // ПослеЗакрытия

модиф = 0;
25 buhkiller
 
24.09.13
21:34
При обычном проведении буду давить общий реквизит в ноль
26 Сияющий Асинхраль
 
24.09.13
21:35
Даже лучше - ставил разделитель учета в пару лет работающую конфу. Без перепроведения
27 buhkiller
 
24.09.13
21:50
Поторопился ((( Все равно заблокирован документ или операция. Флажок тупо сделаю в форме операции, пусть сами ставят руками.
28 Сияющий Асинхраль
 
24.09.13
21:54
Самое простое писать в комментарий проводки, а перед проведением проверять старые комментарии в проводках, если есть опр. Фраза не перепроводить док
29 Сияющий Асинхраль
 
24.09.13
21:58
Или в новый журнал проводок собирать измененные проводки