|
Битая ссылка при программном создании документа. | ☑ | ||
---|---|---|---|---|
0
DimoNN
08.09.14
✎
10:06
|
Добрый день . Помогите разобраться.
В КА поступила такая задача . Нужно было что бы ЧекККМ разбивался на два. Пользователь создает одни чек с товарами и услугами, программа создает еще одни дополнительный где выбирает только услуги ( с другой кассой и организацией ) . Я реализовал так, сделал это в событии модуля объекта ПередЗаписью. Копируется документ, из него удаляются товары, меняется касса,организация и записывается. В исходном удаляются услуги , и добавляется ссылка на чек созданный программно. За несколько дней алгоритм проработал пару тысяч раз. И несколько раз ( около 5-8) у пользователя случалась ситуация , что подчиненный чек не создавался. А в поле подчиненный чек вылазила надпись «объект не найден» . При записи подчиненного чека делал «Попытку исключение», но исключительная ситуация не наступала . Как мне найти причину ? |
|||
1
barrgand
08.09.14
✎
10:10
|
(0) Пользователи на такой алгоритм вообще нормально реагируют?
|
|||
2
Ринат-СПб
08.09.14
✎
10:11
|
(0) Делал то же самое, только для розницы. Правда использовал РМК (интерфейс) и обрабатывал только при закрытии чека (т.е. формировалось 2 чека и ФР выводил два чека)
Может проще сделать что то типа РМК для чеков? |
|||
3
Ринат-СПб
08.09.14
✎
10:11
|
+ (2) Вместо того, что бы использовать сам документ ЧекККМ
|
|||
4
DimoNN
08.09.14
✎
11:30
|
(1) Довольны даже. Сделать нужно было за 2 дня и что бы работа менеджеров и кассиров ни как не усложнилась . ( т. е. Работали как им привычно ) . Печатные формы были доработаны , что бы из исходного чека все печаталось, и некоторые еще доработки ( по их системе скидок , и авто переносу услуг в подчиненный)
(2) С розницей ни разу не работал, примерно представляю РМК, не могу представить преимущества . А собственному по мое вопросу не подскажите , куда копать ? |
|||
5
РенеДекарт
08.09.14
✎
11:50
|
(0)>Я реализовал так, сделал это в событии модуля объекта ПередЗаписью.
- это главная ошибка. Ссылка еще не сформирована, и другой док может получить именно ту же ссылку. Т.к. предыдущая еще не зафиксирована и не является "действующей". |
|||
6
Sammo
08.09.14
✎
11:52
|
Чудес не бывает. Если объект не найден, то значит документ с услугами не записан. Например, отрабатывает что-то "Перед Записью"
Личное имхо 1. Схемы, когда в модуле одного документа создаются и проводятся взаимозависимые стоит применять в крайнем случае (точнее в _самом_ крайнем случае, когда иначе ну просто вилы). Например в данном случае возможно будет эффективнее обработка, которая будет выносить услуги отдельно от записи документа. 2. Попытка Исключение может не отработать (например, при попытке записи не создается ошибки и исключения). Поэтому после записи стоить проверять на заполненность ссылки. |
|||
7
barrgand
08.09.14
✎
11:53
|
(4) В журнале то ничего нету?
|
|||
8
DimoNN
08.09.14
✎
11:54
|
(5) А как так может получится ? Зачем платформа позволят копировать не записанный в базу объект (без ссылки) ?
|
|||
9
mehfk
08.09.14
✎
11:54
|
(0) Значит где-то был Отказ = Истина без исключительной ситуации.
|
|||
10
DimoNN
08.09.14
✎
11:59
|
(6) Дело говоришь. Спасибо .
|
|||
11
DimoNN
08.09.14
✎
12:04
|
(7) Не нет .
|
|||
12
РенеДекарт
08.09.14
✎
12:10
|
(10) ты не понимаешь, что написал.
(8)> Зачем платформа позволят копировать не записанный в базу объект (без ссылки) ? - не платформа "копирует" (как ты придумал себе) документ, а выдает новому документу ту же "ссылку", которую, получается, себе уже "нацепил" предыдущий документ. База ведь файловая? |
|||
13
DimoNN
08.09.14
✎
12:12
|
(5) Хм. Одни пользователь говорил про какую ту мистику, мол чек не создался . А в структуре подчиненности основной чек ссылался на другой чек ( с услугами ) , созданный другим пользователем , а при повторно открытии перестал.
Где бы почитать , про то как и когда создается ссылка ? |
|||
14
DimoNN
08.09.14
✎
12:12
|
(12) база серверная.
|
|||
15
DimoNN
08.09.14
✎
12:17
|
(12) Т.е. так как чек с услугами создается раньше, основной чек перетирает его, когда ссылка одинаковая. Так получается ? А почему так происходит не всегда ?
|
|||
16
РенеДекарт
08.09.14
✎
12:21
|
(15) могут еще другие чеки создасться между ними.
Вообще, никогда нельзя в 1С использовать для изменения данных ПередЗаписью и ПриЗаписи. Только просмотр и корректировка каких-то других, не связанных данных. А тут - один объект еще не досоздался до конца (скользкий момент ПередЗаписью), а уже создается другой. Проще простого - разбиваешь/формируешь первый чек, как надо, остальные данные (тело сследубщего чека) сохраняешь в ТЗ, записываешь первый, формируешь второй, заполняешь, записываешь. И никаких Перед-ПриЗаписи. |
|||
17
РенеДекарт
08.09.14
✎
12:23
|
(13)ссылка сначала создается, потом присваивается объекту при записи.
А ты создать её создал, а присваиваешь в неопределенный момент времени, когда платформа точно такую же ссылку уже могла сформиовать и выдать совсем другому объекту (даже не твоему следующему чеку). Вот почему не ругается в SQL-базе на неуникальность - вопрос. Или серверная файловая? |
|||
18
РенеДекарт
08.09.14
✎
12:24
|
(15)>Так получается ?
- ты сам запутал все и вывел в неопределенность. Нсчала запиши, потом формируй следующий. |
|||
19
lodger
08.09.14
✎
12:25
|
(15) а в обработке проведения разбить логику? сперва штатно сформировать 1 документ, записать полностью зафиксировать транзакцию, а потом продолжить но уже со следующим?
хотя можно и в одной если заранее обозначить что объектов у тебя 2. |
|||
20
РенеДекарт
08.09.14
✎
12:27
|
(19)> а в обработке проведения разбить логику?
- предлагаешь ему транзакцию в транзакции открыть? Еще больше дров наломает. |
|||
21
lodger
08.09.14
✎
12:29
|
(20) ну тогда по простому можно в ПослеЗаписи лезть. транзакция то зафиксирована.
|
|||
22
DimoNN
08.09.14
✎
12:34
|
(17) Нет. Клиент - серверный вариант .
|
|||
23
DimoNN
08.09.14
✎
12:36
|
Я думаю самый лучший вариант уже тогда создать просто отдельную кнопку на чеке ( по которому создается подчиненный чек с услугами ) , а потом уже записывать основной.
|
|||
24
DimoNN
08.09.14
✎
12:43
|
(19) Обработка проведения не пойдет . Так как менеджер чаще всего создает чеки . А проводит их уже кассир .
|
|||
25
barrgand
08.09.14
✎
12:51
|
(23) Почему бы не создать обработку, которая будет создавать оба чека?
|
|||
26
РенеДекарт
08.09.14
✎
13:40
|
(22) какой СУБД?
|
|||
27
РенеДекарт
08.09.14
✎
13:42
|
(23) да делай как хочешь, только не лезь в Запись, когда ссылка формируется.
Ты ж сути не понимаешь - делай где угодно, только события записи оставь в покое. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |