gifts2017

Подсистема допроведения документов

Опубликовал Сергей м (SergAn) в раздел Программирование - Практика программирования

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

Создание подсистемы навеяно плотным общением с SAP`ом в последнее время. Как известно весь САП построен на транзакциях, Видов документов в САПе крайне мало, и все проводки формируются в зависимости от того какая транзакция поключается к документу.

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

Подсистема состоит из следующих объектов:

  • Справочник "ас_ВнешниеОбработкиПроведения" - сделан по образу и подобию справочника "ВнешниеОбработки"
  • ОбщийМодуль "ас_Допроведение"
  • Внешнии обработки, в которых прописаны алгоритмы проведения документов
  • Подприска на события  "ас_Допроведение"

Алгоритм работы подсистемы следующий:

При проведении документа обработчик события "ОбработкаПроведения" ищет в справочнике внешнюю обработку по допроведению, соответсвующую документу, и запускает ее на выполнение.

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

Ограничения:

Бэтта версия, в справочнике "ас_ВнешниеОбработкиПроведения" наверняка есть лишние реквизиты и функции. Формы тоже до конца не отлажены. Будет время довылизываю.

Покольку внешние обработки разорачиваются во временный файл, то со скорострельностью будет не очень. Для нагруженных систем я бы такую подсистему не рекомендовал. 

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

Наименование Файл Версия Размер Кол. Скачив.
Кофигурация
.cf 40,05Kb
01.10.12
20
.cf 40,05Kb 20 Скачать
Пример обработки допроведения
.epf 5,59Kb
01.10.12
8
.epf 5,59Kb 8 Скачать

См. также

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

Комментарии

1. Олег Филиппов (comol) 01.10.12 17:18
Ужас. В SAP тарнзакции часть системы. Неотъемлимая часть. Даже название весьма существенно об этом говорит. В 1С внешняя обработка никак не аналог. Так делать нельзя ни в каких системах, где есть хоть какое то представление о производительности/надежности/безопасности/корректности. А такой "костыль" способен напрочь убить систему. Лучше убрать с публикации, чтобы не учить людей неправильным приемам в разработке
2. Евгений Сосна (pumbaE) 01.10.12 17:21
Добавить регламентное задание, запись ссылки на документ в регистр сведений и потом доопроведение его фоновым заданием, естественно на сервере и будет +.
3. Олег Филиппов (comol) 01.10.12 17:30
(2) pumbaE, Всё равно "-". Даже если фоновым заданием. Это же внешние обработки... никто не гарантирует корректность кода в них. Как можно движения внешними программами изменять. Вы можете себе представить чтобы Microsoft выпустила для SQL сервера "редактор файлов mdf" которым можно было бы открыть базу, поправить пару таблиц и закрыть... и из скрипта ещё это сделать? :)
4. Евгений Сосна (pumbaE) 01.10.12 17:44
(3) comol, ну мы с 1С работаем, а разработчики своими "Доопровдением по партиям" допускают такую возможность.
Правильность кода мы нигде не можем гарантировать, даже если это будет встроено в конфигурацию.
Как можно движения внешними программами изменять
а привилегированный модуль зачем тогда сделали разработчики? Если эти внешние обработки будут запускаться из справочника "Внешние обработки" с правами записи только администратору?

При определенных условиях, например РИБ это решение может оказаться очень даже гибким(если правильно id у обработки менять).
5. Олег Филиппов (comol) 01.10.12 17:54
(4) pumbaE, Допроведение по партиям реализовано как раз внутренними и правильными механизмами платформы....
А смысла привелегированного модуля вы значит совсем не поняли. Если бы вы такое решение на "1С:Специалист" показали дальше с вами не стали бы даже разговаривать думаю... В РИБ это максимум строчки кода внутри справочника текстом. они НЕ ДОЛЖНЫ ВЫГРУЖАТЬСЯ В ФАЙЛЫ! и Естетственно должно быть "УстановитьБезопасныйРежим". И уж конечно никакого привелегированного модуля...
6. Евгений Сосна (pumbaE) 01.10.12 18:05
(5) comol, если бы да кабы, у нас спор перешел как-то на персоналии. Естественно я бы такое решение на специалиста и не показывал, а делал то как требует 1С.

Это пистолет, будете им стрелять в коленку или нет, решать вам. Но говорить, что это не нужно, это убрать - я не согласен.
7. Олег Филиппов (comol) 02.10.12 00:10
(6) pumbaE, Ни в коем случае не на персоналии. Это лишь был абстрактный пример, если бы я такое на "1С: Специалист" написал со мной бы тоже разговаривать не стали :). В данном случае это не "пистолет" а скорее "граната" из которой вынули чеку. Как минимум такие вещи нужно делать кодом в справочнике, с настройкой прав доутспа, со включенным безопасным режимом, в фоновом задании... тогда ещё можно назвать "эксклюзивным решением". Просто ведь читают, думают "круто" и делают потом... а после этого те же самые разработчики ABAP смотрят на нас, показывают пальцем и ржут...
8. Ярослав Радкевич (WKBAPKA) 02.10.12 09:05
не, идея не плохая, если убрать внешние обработки, добавить справочник, то получается очень даже ничего...
вот только для чего? разве, что бы не вносить изменения в конфигурацию, когда нужно подключить какой нить алгоритм? лично мне не понятно назначение этой подсистемы
9. savastr (angele) 02.10.12 09:10
Я вот, например, вообще не понял зачем данная обработка нужна и как следствие не понял суть вашей дискуссии (ИМХО)...
10. Модератор раздела Артур Аюханов (artbear) 02.10.12 11:13
(7) 1С:Специалист много чего требует и запрещает.
В этом и есть суть профессии разработчика - выполнить проектирование и реализацию в соответствии с задачей с необходимыми ограничениями.
и на персоналии переходить не нужно, сабж не про 1С:Специалист :(
11. Сергей Лещин (Slon1c) 02.10.12 12:34
(7)comol
Ну а как насчет обработок восстановления партионного учета или взаиморасчетов в УПП - это тоже обработки, или распределение НДС по продукции и услугам в УПП 1.2. Там траблы от 1С еще более весомые, а именно дописывались проводки и причем коряво, сколько раз запускалась обработина, столько раз и дописывались проводки. Мое мнение внешние обработки имеют право на жизнь и это правильно, не нужно лезть в типовые конфигурации и там все портить , пусть уж лучше это будут внешние обработки. А транзакиями нужно уметь управлять - в обработках Вам этого никто не запрещает. Логгируйте свои действия, оставляйте возможность отката транзакции. В умелых руках это очень неплохой инструмент. Пример : Нужно провести документы только по НУ за 2 года - будем корявит конфу или всеж внешними обработками ?.
12. Олег Филиппов (comol) 02.10.12 14:13
(11) Slon1c, Я чувствую прямо себя пытающимся доказать что "я не слон" :).
Хорошо, управляйте транзакциями во внешних обработках... можете ещё почту в транзакции отправить или видео пользователю в транзакции проведения показать. Больше "никого жить учить" не собираюсь.
13. Олег Филиппов (comol) 02.10.12 14:19
(10) artbear, т.е. вы тоже считаете что "все требования фигня", и "мы будем показывать видео в транзакции если захотим". Мне даже интересно стало а тут можно голосование провести? Кто-нибудь знает как? У меня вопрос "стали бы вы сохранять файлы на диск и выполнять из них код в транзакции проведения" и "да", "нет". Я потом результаты опроса на партнёрский форум выложил бы. Сергею Георгиевичу посмотреть. Может пора обратить больше внимание на обучение и аттестацию разработчиков... не знаю, лицензии на конфигуратор выдавать именные... просто какая-то жесть творится... честное слово. Никого не хочу обидеть, господа, но так же нельзя...
Silenser; AlexO; +2 Ответить 2
14. Сергей Лещин (Slon1c) 02.10.12 14:55
(12)comol
Вопрос не в транзакциях и Вы это понимаете, иногда приходится делать во внешних обработках такие вещи. Не говорю что это правильно, но необходимо.
15. Сергей Лещин (Slon1c) 02.10.12 15:06
(13)comol
Не утрируйте пожалуйста, и не передергивайте слова - что в транзакции откатывается, а что нет думаю большинству известно и почету это так, тоже. К примеру у меня есть такой инструмент как предварительный просмотр документа, который основан на этом принципе. Делаем проведение документа в транзакции, записываем результаты в структуру, где ключ имя регистра, значение - таблица, далее откат транзакции. Сравниваем что было б если б помяняли к примеру счет учета и т.д. и т.п.
Про видео в транзакции Вам никто не говорил, и не надо показывать Ваши знания - я в них не сомневаюсь. Вы прекрасно знаете что логирование в файл это один из способов просмотра информации при проведении или непроведении документа при откате транзакции в случае возникновения ошибки. И давайте не будем об этом здесь спорить, Вас прекрасно понимаю - за методику 1с тоже, но иногда приходится делать такие решения, не от жизни хорошей или незнания (как и запрос в цикле в РАУЗЕ УПП - за что на экзамене по спецу просто 2 балла).
16. Олег Филиппов (comol) 02.10.12 15:14
(14) Slon1c, Во внешней обработке можно заполнить документ, перезаполнить его, перепровести... самый край - заполнить "корректировку записей регистров"... но то что предлагает автор:
При проведении документа обработчик события "ОбработкаПроведения" ищет в справочнике внешнюю, соответсвующую документу,

Если "очень прижало" (хотя пока не могу придумать когда такое может понадобится, даже в случае РИБ можно выкрутиться), то нужно делать справочник с текстом.

Вопрос именно в транзакциях. Любое взаимодействие с "внешней средой" (сохранение файла на диск в частности) должно быть вне транзакции.

Другие варианты решения есть... с которыми "скрипя" но можно согласиться. С приведенным здесь - нет.
17. Сергей м (SergAn) 02.10.12 15:22
М-да, даже не думал, что в таком русле дискуссия пойдет. Иногда создается впечатление, что люди пытаются быть святее папы римского...
До реализации в коде обсуждал эту идею за чашкой кофе с представителями фирмы 1С, и ни кто не высказался, что это не соответствует требованиям 1С Специалист.
Всякий инструмент имеет право на жизнь, только пользоваться им надо с умом. А в руках идиота и молоток может быть хуже гранаты, только это не означает, что молоток делать не надо.
В каких-то случаях эта подсистема будет эффективна - т.е позволит сэкономить время, деньги и время.В каких-то нет. Использовать ее или нет - личное горе каждого...
А что касается специалистов по SAP, то смею вас уверить, проблемы там такие же как и на проектах 1С. Одна любовь некоторых консультантов при закрытии месяца недостающие суммы непосредственно в таблицы прописывать чего только стоит.
18. Сергей Лещин (Slon1c) 02.10.12 15:22
(16)comol
Правы, согласен... но иногда возникает необходимость.
19. Сергей м (SergAn) 02.10.12 15:31
Для справки: Транзакция в SAP - это программа которая выполняет определенные действия. Это может быть проведение документа, отчет и т.п. Никакого отношения к транзакции в понятиях управления БД этот термин не имеет.
20. Сергей Лещин (Slon1c) 02.10.12 15:40
(19)SergAn
А как согласованность и непротиворечивость данных ?
21. Сергей м (SergAn) 02.10.12 15:44
(20) речь идет о терминах. Когда-то разработчики SAP решили, что транзакцией они будут называть ЭТО :). И теперь идет постоянная путаница, особенно в начале, когда с САПом знакомишься. Потом привыкаешь. И фраза "Какую транзакцию использовать при поступлении товаром на временный склад" уже не режет ухо. Или из документации "Отчет по количеству проводок (транзакция Z_FI_YGI_19_01)"
22. Сергей Лещин (Slon1c) 02.10.12 15:57
(21)SergAn
На самом деле управленцы, банкиры тоже в этом смысле используют понятие транзакции. Дискуссия развернулась из-за соответствия методики 1С данной обработки, ради этого скачал и исследую ее.
23. Сергей м (SergAn) 02.10.12 16:02
(22) Исследовать там особенно нечего, просто идея. Я подсистему накатал за вечерок, чтобы в "железе" попробовать. Потом решил с народом поделиться.
24. Олег Филиппов (comol) 02.10.12 16:34
(19) SergAn, Я в курсе. Это часть системы я к этому. И мне кажется название "транзакция" лишь для того чтобы подчеркнуть что действия фиксированы...
25. Олег Филиппов (comol) 02.10.12 16:50
(17) SergAn, эээ ну в ваше решение встройте и попробуйте получить с этим "1С:Совместимо". Мне просто интересно первое письмо с замечаниями почитать :). Там вам напишут как "соответствует требованиям". На 1С: Специалист просто не пишут, а говорят только... А ещё можете протестировать... к примеру 2 документа одновременно проводить... а ещё интереснее при этом менять обработку... :). А сколько там ещё в коде можно написать... А ещё в момент проведения каталог временных файлов почистить... а ещё можно антивирус на epf файлы настроить :).
26. Сергей м (SergAn) 02.10.12 16:52
(24) comol, Отчет не является фиксированным действием, но с точки зрения САП это транзакция. И суть идеи не в том, что можно хранить алгоритмы проведений во внешнем файле (хотя если положить руку на сердце, то хранятся они в справочнике), а в том что можно повысить гибкость системы по минимуму влезая в конфигурацию. Можно в справочники хранить тексты модулей, можно и еще кучу вариантов можно придумать. А гибкостью ес-но пользоваться надо с умом, тут я всеми конечностями за.
У меня на практике была куча случаем когда заказчик говорил "Хочу чтобы этот документ проводился еще и так-то" (забаланс, доп регистр и т.п.). И ему все равно соответствует это требованиям 1С и ее методологии или нет. Ему эта информация нужна чтобы бизнесом управлять, а мне надо снизить свои затраты на дальнейшую поддержку. Это просто один из множества! вариантов.
27. Сергей м (SergAn) 02.10.12 17:00
(25) comol, А кто сказал, что я собираюсь получать 1С Совместимо ;) ?
28. Олег Филиппов (comol) 02.10.12 17:02
(26) SergAn, А подписка на события не? Не ваш случай?
29. Сергей м (SergAn) 02.10.12 17:10
(28) comol, Так она используется. Читайте описание.
30. Сергей Лещин (Slon1c) 02.10.12 17:20
Ознакомился. В чем то похоже на одну из разработок наших - проверка ведения учета, только и обработки хранились тоже в справочнике с расшифровкой.После выполнения запроса возвращался результат и список ошибок с рекомендациями.Там же встроенный редактор, один из коллег где-то на форуме 1с располагал информацию такую.
В общем :
1. Все равно нужно вставлять объекты в конфигурацию
2. Подписка на событие ОбработкаПроведения - как собираетесь проводить документы которые требуют допроведения ? В последних конфах есть механизм который не меняет движения если документ не изменился - а именно время, как будете это обходить ? Какая из подписок на обработку проведения сработает первой - Ваша или типовая ?
31. Сергей м (SergAn) 02.10.12 17:37
(30) 1. Согласен. Но вставляется два объекта которые не требуют сопровождения и не мешают обновлению.
2. Нужно ставить эксперименты и проверять.
32. Олег Филиппов (comol) 02.10.12 23:11
(28) comol, Нет, просто подписка на собырие - без прочих "извращений"... Новый модуль и новая подписка... с обновлением проблем не будет...
33. Александр (МимохожийОднако) 03.10.12 06:57
Только одну причину вижу для использования предлагаемой методики. Это экспериментирование и кодирование без повторного сохранения конфигурации.))) Любопытно, но для широкого применения накладно.
34. Модератор раздела Артур Аюханов (artbear) 03.10.12 08:50
(16) comol,
При проведении документа обработчик события "ОбработкаПроведения" ищет в справочнике внешнюю, соответствующую документу

С этим согласен на 100%, тут автор явно неправ - обращение к внешним данным в транзакции это плохо :(
35. Олег Филиппов (comol) 03.10.12 09:10
(33) МимохожийОднако, +1 - только в разработке использовать. не в продакшн.
36. Олег Филиппов (comol) 03.10.12 09:25
(34) artbear, значит ещё не всё потеряно... А то я уже думал что все сейчас уже так пишут :).
37. Сергей м (SergAn) 03.10.12 10:42
(34) artbear, Все в нашем мире относительно... Есть у меня среди клиентов один финик - большой любитель забалансовых счетов, который еще и находиться у черта на куличиках. Так мне ему проще отправить внешнюю обработку, которую он сам подцепит к справочнику, чем каждый раз париться с пересылкой конфигурации на хреновом интернете.
38. Алекс Ю (AlexO) 03.10.12 11:08
(1) comol,
А такой "костыль" способен напрочь убить систему.

вы еще вот этот ужас не видели...
39. Алекс Ю (AlexO) 03.10.12 11:20
(13) comol,
просто какая-то жесть творится

согласен.
То студенты сотнями лезут менять таблицы восьмерки в SQL напрямую, то допроведение документов через какую-то ж...
(34) artbear,
автор вообще вмешивается в основу любой 1С8-конфы - типовое проведение документов. Предложенный способ максимум где использовать - получать для справки какие-то данные для обработки из проводимого объекта в других объектах, не в проводимых в данный момент.
1С - это вообще одна большая попа, а народ, соскочив со студенческой скамьи, пытается применить обрывочные знания из лекций хоть где-нибудь, уповая, что 1С, как "типа серьезный коммерческий продукт - СУБД и прочее" а-ля SAP, не "даст дураку лоб расшибить".
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа