Имя: Пароль:
1C
1С v8
Как сохранить данные при отмене транзакции.
,
0 ЭЦ
 
26.12.16
13:46
ГОСПОДА!
Проводится документ.
В модуле проведения выполняются вычисления.
В зависимости от полученных значений формируется отказ проведения.
Требуется сохранить полученные значения вычислений после завершения проведения.
Запись независимого регистра из модуля проведения - не работает.
Прошу подсказать.
Спасибо
1 Лефмихалыч
 
26.12.16
13:50
рассчитывай это до транзакции
2 Лефмихалыч
 
26.12.16
13:50
еще можно в журнал регистрации записать
3 Лефмихалыч
 
26.12.16
13:51
но вообще-то это дурь наркоманская - сохранять что-то при откате транзакции. Какая же это накрен транзакция тогда? После роллбэка все данные, вычисленные внутри транзакции не имеют смысла - это мусор просто.
4 mehfk
 
26.12.16
13:54
(0) Стартани фоновое, в которое передашь нужные данные.
5 Cool_Profi
 
26.12.16
13:54
Транзакция - она подвержена болезни ACID...
https://ru.wikipedia.org/wiki/ACID
6 ЭЦ
 
26.12.16
14:02
Собираюсь перепробовать варианты с ДополнительнымиСвойствами И ПараметрамиСеанса.
Мож кто уже пробовал или еще чтото другое пробовал.
Про журнал регистрации и запись текстовых файлов я в курсе
7 Dmitrii
 
гуру
26.12.16
14:03
(0) Не надо проводить документ.
Сделайте нужные вам вычисления без проведения документа.
8 Fragster
 
гуру
26.12.16
14:04
а почему надо сохранять результат вычисления? и почему нельзя эти вычисления сделать до проведения?
9 France
 
26.12.16
14:04
(6) ну, в нормальном состоянии люди такой дурью не должны баловаться...
10 Kassius
 
26.12.16
14:07
категорически согласен с (3)
11 ЭЦ
 
26.12.16
14:08
(1,8) Долго рассказывать но в целом тут такая конфа что при проведении одного дока при некоторых условия создается другой док и он тоже проводится и вот из второго дока надо вытащить рассчитанные значения.
Все это делать перед проведением первого - геморойно.
12 Cool_Profi
 
26.12.16
14:09
(11) Ты того... Больше такое не принимай... А то тебя штырит совершенно не по-детски...
13 ЭЦ
 
26.12.16
14:10
Еще можно попробовать экспортную переменную второго дока определить и в нее чегонибудь записать
14 Dmitrii
 
гуру
26.12.16
14:13
(11) Это какая-то неправильная конфа. ))))
Но суть не в этом.

Личное ИМХО, с точки зрения банальной бытовой логики, система работает абсолютно корректно.
Но даже если не так, то 1С не поддерживает вложенных транзакций. То есть если на любом уровне вложенности произошло явное или неявное исключение, то отменяется вся транзакция. И в большинстве случаев это правильно.

>> при проведении одного дока ... создается другой док

Вот это вообще жесть

>> делать перед проведением первого - геморойно

Геморройно у вас уже случилось. осталось сделать теперь правильно.
15 France
 
26.12.16
14:13
чего только не придумают, лишь бы дороги не строить..
16 ЭЦ
 
26.12.16
14:16
(14) Ну переделывать работающую конфу на которой куча  народа работает - ради этой мелочевки смысла нет.
Надо обойтись по минимуму.
А вообще - согласен конфа - кривовато написана.
17 France
 
26.12.16
14:18
хватит мучать народ. давай "камингаут" - расскажи подробнее. вдруг что и предложат, если будут знать детали..
18 Nuobu
 
26.12.16
14:19
(16) Может, как было сказано ранее, нужно до транзакции рассчитывать?
Например, добавить поле, таблицу, страницу или еще какую-то херь и её заполнять по воле пользователя?
19 Лефмихалыч
 
26.12.16
14:21
(11) ну, вот, зато теперь тебе не надо объяснять, почему документы, создающие документы - это уродское архитектурное решение.
20 Dmitrii
 
гуру
26.12.16
14:21
(17) Автора не интересует правильное решение. Ему нужна заплата на конкретную ситуацию.
21 France
 
26.12.16
14:23
(20) "нужна заплата" - наверное, торопиться зарплату к новому году получить)
22 ЭЦ
 
26.12.16
14:26
Ну прикладных терминах это выглядит так :
На производстве вываливается из станка изделие и его выпуск оформляется в виде отчета производства за смену.
Отчет записывается и пытается провестись при этом по спецификациям определяется перечень материалов и полуфабрикатов которые должны были бы списаться со склада.
На основании этого перечня внутри транзакции проведения создается требование-накладная и она тоже пытается провестись. В случае если остатков материалов на складе хватет то все чикипоки проводится. Если нет - то отказ. Все доки создаются но остаются не проведенными.
Люди хотят знать каких именно материалов не хватает и сколько не хватает.
23 ЭЦ
 
26.12.16
14:27
Щас ручками пеытаются перрепровести каждую ТН и смотрят на что она ругается. Но это не удобно т.к. доков много и в них много строк.
24 ЭЦ
 
26.12.16
14:28
А надо по всей совокупности на начало дня остатки на складах корректировать
25 France
 
26.12.16
14:29
упп?
26 ЭЦ
 
26.12.16
14:30
ес ит ыз
27 France
 
26.12.16
14:30
"требование накладная" - упп.. а через обеспечение потребностей не вариант посмотреть достаточность материалов?
28 ЭЦ
 
26.12.16
14:34
Тут замороченая схема разузлования с основными и запасными спецификациями и разнообразными аналогами. От обеспечнения потребностей давно отказались.
Хотят просто отказаться от ручного перепроведения ТН и получать по факту чего не хватает
29 FIXXXL
 
26.12.16
14:34
(22) не надо отменять проведение, надо "складировать" доки в минус, показывать отчет и проч. стукалочки пользователю
но провести надо, деталь по факту - вот она, если в программе не тем числом приход - это вина оператора. а не детали
30 France
 
26.12.16
14:35
(28) тогда, не мучайте(сь) - посмотрите как в  ERP, и аналогично сделайте..
31 France
 
26.12.16
14:36
(29) достойно)...
32 ЭЦ
 
26.12.16
14:37
В минус проводить запрещено.
33 ЭЦ
 
26.12.16
14:38
Есть желание как то всетаки сохранить недостачу в какой нибудь глобальной переменной, ну без записи в бд конешно.
34 Cool_Profi
 
26.12.16
14:52
1. выполняем расчёт потребностей по спецификациям.
2. создаём трн
3. проводим.
4. если ок - проводим ОПзС.
5. Иначе - материмся по системе громкого оповещения предприятия.
35 France
 
26.12.16
14:52
(34) + 6. если 5 не помогло, бьем морды и опять 5.
36 ERWINS
 
26.12.16
14:54
пиши в журналрегистрации
37 ЭЦ
 
26.12.16
14:56
(36) Ну это уж на крайняк
38 ЭЦ
 
26.12.16
14:59
Его ж потом еще и чистить надо
39 Лефмихалыч
 
26.12.16
15:00
(22) если это нужно для регистрации свершившегося факта "Из станка вывалилось вот это", то убери все проверки от туда. Потому что, если в программе нет остатков, а из станка вывалилось, значит проблема не в станке, а в программе. Факт того, что из станка выпало, надо зарегистрировать. А с минусам разбираться отдельно.
Фактически, при обнаружении нехватки чего-то у тебя должен не откат происходить, а формироввать дополнительное задание (бизнес процесс или еще что-то) обученному человеку, чтобы он разобрался, кто кого наиопывает, и починил.
40 ЭЦ
 
26.12.16
15:07
Щас люди вторым проходом разбираются с остатками и допроводят ручками доки, если отчет создан и не проведен - это для них сигнал разбираться.
41 Лефмихалыч
 
26.12.16
15:09
(40) пусть будет проведен, а сигналом пусть будет задание: "Разберись и почини" с предметом "отчет производства".
Иначе вы не видите реального объема производства.
42 ЭЦ
 
26.12.16
15:12
Реальный объем только в конце дня всех интересует.
К этому моменту все уже должно быть разобрано и проведено.
43 ЭЦ
 
26.12.16
15:12
Надо просто им ускорить работу
44 Serg_1960
 
26.12.16
15:18
(22) Схема "в лоб" и скорее всего не работающая :)

(не особо думая)

Из станка что-то вываливается --> оформляется заказ на производство, где материалы автоматом заполняются по спецификации и резервируются(!). Этот документ всегда проводится (ибо по сути свой, он декларативный). Далее на основании этого документа легко обработкой заполнять и требования, и отчеты. НО: перед этим желательно заполнить перемещение на удовлетворение потребностей (резерв-остатки). Всё автоматизируется одной кнопкой "Сделать всё!" в одной обработке.
45 Serg_1960
 
26.12.16
15:21
Эээ... вообще-то, для цеха с автоматическими линиями, так и сделано: оперативно отчеты о выпуске (без материалов): требование-накладная, распределение материалов и отчет мастера в конце смены.
46 ЭЦ
 
26.12.16
15:22
Мне сказали прибить полочку чтобы было куда книжки ставить, а я в ответ - книжки надо выкинуть и в интернет смотреть.
Это конечно может быть правильно, но полочку всетаки надо прибить.
47 FIXXXL
 
26.12.16
15:30
(46) ну тогда лови:
у тебя наверняка есть глобальная проца типа СообщитьОбОшибке, которая пользователю и говорит об расхождениях

я в такой процедуре дергал процедуру общего модуля с флагом ПовторноеИспользование

Функция МассивОшибокИзПроцедурыСообщитьОбОшибке() Экспорт
    
    //для очистки массива вызываем Функцию ТекстОшибокНакопленныйПроцедуройСообщитьОбОшибке() с параметром ИСТИНА
    //накопление идет в процедуре СообщитьОбОшибке() при установленном параметре сеанса СохранятьОшибкиИзПроцедурыСообщитьОбОшибкеНаВремяСеанса    
    //при каждом вызове возвращается уже накопленный массив ошибок, если не было вызова ОбновитьПовторноИспользуемыеЗначения()
    //или с последнего обращения к этой процедуре не прошло более 20 минут
    //или массив не был считан с очисткой
    
    Возврат Новый Массив();
    
КонецФункции


        Если ПараметрыСеанса.СохранятьОшибкиИзПроцедурыСообщитьОбОшибкеНаВремяСеанса Тогда
            МассивОшибок = ОбщегоНазначенияПовтИсп.МассивОшибокИзПроцедурыСообщитьОбОшибке();
            МассивОшибок.Добавить(ТекстСообщения);
        КонецЕсли;

таким образом, все твои ошибки будут лежать в массиве
можешь читать массив регламентов и дальше писать куда хош
48 FIXXXL
 
26.12.16
15:30
(47) можешь читать массив регламентоМ
49 Serg_1960
 
26.12.16
15:32
Эээ... нестандартный подход к системе резервирования позволяет "регистрировать" отсутствие материалов в кладовых цехов без формирования отрицательных остатков ещё на этапе планирования (формирования заказов на производство)

(офф)
Книжки на полочке - это хорошо. Но недостаточно. Особенно когда тебе начальники (а их много над тобой) в унисон хором говорят: "А нам нада так!"(цы)
50 ЭЦ
 
26.12.16
15:36
Во !
Это мы щас проверим.
51 vde69
 
26.12.16
15:51
(29) +100

самое правильное решение...

есть еще одно решение:

делаем обработку "Выпуск детали ХХХ" в ней заполняем весь алгоритм из отчета за смену, повторям ТЧ и прочее....

по кнопке "провести" открываем транзакцию и шлепаем отчет за смену и все остальные детали... в случае отката - откатываем всю транзакцию при этом все сообщения будут доступны для пользователя...
52 Serg_1960
 
26.12.16
17:15
PS: осталось только разобраться по поводу чего в (50) автор прокричал "Эврика!"(с) :)
53 ЭЦ
 
27.12.16
10:36
Если кому интересно то вытащить данные из отмененной транзакции получается при помощи ДополнительныеСвойства.
Прописываешь новое свойство и в него внутри транзакции пишеш нужный массив.
После отката транзакции оно сохраняется.
такие дела.
Так что всем спасибо
Программист всегда исправляет последнюю ошибку.