Получить CARDCODE после создания документа

Medoc Man
Повідомлень: 711
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: Получить CARDCODE после создания документа

Повідомлення Medoc Man » 17 грудня 2019, 16:25

PetroP писав:
17 грудня 2019, 15:42
Каким образом найти именно тот новосозданный, если может существовать в медке несколько дублей?
Если Вы создаёте документ программно, то Акт сверки с определённым номером, датой, контрагентом и при этом с направлением "Виданий" у Вас может быть только 1.
Если допустить, что кто-то у Вас помимо "программного создания" ещё создаёт вручную - тогда Вам нужно определится с коллегами в вопросе либо "руками", либо "удобно и автоматизированно".
2 одинаковых выписанных акта, совпадающих по реквизитам "Номер, Дата, Контрагент" - это либо нарушение нумерации, либо отсутствие перезаписи существующего документа при программном создании (вместо перезаписи может быть перемещение в Корзину).
В нормальном случае, GetPrimaryReestr(10104, 1, ДатаВашегоДокумента, ДатаВашегоДокумента) с проверками по Номеру, Дате и Контрагенту, после создания документа в M.E.Doc вернёт Вам верный и единственный CardCode.
Но, разумеется, это повлияет на быстродействие при больших объемах документов.
PetroP писав:
17 грудня 2019, 15:40
Чтобы понять, попробуйте ответить на простой вопрос: Как получить CARDCODE при программном создании первичного документа без использования ExDocID?
Описал выше.
Но всего этого можно избежать, указывая ExDocID при Вашем "программном создании".
У Вас есть инструмент, готовый, рабочий (я про ExDocID) - Вы его не хотите использовать (или не можете, но я в такое не верю).
Есть предложенный альтернативный способ, немного мудрёный, но рабочий. Хотя по факту, в обоих случаях Вы получите одинаково "уникальный идентификатор".
Вы зачем-то просите ещё, новый метод, который будет делать, по сути, тоже самое что и выше. Только Вы перекладываете часть с поиском CardCod'а с себя на M.E.Doc, который сделает это за Вас и просто отдаст результат.
Я имею ввиду условный GetDocCardcode, в который Вам, вероятно, нужно будет передавать какие-то атрибуты, чтоб M.E.Doc так же мог найти нужный, переданный Вами документ.
Человек-волшебник

PetroP
Повідомлень: 605
З нами з: 22 січня 2015, 18:50

Re: Получить CARDCODE после создания документа

Повідомлення PetroP » 17 грудня 2019, 16:51

Medoc Man писав:
17 грудня 2019, 16:25
Если Вы создаёте документ программно, то Акт сверки с определённым номером, датой, контрагентом и при этом с направлением "Виданий" у Вас может быть только 1.
Если допустить, что кто-то у Вас помимо "программного создания" ещё создаёт вручную - тогда Вам нужно определится с коллегами в вопросе либо "руками", либо "удобно и автоматизированно".
2 одинаковых выписанных акта, совпадающих по реквизитам "Номер, Дата, Контрагент" - это либо нарушение нумерации, либо отсутствие перезаписи существующего документа при программном создании (вместо перезаписи может быть перемещение в Корзину).
В нормальном случае, GetPrimaryReestr(10104, 1, ДатаВашегоДокумента, ДатаВашегоДокумента) с проверками по Номеру, Дате и Контрагенту, после создания документа в M.E.Doc вернёт Вам верный и единственный CardCode.
Но, разумеется, это повлияет на быстродействие при больших объемах документов.
Это - не выход, и даже не полумера. Это - уязвимость медка. И все еще хуже, когда "коллег" большое количество, когда большая многопользовательская структура, когда "биг-дата". Зачем тратить столько ресурсов на стороне пользователей медка, если (уверен) сделать разработчику медка один метод, который "убъет" недостатки CARDCODE, - "раз плюнуть".
Medoc Man писав:
17 грудня 2019, 16:25
Описал выше.
Но всего этого можно избежать, указывая ExDocID при Вашем "программном создании".
У Вас есть инструмент, готовый, рабочий (я про ExDocID) - Вы его не хотите использовать (или не можете, но я в такое не верю).
Есть предложенный альтернативный способ, немного мудрёный, но рабочий. Хотя по факту, в обоих случаях Вы получите одинаково "уникальный идентификатор".
Вы зачем-то просите ещё, новый метод, который будет делать, по сути, тоже самое что и выше. Только Вы перекладываете часть с поиском CardCod'а с себя на M.E.Doc, который сделает это за Вас и просто отдаст результат.
Я имею ввиду условный GetDocCardcode, в который Вам, вероятно, нужно будет передавать какие-то атрибуты, чтоб M.E.Doc так же мог найти нужный, переданный Вами документ.
Наша песня хороша... Как заполнить ExDocID, если документ прислал контрагент, если документ создал пользователь в Медке ручками?
ExDocID - мертворожденный реквизит, который только увеличивает в размерах базу данных.

Inkognito
Повідомлень: 924
З нами з: 14 січня 2012, 14:26

Re: Получить CARDCODE после создания документа

Повідомлення Inkognito » 17 грудня 2019, 18:02

Medoc Man
Есть такой метод "ПолучитьСсылкуНового", в 1Ске, позволяет получить ссылку на новосозданный объект.
Насколько я понимаю, нужен аналог.

PetroP
Костыль:
1) Установить драйвер подключения к FireBird
2) Создать SELECT к базе, таблица CARD. Останется написать нужный запрос, который установит ExtDocID, как новый ИД.
3) Обработку запускать по расписанию каждые Х минут.
4) По ExtDocID можно многое получить, сами знаете.
Ну, а можно и SELECT по CARD с параметрами, для поиска документа и получения CARDCODE. Способ еще тот, но что делать...

Medoc Man
Повідомлень: 711
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: Получить CARDCODE после создания документа

Повідомлення Medoc Man » 17 грудня 2019, 22:57

PetroP писав:
17 грудня 2019, 16:51
И все еще хуже, когда "коллег" большое количество, когда большая многопользовательская структура, когда "биг-дата".
О каком ручном создании может идти речь в таких случаях?
PetroP писав:
17 грудня 2019, 16:51
Как заполнить ExDocID, если документ прислал контрагент, если документ создал пользователь в Медке ручками?
Никак. Его нет и никогда небыло во входящих документах и я опять не понимаю при чём тут они, если Вы говорите только о выписанных.
Если создан "руками" - то отличить его от созднанного программно Вам бы помог тот самый, уже икающий, ExDocID.
А дубликаты легко бы отсеялись обычной проверкой по количеству (if docs.count > 1).

Я может действительно чего-то не понимаю, но прежнему не вижу смысла тратить время разработчика на всё вышеописанное.
К тому же учитывая, сколько других полезных и более нужных вещей мы ждём уже годами.
PetroP писав:
17 грудня 2019, 16:51
ExDocID - мертворожденный реквизит, который только увеличивает в размерах базу данных.
Блин, а точно :o
Сформировал только что расходную накладную с одной позицией с добавлением ExDocID - к базе сразу пришилось 12 Gb.
Долго не мог понять почему так происходит. Но разобрался. Оказывается если в ExDocID поменять "Ex" на грустный русский "Эх" - база сжалится над тобой и не будет увеличиваться.
Inkognito писав:
17 грудня 2019, 18:02
PetroP
Костыль:
Вам бы этим костылём да по спинке :)
Не страшно-то БД потерять?

Inkognito
Повідомлень: 924
З нами з: 14 січня 2012, 14:26

Re: Получить CARDCODE после создания документа

Повідомлення Inkognito » 18 грудня 2019, 09:24

Medoc Man
Не страшно-то БД потерять?
Нет конечно. С каких это пор Select, Update приводят к разрушению базы :shock:
Из Ваших слов по теме и так понятно, что затребованный функционал не будет реализован, поэтому Вы предложили альтернативное решение. Мною также предложено альтернативное решение, и тоже рабочее. При обновлении таблицы Card полем ExtDocID, еще бы проанализировать статус документа (надо изменить на "Импортированный из учетной системы", поле или SENDSTT, или SENDSTATUS - по памяти не вспомню). Если клиент присылает документ без ExtDocID, значит ему все равно, как будет обрабатываться документ на стороне получателя. А мы себе работу упростим для целей автоматизации. Выбор конечно средств - за топикстартером.
П.С. почему бы не добавить в Медок настройку "Устанавливать уникальный идентификатор для первичных документов, если он отсутствует".

Medoc Man
Повідомлень: 711
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: Получить CARDCODE после создания документа

Повідомлення Medoc Man » 18 грудня 2019, 10:01

Inkognito писав:
18 грудня 2019, 09:24
Medoc Man
Не страшно-то БД потерять?
Нет конечно. С каких это пор Select, Update приводят к разрушению базы :shock:
Ну если на 1000 документов запрос или апдейт упадёт - Вы получите незавершенную транзакцию или, в худшем случае, дедлок.
Вариантов уйма, особенно с FB.
Inkognito писав:
18 грудня 2019, 09:24
Из Ваших слов по теме и так понятно, что затребованный функционал не будет реализован, поэтому Вы предложили альтернативное решение. Мною также предложено альтернативное решение, и тоже рабочее.
Я без понятия будут ли его делать. Лично считаю, что это трата времени, но это имхота.
Inkognito писав:
18 грудня 2019, 09:24
П.С. почему бы не добавить в Медок настройку "Устанавливать уникальный идентификатор для первичных документов, если он отсутствует".
Потому что это будет не ExDocID, а просто DocID, который Медком и так присваивается.
Человек-волшебник

Inkognito
Повідомлень: 924
З нами з: 14 січня 2012, 14:26

Re: Получить CARDCODE после создания документа

Повідомлення Inkognito » 18 грудня 2019, 10:28

Ну если на 1000 документов запрос или апдейт упадёт - Вы получите незавершенную транзакцию или, в худшем случае, дедлок.
Вариантов уйма, особенно с FB.
Выполнение запросов к базе что из сторонних систем, что Медком, по отношению к базе, одинаковое. Если бы СУБД была настолько ужасной, то ее бы не использовали, в т.ч. в крупных проектах, типа Медка. Обеспечение ИБП конечно необходимо.
Потому что это будет не ExDocID, а просто DocID, который Медком и так присваивается.
Только методы АПИ в основном ориентированы на ExDocID, ну и частично на CardCode, а не на DocID.

Medoc Man
Повідомлень: 711
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: Получить CARDCODE после создания документа

Повідомлення Medoc Man » 18 грудня 2019, 10:39

Inkognito писав:
18 грудня 2019, 10:28
Только методы АПИ в основном ориентированы на ExDocID, ну и частично на CardCode, а не на DocID.
Ну а как иначе? Вы в 1С создали документ, получили у него "Документ.УникальныйИдентификатор()". Это и будет значением для ExDocID.
Т.е. это ИДшник документа той системы, где он был создан (1С, в данном примере). Пусть он будет, условно, "12345".
Вы засунули этот документ в M.E.Doc посредством COM - M.E.Doc добавил ещё 2 значения: DocID (внутренний ИД документа Медка, пусть условно будет "56789") и CardCode (второй внутренний ИД документа или номер записи в БД, пусть будет условно "12341234").
В итоге Вы имеете:
- ExDocID = "12345";
- DocID = "56789";
- CardCode = "12341234".
Если б документ создавался вручную или импортировался бы из XML, или был бы получен от контрагента - он имел бы только DocID и CardCode.
И во всех случаях на основании всех трёх параметров можно работать с документами. Без особых выдумок.
Человек-волшебник

Inkognito
Повідомлень: 924
З нами з: 14 січня 2012, 14:26

Re: Получить CARDCODE после создания документа

Повідомлення Inkognito » 18 грудня 2019, 11:16

Все почти так, как Вы сказали, за важным исключением - у входящих докумнтов часто нет ExtDocID, т.к. документы создают вручную. А на стороне получателя потом думай, как его искать и читать.
Ок, не буду спорить, оставляю тему PetroP. Если надумаете работать с базой напрямую, стучите в личку.

Medoc Man
Повідомлень: 711
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: Получить CARDCODE после создания документа

Повідомлення Medoc Man » 18 грудня 2019, 11:38

Inkognito писав:
18 грудня 2019, 11:16
...за важным исключением - у входящих документов часто нет ExtDocID, т.к. документы создают вручную. А на стороне получателя потом думай, как его искать и читать.
У входящих документов есть особенный, отдельный признак, отличающий их от выписанного - признак, что они входящие.
Человек-волшебник

PetroP
Повідомлень: 605
З нами з: 22 січня 2015, 18:50

Re: Получить CARDCODE после создания документа

Повідомлення PetroP » 18 грудня 2019, 12:26

Medoc Man писав:
17 грудня 2019, 22:57
О каком ручном создании может идти речь в таких случаях?
Во-первых, это уже не относится к теме проблемы. Во-вторых, в таких случаях в первую очередь не может идти речь о контроле ручного создания путем просьб и уговоров "коллег".
Medoc Man писав:
17 грудня 2019, 22:57
Никак. Его нет и никогда небыло во входящих документах и я опять не понимаю при чём тут они, если Вы говорите только о выписанных.
Если создан "руками" - то отличить его от созднанного программно Вам бы помог тот самый, уже икающий, ExDocID.
1. Я не говорю только о выписанных. Я говорю обо всех.
2. Я не ставлю цель отличать между собой созданный румами, созданный программно без ExDocID, созданный программно с ExDocID или входящий. Я хочу отличить только-что созданный программно от остальных документов.
Medoc Man писав:
17 грудня 2019, 22:57
А дубликаты легко бы отсеялись обычной проверкой по количеству (if docs.count > 1).

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

И странно другое: вместо создания простой функции, разработчик пошел более сложным путем: придумал ExDocID (который не просто реквизит, а еще и требует поддержку уникальности), разработал кучу методов с поддержкой этого поля. На это время нашлось?
Medoc Man писав:
17 грудня 2019, 22:57
Блин, а точно :o
Сформировал только что расходную накладную с одной позицией с добавлением ExDocID - к базе сразу пришилось 12 Gb.
Долго не мог понять почему так происходит. Но разобрался. Оказывается если в ExDocID поменять "Ex" на грустный русский "Эх" - база сжалится над тобой и не будет увеличиваться.
Не удивляйтесь. Такие арти-факты всегда происходят, если вы работаете не с реальной системой, а теоретически со сферическим конем в вакууме...

PetroP
Повідомлень: 605
З нами з: 22 січня 2015, 18:50

Re: Получить CARDCODE после создания документа

Повідомлення PetroP » 18 грудня 2019, 12:32

Medoc Man писав:
18 грудня 2019, 10:39
Ну а как иначе? Вы в 1С создали документ, получили у него "Документ.УникальныйИдентификатор()". Это и будет значением для ExDocID.
Не знаю, кто придумал такую методику. Но один простой и не редкий пример для пользователей 1с: предприятие решает перейти из одной конфигурации 1с на другую. И все, накрылся не буду говорить чем данный функционал.
Medoc Man писав:
18 грудня 2019, 10:39
И во всех случаях на основании всех трёх параметров можно работать с документами. Без особых выдумок.
Вопрос, а зачем работать "на основании всех трех параметров", если это можно делать (при лишении недостатков, о которых я говорил) только с одним?

Medoc Man
Повідомлень: 711
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: Получить CARDCODE после создания документа

Повідомлення Medoc Man » 18 грудня 2019, 12:42

PetroP писав:
18 грудня 2019, 12:32
Вопрос, а зачем работать "на основании всех трех параметров", если это можно делать (при лишении недостатков, о которых я говорил) только с одним?
Потому что ExDocID, совпадающий в УС и в M.E.Doc даст легко выстроить связь между документов в УС и в M.E.Doc.
На основании CardCode так не получится. Если только Вы не додумались совать CardCode из M.E.Doc в УС, как УС суёт ExDocID в M.E.Doc :?
PetroP писав:
18 грудня 2019, 12:32
Не знаю, кто придумал такую методику. Но один простой и не редкий пример для пользователей 1с: предприятие решает перейти из одной конфигурации 1с на другую. И все, накрылся не буду говорить чем данный функционал.
А как Вы собираетесь сохранить связь при переходе на другую конфигурацию используя CardCode? :?:
Человек-волшебник

PetroP
Повідомлень: 605
З нами з: 22 січня 2015, 18:50

Re: Получить CARDCODE после создания документа

Повідомлення PetroP » 18 грудня 2019, 13:07

Medoc Man писав:
18 грудня 2019, 12:42
Если только Вы не додумались совать CardCode из M.E.Doc в УС, как УС суёт ExDocID в M.E.Doc :?
Именно так методологически и ПРАВИЛЬНО делать. Именно так я, например, храню соответствия справочникам УС справочников медка. Именно так хранятся соответствия записям одной изолированной базы данных записей другой изолированной базы данных.
Medoc Man писав:
18 грудня 2019, 12:42
А как Вы собираетесь сохранить связь при переходе на другую конфигурацию используя CardCode? :?:
Для хранения любой связи в объектах УС необходимо выделять специальный для этого реквизит. И значением такого реквизита может быть что угодно: либо CardCode (самый очевидный и правильный вариант), либо ExDocID, либо ЕщеОдинИдентификаторМалоНеПокажется. И при миграции из одной конфигурации на другую просто переносятся значения такого реквизита.

Medoc Man
Повідомлень: 711
З нами з: 07 червня 2018, 14:28
Звідки: Kiev

Re: Получить CARDCODE после создания документа

Повідомлення Medoc Man » 18 грудня 2019, 13:27

PetroP писав:
18 грудня 2019, 13:07
Medoc Man писав:
18 грудня 2019, 12:42
Если только Вы не додумались совать CardCode из M.E.Doc в УС, как УС суёт ExDocID в M.E.Doc :?
Именно так методологически и ПРАВИЛЬНО делать. Именно так я, например, храню соответствия справочникам УС справочников медка. Именно так хранятся соответствия записям одной изолированной базы данных записей другой изолированной базы данных.
Medoc Man писав:
18 грудня 2019, 12:42
А как Вы собираетесь сохранить связь при переходе на другую конфигурацию используя CardCode? :?:
Для хранения любой связи в объектах УС необходимо выделять специальный для этого реквизит. И значением такого реквизита может быть что угодно: либо CardCode (самый очевидный и правильный вариант), либо ExDocID, либо ЕщеОдинИдентификаторМалоНеПокажется. И при миграции из одной конфигурации на другую просто переносятся значения такого реквизита.
Как говорил господин priup, "Бардак в Вашем королевстве............." :(
Человек-волшебник

Відповісти

Повернутись до “Модуль «Інтеграція»”