Имя: Пароль:
1C
 
Задача: Как находясь в документе отменить признак проведенности
0 Kir1C
 
05.08.04
13:27
Народ поскажите как интерактивно из документа можно отменить проведение или пометить на удаление этот документ? Можно даже например в момент проведения (ОбработкаПроведения())
1 Эмблема форума
 
05.08.04
13:34
Придется его закрывать ...
2 Manfred
 
05.08.04
13:39
НеПроводитьДокумент()
3 Kir1C
 
05.08.04
13:45
Так в том то и дело, что НеПроводитьДокумент() работает, если док еще не проведен, а у меня так:

1. Есть док он оже проведен одним челом.
2. Другой чел завтра заходит и ставит определенную галочку №1, №2, №3 и т.п., так вот если галочка например №2 проставлена, то этот документ должен быть распроведен, если №3 то помечен на удаление. (Причем по барабану, что в момент проставки галочки или в момент нажатия ОК). Как ни трюхаюсь - "Объект заблокирован" и трындец.
Че делать- то?
Заставить их ставить галочки а потом еще интерактивно правую кнопку мыши жати и выбирать "Сделать не проведенным" не реально.
Хелп плиз :-(
4 kir1C
 
05.08.04
13:57
Ну братва, че ни кто ничего путного не скажет мне?
6 Эмблема форума
 
05.08.04
14:01
Т.е. мой ответ ты считаешь непутёвым? ...
Ты чтоль хамить сюда пришёл?
7 kir1C
 
05.08.04
14:06
Понимаешь в чем дело, логика брат большое дело:
1. Первое что приходит в голову когда у человека проблема - обойти ее. Отсюда, я бы с удовольствием решил бы для себя "Придется его закрывать ... " как сказал мне ты, если бы это могло быть использовано. И вопросов бы в форум не задавал.
2. Отсюда мягко говоря не удовлетворенность твоим ответом. Так можно ответить на 99,9% всех вопросов форума. Типа, не парься... нельзя и все.

P/S: че ни кто ничего путного не скажет мне?
8 Manfred
 
05.08.04
14:06
Ничего не поделаешь - документ не удаляется из себя же %)

есть пара кривеньких вариантов...

вариант 1:
Сделать галочки реквизитами документа и использовать обработки?

вариант 2:
Если тебе нужно просто убрать проводки/движения документа - учти галочку в модуле проведения - при перепроведении просто завершись успешно, но без формирования проводок/движений.
Если нужно именно знать проведен док-т или нет - анализируй дополнительно галочку-реквизит проведения.
Если где-то ищешь неудаленные документы - анализируй не только пометку проведения, но и дополнительно галочку-реквизит удаления.

Может подробнее расскажешь?
9 Эмблема форума
 
05.08.04
14:15
(7) Хм ... Я мог бы дать ответ "Никак" ..., но он же не верный ...
А у меня принцип, я даю только верные ответы ...
10 lexa
 
05.08.04
14:20
в процедуре ПриЗакрытии() запускай обработку, в которую передавай значения своих галочек и индентификатор твоего дока и пуст эта обработка его курочит
11 Kir1C
 
05.08.04
14:21
Спасибо Manfred за совет. Попытаюсь по подробнее описать:

1. Работаю в крупном автоцентре. В автобизнесе есть такое понятие Заказ-Наряд. Это бумажка в которой ведется вся сделка с клиентом. Какой ремонт оказали, какие запчасти продали и т.д. и т.п.
2. Срок "жизни" этого Заказ-наряда не как обычного счета или Р.Н., а гораздо длинее. То есть сегодня клиенту сделали то-то, занесли в Заказ-Наряд, завтра ему поставиль запчасть - опять же занесли в Заказ-Наряд
3. Когда сделка завершена, то есть клиент хочет забрать свою авто - Заказ-Наряд ЗАКРЫВАЕТСЯ. То есть он как бы гасится, считаются итоговые суммы, с клиента снимается бабло, берется расписка о целости и сохранности машины и много еще чего. В этот момент (Когда Заказ-Наряд Закрывается) - ДОКУМЕНТ ПРОВОДИТСЯ!.
4. ОК. Теперь проблема.
5. Прошло 2 дня...
6. Приезжает клиент и говорит "Вы все волки пазорные, ваша служба сервиса отстой, отдайте деньги!!!". В этот момент Заказ-Наряд должен ОТКРЫТЬСЯ и соответственно стать не проведенным.
7. Так вот при вопле клиента, сотрудник компании в 1С находит документ (З/Н), входит в него, меняет один из реквизитов этого заказ-наряда с "ЗАКРЫТ З/Н" на "ОТКРЫТ З/Н". (Это перечисление)
8. И жмет на кнопочку ОК в документе.
9. Задача: Он нажал на кнопочку, а 1С соответственно смотрит реквизит и делает:
Если "ЗАКРЫТ З/Н", то перепроводит документ
Если "ОТКРЫТ З/Н", то Д Е Л А Е Т  Е Г О  Н Е  П Р О В Е Д Е Н Н Ы М.
Вот и вопрос как именно сделатьего не проведенным, если он уже проведен и пользователь интерактивно нажал ОК.
12 Kir1C
 
05.08.04
14:26
для    lexa:

Я так и сделал, но в момент срабатывания процедуры СделатьНеПроведенным() машина ругается:
"Объект заблокирован"
13 lexa
 
05.08.04
14:27
(11) хорошо работа сделана (плохо или хорошо не важно), оборудование использовали, материалы и т.п. и т.д, опять же рано или поздно понадобиться узнать сколько заказов было плохо выполнено (вернули бабло), опять же задним числом менять документ неправильно
имхо надо сторнироать док, а не удалять или делать не проведенным
14 Ira
 
05.08.04
14:28
в процедуре ОбработкаПроведения()
Если Реквизит = "ОТКРЫТЗ/Н" Тогда
СтатусВозврата(0);
Возврат;
КонецЕсли

Проиходит прерывание процедуры проведения, соответственно документ становится непроведенным.
15 Эмблема форума
 
05.08.04
14:29
(11) Давай поспорим скорей с тобой на тыщщу баксов, что ты не сможешь этого сделать никак без закрывания дока?
16 lexa
 
05.08.04
14:30
(12) а ты проверь тип значения контекста формы прежде чем что то делать, только не в цикле, а через ОбработкаОжидания()
17 Manfred
 
05.08.04
14:31
Тогда вариант с пустой операцией (или вообще отсутствием ее) у проведенного документа может подойти.

Если используются документоориентированные отчеты - в них учитывать реквизит "открыт/закрыт". Если только по проводкам - все будет работать без переделки :)

Если используются регистры - можно ввести дополнительное измерение/реквизит "открыт/закрыт" и отбирать по нему. Должно заметить эта система позволит также получить информацию не только об проведенных / непроведенных нарядах, а скорее о открытых / закрытых / непроведенных. Что даст дополнительно возможность учесть "возвраты" :)
18 Ira
 
05.08.04
14:32
(15) Про это я как-то забыла
19 GrayT
 
05.08.04
14:33
(11)Я бы сделал два доукмента - Заказ и выполненые работы - естественно подчиненные. Возможно и три - для материалов.
По теме вопроса - есть изврат с подменой открывающегося документа. Сейчас искать и объяснять некогда. Толи на хипо, толи тут http://www.sinor.ru/~my1c/knowhow.htm видел пример конфы. Но в свете первого я не стал бы так заморачиваться.
20 Kir1C
 
05.08.04
14:34
(14)
Ириш, так не выходит:
Если док уже проведен и в него зашли и нажали ОК, а в процедуре ОбработкаПроведения() стоит
СтатусВозврата(0);
Возврат;

тогда просто прерывается обработка и документ остается в том же состоянии, что и был - то есть проведенным, а мне надо его Распровести.
21 Manfred
 
05.08.04
14:34
Тогда вариант с пустой операцией (или вообще отсутствием ее) у проведенного документа может подойти.

Если используются документоориентированные отчеты - в них учитывать реквизит "открыт/закрыт". Если только по проводкам - все будет работать без переделки :)

Если используются регистры - можно ввести дополнительное измерение/реквизит "открыт/закрыт" и отбирать по нему. Должно заметить эта система позволит также получить информацию не только об проведенных / непроведенных нарядах, а скорее о открытых / закрытых / непроведенных. Что даст дополнительно возможность учесть "возвраты" :)
22 Manfred
 
05.08.04
14:35
(21) Сорри, повторился. Инет глючит
23 Crew
 
05.08.04
14:46
(0)
Сделай допсправочник, при закрытии документа записывай в него данные л документе и необходимые действия. Добавь в глобмод ОбработкуОжидания...
Все
24 kir1C
 
05.08.04
14:46
ИТАК РЕЗЮМЕ:

Решения именно задачи распроведения дока при условии, что запускать это распроведение должен сам док нет? Это так?
СПЕЦЫ, так что ли?
25 kir1C
 
05.08.04
14:50
(23) Для    Crew

Да, это первое, что пришло в голову, такой гемор:
Ведь ты знаешь: ОбработкаОжидания() одна из самых больших пожирателей ресурсов сети. И глюкавость ее известна. В ней все надо через Попытка.. Исключение..
Поэтому и вопрос задал, может есть проще вариантик????
26 Manfred
 
05.08.04
14:52
Именно в этой формулировке - да.
Однако различного рода ухищрений и обходов можно придумать море.
Кста, придумалось: запретить перепроведение :) Люди будут просто обязаны отменить проведение перед редактированием. Так, глядишь, и научатся "Сделать непроведенным" находить. Многие на АБИшной конфе именно так и делают :)
27 Эмблема форума
 
05.08.04
14:55
(24) Не так! См. (1) ...
(25) Мне неизвестна глюкавость ОбработкиОжидания() ..., зато известно то, что чтоб работать с обработкой ожидания мало одних рук ..., голова нужна ...
28 kir1C
 
05.08.04
15:09
Народ, есть такая процедура Блокировка(), с ней не как нельзя ли помудрить, что бы все таки решить проблему?
29 Crew
 
05.08.04
15:10
ОчиститьДвижения
Удалить движения документа.

Синтаксис:

ОчиститьДвижения(<ВидыДвижений>)

Англоязычный синоним:

ClearActions

Параметры:

<ВидыДвижений>
Необязательный параметр. Строковое выра­жение, в котором через «;» перечислены ви­ды движений. В качастве видов движений можно задавать следующие строковые зна­чения:

·       "Регистр.ХХХХХХ" — движение конкретного регистра, где ХХХХХХ — конкретный вид регистра;

·       "Операция" — бухгалтерская опера­ция;

·       "Справочник" — все изменения пе­риодических реквизитов справочни­ков;

·       "ЖурналРасчетов" — все измененияв журналах расчетов. Если данный параметр не задан, то произво­дится полная очистка всех движений.


Описание:

Метод ОчиститьДвижения удаляет существующие движения документа.

Если метод не вызывается при проведении документа, то существующие движения документа не стираются вообще.

Если метод не вызывается при распроведении документа, то существующие движения после распроведения стираются.

Использование данного метода позволяет:

·       допроводить документ, т. е. доделывать движения в добавок к уже суще­ствующим;

·       делать движения, анализируя ранее сделанные и уже существующие;

·       выполнять распроведение документа, анализируя существующие движе­ния;

·       не очищать существующие движения при перепроведении, если это не нужно.

Замечание. Данный метод доступен только при отключенном в конфигурации флаге «Автоматическое удаление движений».

Замечание. Данный метод доступен только в контексте Модуле формы доку­мента (см. «Виды программных модулей»). Действие данного метода от­носится только к текущему документу, который доступен в локальном контексте Модуля формы документа.
30 kir1C
 
05.08.04
15:11
(27) для Эмблемы:

Скорее всего Эмблема жутко молода, раз позволяет себе подобные замечания.
31 Gary
 
05.08.04
15:12
а в чем проблема повесить на форме журнала кнопку "Провести/Распровести" и при необходимости, на 1 сек выйти из дока и нажать ее для запуска маленькой процедурки в ГМ ? Просто и без умных разглагольствований ...
32 Эмблема форума
 
05.08.04
15:16
(28) Абасцацца! ...
Почему Вы мне не верите? ...
У меня большой опыт программирования на 77 ...
Кроме того, именно эту задачу я когда-то, как и Вы, пытался решить ...
(29) Не выйдет! :))
(30) Что мне помешает, будь я глубоким стариком, обозвать Вас идиотом, например? ...
33 kir1C
 
05.08.04
15:30
Для  Gary

Проблема встала именно потому, что административное воздействие на сотрудников не приводит к хорошему результату. Всем сказано "записал документ, проверь его статус (проведен/непроведен) и при необходимости нажми правую кнопку мыши и сделай "Сделать не проведеным". Это делают не всегда, и с кнопкой в журнале будет то же самое. Нужен четкий механизм.
34 kir1C
 
05.08.04
15:39
Для  Crew:

Ты не мог бы чуть пояснить смысл этой процедуры применительно к моему случаю:
Мне не надо не удалять операцию ни очищать движения ни регистры.

Мне надо тупо поменять статус дока с проведенного на непроведенный. Я бы сделал это в 2 счета, только сложность в том, что решение о том распроводить ли этот конкретный док или нет получается на основании того, какое значение одного из реквизитов именно данного документа. И соответственно при сохраненнии и (или) проведении конкретного дока он становится заблокирован для стантарных операций СделатьНеПроведенным() и СнятьПометкуУдаления(), Удалить(0).
35 Ira
 
05.08.04
15:40
(20) Если документ стоит на бухгалтерии, то каждый раз при нажатии на волшебную кнопочку "Ок" операция очищается (если стоит автоматическое удаление движений) и проводки формируются заново. Соответственно если мы прервем процедуру, то операция просто не запишется, соответственно будет пустой и док будет не проведенным.
Вопрос по теме: а  на чем твой документ работает?
36 Crew
 
05.08.04
15:41
(32)
Что не выйдет?
37 Gary
 
05.08.04
15:42
(33) ну ... все запущено если так, то я бы сделал в ОбработкуОжидания() пробежку по документам текущего дня на предмет анализа поля какого и распроводил бы, да и при старте системы, и по завершению работы :-)
38 Ira
 
05.08.04
15:43
Короче, надо что - чтобы галка не стояла или чтобы документ не имел никаких движений в базе? Как-то непонятно.
39 kir1C
 
05.08.04
15:47
(35) для Ira
Ты права, действительно операция в приведенном тобой примере кода не запишется. Но у меня торговля - это раз, а во вторых даже в Бухгалтерии при таком раскладе - операция не запишется, но документ как был проведенным, так и останется, а мне надо, что бы он стал не проведенным...
40 Эмблема форума
 
05.08.04
15:57
(36) Сделать непроведённым, конечно ...
41 MaxxT
 
05.08.04
16:01
Значит, находясь в документе - никак.
Понятие проведенный и наличие отсутствие операции(движений по регистрам) не совпадают.
Соответственно, если надо делать непроведенным, то на все мождифицированные заказ наряды тупо запоминать ссылки (например в справочнике, файле, где нибудь еще...), и распроводить через обработку ожидания.
42 Crew
 
05.08.04
16:26
(kir1C)

не решил еще?
тогда лови
в ЖД:
Процедура ПриОткрытии()
   Форма.ОбработкаВыбораСтроки(1);
КонецПроцедуры

Процедура ПриВыбореСтроки()
   ОткрытьФорму(ТекущийДокумент);
       / сам знаешь что делать/
КонецПроцедуры
43 Crew
 
05.08.04
16:41
Кстати на решение натолкнуло:
Текстовая колонка в форме журнала документа

База знаний рулит....
44 Эмблема форума
 
05.08.04
16:49
(42) Ну и чё? Типа ты дал ответ на вопрос чтоль? ... :))
45 Crew
 
05.08.04
16:57
(44)
Не понял? Что за ламерский сарказм? Чем (43) тебя не устраивает???
46 Эмблема форума
 
05.08.04
17:10
(45) Тем, что если это и является ответом на вопрос, то уж точно не на этот ...
47 Crew
 
05.08.04
17:25
(46)
Один флуд... Распиши, что ты хотел сказать. Сначала попытайся на листике, а потом в форум.
48 Эмблема форума
 
05.08.04
17:30
(47) Извини, я тут новенький ..., за что тебе звезду дали?
49 lexa
 
05.08.04
17:33
(47) кака разница как ты откроешь форму докумена?
если открывать обработку, диалог которой будет один в один как у документа, тогда с документом можно будет глумиться как угодно
50 Crew
 
05.08.04
17:44
(48)
Насчет новенький сомневаюсь. Звезду может заслужил, а может и нет. Я ее не просил. Так ты на листике расписал или нет?

(49)
Большая разница. После закрытия документа можно будет сделать его непроведеным.
51 lexa
 
05.08.04
17:47
(50) так об этом и речь, из формы документа нельзя сделать его непроведенным,
а уж как ты эту форму открываешь по барабану
52 Эмблема форума
 
05.08.04
17:47
(50) Даже и не знаю, чего мне писать то ...
Тебе ведь доказать то надо, что ты не лопухнулся ...
Давай, доказывай ..., если не лень ...
53 Crew
 
05.08.04
17:49
(51)
А из формы журнала можно?
54 Эмблема форума
 
05.08.04
17:50
(53) Можно ..., но это будет уже другой вопрос ...
55 Crew
 
05.08.04
17:51
(52)
Чего доказывать? Объясни может я не понимаю?
56 Эмблема форума
 
05.08.04
17:52
(55) Гы ... Так ты почти ничего не понимаешь ..., это ж скока мне объяснять то? ... :))
57 lexa
 
05.08.04
17:53
(55) ты еще раз (0) прочитай
58 Crew
 
05.08.04
17:55
(56)
Я ж тебя просил на листике написать. Напиши потом отскань и отправь мне на мыло. Распечатаю и приклею на стене буду каждый день просвещаться, утром и вечером. Впитывать мудность так сказать...

P.S. не стоит думать, что я опечатался..
59 Эмблема форума
 
05.08.04
17:58
(58) Э-эх ... Ты б лучше чё-нить хорошее постарался впитать ...
60 gg
 
05.08.04
20:40
Только что обсуждали
http://www.kuban.ru/forum_new/forum9/files/194464.html
А вообще то заказ наряд я делал через два документа. Открытие заказ-наряда и сам заказ наряд. Просто когда его второй раз проводишь, первые движения все равно нужны. Сделать в 7.7 чтоб один документ сделал движения на разные даты нельзя.
61 SnarkHunter
 
05.08.04
20:47
Мыши плакали, давились, но продолжали...
62 Crew
 
05.08.04
20:56
(61)
а я чё, я молчу.
Я вообще уже домой ушел...

Физкульт-привет... ЭФ-РА (символично звучит ;)
63 427
 
05.08.04
21:01
садиться на кактус?
64 Crew
 
05.08.04
21:06
(63)
Не я домой пошел интересную книжку читать потому как жена с ребенком в крыму, а на работу не стоит :(
65 SnarkHunter
 
05.08.04
21:39
(63)Ахха... Неоднократно... :-)
66 Press
 
05.08.04
22:46
Модуль формы документа:
Процедура ПриЗакрытии()
   Если Распровести=1 Тогда
       ОткрытьФорму("Отчет",ТекущийДокумент(),"c:\Распровести.ert");
   КонецЕсли;    
   глОткрытьЖурнал(Контекст, Новый);    
КонецПроцедуры // ПриЗакрытии()
//*******************************************
Распровести.ert:

Процедура Сформировать()
   Док = СоздатьОбъект("Документ");
   Док.НайтиДокумент(Форма.Параметр);
   Док.СделатьНеПроведенным();
   Форма.ОбработкаОжидания("Сформировать",0);    
КонецПроцедуры
//_____________________________________________________________________________
Процедура ПриОткрытии()
   Форма.ОбработкаОжидания("Сформировать",1);
   Форма.Закрыть();
КонецПроцедуры //ПриОткрытии
67 wolk
 
06.08.04
01:32
Я для себя подобную проблему давно решил. Во всех доках в ПриОткрытии() пишу:

Форма.ТолькоПросмотр(1 - Проведен());
Форма.кнпЗаписать.Доступность(Проведен());
Форма.кнпПровести.Доступность(Проведен());

Если юзверь хочет что-то изменить в <i>уже проведенном доке</i>, ему надо сначала снять его с проведения. Одновременно этим убивается второй заяц: ситуация когда юзверь что-то смотрит в проведенном доке, нечаянно что-то меняет, в этот момент его отвлекают, через пару минут он машинально нажимает на "Провести", а ещё через пару недель говорит, что "программа неправильно работает". При таких строках в ПриОткрытии() данная ситуация исключена, т.к. юзверю надо осознанно сделать док непроведённым и т.д. и т.п.
68 wolk
 
06.08.04
01:34
Сорри, параметры наоборот :-)
69 Fеникс
 
06.08.04
08:55
(0), (11) и т.д.
И зачем тут какой-то реквизит "ЗАКРЫТ/НЕЗАКРЫТ"? И зачем перепроводить документ?
Разве то, что документ проведён/не проведен не является признаком, что он "закрыт"/"не закрыт"?
Всё это делается элементарно:
1. Если документ "Закрыт" - он проводится, если его нужно "открыть" - делается непроведенным (интерактивно).
2. Проведенные документы запрещается редактировать (они "Закрыты").
3. Если надо исправить - документ делается непроведенным (становится "Открыт"), исправляется и снова проводится (опять становится "Закрыт").
Вот такой задуман порядок. И основан он на том, что если есть свершившийся факт
заказа/наряда/покупки/продажи/и т.д - документ проведён, если же факта нет - документ не проведен, если факт отменяется (клиент отказался) - документ просто делается не проведенным обычным способом.
Можно изобретать "более другие" порядки, извращаться как угодно, даже написать своё приложение, похожее на 1С, но которое будет позволять делать всё - даже штаны через голову надевать. Вопрос только в том, что будет дешевле.
70 SnarkHunter
 
06.08.04
09:19
Третья здравая мысль в этой ветке... По существу дела - первая...
71 Старина Z
 
06.08.04
09:24
(69,70) Браво. Хотел вчера написать то же, что и в (69), но передумал, поскольку автор ветки по-моему твердо решил стоять на своем.
А еще правильнее методологически (ИМХО) - сделать документ "Претензия клиента" и сторнировать движения наряда.
72 Мулька
 
06.08.04
09:29
(69) желательно, имхо, не просто делать не проведенным, а перезаписывало что б - а то фиг его знает - кто отменил => лучше признак в доке делать - его пусть меняют, а от него и проводить/не проводить док