![]() |
![]() |
![]() |
|
Проведение внутри проведения - как пропустить ошибки | ☑ | ||
---|---|---|---|---|
0
3flight
24.06.11
✎
13:38
|
В процедуру "ОбработкаПроведения" Объекта "А" я добавил вызов процедуры написанного мной общего модуля, где я из таблицы в этом объекте получаю ссылки на другие объекты, получаю объекты, меняю их и провожу с помощью "ОбъектБ.Записать". Делаю я это внутри блока "Попытка-Исключение", дабы уйти от ошибок проведения, если они вдруг будут. Мне нужно чтобы 1С попробовал провести ОбъектБ, и если есть ошибка, продолжил дальше. Но так не работает, если есть ошибка в проведении Объекта "Б", то не проводится и Объект "А". (т.е. ничего не проводится). Как обойти?
Код: [CODE]Процедура ИзменитьСтатусыЗаказовНаОснованииПоступленияБДС(ОбъектПоступлениеБДС) Экспорт Для Каждого РасшифровкаПлатежа Из ОбъектПоступлениеБДС.РасшифровкаПлатежа Цикл Попытка Заказ = РасшифровкаПлатежа.Заказ.ПолучитьОбъект(); Если Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.Согласован Или Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.КОбеспечению Тогда Заказ.Статус = Перечисления.СтатусыЗаказовКлиентов.КОтгрузке; Для Каждого СтрокаТовар Из Заказ.Товары Цикл СтрокаТовар.ДатаОтгрузки = ТекущаяДата(); КонецЦикла; КонецЕсли; Попытка Заказ.Записать(РежимЗаписиДокумента.Проведение); Исключение КонецПопытки; Исключение КонецПопытки; КонецЦикла; КонецПроцедуры[/CODE] |
|||
1
Ksandr
24.06.11
✎
13:40
|
делать в событии ПриЗаписи
|
|||
2
3flight
24.06.11
✎
15:04
|
Создал процедуру "ПриЗаписи(Отказ)", поместил вызов процедуры "ИзменитьСтатусыЗаказовНаОснованииПоступленияБДС(ОбъектПоступлениеБДС)" в неё, но результат тот же.
|
|||
3
Defender aka LINN
24.06.11
✎
15:07
|
(0) Консерваторию менять надо
|
|||
4
3flight
24.06.11
✎
15:13
|
Порой меня поражает насколько "бывалые" пользователи форума любят бесполезно нафлудить, подразумевая свою высокую осведомленность и одновременно полную неосведомленность автора в обсуждаемой теме. Кстати, как тут в ответе сослаться на другой ответ? (Типа "(3)" )
|
|||
5
3flight
24.06.11
✎
15:29
|
(3) - Подскажите, пожалуйста, если знаете, как реализовать.
|
|||
6
3flight
24.06.11
✎
16:41
|
Кто-нибудь? Очень хочется решить эту задачу до следующей недели. Я уверен что тут какая-то принципиальная ошибка. Я не учился программированию на 1С, так что могу не знать каких-то нюансов или даже основ. Можно конечно делать проверки вручную, и вызывать метод "Записать" только если ошибок точно не будет, но это получится как-то громоздко.
|
|||
7
unregistered
24.06.11
✎
16:49
|
(4) >> Порой меня поражает ...
И меня тоже. 1С поддерживает вложенные транзакции, но следует правилу - либо всё, либо ни чего. Т.е. если произошли ошибки в любой из вложенных транзакций, то отменяется вся транзакция целиком. Это как бы давно известный факт. Ну а менять при записи или проведении объекта другие объекты - не есть хорошо. Лучше поменять логику, алгоритм. |
|||
8
unregistered
24.06.11
✎
16:51
|
+ к (7):
Как вариант - хранить всю эту ересь про статусы заказов и даты отгрузки не в документе Заказ, а в регистре сведений. |
|||
9
fisher
24.06.11
✎
16:53
|
(0) Никак. Народ бает, что попытка/исключение реализовано в виде неявной транзакции. Так что исключение гарантированно откатывает все вышестоящие транзакции.
|
|||
10
Сияющий Асинхраль
24.06.11
✎
16:53
|
(5) Вообще, проведение одного документа в модуле проведения второго уже не первый год, считается очень плохим тоном, поэтому и было сказано (3)
|
|||
11
Живой Ископаемый
24.06.11
✎
16:53
|
зачем заказы перепроводить?
|
|||
13
Господин ПЖ
24.06.11
✎
16:57
|
подписка спасет любителя извратов...
|
|||
14
unregistered
24.06.11
✎
17:05
|
(13) Хммм... на какое событие?
|
|||
15
3flight
24.06.11
✎
17:07
|
Спасибо за ответы! Попробую реализовать задачу иначе. (11) Заказы перепроводить чтобы проверялись условия оплаты и прочее, и статус менялся только если его можно поменять. Нужно сделать что-то вроде автоматизации статусов, чтобы их меняла программа при соответствующих событиях (в основном это оплата), а не люди.
|
|||
16
Живой Ископаемый
24.06.11
✎
17:10
|
2(15) еще раз - зачем перепроводить целый документ если нужно только поменять статусы, то есть изменить что - какой-то РС?
Вот неужели когда тебе задают вопрос "Зачем ты одел шубу" ты начинаешь рассказывать что это хорошее вложение денег, она удобная, и так далее, вместо того чтобы сказать "чтобы согреться когда на улице холодно"? |
|||
17
3flight
24.06.11
✎
17:11
|
(12) Я сисадмин в небольшой организации %) Мне платят всего 180р в час.
|
|||
18
3flight
24.06.11
✎
17:14
|
(15) Я пошёл простым путём. Склад по статусам может определить, с какими заказами работать. Поэтому я решил сделать, чтобы статусы менялись автоматически, чтобы избавить людей от ненужной работы. Я не знаю как поменять статус и потом сохранить документ, не используя метод "Записать", который проводит документ.
|
|||
19
Живой Ископаемый
24.06.11
✎
17:15
|
2(18) нет, вы пошли неправильным, неналазящим на голову здоровым людям и системе путем... Надо было просто озвучить конечную цель и вам бы подсказали...
|
|||
20
3flight
24.06.11
✎
17:37
|
19)
|
|||
21
3flight
24.06.11
✎
17:40
|
(19) А теперь подскажут? Задача - чтобы статусы заказов менялись на 'к обеспечению' или 'к отгрузке' автоматически при проведении поступления безналичных дс, в зависимости от выполнения условий оплаты.
|
|||
22
Живой Ископаемый
24.06.11
✎
17:46
|
2(21) какой регистр меняется после вашего кода в случае все-таки успешного перепроведения заказа?
|
|||
23
3flight
24.06.11
✎
18:32
|
(22) Регистр? У меня меня меняются реквизиты "статус" у заказов. потом склад смотрит заказы, через форму списка заказов, где и видят статусы.
|
|||
24
3flight
24.06.11
✎
18:33
|
(22) конфигурация на основе УТ 11.0.5.4
|
|||
25
vs84
24.06.11
✎
18:40
|
(17) А что сисадмин в 1Се делает?
Сварщики, сисадмины - все хотят вкусить запретного плода. |
|||
26
Jolly Roger
24.06.11
✎
18:50
|
(17) Я очень бедный... я год не был в бане... я старый... меня девушки не любят... Я сисадмин в небольшой организации %) Мне платят всего 180р в час...
зы: извините, не удержался... |
|||
27
3flight
24.06.11
✎
19:11
|
(26) :D а по теме что-нибудь?
(25) Я делаю "всё" :) что связано с компами |
|||
28
Jolly Roger
24.06.11
✎
19:15
|
(27) по теме тебе уже все сказали - вложенные транзакции не поддерживаются...
|
|||
29
Живой Ископаемый
24.06.11
✎
20:42
|
2(23) в коде у тебя меняется вообще дата...
а раз проводить не нужно то записывай без режима проведения: Заказ.ОбменДанными.Загрузка = Истина; Заказ.Записать(РежимЗаписиДокумента.Запись); таким образом ошибка может возникнуть только в одном исключительном случае - если этот же Заказ записывается или заблокирован кем-то другим |
|||
30
NcSteel
24.06.11
✎
20:52
|
(0) Нужен РН .
|
|||
32
Amiralnar
25.06.11
✎
06:15
|
(30) Не обязательно. Можно РС.
А лучше к документу свойство настроить, его и в отчете видно, и поменять легко.. |
|||
33
Jolly Roger
25.06.11
✎
07:33
|
(29) ну так транзакция все-равно откатится...
|
|||
34
3flight
25.06.11
✎
11:16
|
(29) Меняется Заказ.Статус, а СтрокаТовар.ДатаОтгрузки устанавливается для того чтобы не было ошибки проведения (нельзя ставить статус "К отгрузке", если не заполнены даты отгрузки - документ не проведётся). Если записывать без проведения, то наверно не будут выполняться проверки, которые выполняются при проведении? А мне они нужны. Мне нужно чтобы программа попробовала поменять статус, но не сделала этого если какие-то условия не выполняются. Единственная причина, по которой я использую проведение - именно запуск всех проверок.
(31) Я уже давно умер (28) Это я понял, значит видимо буду делать без вложенных транзакций, придется отдельную кнопку повесить в форму документа для вызова этой процедуры. (32) Свойство документа? Тут вопрос принципиального удобства использования статусов - они уже есть, они для этого и сделаны ведь, и для разных статусов уже написан код всяческих проверок, который не хотелось бы дублировать или экспортировать. Пойду почитаю про свойства документа. Однако совершенно не хочется вводить отдельную систему статусов в довесок к существующей, это как-то странно - дублировать функционал стандартной конфигурации другим способом. |
|||
35
Живой Ископаемый
25.06.11
✎
11:30
|
2(34) а вот зачем тебе чтобы они выполнялись?
чувак, это попытка усидеть на двух стульях. Либо полноценное проведение, но тогда последовательное и не внутри, с возможными ошибками и их обработкой... Либо то что ты хочешь |
|||
36
3flight
25.06.11
✎
11:50
|
(34) Пример: бухгалтер вводит поступление БДС. Какая-то часть заказа оплачивается (не 100%). Нужно, чтобы программа, незаметно для бухгалтера (которому на заказы всё равно) проверила, достаточно ли оплачено по заказу, чтобы перевести его обработку в логистику (статус "к обеспечению") или чтобы начать его отгружать ("к отгрузке") и если "да" то поменяла бы статус на соответствующий. Бухгалтер только жмёт "провести и закрыть" в своём поступлении БДС, потому что всё остальное можно сделать кодом, не заставляя бухгалтера проверять вручную условия оплаты по заказу и проставлять или не проставлять соответствующий статус. Ключевой пункт "если да" - вот зачем мне проверки, которые выполняются при проведении. Там проверяется оплата, дата отгрузки и всё остальное. Будет неправильно, если какой-нибудь недозаполненный заказ перевелся в "к отгрузке", потому что склад потом будет иметь проблемы с этой отгрузкой.
|
|||
37
vmv
25.06.11
✎
12:13
|
мы сделали справочник "Статусы" и реквизит "Статус" в документах и все, зачем это гемор с кодом.
Для юзера все должно быть наглядно, очевидно и аццке жостко. Инструментарий БП слишком сложен для многих реальных бизнес-процессов и нагружать им юзера похабно |
|||
38
ДенисЧ
25.06.11
✎
12:17
|
(36) я бы в регламенты эту проверку перенес...
|
|||
39
dimoff
25.06.11
✎
12:17
|
(29) "таким образом ошибка может возникнуть только в одном исключительном случае - если этот же Заказ записывается или заблокирован кем-то другим"
Есть метод Заблокирован(), если его проверять тогда ошибки не возникнет (34) "Это я понял, значит видимо буду делать без вложенных транзакций, придется отдельную кнопку повесить в форму документа для вызова этой процедуры." Не надо, если меняешь реквизит делай это через Записать() без всяких проведений и никаких ошибюок не возникнет. |
|||
40
Живой Ископаемый
25.06.11
✎
12:23
|
2(39) ошибок-то не возникнет - но тогда и статус не сменится... а если не сменится статус - должен ли проводиться изначально проводимый документ? Кк по мне - то нет, но автор вроде хочет именно этого.
|
|||
41
dimoff
25.06.11
✎
12:24
|
(40) Это уже вопрос логики автора, которой он может управлять по своему усмотрению
|
|||
42
3flight
25.06.11
✎
13:25
|
(38) Думал об этом, наверно будет лучше всего. Не создавал ещё ни разу собственных регламентных заданий, поэтому не знаю как это делать. Щас поковыряю, разберусь наверно =)
(40) Конечно, если заказ уже "к отгрузке" или "к обеспечению", то я его проводить заново не буду, я его вообще пропущу. А вот "согласованные" придется проводить, чтобы проверки запускать. (37) Вы имеете ввиду что можно задействовать БП, чтобы не писать код? БП для меня тема нераскрытая, поэтому я до понедельника наверно не успею эту штуку освоить. И с БП ведь придется всю фирму переучивать работе. |
|||
43
NcSteel
25.06.11
✎
14:22
|
(32) РС нельзя схлопнуть.
|
|||
44
3flight
25.06.11
✎
14:58
|
(43) Что значит "схлопнуть"?
|
|||
45
vmv
25.06.11
✎
15:03
|
(42) думаю вам и до осени БП - не освоить, лучьше свою статустную простую подсистему сделать.
Не трать время на БП, пусть разработчики типовых ваяют) |
|||
46
3flight
25.06.11
✎
15:31
|
Итого - сделал регламентное задание, которое каждые полчаса проверяет ПБДС за последние 60 минут и прогоняет по указанным в них заказам нужные проверки и, если нужно, меняет статусы и перепроводит. Всем спасибо за подсказки и пояснения! По-моему, получилось вполне оптимально.
|
|||
47
Сияющий Асинхраль
25.06.11
✎
15:36
|
(42) На самом деле это сделано реквизитом в документе совсем не случайно, так сделано потому, что очень часто достоверно сказать оплачен заказ или нет нельзя. Скажем у покупателя было несколько оплат а учет ведется по основновному договору то оплаты можно будет определить только по ФИФО или среднему, что не всегда соответствует действительности. Можно конечно заказы всегда однозначно привязывать к оплатам, но тогда, может взвыть Ваша бухгалтерия, посему я бы посоветовал не мудрствовать лукаво, а оставить все как есть, если же очень хочется сделать нечто подобное, то ввести периодический регистр сведений с измерениями: Организация, контрагент, Заказ и ресурсом Статус, но, опять таки как будет автоматом рассчитываться закрытие некоторого заказа не очень представляю
|
|||
48
vmv
25.06.11
✎
15:41
|
(47) закрываться заказ будет по последнему платежу в статусе "Оплачено", который "закроет" сумму по всему заказу
|
|||
49
3flight
25.06.11
✎
15:48
|
(47) Бухгалтерии вообще статусы не нужны. У нас бухгалтерия в УТ только разносит оплату и больше ничего не делает. Основная работа у них в БП, куда производится выгрузка. А склад всегда использует статусы - если нужно отгрузить, ставит "К отгрузке", если программа не даёт - звонят менеджеру и говорят что так и так - условия не выполнены - либо меняйте условия либо не отгружаем. Автомат я делаю для того чтобы "если нужно отгрузить" происходило в том числе автоматически. Сейчас у нас менеджер звонит на склад и говорит "отгружайте пожалуйста, клиент оплатил". Эту работу можно автоматизировать. Договора у нас никак на проверку оплаты не влияют.
|
|||
50
Сияющий Асинхраль
25.06.11
✎
15:50
|
(48) Вот именно, это автоматическое закрытие, но очень часто платежи от контрагентов приходят не по последнему заказу и даже не по первому, а по тому, который ему нужнее в данный момент, причем это происходит очень часто, такой вариант при наличии нескольких заказов практически не автоматизируется...
|
|||
51
Сияющий Асинхраль
25.06.11
✎
15:51
|
(49) Еще раз прочитай (50)
|
|||
52
vmv
25.06.11
✎
15:52
|
(49) когда вы продавец, то да - договора делать статусными не обязательно, вас беспокоит оплата контргента и наличие у вас на складе спецификации поставки ему.
А когда вы покупатель и договора долгоиграющие на месяцы, годы, то ...это уже совсем другая история) |
|||
53
vmv
25.06.11
✎
15:54
|
(50) Вам нужно рабочее место и роль "Обработка платежей", пользователь этой роли будет делать сопоставление(связь) платежей с заказами(договорами). Это сопоставление должно иметь авто/ручные/аналитические режимы
|
|||
54
Сияющий Асинхраль
25.06.11
✎
15:54
|
Или еще вариант, два заказа - ранний на большую сумму и поздний на малую - клиент закрывает оплату по второй сумме (малой), а у тебя эта проплата скинется на первый заказ не зккрывая и первый заказ и второй...
|
|||
55
vmv
25.06.11
✎
15:58
|
(54) читай (53) - без статусов и рабочего места по обработке платежей от клиен-банков такое решить только в коде НЕ реально. мы год ломали голову пока пришли к простым и логичным решениям
|
|||
56
3flight
25.06.11
✎
15:58
|
(50) Бухгалтер при вводе ПБДС подвязывает сумму и к договору и к заказу, т.к. когда клиент платит, он указывает в платёжке, какой заказ он оплачивает. У нас так, по крайней мере. Моя автоматизация проверяет свежие ПБДС. Не совсем понимаю как договор может помешать в этой схеме автоматически поменять статус заказу.
(51) Как я мог прочитать (50), если мой ответ был раньше? :D |
|||
57
Сияющий Асинхраль
25.06.11
✎
15:58
|
(53) Это не мне нужно, это ТС нужно, я и говорю, что данный процесс не сильно поддается алгоритмизации, точнее его нельзя сделать автономным без вмешательства человека, поэтому и не стоит делать регламентных заданий, должно быть нечто вроде обработки которую запскает менеджер и только менеджер решает по какому заказу прошла проплата, единственное что стоит сделать для упрощения - это дать возможность выбирать менеджеру сразу группу заказов в которых по нажатию некой кнопки "Изменить статус" менять статус групповым образом...
|
|||
58
vmv
25.06.11
✎
16:03
|
естественно без участия человека тут никакой регламент не спасет. Пример навскидку, "так все по фиг - по этому договру немедленно сделать оплату эээ на ээээ NNN, потом разберемся")
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |