Имя: Пароль:
1C
1С v8
Битая ссылка при программном создании документа.
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) да делай как хочешь, только не лезь в Запись, когда ссылка формируется.
Ты ж сути не понимаешь - делай где угодно, только события записи оставь в покое.