Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 7.7 и ранее

v7: Как в форме документа пометить его на удаление в 1С 7.7. ??

v7: Как в форме документа пометить его на удаление в 1С 7.7. ??
Я
   dim3740
 
19.02.20 - 12:57
Нужно типа такого:
Процедура ПриЗакрытии()
    
    Если Удал=1 Тогда
        Док.ПометитьНаУдаление();
    КонецЕсли;
     или
    Док = Документ.ПолучитьОбъект();
    Если Удал=1 Тогда
        ПометкаУдаления = Истина;
    КонецЕсли;    
    Записать(РежимЗаписиДокумента.Запись);

КонецПроцедуры
   hhhh
 
1 - 19.02.20 - 13:05
(0) и? Не работает?
   dim3740
 
2 - 19.02.20 - 13:06
(1) Ну это же 8-ый код... Таких функций в 7- ке нет.
   mishaPH
 
Модератор
3 - 19.02.20 - 13:07
никак
   ДенисЧ
 
4 - 19.02.20 - 13:08
В приЗакрытии подключить обработку ожидания на секунду. И в ней уже помечать
   Kigo_Kigo
 
5 - 19.02.20 - 13:11
в глобальние 
Прем ДокУдал Экспорт;


ОбработкаОжидания(УдалитьДок())
Если ПустоеЗначение(ДокУдал) = 0
Если ДокУдал.Блокировка() = 0
ДокУдал.Удалить(0)
ДокУдал ="";

ПриЗакрытии()
ДокУдал  = ТукщийДокумент();
   dim3740
 
6 - 19.02.20 - 13:15
У меня пустая конфа))))  Пока только один документ. Это может как-то упростить решение?
   Ёпрст
 
7 - 19.02.20 - 13:16
(0) как минимум, 4 способа есть
   dim3740
 
8 - 19.02.20 - 13:20
(7) На любой согласен))) Только бы по-подробнее, т.к. сам не программист. Глобальник  имеет только "при начале работы системы".
   Ёпрст
 
9 - 19.02.20 - 13:25
(8)
ну на вот, штатненько
http://my1c-archive.narod.ru/knowhow/skpblock.html
   dim3740
 
10 - 19.02.20 - 13:35
(9) Ок. Пишу из этого примера в Процедуру ПриЗаписи.... не ругается, уже хорошо))). на Кнопке "ОК" есть штатные #Записать.Закрыть. По ней я почему то НЕ попадаю в эту процедуру.
   dim3740
 
11 - 19.02.20 - 13:37
Не... попадаю, виноват... счас проверю еще.
   Ёпрст
 
12 - 19.02.20 - 13:38
(11) там открывается копия объекта, и при записи..пишется в документ источник.
   dim3740
 
13 - 19.02.20 - 13:39
что значит "Если ИсхДок.Выбран()"?
   Ёпрст
 
14 - 19.02.20 - 13:39
Еще один способ - прямая update таблички 1sjourn.
   Ёпрст
 
15 - 19.02.20 - 13:40
(13) встань курсором на выбран и нажми Ctrl+F1
   dim3740
 
16 - 19.02.20 - 13:47
(12) Ясно. Т.е. теперь я скопировал в свою конфу ВСЕ процедуры, а не только при Записи. Далее - пример для "как сделать непроведенным". Мне это не нужно. Меняю на "ИсхДокумент.ПометкаУдаления()". Открываю док, ставлю булево "удалить". Нажимаю ОК. Захожу в журнал. Он НЕ стал помеченным на удаление. Что я делаю не так?
   Kigo_Kigo
 
17 - 19.02.20 - 13:54
(16) Потому что ПометкаУдаления() это функция которая возвращает состояние, 1 или 0, тебе надо Удалить()
   dim3740
 
18 - 19.02.20 - 13:57
В демоКонфе реально получается поменять дату проведенного документа. Но у меня: а) док и не должен проводиться б) никакой блокировки системой и нет. Нужно просто пометить на удаление. Удаление непосредственно тоже не происходит.  

Процедура ПриЗаписи()
    Если ИсхДок.Выбран()=1 Тогда 
        
    //    ИсхДок.ПометкаУдаления(); 

        ИсхДок.Удалить();
        //Если Удал=1 Тогда

        //    ИсхДок.ПометкаУдаления();    

        //Иначе

        //    ИсхДок.СнятьПометкуУдаления(); 

        //КонецЕсли;

        КопироватьДокумент(ИсхДок,Контекст);
        ИсхДок.Записать();
        ИсхДок.Провести();
        СтатусВозврата(0);    
        Форма.Закрыть(0);
        Возврат;
    КонецЕсли;    ;
    
КонецПроцедуры
   dim3740
 
19 - 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)  ?
Это тест на профригодность, или что ?
)
   dim3740
 
23 - 19.02.20 - 14:06
(20) в смысле а) мне убрать? или б) для моего случая рассматриваемый способ не применим?
   dim3740
 
24 - 19.02.20 - 14:08
(22) Причем тут профпригодность? ))) На форумах же не только профильные челы бывают. Или я не прав? Ну я бухгалтер. И что? Почему бы мне не рещить с помощью доброжелательных форумчан простую задачу ДЛЯ СЕБЯ?
   MWWRuza
 
25 - 19.02.20 - 14:12
(19)Что значит "ИсхДок.Выбран()=1"
Это значит, что он не только создан методом "СоздатьОбъект", но и записан в базу, т.е. реально в базе существует, а не только в памяти...
   dim3740
 
26 - 19.02.20 - 14:17
(25) Если я вижу его в журнале, то он есть в базе. Я различаю случаи, когда а) форма только создана, но не записана (не нажата кнопка "записать", ок") и б) когда есть в журнале. Но, я также понимаю, что работая с формой открытого дока, нужно как то перебрать доки и остановиться / выбрать / спозиционироваться на том, с которым я работаю.
   dim3740
 
27 - 19.02.20 - 14:18
В итоге, я не проваливаюсь в код ПриЗаписи, ниже строчки "Если ИсхДок.Выбран()".... Как это сделать?
   Builder
 
28 - 19.02.20 - 14:24
(27) Видимо не задаешь ИсхДок нужное значение.
   Ёпрст
 
29 - 19.02.20 - 14:30
(23) в) прочитать про метод Удалить в СП.
   Ёпрст
 
30 - 19.02.20 - 14:30
и про параметр по-умолчанию в этом методе.
 
 Рекламное место пустует
   MWWRuza
 
31 - 19.02.20 - 14:42
(26) Ну, типа такого:

Док = СоздатьОбъект("Документ");
Если Док.НайтиДокумент(ТекущийДокумент()) = 1 Тогда
    Док.ТекущийДокумент() - и будет Ваш документ, с позиционированием на нем. Дальше, можно делать Док.Удалить(0); что-бы пометить его на удаление, но только не прямо, а после закрытия формы документа, откуда Вы вызывали эту конструкцию, вариантов, как именно это сделать куча, Вам выше давали ссылки. Это просто объяснение принципа позиционирования на документе, а не готовый код.
КонецЕсли;
   dim3740
 
32 - 19.02.20 - 14:43
(28) Вот тут происходит позиционирование в демо примере.... вылетает с фатальной ошибкой, если дела такие коменты
Процедура ПриОткрытии() 
    //Если Проведен()=1 Тогда  убрал, т.к. у меня не провоится вообще

    ОткрытьФорму("Документ."+Вид(),ТекущийДокумент());
    //    СтатусВозврата(0);

      //    Возврат;

    //КонецЕсли;        

    Если ПустоеЗначение(Форма.Параметр)=0 Тогда// поиск по некому параметру.... Что это такое для меня? 

        сообщить("ищем...");
        ИсхДок.НайтиДокумент(Форма.Параметр);
        КопироватьДокумент(Контекст,ИсхДок);
        Форма.Заголовок(Метаданные.Документ(Вид()).Представление()+" - "+СокрЛП(Строка(ИсхДок.НомерДок))+". "+?(ИсхДок.Проведен()=1,"Проведен.","Не проведен."),0);
    КонецЕсли;
КонецПроцедуры
   MWWRuza
 
33 - 19.02.20 - 14:46
А зачем из процедуры "ПриОткрытии"(он уже открвается), еще раз делать "ОткрытьФорму", этого-же документа?
   dim3740
 
34 - 19.02.20 - 14:50
(33) И по (31) я так понимаю, что указанный выше путь - "раскрутить конфу с демо-примером блокировок" коту под хвост))? Можно сделать проще, и надо просто понять как "позиционироваться" на открытом документе?
   MWWRuza
 
35 - 19.02.20 - 14:54
(32) // поиск по некому параметру.... Что это такое для меня?
Это не поиск, это некая переменная, в которую Вы можете задать любое значение в процедуре вызывающей открытие этого документа в методе "ОткрытьФорму", не интерактивно!, которое будет доступно в форме открываемого документа через "Форма.Параметр"

(34) Спозиционироваться на документе, это пол дела. А в данной конфе, как я понимаю, описано как обойти блокировку, что-бы нужные действие с этим объектом произошли сразу после того, как он уже
освободится от блокировки.
   MWWRuza
 
36 - 19.02.20 - 14:57
+(35) Если Вы открываете документ просто щелчком по нему в журнале, то в "Форма.Параметр" будет пустое значение.
   Злопчинский
 
37 - 19.02.20 - 15:00
Программист-бетонщик.
   MWWRuza
 
38 - 19.02.20 - 15:00
++(35) освободится от блокировки
В Вашем случае - читай "закроется открытая форма".
   dim3740
 
39 - 19.02.20 - 15:00
(35) Спасибо за внимание. Можно, я сызнова обрисую задачу? Адекватны ли трудозатраты, если неверна постановка... Итак: имеется всего один рукописный документ без проведения. В настоящее время, если я ошибся, то просто жду когда мне нужно сделать новый и заменяю старый. Это неудобно. Или открываю общий журнал, выписыва какие ошибочные и в журнале помечаю на удаление. в 8-ке это делают штатно. Как в 7-ке? Более того: блокировка в 7-ке усложняет только по докам, которые проводятся. ИМХО, мне изначально неверно показали путь решения.
   Злопчинский
 
40 - 19.02.20 - 15:01
есть куча вариантов, но ввиду того что не программист вы - это будет для вас и для нас как первоклашке обхяснять про интеграл.
   dim3740
 
41 - 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
если у вас есть формальный признак по которому товвар можно отнести к подмножеству "подлежит удалению" - то проще открыть универсальную обработку подбора обьектов, по доступным там условиям отобрать нужные обьекты и пометить их на удаление скопом. Если с помощью шттаного средства не удается сконструировать нужное условие - пишется маленький код, который реализует такую "фильтрацию" документов и все. обучалка по использованию такого инструмент а- есть.
   MWWRuza
 
45 - 19.02.20 - 15:06
(39) Задача на пустом месте... Сложностей нагородили, когда их там нет... ИМХО, это что в восьмерке, что в клюшках одинаково делается. В (42)Злобчинский точно описал...
   MWWRuza
 
46 - 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
"когда мне нужно сделать новый" - делайте новый. зачем что-то куда-то пихать в тот что уже существует и нес какую-то существенное смысловое наполнение. назывался заяц теперь зайца назовем медведем? читсо бухгалтерский подход - если в карточке было написано "щетка дляы уборки" и переименовав напишем "здание котельной" - то это автоматом станет основным средством...
.
нужен новый - делайте новый. старый не трогайте.
начнут мешать старые - прошлого месяца например - штатно сделаете "выбрать все документы прошлого месяца и пометить на удаление".
   dim3740
 
50 - 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 сек, открытие мгновенное
   dim3740
 
54 - 19.02.20 - 15:18
(49) Короче, не убедили. Из открытой формы при ее закрытии нужно помечать/ или удалять док.
   Ёпрст
 
55 - 19.02.20 - 15:22
(54) ты туда не смотри, ты сюда смотри (51)
   dim3740
 
56 - 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
Можно еще формексом при закрытии сгенерить внешнее асинхронное событие после закрытия формы оно по идее отработает (не уверен, но возможно).
   dim3740
 
62 - 19.02.20 - 15:43
(60) Ладно)) Круто, согласен! Обработка Ожидания - тоже нутром чувствую интересно))) Но... можете все же подправить код в (28) ...там же почти все верно? Я постараюсь быть прилежным учеником.
   Ёпрст
 
63 - 19.02.20 - 15:43
(62) см (51).. чем не устраивает ?
   dim3740
 
64 - 19.02.20 - 15:45
(63) ААА! Я скачал! Спасибо. Счас посмотрю...эх, я разява..
   dim3740
 
65 - 19.02.20 - 15:56
(63) Спасибо огромное! Это почти решение.... Из журнала отлично работает))).  А как из обработки передать параметр:??

ТЗ.ТД=Док.ТекущийДокумент();// это в тЗ обработки... проваливаюсь в форму дока и там не работает..


Процедура ОбработкаЯчейкиТаблицы(ТД);// вызывается из таблицы по двойному клику

    Флаг=0;  
    Док=СоздатьОбъект("Документ");
    Если ОткрытьФорму(ТД)=0 Тогда
        Предупреждение("Документ не найден!");
    КонецЕсли;  
КонецПроцедуры
   dim3740
 
66 - 19.02.20 - 16:00
Сам добью.... в то что-то стыдно в мои годы))) Всем спасибо. Еще приду)))
   Ёпрст
 
67 - 19.02.20 - 16:36
(65) этот код надо вообще выкинуть
просто в расшифровку ячейки задай - параметр и впиши Док
и всё
   Ёпрст
 
68 - 19.02.20 - 16:36
и оно само будет работать, без всяких ОбработкаЯчейкиТаблицы
   uno-group
 
69 - 19.02.20 - 17:20
не проще в обработке добавить поле удалить документ. открыл глянул если надо удалить закрыл и клацнул по полю удалить.
а вообще вывести в оброботку эти реквизиты на которые смотриш и вообще не заходя в документы принимать решение и удалять то что не надо
   Ёпрст
 
70 - 19.02.20 - 17:23
(69) то, что это в обработке надо.. выяснилось в (65) посту ..
)
   uno-group
 
71 - 19.02.20 - 17:25
Процедура ОбработкаЯчейкиТаблицы(ТД)// вызывается из таблицы по двойному клику


    Флаг=0;  Конт="";
    Док=СоздатьОбъект("Документ");
    Если ОткрытьФормуМодально(ТД,конт)=0 Тогда
        Предупреждение("Документ не найден!");
    Иначе
        Если конт="Удалить" тогда
           Док.НайтиДокумент(ТД)
           Док.Удалить();

        КонецЕсли;  
    КонецЕсли;  
КонецПроцедуры
А в документе просто перед закрытием если нужно удалять в Форма.Параметр="Удалить";
   Arbuz
 
72 - 19.02.20 - 17:46
1сники такие 1сники... ну надо пользаку помечать на удаление док из его же открытой формы, нет развели дискуссию про ненужность и бесполезность оного. сунули наивному метод с сеньоры, который чтобы понять надо очень неплохо понимать нутро клюшек и владеть хоть какой-то базой. ему то надо всего док открыл, кнопку нажал, форма закрылась, док помечен. кнопочку на форму, вызов асинхронки из глобальника, одна переменная там же и усё. у меня так сделано чуть для других целей (не пометка), так ещё и в несколько итераций рекурсивно с удлиняющимся интервалом, т.к. док может держать не один пользак. к сожалению я в дороге - не скину. если кратко: кнопка -> ссыль дока в гл.переменную -> вызов гл.обработки ожидания -> закрыть форму -> в обработке пометить док (проверить на то/сё, закрыть/обругать) -> очистить переменную, остановить обработку. потому как, чтобы из какой-то там обработки помечать док, вообще нет проблем, док то не заблокирован, хоть меню в расшифровку.


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.