|   |   | 
| 
 | v7: Как работают транзакции? | ☑ | ||
|---|---|---|---|---|
| 0
    
        forforumandspam 02.10.13✎ 07:59 | 
        Всем добрый день. Есть пара связанных докуентов: поступление и реализация. Они работают всегда парно. До проведения соответствующего документа поступления документ реализация не сможет быть проведён, т.к. нет в наличии товара. Запустил обработку, которая меняет склад в обох документах. Перед всеми изменениями я начинаю транзакцию. Теперь меняю склад в поступлении, провожу его - всё ОК. После меняю склад в реализации и документ не проводится, т.к. пишет, что нет остатков на новом складе. Это что получается, что объект "БухгалтерскиеИтоги" не видит новых проводок? Как заставить "БухгалтерскиеИтоги" увидеть новые остатки внутри транзакции?     | |||
| 1
    
        Плот 02.10.13✎ 08:12 | 
        (0) Что то в обработке наверное, Итоги где получаешь?     | |||
| 2
    
        VladZ 02.10.13✎ 08:12 | 
        Никак. Фактическая запись происходит в момент "ЗафиксироватьТранзакцию".     | |||
| 3
    
        forforumandspam 02.10.13✎ 08:22 | 
        (1) В обработке такой код (приблизительно):
 НачатьТранзакцию(); ДокПост.Провести(); ДокРеал.Склад = ЧтоТо; ДокРеал.Провести(); ЗафиксироватьТранзакцию(); В момент проведения ДокРеал из процедуры ОбработкаПроведения() модуля документа объект "БухгалтерскиеИтоги" не видит новых движений. | |||
| 4
    
        VladZ 02.10.13✎ 08:25 | 
        Разнеси запись документов и проведение.     | |||
| 5
    
        Плот 02.10.13✎ 08:29 | 
        (3) тогда (2) и (4)     | |||
| 6
    
        Bigbro 02.10.13✎ 08:56 | 
        после фиксации транзакции увидишь новые итоги.
 вообще не стоило бы в транзакцию это заталкивать. | |||
| 7
    
        forforumandspam 02.10.13✎ 09:03 | 
        (6) Так мне надо, либо чтобы оба документа проводились, либо чтобы оба вернулись в исходное состояние, если будет ошибка при проведении второго.     | |||
| 8
    
        Злой Бобр 02.10.13✎ 09:14 | 
        (0) Ну ты сам себе злобный буратино. Кроме извращенно поставленной задачи, не менее извращенная реализация задачи.
 Выдай исходные данные и чего в итоге нужно получить. Разбираться в твоем г*коде никто небудет. | |||
| 9
    
        forforumandspam 02.10.13✎ 09:15 | 
        (8) Где ты увидел Г*внокод?     | |||
| 10
    
        пипец 02.10.13✎ 09:32 | 
        проведение само по себе транзакция     | |||
| 11
    
        Злой Бобр 02.10.13✎ 09:33 | 
        (9) Это было сказано образно. Но если ты действительно непонимаешь что перед транзакцией нада (по уму) получить итоги и сравнить с твоей ТЧ, тогда всетаки сначала учить матчасть.     | |||
| 12
    
        forforumandspam 02.10.13✎ 09:52 | 
        (11) Это ты, не разобравшись, начинаешь ярлыки навешивать.     | |||
| 13
    
        scanduta 02.10.13✎ 09:54 | 
        (2) А если сделать транзакцию внутри транзакции?? никто не пробывал =)?     | |||
| 14
    
        catena 02.10.13✎ 09:55 | 
        (7)А нельзя проверить провелся ли первый и только потом проводить второй?     | |||
| 15
    
        catena 02.10.13✎ 09:55 | 
        А, ну да. Со вторым косяк :)     | |||
| 16
    
        пипец 02.10.13✎ 10:21 | 
        (13) мсье знает толк в извращениях (с)     | |||
| 17
    
        Кирпич 02.10.13✎ 10:28 | 
        (0) Забей. Не используй транзакции.     | |||
| 18
    
        Bigbro 02.10.13✎ 10:31 | 
        (7) так и проверяй что произошло. но не в транзакцию же толкать. в базе у тебя не изменятся итоги пока транзакция не фиксирована. принципиально неверный подход.     | |||
| 19
    
        ЧеловекДуши 02.10.13✎ 10:33 | 
        (3) За такой код, руки тебе нужно из пятой точки выдернуть и метлу вставить :)     | |||
| 20
    
        ЧеловекДуши 02.10.13✎ 10:34 | 
        (12) Какой ярлык?
 Код из (3) вешает всю БД и все ждут, пока ты наиграешься в провидение. При этом команда "Провести" уже имеет функцию транзакции. :) | |||
| 21
    
        ЧеловекДуши 02.10.13✎ 10:35 | 
        +(12) Читай в (17) до просветления :)     | |||
| 22
    
        scanduta 02.10.13✎ 10:36 | 
        (20) Почему транзакция вешает всю базу?     | |||
| 23
    
        Salimbek 02.10.13✎ 10:49 | 
        Попытка
 Попытка ...Проводишь первый док Исключение ...Говоришь, что док такой-то не смог провести ...Возврат из процедуры конецпопытки ...Проводишь второй док Исключение ...Говоришь что док второй не можешь провести ...Вертаешь назад первый док конецпопытки | |||
| 24
    
        forforumandspam 02.10.13✎ 10:58 | 
        (14) Первый всегда гарантированно проведётся. Ошибка может возникнуть при проведении второго и тогда надо вернуть в исходное состояние первый документ.     | |||
| 25
    
        Злой Бобр 02.10.13✎ 11:02 | 
        (22) Ну попробуй. Если у тебя 20 пользователей которые проводят документы, то жди их с биткой уже минут через 10. После этого либо перестанешь быдлокодить, либо будешь постоянно отгре_бать.     | |||
| 26
    
        forforumandspam 02.10.13✎ 12:44 | 
        (25) Ещё один. Где вы быдлокод увидели? Я в базе один - никто не придёт.
 (20) Внутри одной транзакции только 2 документа. Другие два будут в новой транзакции и т.д. | |||
| 27
    
        Bigbro 02.10.13✎ 12:57 | 
        (26) нельзя проводить 2 документа в транзакции, при этом один по результату проведения второго.     | |||
| 28
    
        trad 02.10.13✎ 13:03 | 
        (27) а есть объяснение почему нельзя?     | |||
| 29
    
        Bigbro 02.10.13✎ 13:16 | 
        в (18) уже написал. как написать более понятно - не знаю.     | |||
| 30
    
        ЧеловекДуши 02.10.13✎ 13:19 | 
        (24) Тогда твой код, можно запускать только ночью, или по выходным, когда никто не работает :)     | |||
| 31
    
        ЧеловекДуши 02.10.13✎ 13:20 | 
        (26) Поверь, использовать типо штатный механизм "Транзакции" от 1С, это и есть быдло код :)
 Так же, если ты боишься, что не проведётся второй документ, так предусмотри, что бы была проверка или вариант того, что бы после до провести не проведенный документ :) | |||
| 32
    
        ЧеловекДуши 02.10.13✎ 13:21 | 
        (27) Почему нельзя?
 В пределе сессии все отработает на ура. Проблема только в одном, пока господин в (0) проводит документы в транзакции, все курят бамбук :) | |||
| 33
    
        trad 02.10.13✎ 13:49 | 
        (29) из 18 "в базе у тебя не изменятся итоги пока транзакция не фиксирована"
 мне не понятно почему не изменятся итоги для той же сессии | |||
| 34
    
        trad 02.10.13✎ 13:51 | 
        (26) покажи как итоги получаешь     | |||
| 35
    
        Fragster модератор 02.10.13✎ 13:52 | 
        все фигня, автору надо просто реализацию на секунду позже поступления поставить.     | |||
| 36
    
        forforumandspam 02.10.13✎ 14:35 | 
        Прошу прощения перед всеми. Я где-то ошибся. На самом деле мой код отработал на ура. Если в транзакции проводится первый документ, то второй при проведении увидит его проводки и проведётся, как и надо. Где-же я ступил, что мне пришлось писать тему - не знаю.
 Резюме: Такой подход не является быдлокодом. По два документа в одной транзакции не вешают базу. | |||
| 37
    
        Torquader 03.10.13✎ 00:08 | 
        Всё зависит от тяжести выполняемых действий при проведении документа - если документ проводится за доли секунды, то транзакция мешать не будет.
 Но, есть одна проблема - вложенные транзакции в 1С неправильно работают, то есть ОтменитьТранзакцию() не вызывает реальной отмены действий. Если проводить документ в транзакции, то в случае отказа от проведения может отказаться, что отмена проведения не состоялась, так как внутренняя транзакция криво отменилась. P.S. у меня есть в базе документы, которые только одну строчку в БухИтоги при проведении пишут, и их прекрасно можно проводить в одной транзакции по несколько штук - главное, только следить, чтобы транзакция не занимала более двух секунд - тогда остальные не успевают скурить бамбук и изготовить биту. | |||
| 38
    
        Туц 03.10.13✎ 06:14 | 
        (0) Как я понял транзакцию используешь чтоб при ошибке подмена не выполнилась? Если так, то лучше реализовать собственный контроль не через механизм транзакций или вообще напрямую лезьть в таблички, но тока аккуратно.     | |||
| 39
    
        Повелитель 03.10.13✎ 06:40 | 
        (36) Это же 7.7 там и так пока проводиться один документ все курят бамбук, так что 2 документа проводятся или один думаю не так уж важно.
 У нас вот была помню проблема база была огромная и документ Отчет ККМ проводился 5-10 минут (Несколько тысяч строк в документах было), которые приходили с магазинов, вот это было весело, а филиалов было 7. И эти 7 документов проводились около часа, вот это было весело. Потом эту 7.7 выкинули. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |