• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Изменение реквизитов в дукументах, помечаемых на удаление

  • Автор темы Юрий
  • Дата начала
Ю

Юрий

Всем добрый день!Возникла проблема! Нужна изменить реквизит в документе, который помечается на удаление. Через глобальный модуль и предопред.процу ПриУдаленииДокумента не прокатывает - ругается когда пытаюсь записывать документ с измененным реквизитом:
Док.Записать();
{Глобальный модуль(5365)}: Объект заблокирован
Сам код такой:
Док=СоздатьОбъект("Документ.СчетНаОплату"); //ЦБОУ
Док.НайтиДокумент(Докум);
Док.Оплата=Число(0);
Док.Записать();
 
V

vbs

Если записываешь прямо из документа - незачем делать следующее
Док=СоздатьОбъект("Документ.СчетНаОплату"); //ЦБОУ
Док.НайтиДокумент(Докум);

Если из внешней обработки - проверь, не открыт ли при этом изменяемый документ
 
Ю

Юрий

Нет Док.Записать() у меня находится в Глобальном модуле в процедуре ПриУдаленииДокумента(). То есть я хочу, чтобы когда документ удаляестя - менялся его реквезит.
 
L

Lionzi

Всем добрый день!Возникла проблема! Нужна изменить реквизит в документе, который помечается на удаление. Через глобальный модуль и предопред.процу ПриУдаленииДокумента не прокатывает - ругается когда пытаюсь записывать документ с измененным реквизитом:
Док.Записать();
{Глобальный модуль(5365)}: Объект заблокирован
Сам код такой:
Док=СоздатьОбъект("Документ.СчетНаОплату"); //ЦБОУ
Док.НайтиДокумент(Докум);
Док.Оплата=Число(0);
Док.Записать();

Не вижу необходимости в Док=СоздатьОбъект("Документ.СчетНаОплату");
получается что система его уже открыла для обработки (функция приадалении наала с ним работать), а ты снова его пытаешся открыть и записать...

Функция глПриУдаленииДокумента(Докум, Предупредить = 1) Экспорт

в переменную Докум уже передается твой документ, с которым ты проводиш операцию удаления, сделай проверку
Если (Докум.Вид() = "СчетНаОплату") тогда ...
 
Ю

Юрий

Не вижу необходимости в Док=СоздатьОбъект("Документ.СчетНаОплату");
получается что система его уже открыла для обработки (функция приадалении наала с ним работать), а ты снова его пытаешся открыть и записать...

Функция глПриУдаленииДокумента(Докум, Предупредить = 1) Экспорт

в переменную Докум уже передается твой документ, с которым ты проводиш операцию удаления, сделай проверку
Если (Докум.Вид() = "СчетНаОплату") тогда ...


Я согласен с тобой, правда на половину, я пробовал работать с переменной Докум - в этом случае система ругается на строкчку Докум.Оплата=1, выдает сообщение, что документ не выбран!!!!
 
H

Hryv

Юрий, я для чего это надо?
Может найдется решение в обход
 
V

vitfil

кхе-кхе...
Действительно, объясните, для чего все это требуется?
Сделать то можно все что угодно, даже обойти блокировку документа...
 
Ю

Юрий

Юрий, я для чего это надо?
Может найдется решение в обход

Естественно,можно сделать все проще = сделать кнопочку удаления в журнале, написать реакцию и не париться, но сам понимаешь, бухгалтера могут по привычке нажать привычную кнопку удаления...А всё это нужно для следующего: Есть документ куда бухи вбивают счета, и есть документ, где делается оплата по этим счетам, так вот чтобы была чёткая взаимосвязь между этими документа - это и нужно.Я кстати пол-интернета облазил, народ сталкивался с такой же проблемой - но решения предложено не было. Писали, что во время удаления документа - происходит его блокировка и сделать ниче нельзя!! Предлагают сделать обработку ожидания, но так заморачиваться я не хочу.

кхе-кхе...
Действительно, объясните, для чего все это требуется?
Сделать то можно все что угодно, даже обойти блокировку документа...


А как обойти блокировку? =)
 
H

Hryv

Есть документ куда бухи вбивают счета, и есть документ, где делается оплата по этим счетам, так вот чтобы была чёткая взаимосвязь между этими документа - это и нужно

Как вариант: нельзя ли взаимосвязь настроить так, чтобы при удалении менялся реквизит не в удаляемом документе, а в связанном с ним
Или еще так: в документе, связанном с удаляемым сначаля проверять пометку на удаление первого, а потом уже разные реквизиты

Я просто не знаю как именно и на сколько сложно устроена система, но впринципе переделать можно все что угодно :rolleyes:
 
Ю

Юрий

Как вариант: нельзя ли взаимосвязь настроить так, чтобы при удалении менялся реквизит не в удаляемом документе, а в связанном с ним
Или еще так: в документе, связанном с удаляемым сначаля проверять пометку на удаление первого, а потом уже разные реквизиты

Я просто не знаю как именно и на сколько сложно устроена система, но впринципе переделать можно все что угодно :rolleyes:


Попробую объяснить: есть документ СЧЕТ(не тот, который встроен в конфигурацию), в нем есть реквизит оплата, который равен 1 если счет оплачен и 0 в противном случае, есть документ "Списание",в котором оплачивается счет. 1 из его реквизитов которого является дукумент СЧЕТ,Если он подцеплен, то при проведении оплаты, в документе счет реквизиту оплата присваивается 1. В соответствии с этим может получится ситуация: Бух удаляет счет, в документе оплата,в котором подвязан этот счет соответствующий реквизит очищается,однако реквизит оплата в счете =1 (как будто счет оплачен,хотя он удален),далее если пометка удаления снимается-получаем необъективную инфу.Вот...понимаю что звучит наверно все загонно...ну как смог...)) блин,а ещё педовское образование)))
 
U

unknown181538

А зачем удалять оплаченный счет?
 
P

puh14

Если он подцеплен, то при проведении оплаты, в документе счет реквизиту оплата присваивается 1. В соответствии с этим может получится ситуация: Бух удаляет счет, в документе оплата,в котором подвязан этот счет соответствующий реквизит очищается,однако реквизит оплата в счете =1 (как будто счет оплачен,хотя он удален),далее если пометка удаления снимается-получаем необъективную инфу.

Тогда проще ловить в процедуре отмена проведения с выдачей предупреждения о документе движения оплаты. Вообще-то в отчетах проще исходить из данных регистров, чем документов. Косяки сразу видны. Например у меня при изменении доков задним числом некоторые ресурсы выходят в минус и я их сразу отлавливаю и даю по мозгам. Если не пользуешь регистр, то простейший запрос тебе позволит выбрать сопутствующие документы. Если где-то что-то есть, то выдаешь ссылки и пока не поправят руками все идут лесом.
 
Ю

Юрий

Тогда проще ловить в процедуре отмена проведения с выдачей предупреждения о документе движения оплаты. Вообще-то в отчетах проще исходить из данных регистров, чем документов. Косяки сразу видны. Например у меня при изменении доков задним числом некоторые ресурсы выходят в минус и я их сразу отлавливаю и даю по мозгам. Если не пользуешь регистр, то простейший запрос тебе позволит выбрать сопутствующие документы. Если где-то что-то есть, то выдаешь ссылки и пока не поправят руками все идут лесом.


Дркумент не проводится!))) Соответственно, нет отмены проведения)

А зачем удалять оплаченный счет?


Очень справедливый вопрос! Честно говоря даже не знаю что сказать!=) Просто хотелось предусмотреть все возможные косяки! А вообще может и правда стоит запретить удалять такие документы! Спасибо за мысль!=))
 
U

unknown181538

Удаление оплаченного счета это и есть возможный косяк. Если случай исключительный, и пользователь уверен, то пусть поправит реквизит руками. Например, наверняка, оплату надо привязать к другому счету.
 
V

vitfil

Естественно,можно сделать все проще = сделать кнопочку удаления в журнале, написать реакцию и не париться, но сам понимаешь, бухгалтера могут по привычке нажать привычную кнопку удаления...
Это обходится установкой FormEx и отлавливанием нажатия кнопки Del. В самой процедуре делайте что угодно.
Как обойти блокировку? Работайте напрямую с БД и будет вам счастье. Но в конкретно этом случае нет необходимости обходить блокировку. Нужно просто воспользоваться FormEx.
 
K

kaa

без внешних компонент. завести справочник туда писать с каким документом производить действие. при выходе из системы редактировать документы и удалять элементы справочника.
 
Ю

Юрий

Блин, столько вариантов! Всем спасибо за ответы и критику!!! Очень мне помогли!!!!!!
 
V

vitfil

без внешних компонент. завести справочник туда писать с каким документом производить действие. при выходе из системы редактировать документы и удалять элементы справочника.
А до выхода из системы может произойти несколько часов...
А еще при выходе из системы одним пользователем, другой может заблокировать этот документ...
А еще до выхода из системы могут снять пометку на удаление с документа...
Еще с десяток вариантов привести?
Никогда не оставляйте на потом то, что НЕОБХОДИМО сделать в настоящий миг... Потома может и неступить!
 
K

kaa

про косяки FormEx то же можно с десяток примеров привести :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!