gifts2017

Механизм блокирования "некорректных" (запрещенных) проводок

Опубликовал Андрей Куканов (KukA.5) в раздел Программирование - Практика программирования

Механизм позволяет настроить правила, по которым будут блокироваться указанные НЕКОРРЕКТНЫЕ (запрещенные) корреспонденции...

Полезно при вводе информации для "выпрямления рук" у некоторых бухгалтеров после перехода с других бухгалтерских программ :)

Механизм блокирует запись неправильных (запрещенных) проводок на уровне регистра бухгалтерии, то есть не имеет значения каким документом проводки будут формироваться... они будут заблокированы!

Все варианты работы представил в виде рисунков, надеюсь по ним механизм Вам будет понятен.

20.11.2009 добавил текст основной процедуры - там заменен запрос на более оптимальный (за что спасибо Игорю Исхакову за его комментарии под ником Ish_2)

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Процедура ЕстьНеКорректныеКорреспонденции()
.txt 8,33Kb
27.11.09
27
.txt 8,33Kb 27 Бесплатно
Текст модуля
.txt 10,30Kb
27.11.09
28
.txt 10,30Kb 28 Бесплатно

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Герман (German) 14.11.09 23:47
Отличая от "подситемы УПП" ;) только в периодичности и галочке использовать... Так что похоже на плагиат...
2. Игорь Исхаков (Ish_2) 15.11.09 00:42
Я извиняюсь.
Пока не будем касаться качества составления запроса в Вашем модуле.

Но в теме явно не хватает обоснования такого подхода.
В каких случаях по-Вашему стоит пойти на изменение конфигурации БП ради контроля некорректности проводок . О реализации такого подхода в УПП мне, к сожалению , ничего неизвестно.

Опять же не касаясь подробностей реализации , не кажется ли Вам что функционально следует добавить включение/выключение контроля некорректности проводок. Если количество записей в модуле набора очень велико (ВводОстатков) , то разумнее отключить этот контроль.
3. Андрей Куканов (KukA.5) 15.11.09 00:49
(1) в УПП НЕТ ВОЗМОЖНОСТИ БЛОКИРОВАТЬ НЕКОРРЕКТНЫЕ КОРРЕСПОНДЕНЦИИ. Разработка заключается (это для тупых :)) В НАПИСАНИИ ПРОЦЕДУРЫ, файл с текстом модуля во вложении (чтоб не скачивать всю конфу).
4. Андрей Куканов (KukA.5) 15.11.09 00:59
(3) Ish_2, а что Вам не понравилось в запросе? Неужели можно реализовать как то лучше, оптимальнее? Критика и конструктивное обсуждение - это ценно среди коллег (специалистов). Жду Ваши замечания на тему запроса. И буду за них благодарен (если они появятся, конечно).

Включение/выключение контроля можно сделать настройкой пользователя, а в процедуре при невключенной опции, просто не проверять ничего. Я не реализовывал это, при необходимости сделайте сами.
5. Герман (German) 15.11.09 01:04
(3) Изучите продукт, а потом кричите большими буквами. 8-)
идем в настройки пользователя и видим контроль корреспонденции счетов.
6. Игорь Исхаков (Ish_2) 15.11.09 01:15
(4) Про запрос - потом.
Всё-таки хотелось услышать обоснование такого подхода к контролю некорректных проводок. Предлагая пользователю изменение конфигурации, необходимо как-то минимально обосновать это деяние.

На мой взгляд , введение флага включения/выключения контроля функционально совершенно необходимо. Следовательно , нужны допонительные изменения в конфигурации для хранения этого флага.
7. Андрей Куканов (KukA.5) 15.11.09 01:24
(5) Ну да, пользователя в УПП ...что спросили (и он ответил Ок). И влетела проводка Дт60.1 Кт41.1 - см. картинку :)

Я показал механизм БЛОКИРОВАНИЯ некорректных корреспонденций. Задача из реальной жизни возникла - и оказалась очень полезной в бухгалтерии (не я ее придумывал).
Прикрепленные файлы:
8. Андрей Куканов (KukA.5) 15.11.09 01:27
В дополнение к (7) перед тем как ...я не забыл включить контроль :)
Прикрепленные файлы:
9. Андрей Куканов (KukA.5) 15.11.09 01:30
(6) хотелось бы увидеть конструктивную критику запроса, если она у Вас есть ;)
10. Игорь Исхаков (Ish_2) 15.11.09 01:42
(9) Я , к сожалению, не знаю УПП. И насколько понял отличие Вашей подсистемы именно в том , что она именно БЛОКИРУЕТ некорректные проводки. И необходимо прямо в модуль НабораЗаписей передавать значение флага . Вы не видите здесь дополнительных затруднений ?

Теперь по тексту запроса.
Итак , Вы хотите соединить две таблицы левым соединением.
Вначале рассмотрим условие соединения.
11. Игорь Исхаков (Ish_2) 15.11.09 02:05
Две таблицы 1.Ткор- текущие записываемые корреспонденции набора записей
2. ТНеКорр - регистр свелений некорректных проводок

 ПО ТКор.СчетДт = ТНеКорр.СчетДт
   И ТКор.СчетКт = ТНеКорр.СчетКт
   И (ТНеКорр.Использовать)
   И ТКор.ПериодЗаписи >= ТНеКорр.ДатаНачалаДействия
   И (ВЫБОР
        КОГДА ТНеКорр.ДатаОкончанияДействия = &ПустаяДата
        ТОГДА ИСТИНА
        ИНАЧЕ ВЫБОР
	   КОГДА ТКор.ПериодЗаписи <= ТНеКорр.ДатаОкончанияДействия
                  ТОГДА ИСТИНА
	   ИНАЧЕ ЛОЖЬ КОНЕЦ
        КОНЕЦ)
...Показать Скрыть

Левое Соединение по такому условию смотрится затратным.
В условиях соединения лучше избегать фильтрации одной из таблиц.
Условие соединения должно быть максимально простым и коротким
(чтобы оптимизатор запроса использовал только индексы для выборки нужных записей).
Конкретно это означает :
Правдами и неправдами избавится от сложных конструкций в условии соединения (не понятных оптимизатору) .
ТНеКорр должна быть не таблица регистра , а временная таблица полученная дополнителным запросом (отфильтрованная)
Согласитесь симпатичнее смотрится условие соединения

ПО ТКор.СчетДт = ТНеКорр.СчетДт
И ТКор.СчетКт = ТНеКорр.СчетКт
И ТКор.ПериодЗаписи >= ТНеКорр.ДатаНачалаДействия
И ТКор.ПериодЗаписи <= ТНеКорр.ДатаОкончанияДействия

ТНеКорр - это временная таблицы полученная из регистра сведений с фильтром Использование = Истина и преобразованными колонками ДатаНачалаДействия и ДатаКонцаДействия
12. Андрей Куканов (KukA.5) 15.11.09 02:26
(11) соединять с отфильтрованной временной таблицей из регистра сведений, действительно лучше (и я об этом знаю). По решаемой задаче блокируемых проводок мало, поэтому я и не стал этого делать.
Спасибо, коллега!
13. Игорь Исхаков (Ish_2) 15.11.09 03:05
(12) Желательно пользователей предупредить , что при большом количестве проводок будут наблюдаться жестокие тормоза.
И это еще не все .

Ваша цель найти и отобразить ТОЛЬКО некорректные проводки.
У Вас две таблицы ТКор с корреспонденциями и ТНеКорр - с некорректными проводками. Зачем мы применяем левое соединение ТКор с ТНеКорр , в результате которого в выходную таблицу попадают ВСЕ записи таблицы ТКор ? Правильнее и гораздо эффективнее применить внутреннее соединение , в результате которого в выходную таблицу попадут ТОЛЬКО нужные записи .
aleks_cons; +1 Ответить 2
14. Сергей (Che) Коцюра (CheBurator) 15.11.09 03:13
сделать неправильно можно тысячью способов. сделать правильно - способов гораздо меньше. Описать правильные проводки - это правильно! - это порядок на фирме, это учетная политика и т.д. Так что (5) - бооольшой плюс.
15. Игорь Исхаков (Ish_2) 15.11.09 04:11
(14) Чего-то ты того .. Не разобрался.
Речь шла о том , плагиат это или не плагиат ? Это не плагиат.
Обвинение должно быть снято.
Забирай своой "Бооольшой плюс" для (5) обратно.
16. Андрей Куканов (KukA.5) 15.11.09 11:19
(13) внутреннее соединение - это будет правильнее, безусловно согласен.
...ну и, наверное, тогда еще и индексы стоит расставить на поля временных таблиц, по которым будет проходить соединение.
Еще раз СПАСИБО за грамотную методическую поддержку, коллега.
17. Сергей (Che) Коцюра (CheBurator) 15.11.09 15:23
блин я не пойму. чем список некорртекнтых проводок лучше списка корректных проводок?
18. Андрей Куканов (KukA.5) 15.11.09 16:58
(17) Сергей, разница здесь такая:

1. корректные проводки - это то, что МОЖНО. И если в этом списке не окажется чего то что нужно сделать, то или будет ненужная блокировка неизвестной (еще) проводки или пользователь сам принимает решение (что эти проводки можно) или надо ждать пока глав.бух добавит в список новую корректную проводки и только тогда можно будет провести документ.

в моем примере для Германа на скриншотах я как раз и смоделировал такую ситуацию... программа контролирует, но то, что простой бух сам для себя решает правильным... и такой контроль это уже не контроль.
А особенно если сеть филиальная, да еще и распределенная ;) концы найдешь, но исправлять замучаешься. Это жизнь...

2. некорректные проводки - это список запрещенных проводок. Те которые всю жизнь использовали (и привыкли к ним), а теперь новый глав.бух их может запретить! и программист должен ему помочь в таком механизме БЛОКИРОВАНИЯ НЕПРАВИЛЬНЫХ ПРОВОДОК.

Итог: корректные - это правила, на которые пользователь опирается и может их "по ходу пьесы" расширять, а Некорректные (запрещенные) - это те, которые пользователь не сможет сделать никогда (даже если рука "по привычке" потянется к таким корреспонденциям). Такой механизм может быть полезен для больших (огромных) организаций, для маленьких, наверное, это проще решить на организационном уровне (и здесь ты абсолютно прав).
19. Артур Аюханов (artbear) 15.11.09 17:07
(0) Работа с бух.регистром и так не слишком быстрая, а после введения подобной системы производительность может еще сильнее упасть.

Производительность решения тестировал ?
Если тестировал, то каким образом?

Жду ответов.
20. Андрей Куканов (KukA.5) 15.11.09 17:19
(19) контроль выполняется перед записью, и скорее всего на производительность не влияет.

Замеров не делал, было некогда, а визуально для пользователя после реализации ничего не изменилось, все летает как и раньше.. Это хорошая мысль - надо померить! Сделать групповое перепроведение и сравнить оба варианта: С... и БЕЗ...

Спасибо.

21. Сергей (Che) Коцюра (CheBurator) 15.11.09 17:37
(18)
корректные - это правила, на которые пользователь опирается и может их "по ходу пьесы" расширять, а Некорректные (запрещенные) - это те, которые пользователь не сможет сделать никогда (даже если рука "по привычке" потянется к таким корреспонденциям)

.
Андрей, твое решение - это "затычка" от "реальной тупизны" - это хорошо. Если главбух может их запретить - то почему не может их "запретить" для себя сам пользователь? - потому что привык?
.
И С КАКОГО БУДУНА ___пользователь____ (т.е. рядовой оператор или бух) МОЖЕТ РАСШИРИТЬ СПИСОК КОРРЕКТНЫХ ПРОВОДОК??? расширение корректных проводок - это исключительно преррогатива ВЗУ/ЛПР - это должно быть установлено "учетной политикой". И если учетную политику может менять ПОЛЬЗОВАТЕЛЬ - то про что говорить? (это типа как торговля оптом в конторе идет, а рядовой.бух принимает решение поторговать в розницу).
.
ну запретит сегодня главбух "некорректную" проводку какую-нибудь, ну завтра пользователь набабахает новую некорректную... тупо если приянть что 100 счетов в плане счетов и счет можеть стоять в Д или К - то получим 10 тыс возможных корреспонденций. Подмножество ПРАВИЛЬНЫХ проводок - гораздо меньше подмножества неправильных проводок.
.
и если вдруг буху действительно понадобилось сделать "нестандартную" проводку - то не ГБ должен потом искать - какие там неправильные проводки у меня бухи сделали чтобы я мог их запретить, а бух, которому нужна нестандартная/неправильная проводка - бежит к главбуху и обосновывает необходимость - и ГБ либо пошлет НА! либо сделает сам (так есть права), либо внесет проводку в список разрешенных...
.
а то эта схема работы с "неправильными проводками" напоминает по типу "не знаем, чем больной болеет - давайте полечим от всего подряд" - тут или больной от лечения загнется или стоимость такого лечения будет астрономической.
.
так что СУЩЕСТВЕННЫМ имхо в описании обработки будет сказать - данная схема применима там, где в организации бардак и ни у кого не доходят руки до настройки/постановки учета. Тогда да - разработка будет на своем месте и востребована.
.
конечно было бы хорошо чтобы на эту тему высказался реально практикующий ГБ. У меня такой есть - я на неделе постараюсь изложить концепцию по типу "что правильно: составлять список неправильных проводок или составить список правильных проводок"... - возможно моя точка зрения и неправа...
wumka; KukA.5; +2 Ответить 2
22. Андрей Куканов (KukA.5) 15.11.09 19:25
(21) я даже не знаю как лучше... Все сильно зависит от организации и ее людей, ты прав.

Проводки (все возможные) можно поделить на 3 категории:
1. Правильные (все хорошо, проводить)
2. Запрещенные (точно нельзя, блокировать)
3 Новые (еще неизвестные системе) - тут наверное решение принимает пользователь, с авто-уведомлением ГлавБуха...

Нам, программистам, ставят задачи - мы их решаем (и так как их просят решить). Мне была поставлена задача - блокировать некоторые корреспонденции (их мало, но которые определены как некорректные).
23. larissa builova (larisab) 15.11.09 19:56
Мне была поставлена задача - блокировать некоторые корреспонденции (их мало, но которые определены как некорректные).

Ага, и о любом чихе в пару строк надо обязательно оповестить инфостарт десятком скриншитов. :D
24. Андрей Куканов (KukA.5) 15.11.09 20:47
на (23) - это личное, со стороны этой (безусловно очаровательной) девушки. Она меня преследует :) и везде пишет "не совсем" по теме :) Я не знаю, что делать... :) А игнорировать или послать нельзя (девочек не обижают, тем более хороших).

Лариса, да, вот такой я нехороший - взял и написал тему, и даже выложил реализацию механизма (может и не нужного, но полезного кому то).

Лариса, могу дать совет: Не надо читать мои темы, не надо заходить на мою страницу в одноклассниках, не писать комментарии к моим глупостям на Инфостарте... все просто! Мне такое безразличие станет невыносимо и я анрегистрируюсь с ИнфоСтарта. (не обижайся)
25. Игорь Исхаков (Ish_2) 15.11.09 21:49
(21) Тактичный Чебур не сделал контрольного выстрела.
Т.е. не сделал завершающего вывода : (Да , простит меня автор)

Если с точки зрения учета правильнее использовать возможности типовой конфигурации по контролю корректности проводок , то представленная система "Некорректные проводки" не только бесполезна для пользователей , но и может принести им серьезные проблемы .
26. larissa builova (larisab) 15.11.09 22:02
(24) Мне фиолетово твоя личность, мне не нравится твое отношение к читателям инфостарта (активные нулевисты и пр.).
Ты начал свою пиар-компанию со стыренной и, выданной за свою, идеи, это уже обсуждалось. После чего моя симпатия по-дефолту ко всем новичкам, улетучилась.
В одноклассники пришлось сходить, чтобы выяснить масштаб личности, после чего личность была помещена в черный список.
Советы мне давать не надо, я сама решаю, где мне писать, а где нет, если тема обсуждается в прямом эфире.
27. Андрей Куканов (KukA.5) 15.11.09 22:30
(26) Мне наплевать, что вы обо мне думаете. Я о вас не думаю вообще. (Коко Шанель)

(25) спасибо за участие в обсуждении - оказалось очень полезным (завтра обсудим с Заказчиком эту тему).
28. larissa builova (larisab) 15.11.09 22:38
(27) Ну в принципе, ничего другого ожидать и не приходится, кроме цитат и копипаста, свои мысли - удел не каждого. ;)
29. Герман (German) 16.11.09 09:33
(7) ну если пользователь имеет права на запись в регистр корректных проводок то тут никакого ограничения быть и не может... см роль Настрока НСИ (рег) ;)
30. Сергей Лунев (luns) 16.11.09 15:19
Для larisab: Считаю, что не все программисты одинаково "сильны", поэтому любое законченное (или даже незаконченное) решение может быть размещено на тематическом портале.
Возможно кому то поможет или натолкнет на идею. В конце концов, можно всегда поставить "Злобный минус" (желательно обосновать)
А по сабжу: Согласен с German - типового механизма на мой взгляд, вполне достаточно.
31. Андрей Куканов (KukA.5) 16.11.09 23:30
(30) Заказчик сегодня четко обозначил, что типового функционала (при его ситуации) не достаточно, необходимо обеспечить блокирование некоторых проводок.
32. Wumka (wumka) 17.11.09 00:27
ИМХО, тут весь дискусс свёлся не столько к самой разработке, сколько, подспудно, к профессионализму ГБ и порядку в бухгалтерии её запросившей.

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

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


P.S. форум мониторю давно, но высказываюсь впервые.
33. Андрей Куканов (KukA.5) 17.11.09 00:51
(32) спасибо за Ваше мнение - во многом с Вами согласен. Очень понравилось Ваша цитата :), без привязок к личностям
34. Ulcer (KapasMordorov) 17.11.09 09:37
Если запрет действует, когда бух проводит документ - это ЛОЛ.
Если всё это ради возни в ручных проводках - флаг им в руки.
35. Андрей Куканов (KukA.5) 20.11.09 21:31
20.11.2009 добавил текст основной процедуры - там заменен запрос на более оптимальный (за что спасибо Игорю Исхакову за его комментарии под ником Ish_2)
36. Ulcer (KapasMordorov) 23.11.09 15:42
Достаточно в картинке из поста 8 поменять местами корреспонденцию и поменять знак суммы и все запреты отправляются лесом.
37. Андрей Куканов (KukA.5) 23.11.09 22:41
(36) плохо быть таким невнимательным :)

на рисунке в посте №8 показано, как в типовой ...УПП (не в Бухгалтерии предприятии, о которой идет вообще то здесь речь) обойти механизм (о котором писал Герман), контролирующий корректность проводок.
38. Андрей Куканов (KukA.5) 23.11.09 22:43
в (34) "...Если запрет действует, когда бух проводит документ - это ЛОЛ..."

ЛОЛ - это что такое? думаю многим, не очень понятно ЧТО ты имел ввиду :)
39. Ulcer (KapasMordorov) 24.11.09 09:11
Может быть я невнимателен в номере картинки, но сделать нужные мне движения при запрете я могу. Механизм с дырой.
40. Андрей Куканов (KukA.5) 24.11.09 21:29
(39) ты можешь сделать при запрете нужные тебе движения ГДЕ?
...в типовом механизме контроля корректности проводок в УПП (то что изображено на рисунке в посте №8)?
...или ты "нашел дыру" в механизме блокирования некорректных проводок (который я представил)?

Научись ясно выражать свои мысли, для начала... :)

Программист пишет обычно также как думает - ...ты опасный (для Заказчика) программист :)
41. Андрей Куканов (KukA.5) 27.11.09 23:14
Замеры производительности, получилось сделать пока только в файловом варианте - за работой просто некогда :)

Документ ввода остатков материалов ~1500 строк, некорректных проводк 49 штук.

Скрин 1 теста - это первый вариант запроса, первый запуск программы (кеша еще нет).

Замерялась производительность только записи в регистр бухгалтерии. Это всего 6% от всего того, что делается типовое в УПП при записи проводок в регистр.
Прикрепленные файлы:
42. Андрей Куканов (KukA.5) 27.11.09 23:22
это тоже самое - но повторно. В этом случае используется кеш. Время на скрине чуть меньше.

4,8%
Прикрепленные файлы:
43. Андрей Куканов (KukA.5) 30.11.09 21:16
Сегодня протестил в серверном варианте, скриншот во вложении. Сверху на рисунке первый вариант запроса, снизу второй, "более оптимальный", но на практике он в 3 раза более тормознутый.

Так что все авторитетные заявления по поводу "убивания производительности", "ужасных тормозов для пользователя" ...пустое. Я в этом убедился.

Время в секундах при замере производительности (на 1500 строк проводок х 49 некорректных).... как видно из рисунка 0,02 или 0.06. При том что типовое проведение этого огромного документа в УПП реально ооочень долго выполняется.
Прикрепленные файлы:
44. Андрей Куканов (KukA.5) 30.11.09 21:29
(13) "...Желательно пользователей предупредить , что при большом количестве проводок будут наблюдаться жестокие тормоза....."

Тормозов нет - мнение было ошибочно. Хотелось бы также услышать мнение, почему вариант запроса с внутренним соединением оптимальных таблиц, работает хуже. И рекомендации (может быть) как все-таки получить более высокую производительность на втором запросе.

:D
45. Игорь Исхаков (Ish_2) 01.12.09 09:58
(44) Чтобы хоть как-то определиться , нужно представить корректное описание эксперимента в виде статьи :
Текст запроса Вариант 1 . Вариант Куканова
Текст запроса Вариант 2 . Вариант Исхакова

Описать тест и привести сравнительные характеристики по поизводительности.
Сделать вывод (или предположение): почему вариант Куканова оказался более производительным в реальном испытании.

Иначе мы будем очень долго препираться : а все ли мы учли ?
Обещаю только одно - буду заинтересованным читателем и ,возможно, оппонентом.
46. Андрей Куканов (KukA.5) 01.12.09 21:19
(45) Думаю, для себя я проведу дополнительные эксперименты по вопросам производительности запросов с разными вариантами соединений, с моими друзьями-коллегами. Этот вопрос меня интересует. Если будет интересно можно будет потом обсудить полученные результаты.

На сегодняшний момент оба запроса объективно ...не являются "жестокими тормозами" ни в файловом, ни в серверном варианте. Второй вариант не оказался почему то более эффективным. Обсуждения темы исчерпаны. Алгоритм, представленный здесь, использовать можно.

Всем спасибо.
47. Игорь Исхаков (Ish_2) 02.12.09 12:52
(46) А всё-таки эффектным завершением дискуссии являлась бы статья с аргументацией и опровержением предложений оппонентов.
Где бы и приводились пусть кратко результаты эксперимента.
Читателей будет немного , но будут .
Желательно только предупредить о выходе статьи.
48. rasswet (rasswet) 27.04.10 10:21
очень хорошие скины и много!
49. rasswet (rasswet) 27.04.10 10:24
"некорретных" наверное некоррекТных всё же.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа