|
v7: Как в форме документа пометить его на удаление в 1С 7.7. ?? | ☑ | ||
---|---|---|---|---|
0
dim3740
19.02.20
✎
12:57
|
Нужно типа такого:
Процедура ПриЗакрытии() Если Удал=1 Тогда Док.ПометитьНаУдаление(); КонецЕсли; или Док = Документ.ПолучитьОбъект(); Если Удал=1 Тогда ПометкаУдаления = Истина; КонецЕсли; Записать(РежимЗаписиДокумента.Запись); КонецПроцедуры |
|||
1
hhhh
19.02.20
✎
13:05
|
(0) и? Не работает?
|
|||
2
dim3740
19.02.20
✎
13:06
|
(1) Ну это же 8-ый код... Таких функций в 7- ке нет.
|
|||
3
mishaPH
модератор
19.02.20
✎
13:07
|
никак
|
|||
4
ДенисЧ
19.02.20
✎
13:08
|
В приЗакрытии подключить обработку ожидания на секунду. И в ней уже помечать
|
|||
5
Kigo_Kigo
19.02.20
✎
13:11
|
в глобальние
Прем ДокУдал Экспорт; ОбработкаОжидания(УдалитьДок()) Если ПустоеЗначение(ДокУдал) = 0 Если ДокУдал.Блокировка() = 0 ДокУдал.Удалить(0) ДокУдал =""; ПриЗакрытии() ДокУдал = ТукщийДокумент(); |
|||
6
dim3740
19.02.20
✎
13:15
|
У меня пустая конфа)))) Пока только один документ. Это может как-то упростить решение?
|
|||
7
Ёпрст
19.02.20
✎
13:16
|
(0) как минимум, 4 способа есть
|
|||
8
dim3740
19.02.20
✎
13:20
|
(7) На любой согласен))) Только бы по-подробнее, т.к. сам не программист. Глобальник имеет только "при начале работы системы".
|
|||
9
Ёпрст
19.02.20
✎
13:25
|
||||
10
dim3740
19.02.20
✎
13:35
|
(9) Ок. Пишу из этого примера в Процедуру ПриЗаписи.... не ругается, уже хорошо))). на Кнопке "ОК" есть штатные #Записать.Закрыть. По ней я почему то НЕ попадаю в эту процедуру.
|
|||
11
dim3740
19.02.20
✎
13:37
|
Не... попадаю, виноват... счас проверю еще.
|
|||
12
Ёпрст
19.02.20
✎
13:38
|
(11) там открывается копия объекта, и при записи..пишется в документ источник.
|
|||
13
dim3740
19.02.20
✎
13:39
|
что значит "Если ИсхДок.Выбран()"?
|
|||
14
Ёпрст
19.02.20
✎
13:39
|
Еще один способ - прямая update таблички 1sjourn.
|
|||
15
Ёпрст
19.02.20
✎
13:40
|
(13) встань курсором на выбран и нажми Ctrl+F1
|
|||
16
dim3740
19.02.20
✎
13:47
|
(12) Ясно. Т.е. теперь я скопировал в свою конфу ВСЕ процедуры, а не только при Записи. Далее - пример для "как сделать непроведенным". Мне это не нужно. Меняю на "ИсхДокумент.ПометкаУдаления()". Открываю док, ставлю булево "удалить". Нажимаю ОК. Захожу в журнал. Он НЕ стал помеченным на удаление. Что я делаю не так?
|
|||
17
Kigo_Kigo
19.02.20
✎
13:54
|
(16) Потому что ПометкаУдаления() это функция которая возвращает состояние, 1 или 0, тебе надо Удалить()
|
|||
18
dim3740
19.02.20
✎
13:57
|
В демоКонфе реально получается поменять дату проведенного документа. Но у меня: а) док и не должен проводиться б) никакой блокировки системой и нет. Нужно просто пометить на удаление. Удаление непосредственно тоже не происходит.
Процедура ПриЗаписи() Если ИсхДок.Выбран()=1 Тогда // ИсхДок.ПометкаУдаления(); ИсхДок.Удалить(); //Если Удал=1 Тогда // ИсхДок.ПометкаУдаления(); //Иначе // ИсхДок.СнятьПометкуУдаления(); //КонецЕсли; КопироватьДокумент(ИсхДок,Контекст); ИсхДок.Записать(); ИсхДок.Провести(); СтатусВозврата(0); Форма.Закрыть(0); Возврат; КонецЕсли; ; КонецПроцедуры |
|||
19
dim3740
19.02.20
✎
14:01
|
Что значит "ИсхДок.Выбран()=1"... ?? Я в журнале документов. Ставлю курсор, открываю форму, закрываю. Ничего не происходит. Это "выбран документ"?
|
|||
20
Ёпрст
19.02.20
✎
14:04
|
(18) После ИсхДок.Удалить(); всё что иже не имеет смысла.
|
|||
21
Ёпрст
19.02.20
✎
14:04
|
ниже
|
|||
22
Ёпрст
19.02.20
✎
14:05
|
В какой школе дают такие задания как в (0) ?
Это тест на профригодность, или что ? ) |
|||
23
dim3740
19.02.20
✎
14:06
|
(20) в смысле а) мне убрать? или б) для моего случая рассматриваемый способ не применим?
|
|||
24
dim3740
19.02.20
✎
14:08
|
(22) Причем тут профпригодность? ))) На форумах же не только профильные челы бывают. Или я не прав? Ну я бухгалтер. И что? Почему бы мне не рещить с помощью доброжелательных форумчан простую задачу ДЛЯ СЕБЯ?
|
|||
25
MWWRuza
гуру
19.02.20
✎
14:12
|
(19)Что значит "ИсхДок.Выбран()=1"
Это значит, что он не только создан методом "СоздатьОбъект", но и записан в базу, т.е. реально в базе существует, а не только в памяти... |
|||
26
dim3740
19.02.20
✎
14:17
|
(25) Если я вижу его в журнале, то он есть в базе. Я различаю случаи, когда а) форма только создана, но не записана (не нажата кнопка "записать", ок") и б) когда есть в журнале. Но, я также понимаю, что работая с формой открытого дока, нужно как то перебрать доки и остановиться / выбрать / спозиционироваться на том, с которым я работаю.
|
|||
27
dim3740
19.02.20
✎
14:18
|
В итоге, я не проваливаюсь в код ПриЗаписи, ниже строчки "Если ИсхДок.Выбран()".... Как это сделать?
|
|||
28
Builder
19.02.20
✎
14:24
|
(27) Видимо не задаешь ИсхДок нужное значение.
|
|||
29
Ёпрст
19.02.20
✎
14:30
|
(23) в) прочитать про метод Удалить в СП.
|
|||
30
Ёпрст
19.02.20
✎
14:30
|
и про параметр по-умолчанию в этом методе.
|
|||
31
MWWRuza
гуру
19.02.20
✎
14:42
|
(26) Ну, типа такого:
Док = СоздатьОбъект("Документ"); Если Док.НайтиДокумент(ТекущийДокумент()) = 1 Тогда Док.ТекущийДокумент() - и будет Ваш документ, с позиционированием на нем. Дальше, можно делать Док.Удалить(0); что-бы пометить его на удаление, но только не прямо, а после закрытия формы документа, откуда Вы вызывали эту конструкцию, вариантов, как именно это сделать куча, Вам выше давали ссылки. Это просто объяснение принципа позиционирования на документе, а не готовый код. КонецЕсли; |
|||
32
dim3740
19.02.20
✎
14:43
|
(28) Вот тут происходит позиционирование в демо примере.... вылетает с фатальной ошибкой, если дела такие коменты
Процедура ПриОткрытии() //Если Проведен()=1 Тогда убрал, т.к. у меня не провоится вообще ОткрытьФорму("Документ."+Вид(),ТекущийДокумент()); // СтатусВозврата(0); // Возврат; //КонецЕсли; Если ПустоеЗначение(Форма.Параметр)=0 Тогда // поиск по некому параметру.... Что это такое для меня? сообщить("ищем..."); ИсхДок.НайтиДокумент(Форма.Параметр); КопироватьДокумент(Контекст,ИсхДок); Форма.Заголовок(Метаданные.Документ(Вид()).Представление()+" - "+СокрЛП(Строка(ИсхДок.НомерДок))+". "+?(ИсхДок.Проведен()=1,"Проведен.","Не проведен."),0); КонецЕсли; КонецПроцедуры |
|||
33
MWWRuza
гуру
19.02.20
✎
14:46
|
А зачем из процедуры "ПриОткрытии"(он уже открвается), еще раз делать "ОткрытьФорму", этого-же документа?
|
|||
34
dim3740
19.02.20
✎
14:50
|
(33) И по (31) я так понимаю, что указанный выше путь - "раскрутить конфу с демо-примером блокировок" коту под хвост))? Можно сделать проще, и надо просто понять как "позиционироваться" на открытом документе?
|
|||
35
MWWRuza
гуру
19.02.20
✎
14:54
|
(32) // поиск по некому параметру.... Что это такое для меня?
Это не поиск, это некая переменная, в которую Вы можете задать любое значение в процедуре вызывающей открытие этого документа в методе "ОткрытьФорму", не интерактивно!, которое будет доступно в форме открываемого документа через "Форма.Параметр" (34) Спозиционироваться на документе, это пол дела. А в данной конфе, как я понимаю, описано как обойти блокировку, что-бы нужные действие с этим объектом произошли сразу после того, как он уже освободится от блокировки. |
|||
36
MWWRuza
гуру
19.02.20
✎
14:57
|
+(35) Если Вы открываете документ просто щелчком по нему в журнале, то в "Форма.Параметр" будет пустое значение.
|
|||
37
Злопчинский
19.02.20
✎
15:00
|
Программист-бетонщик.
|
|||
38
MWWRuza
гуру
19.02.20
✎
15:00
|
++(35) освободится от блокировки
В Вашем случае - читай "закроется открытая форма". |
|||
39
dim3740
19.02.20
✎
15:00
|
(35) Спасибо за внимание. Можно, я сызнова обрисую задачу? Адекватны ли трудозатраты, если неверна постановка... Итак: имеется всего один рукописный документ без проведения. В настоящее время, если я ошибся, то просто жду когда мне нужно сделать новый и заменяю старый. Это неудобно. Или открываю общий журнал, выписыва какие ошибочные и в журнале помечаю на удаление. в 8-ке это делают штатно. Как в 7-ке? Более того: блокировка в 7-ке усложняет только по докам, которые проводятся. ИМХО, мне изначально неверно показали путь решения.
|
|||
40
Злопчинский
19.02.20
✎
15:01
|
есть куча вариантов, но ввиду того что не программист вы - это будет для вас и для нас как первоклашке обхяснять про интеграл.
|
|||
41
dim3740
19.02.20
✎
15:02
|
(40) Приходите к нам на бухфорум, получайте адекватный ответ.
|
|||
42
Злопчинский
19.02.20
✎
15:02
|
не мучайтесь. откройте форму списка. зашли в карточку - ага, убедились что надо "удалить" документ. закройте карточку - вс тоите на списке на нужном документе. нажмите "удалить".
всё. зачем городить извращения? что не устраивает впростом интерактивном удалении? |
|||
43
Злопчинский
19.02.20
✎
15:04
|
(41) про что? про то каким образом должны упоминаться товары в чеке на онлайн кассе при частично оплате? сколько бухов - столько мнений.
но это не суть. |
|||
44
Злопчинский
19.02.20
✎
15:06
|
если у вас есть формальный признак по которому товвар можно отнести к подмножеству "подлежит удалению" - то проще открыть универсальную обработку подбора обьектов, по доступным там условиям отобрать нужные обьекты и пометить их на удаление скопом. Если с помощью шттаного средства не удается сконструировать нужное условие - пишется маленький код, который реализует такую "фильтрацию" документов и все. обучалка по использованию такого инструмент а- есть.
|
|||
45
MWWRuza
гуру
19.02.20
✎
15:06
|
(39) Задача на пустом месте... Сложностей нагородили, когда их там нет... ИМХО, это что в восьмерке, что в клюшках одинаково делается. В (42)Злобчинский точно описал...
|
|||
46
MWWRuza
гуру
19.02.20
✎
15:08
|
(44)признак по которому товвар можно отнести к подмножеству "подлежит удалению"
А ему разве товар надо удалить? Я так понял из постановки задачи, что документ... |
|||
47
Злопчинский
19.02.20
✎
15:09
|
(39) "когда мне нужно сделать новый и заменяю старый. Это неудобно. Или открываю общий журнал, выписыва какие ошибочные и в журнале помечаю на удаление"
- какой-то поток сознания. |
|||
48
Злопчинский
19.02.20
✎
15:09
|
(46) сорри. пусть будет документ.
|
|||
49
Злопчинский
19.02.20
✎
15:12
|
"когда мне нужно сделать новый" - делайте новый. зачем что-то куда-то пихать в тот что уже существует и нес какую-то существенное смысловое наполнение. назывался заяц теперь зайца назовем медведем? читсо бухгалтерский подход - если в карточке было написано "щетка дляы уборки" и переименовав напишем "здание котельной" - то это автоматом станет основным средством...
. нужен новый - делайте новый. старый не трогайте. начнут мешать старые - прошлого месяца например - штатно сделаете "выбрать все документы прошлого месяца и пометить на удаление". |
|||
50
dim3740
19.02.20
✎
15:12
|
(44) Почти... есть обработки, фильтрующие документы. Из них я могу проваливаться в док, и открывать форму. По содержимому реквизитов я принимаю решение о удалении. Что дальше? Переходить в журнал, где я уже спозиционировался. Так предлагаете.
|
|||
51
Ёпрст
19.02.20
✎
15:14
|
||||
52
Ёпрст
19.02.20
✎
15:14
|
И..бегом в школу, изучать методы объектов
|
|||
53
Ёпрст
19.02.20
✎
15:15
|
И блин.. насколько скоростные клюшки..ээх, сохранение конфы - 1 сек, открытие мгновенное
|
|||
54
dim3740
19.02.20
✎
15:18
|
(49) Короче, не убедили. Из открытой формы при ее закрытии нужно помечать/ или удалять док.
|
|||
55
Ёпрст
19.02.20
✎
15:22
|
(54) ты туда не смотри, ты сюда смотри (51)
|
|||
56
dim3740
19.02.20
✎
15:24
|
(55) да ладно))) вы уже меня посылали изучать ненужные мне "блокировки"....))) Внимательнее читать надо вопросы.
|
|||
57
Ёпрст
19.02.20
✎
15:27
|
(56) ты (51) посмотрел, или умничать будешь ? Это обход системной блокировки, при которой из открытой формы объекта нельзя его
а)удалить б)изменить некоторые реквизиты, если он проведен г)... |
|||
58
Злопчинский
19.02.20
✎
15:29
|
(53) тепло.. лампово.. ;-)
корпаюсь с унф как юзер-консультант... чувства странные... как и конфа... |
|||
59
Злопчинский
19.02.20
✎
15:30
|
(54) зачем? все пояснения не убедили что это нужно
|
|||
60
Ёпрст
19.02.20
✎
15:30
|
Ну и чтоб у тя вопросов не возникало в будущем
обойти системную блокировку можно 1) копированием данных объекта в новый объект (метод с сиьоры) , см (9) 2) через закрытие формы объекта и обработку ожидания 3) через открытие /закрытие формы обработки 4) пряма правка таблички, через update 1sjourn set ismark = 1 5) еще методы .. все методы, окромя 1 или 4 будет мелькать окошком закрытия/открытия формы. |
|||
61
Злопчинский
19.02.20
✎
15:33
|
Можно еще формексом при закрытии сгенерить внешнее асинхронное событие после закрытия формы оно по идее отработает (не уверен, но возможно).
|
|||
62
dim3740
19.02.20
✎
15:43
|
(60) Ладно)) Круто, согласен! Обработка Ожидания - тоже нутром чувствую интересно))) Но... можете все же подправить код в (28) ...там же почти все верно? Я постараюсь быть прилежным учеником.
|
|||
63
Ёпрст
19.02.20
✎
15:43
|
(62) см (51).. чем не устраивает ?
|
|||
64
dim3740
19.02.20
✎
15:45
|
(63) ААА! Я скачал! Спасибо. Счас посмотрю...эх, я разява..
|
|||
65
dim3740
19.02.20
✎
15:56
|
(63) Спасибо огромное! Это почти решение.... Из журнала отлично работает))). А как из обработки передать параметр:??
ТЗ.ТД=Док.ТекущийДокумент(); // это в тЗ обработки... проваливаюсь в форму дока и там не работает.. Процедура ОбработкаЯчейкиТаблицы(ТД); // вызывается из таблицы по двойному клику Флаг=0; Док=СоздатьОбъект("Документ"); Если ОткрытьФорму(ТД)=0 Тогда Предупреждение("Документ не найден!"); КонецЕсли; КонецПроцедуры |
|||
66
dim3740
19.02.20
✎
16:00
|
Сам добью.... в то что-то стыдно в мои годы))) Всем спасибо. Еще приду)))
|
|||
67
Ёпрст
19.02.20
✎
16:36
|
(65) этот код надо вообще выкинуть
просто в расшифровку ячейки задай - параметр и впиши Док и всё |
|||
68
Ёпрст
19.02.20
✎
16:36
|
и оно само будет работать, без всяких ОбработкаЯчейкиТаблицы
|
|||
69
uno-group
19.02.20
✎
17:20
|
не проще в обработке добавить поле удалить документ. открыл глянул если надо удалить закрыл и клацнул по полю удалить.
а вообще вывести в оброботку эти реквизиты на которые смотриш и вообще не заходя в документы принимать решение и удалять то что не надо |
|||
70
Ёпрст
19.02.20
✎
17:23
|
(69) то, что это в обработке надо.. выяснилось в (65) посту ..
) |
|||
71
uno-group
19.02.20
✎
17:25
|
Процедура ОбработкаЯчейкиТаблицы(ТД);// вызывается из таблицы по двойному клику
Флаг=0; Конт=""; Док=СоздатьОбъект("Документ"); Если ОткрытьФормуМодально(ТД,конт)=0 Тогда Предупреждение("Документ не найден!"); Иначе Если конт="Удалить" тогда Док.НайтиДокумент(ТД) Док.Удалить(); КонецЕсли; КонецЕсли; КонецПроцедуры А в документе просто перед закрытием если нужно удалять в Форма.Параметр="Удалить"; |
|||
72
Arbuz
19.02.20
✎
17:46
|
1сники такие 1сники... ну надо пользаку помечать на удаление док из его же открытой формы, нет развели дискуссию про ненужность и бесполезность оного. сунули наивному метод с сеньоры, который чтобы понять надо очень неплохо понимать нутро клюшек и владеть хоть какой-то базой. ему то надо всего док открыл, кнопку нажал, форма закрылась, док помечен. кнопочку на форму, вызов асинхронки из глобальника, одна переменная там же и усё. у меня так сделано чуть для других целей (не пометка), так ещё и в несколько итераций рекурсивно с удлиняющимся интервалом, т.к. док может держать не один пользак. к сожалению я в дороге - не скину. если кратко: кнопка -> ссыль дока в гл.переменную -> вызов гл.обработки ожидания -> закрыть форму -> в обработке пометить док (проверить на то/сё, закрыть/обругать) -> очистить переменную, остановить обработку. потому как, чтобы из какой-то там обработки помечать док, вообще нет проблем, док то не заблокирован, хоть меню в расшифровку.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |