Неужто так можно делать?

1. makfromkz 35 07.10.24 09:21 Сейчас в теме
коллеги у меня когнитивный диссонанс или просто шок

 Процедура ОбработкаПроведения(Отказ, РежимПроведения)
СформироватьДвиженияДокумента();

Движения.Записать();

Если ЗначениеЗаполнено(РКОВозвратВознаграждения) и НЕ РКОВозвратВознаграждения.Проведен Тогда
РКООбъект=РКОВозвратВознаграждения.ПолучитьОбъект();
Попытка
РКООбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Отказ = Истина;
КонецПопытки;
КонецЕсли;
Показать

разрабы МФОшной проги в ОбработкаПроведения легко и играючи проводят/записывают другой документ !!!
я с 2010 года считал, что ТАК НЕЛЬЗЯ делать )))))
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
4. nomad_irk 76 07.10.24 09:35 Сейчас в теме
(1) некоторые разработчики идут еще дальше: выполняют синхронизацию со сторонними базами данных
17. starik-2005 3087 07.10.24 10:24 Сейчас в теме
(1)
считал
Ну мало ли кто что считает. Есть принцип - АСИД. Атомарность, консистентность, дурабилитии, и что-то там про "И" - хз, забыл. Но атомароность - и консистентность - это как раз про то, что если у тебя меняется что-то зависимое, то оно обязано быть изменено в ходе одной атомарной транзакции, а не двух разных, тогда обеспечивается та самая консистентность, т.е. непротиворечивость данных. А исключении, конечно, по хорошему надо написать про то, что за ошибка произошла. Предположу, что об этом, конечно, пишет документ, который пытаются провести. В остальном какие именно претензии к коду?
19. nomad_irk 76 07.10.24 10:29 Сейчас в теме
(17)
Но атомароность - и консистентность - это как раз про то, что если у тебя меняется что-то зависимое, то оно обязано быть изменено в ходе одной атомарной транзакции, а не двух разных, тогда обеспечивается та самая консистентность, т.е. непротиворечивость данных.


ACID - это про сами транзакции, а не про изменения зависимых объектов одной/несколькими транзакциями :)
20. starik-2005 3087 07.10.24 10:35 Сейчас в теме
(19) Вы неверно понимаете принцип. АСИД - это про данные, на не про про системы их хранения. СУБД для данных, а не данные для СУБД.
26. nomad_irk 76 08.10.24 08:20 Сейчас в теме
(20) Хорошо, максимально утрируем ситуацию: создаем БД с единственной пользовательской таблицей, в которой будет одна строка и 10 столбцов. С БД будет работать условно 10 пользователей, каждый со своим столбцом.
ACID продолжает работать для данных?
27. starik-2005 3087 08.10.24 10:24 Сейчас в теме
(26)
ACID продолжает работать для данных?
В то части, которая завязана на СУБД - да, только нужен ли он при таком раскладе? Если много систем будут писать в эту таблицу данные, то никакой разницы нет, в какой последовательности они записаны, если нет необходимости в исторической информации. Т.е. если в каждую следующую строку таблицы не пишется результат выполнения функции над предыдущими. И при конкурентном доступе как раз и создается предпосылка для теоремы САР, в которой то самое "выберите любые два" (из трех). Выбирая согласованность мы теряем доступность или "устойчивость к фрагментации" (что бы это ни значило). Выбирая доступность, выбираем между консистентностью и отсутствием фрагментации. Т.е. если мы хотим соблюсти канон АСИД, мы или блокируем - читаем - считаем - пишем - освобождаем, тем самым существенно теряя в доступности, либо создаем кучу независимых фрагментов, нуждающихся в синхронизации, т.к. пока мы там что-то считали, данные уехали, поэтому создается версия, которая потом имплементируется куда-то как-то, что вообще сложно, зато консистентность...

Кстати, простое логирование - ему консистентность не нужна, ему важна доступность, поэтому блокировать таблицу при записи нет необходимости. Из-за этого с логированием в 1С все не очень хорошо, т.к. его реализуют часто на как раз такой таблице. При том все поля лога часто есть ключ, что совсем хрень.
28. nomad_irk 76 08.10.24 10:34 Сейчас в теме
(27)
только нужен ли он при таком раскладе?

Так это и есть ответ на вопрос к чему применяется "нативный" ACID, т.к. пользователь(программист) может самостоятельно создать ACID к данным, а вот к транзакциям - никак.
29. starik-2005 3087 08.10.24 11:14 Сейчас в теме
(28)
пользователь(программист) может самостоятельно создать ACID к данным, а вот к транзакциям - никак
Можно юзать файловые блокировки: https://infostart.ru/1c/articles/384485/
30. nomad_irk 76 08.10.24 11:21 Сейчас в теме
(29) можно, но зачем, если СУБД это делает искаропки явно лучше самостоятельной реализации?
21. SlavaKron 07.10.24 11:09 Сейчас в теме
(1) "Попытка" бессмысленная, так еще и текст ошибки скрывает.
24. booksfill 07.10.24 18:22 Сейчас в теме
(1)
Попытка
РКООбъект.Записать(РежимЗаписиДокумента.Проведение);
Исключение
Отказ = Истина;
КонецПопытки;


1. Попытка исключение скрывает сообщение об ошибке и не мешает поймать "В данной транзакции уже происходили ошибки"

2. Не понятно, что делать с РКООбъект в случае, если идет отмена проведения "основного документа".

3. Вероятно, получаем сакральное знание, что РКОВозвратВознаграждения можно провести просто так, можно из другого документа, можно распровести просто так, не обращая внимания на состояние "родительского" документа.

4. Нарушается принцип слабой связанности, что может аукнуться самым неприятным образом.
Если, например, проведение РКОВозвратВознаграждения потребует дополнительных действий и данных.
Или элементарно станет достаточно долгим (не говоря уж про возможную конкуренцию за ресурсы).
Или ему запретят проведение закрытым периодом и еще много разных "или".

5. Я со свечкой не стоял, но похоже идея была в том, чтобы, не приходя в сознание, все сделать быстро и сдать.
Потому как ответ на вопрос "а как правильно" потребовал бы дотошно разобраться, с вопросом "а зачем вообще нужно такое поведение".
Ключевое слово тут "дотошно", а не "ну у нас тут родительский документ провелся, поэтому надо бы провести дочерний, и нет, почему его не надо в таком случае перепроводить мы вам не скажем" и т.п.

Такое поведение, за исключением "попытка исключение", допустимо для обработки формирования пакета документов в единой транзакции.

В вашем же случае, это явная архитектурная ошибка. Причем чем большими "предохранительными" проверками, она обвязана, тем худшая.
25. user2107184 07.10.24 18:25 Сейчас в теме
(24)
идея была в том, чтобы, не приходя в сознание, все сделать быстро и сдать.
Ты так говоришь, как будто у франчей или тиражников существуют другие идеи... Это же и есть бизнес! Как про битьё стекол и стекольщиков.
2. starjevschik 07.10.24 09:24 Сейчас в теме
1с это чисто прикладная система. Ее единственная цель - работать как нужно клиенту (выдавать правильный результат) за минимальную цену. Вот если она неправильный результат получает - то так нельзя делать. Если правильно работает - можно. Другие критерии все фальшивые и бессмысленные.
3. makfromkz 35 07.10.24 09:26 Сейчас в теме
(2)А я за давностью лет не могу вспомнить почему НЕЛЬЗЯ так делать ))))
Просто заучил как солдат устав :)
starik-2005; +1 Ответить
5. user2107184 07.10.24 09:35 Сейчас в теме
(3) Правильно заучил.
Это как красный светофор - теоретически ходить нельзя, но и физического запрета нет.
И все ходят.
До поры до времени, правда...
6. makfromkz 35 07.10.24 09:46 Сейчас в теме
(5) Мне кажется, если таблицы документов не пересекаются, то платформа пропускает такое хулиганство.
А более правильное решение - это делать по подписке на ведущий документ?
7. nomad_irk 76 07.10.24 09:48 Сейчас в теме
(6) платформа и не такие хулиганства позволяет.
более правильное решение - выполнять изменения асинхронно.
10. user2107184 07.10.24 09:52 Сейчас в теме
(6) Платформа и с пересекающимися таблицами пропустит такое хулиганство. Ей насрать, как там SQL будет разгребать блокировки...
8. makfromkz 35 07.10.24 09:49 Сейчас в теме
(7) Поясните пожалуйста, каким образом изменять асинхронно ?
9. nomad_irk 76 07.10.24 09:51 Сейчас в теме
(8) накапливать измененные объекты и обрабатывать их отдельно.
По-хорошему, так вообще проведение любых документов необходимо делать, но пользователи начинают выть, что де не видят изменений сразу.
user2107184; +1 Ответить
11. makfromkz 35 07.10.24 10:13 Сейчас в теме
(10) есть такие блокировки, которые вызывают клинч, и программа намертво зависает
12. user2107184 07.10.24 10:14 Сейчас в теме
13. makfromkz 35 07.10.24 10:15 Сейчас в теме
(12) и как SQL разгребет такое ?
14. user2107184 07.10.24 10:16 Сейчас в теме
(13) А платформа 1С тут причем? Ей что разраб в конфе напрограммиздил - то она и отправляет в скуль.
15. nomad_irk 76 07.10.24 10:18 Сейчас в теме
(13) из последних сил.....может и не разгрести вовсе
16. makfromkz 35 07.10.24 10:22 Сейчас в теме
Вот и получается, что из-за возможности клинча не рекомендуют в ОбработкаПроведения не вызывать проведение/запись других документов.
А раз разрабы МФОшной проги это делают, значит они уверены в отсутствии возникновения клинча.
18. makfromkz 35 07.10.24 10:29 Сейчас в теме
(17) Атомарность, консистентность, дурабилитии - сразу столько незнакомых слов для меня )))
Я как застарелый джун снимаю шляпу перед вашей эрудированностью :)

Всем СПАСИБО за участие в обсуждении !!!!
22. starik-2005 3087 07.10.24 11:27 Сейчас в теме
(18)
эрудированностью
Ну на тебе для понимания красоты:
ACID (от англ. atomicity, consistency, isolation, durability) — набор требований к транзакционной системе, обеспечивающий наиболее надёжную и предсказуемую её работу — атомарность[⇨], согласованность[⇨], изоляцию[⇨], устойчивость[⇨]; сформулированы в конце 1970-х годов Джимом Греем[1].

Набор требований считается фактическим стандартом для высоконадёжных систем, прежде всего, реляционных СУБД, при этом с середины 2000-х годов для построения распределённых СУБД предполагается отказ от части требований ACID (для обоснования чего используются теорема CAP, теорема PACELC) или снижение строгости требований (BASE).
Под транзакционнной системой часто понимают именно СУБД, но принцип атомарности позволяет и над СУБД обеспечить согласованность данных. Например, совместное проведение зависимых документов, чтобы изменения в основном документе не привели к нарушению согласованности данных.
С другой стороны, это архитектурный баг. В системе высокая связанность должна быть в одном документе, а не в разных.
lefthander; +1 Ответить
23. user2107184 07.10.24 11:39 Сейчас в теме
(22)
С другой стороны, это архитектурный баг. В системе высокая связанность должна быть в одном документе, а не в разных.
С нашим законодательным документооборотом никакие асиды и греи не сдюжат. А с хотелками наших бизнесменов - и подавно.
Оставьте свое сообщение

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