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

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

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

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

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

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

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

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

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

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

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

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

37 Comments

  1. comol

    Ужас. В SAP тарнзакции часть системы. Неотъемлимая часть. Даже название весьма существенно об этом говорит. В 1С внешняя обработка никак не аналог. Так делать нельзя ни в каких системах, где есть хоть какое то представление о производительности/надежности/безопасности/корректности. А такой «костыль» способен напрочь убить систему. Лучше убрать с публикации, чтобы не учить людей неправильным приемам в разработке

    Reply
  2. pumbaE

    Добавить регламентное задание, запись ссылки на документ в регистр сведений и потом доопроведение его фоновым заданием, естественно на сервере и будет +.

    Reply
  3. comol

    (2) pumbaE, Всё равно «-«. Даже если фоновым заданием. Это же внешние обработки… никто не гарантирует корректность кода в них. Как можно движения внешними программами изменять. Вы можете себе представить чтобы Microsoft выпустила для SQL сервера «редактор файлов mdf» которым можно было бы открыть базу, поправить пару таблиц и закрыть… и из скрипта ещё это сделать? 🙂

    Reply
  4. pumbaE

    (3) ну мы с 1С работаем, а разработчики своими «Доопровдением по партиям» допускают такую возможность.

    Правильность кода мы нигде не можем гарантировать, даже если это будет встроено в конфигурацию.

    Как можно движения внешними программами изменять

    а привилегированный модуль зачем тогда сделали разработчики? Если эти внешние обработки будут запускаться из справочника «Внешние обработки» с правами записи только администратору?

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

    Reply
  5. comol

    (4) pumbaE, Допроведение по партиям реализовано как раз внутренними и правильными механизмами платформы….

    А смысла привелегированного модуля вы значит совсем не поняли. Если бы вы такое решение на «1С:Специалист» показали дальше с вами не стали бы даже разговаривать думаю… В РИБ это максимум строчки кода внутри справочника текстом. они НЕ ДОЛЖНЫ ВЫГРУЖАТЬСЯ В ФАЙЛЫ! и Естетственно должно быть «УстановитьБезопасныйРежим». И уж конечно никакого привелегированного модуля…

    Reply
  6. pumbaE

    (5) если бы да кабы, у нас спор перешел как-то на персоналии. Естественно я бы такое решение на специалиста и не показывал, а делал то как требует 1С.

    Это пистолет, будете им стрелять в коленку или нет, решать вам. Но говорить, что это не нужно, это убрать — я не согласен.

    Reply
  7. comol

    (6) pumbaE, Ни в коем случае не на персоналии. Это лишь был абстрактный пример, если бы я такое на «1С: Специалист» написал со мной бы тоже разговаривать не стали :). В данном случае это не «пистолет» а скорее «граната» из которой вынули чеку. Как минимум такие вещи нужно делать кодом в справочнике, с настройкой прав доутспа, со включенным безопасным режимом, в фоновом задании… тогда ещё можно назвать «эксклюзивным решением». Просто ведь читают, думают «круто» и делают потом… а после этого те же самые разработчики ABAP смотрят на нас, показывают пальцем и ржут…

    Reply
  8. WKBAPKA

    не, идея не плохая, если убрать внешние обработки, добавить справочник, то получается очень даже ничего…

    вот только для чего? разве, что бы не вносить изменения в конфигурацию, когда нужно подключить какой нить алгоритм? лично мне не понятно назначение этой подсистемы

    Reply
  9. angele

    Я вот, например, вообще не понял зачем данная обработка нужна и как следствие не понял суть вашей дискуссии (ИМХО)…

    Reply
  10. Slon1c

    (7)comol

    Ну а как насчет обработок восстановления партионного учета или взаиморасчетов в УПП — это тоже обработки, или распределение НДС по продукции и услугам в УПП 1.2. Там траблы от 1С еще более весомые, а именно дописывались проводки и причем коряво, сколько раз запускалась обработина, столько раз и дописывались проводки. Мое мнение внешние обработки имеют право на жизнь и это правильно, не нужно лезть в типовые конфигурации и там все портить , пусть уж лучше это будут внешние обработки. А транзакиями нужно уметь управлять — в обработках Вам этого никто не запрещает. Логгируйте свои действия, оставляйте возможность отката транзакции. В умелых руках это очень неплохой инструмент. Пример : Нужно провести документы только по НУ за 2 года — будем корявит конфу или всеж внешними обработками ?.

    Reply
  11. comol

    (11) Slon1c, Я чувствую прямо себя пытающимся доказать что «я не слон» :).

    Хорошо, управляйте транзакциями во внешних обработках… можете ещё почту в транзакции отправить или видео пользователю в транзакции проведения показать. Больше «никого жить учить» не собираюсь.

    Reply
  12. comol

    (10) artbear, т.е. вы тоже считаете что «все требования фигня», и «мы будем показывать видео в транзакции если захотим». Мне даже интересно стало а тут можно голосование провести? Кто-нибудь знает как? У меня вопрос «стали бы вы сохранять файлы на диск и выполнять из них код в транзакции проведения» и «да», «нет». Я потом результаты опроса на партнёрский форум выложил бы. Сергею Георгиевичу посмотреть. Может пора обратить больше внимание на обучение и аттестацию разработчиков… не знаю, лицензии на конфигуратор выдавать именные… просто какая-то жесть творится… честное слово. Никого не хочу обидеть, господа, но так же нельзя…

    Reply
  13. Slon1c

    (12)comol

    Вопрос не в транзакциях и Вы это понимаете, иногда приходится делать во внешних обработках такие вещи. Не говорю что это правильно, но необходимо.

    Reply
  14. Slon1c

    (13)comol

    Не утрируйте пожалуйста, и не передергивайте слова — что в транзакции откатывается, а что нет думаю большинству известно и почету это так, тоже. К примеру у меня есть такой инструмент как предварительный просмотр документа, который основан на этом принципе. Делаем проведение документа в транзакции, записываем результаты в структуру, где ключ имя регистра, значение — таблица, далее откат транзакции. Сравниваем что было б если б помяняли к примеру счет учета и т.д. и т.п.

    Про видео в транзакции Вам никто не говорил, и не надо показывать Ваши знания — я в них не сомневаюсь. Вы прекрасно знаете что логирование в файл это один из способов просмотра информации при проведении или непроведении документа при откате транзакции в случае возникновения ошибки. И давайте не будем об этом здесь спорить, Вас прекрасно понимаю — за методику 1с тоже, но иногда приходится делать такие решения, не от жизни хорошей или незнания (как и запрос в цикле в РАУЗЕ УПП — за что на экзамене по спецу просто 2 балла).

    Reply
  15. comol

    (14) Slon1c, Во внешней обработке можно заполнить документ, перезаполнить его, перепровести… самый край — заполнить «корректировку записей регистров»… но то что предлагает автор:

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

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

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

    Другие варианты решения есть… с которыми «скрипя» но можно согласиться. С приведенным здесь — нет.

    Reply
  16. Slon1c

    (16)comol

    Правы, согласен… но иногда возникает необходимость.

    Reply
  17. SergAn

    М-да, даже не думал, что в таком русле дискуссия пойдет. Иногда создается впечатление, что люди пытаются быть святее папы римского…

    До реализации в коде обсуждал эту идею за чашкой кофе с представителями фирмы 1С, и ни кто не высказался, что это не соответствует требованиям 1С Специалист.

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

    В каких-то случаях эта подсистема будет эффективна — т.е позволит сэкономить время, деньги и время.В каких-то нет. Использовать ее или нет — личное горе каждого…

    А что касается специалистов по SAP, то смею вас уверить, проблемы там такие же как и на проектах 1С. Одна любовь некоторых консультантов при закрытии месяца недостающие суммы непосредственно в таблицы прописывать чего только стоит.

    Reply
  18. SergAn

    Для справки: Транзакция в SAP — это программа которая выполняет определенные действия. Это может быть проведение документа, отчет и т.п. Никакого отношения к транзакции в понятиях управления БД этот термин не имеет.

    Reply
  19. Slon1c

    (19)SergAn

    А как согласованность и непротиворечивость данных ?

    Reply
  20. SergAn

    (20) речь идет о терминах. Когда-то разработчики SAP решили, что транзакцией они будут называть ЭТО :). И теперь идет постоянная путаница, особенно в начале, когда с САПом знакомишься. Потом привыкаешь. И фраза «Какую транзакцию использовать при поступлении товаром на временный склад» уже не режет ухо. Или из документации «Отчет по количеству проводок (транзакция Z_FI_YGI_19_01)»

    Reply
  21. Slon1c

    (21)SergAn

    На самом деле управленцы, банкиры тоже в этом смысле используют понятие транзакции. Дискуссия развернулась из-за соответствия методики 1С данной обработки, ради этого скачал и исследую ее.

    Reply
  22. SergAn

    (22) Исследовать там особенно нечего, просто идея. Я подсистему накатал за вечерок, чтобы в «железе» попробовать. Потом решил с народом поделиться.

    Reply
  23. comol

    (19) SergAn, Я в курсе. Это часть системы я к этому. И мне кажется название «транзакция» лишь для того чтобы подчеркнуть что действия фиксированы…

    Reply
  24. comol

    (17) SergAn, эээ ну в ваше решение встройте и попробуйте получить с этим «1С:Совместимо». Мне просто интересно первое письмо с замечаниями почитать :). Там вам напишут как «соответствует требованиям». На 1С: Специалист просто не пишут, а говорят только… А ещё можете протестировать… к примеру 2 документа одновременно проводить… а ещё интереснее при этом менять обработку… :). А сколько там ещё в коде можно написать… А ещё в момент проведения каталог временных файлов почистить… а ещё можно антивирус на epf файлы настроить :).

    Reply
  25. SergAn

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

    У меня на практике была куча случаем когда заказчик говорил «Хочу чтобы этот документ проводился еще и так-то» (забаланс, доп регистр и т.п.). И ему все равно соответствует это требованиям 1С и ее методологии или нет. Ему эта информация нужна чтобы бизнесом управлять, а мне надо снизить свои затраты на дальнейшую поддержку. Это просто один из множества! вариантов.

    Reply
  26. SergAn

    (25) А кто сказал, что я собираюсь получать 1С Совместимо 😉 ?

    Reply
  27. comol

    (26) SergAn, А подписка на события не? Не ваш случай?

    Reply
  28. SergAn

    (28) Так она используется. Читайте описание.

    Reply
  29. Slon1c

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

    В общем :

    1. Все равно нужно вставлять объекты в конфигурацию

    2. Подписка на событие ОбработкаПроведения — как собираетесь проводить документы которые требуют допроведения ? В последних конфах есть механизм который не меняет движения если документ не изменился — а именно время, как будете это обходить ? Какая из подписок на обработку проведения сработает первой — Ваша или типовая ?

    Reply
  30. SergAn

    (30) 1. Согласен. Но вставляется два объекта которые не требуют сопровождения и не мешают обновлению.

    2. Нужно ставить эксперименты и проверять.

    Reply
  31. comol

    (28) Нет, просто подписка на собырие — без прочих «извращений»… Новый модуль и новая подписка… с обновлением проблем не будет…

    Reply
  32. МимохожийОднако

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

    Reply
  33. comol

    (33) МимохожийОднако, +1 — только в разработке использовать. не в продакшн.

    Reply
  34. comol

    (34) artbear, значит ещё не всё потеряно… А то я уже думал что все сейчас уже так пишут :).

    Reply
  35. SergAn

    (34) artbear, Все в нашем мире относительно… Есть у меня среди клиентов один финик — большой любитель забалансовых счетов, который еще и находиться у черта на куличиках. Так мне ему проще отправить внешнюю обработку, которую он сам подцепит к справочнику, чем каждый раз париться с пересылкой конфигурации на хреновом интернете.

    Reply
  36. AlexO

    (1)

    А такой «костыль» способен напрочь убить систему.

    вы еще вот этот ужас не видели…

    Reply
  37. AlexO

    (13)

    просто какая-то жесть творится

    согласен.

    То студенты сотнями лезут менять таблицы восьмерки в SQL напрямую, то допроведение документов через какую-то ж…

    (34) artbear,

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

    1С — это вообще одна большая попа, а народ, соскочив со студенческой скамьи, пытается применить обрывочные знания из лекций хоть где-нибудь, уповая, что 1С, как «типа серьезный коммерческий продукт — СУБД и прочее» а-ля SAP, не «даст дураку лоб расшибить».

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *