Имя: Пароль:
1C
1C 7.7
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
(8)
ну на вот, штатненько
http://my1c-archive.narod.ru/knowhow/skpblock.html
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сники... ну надо пользаку помечать на удаление док из его же открытой формы, нет развели дискуссию про ненужность и бесполезность оного. сунули наивному метод с сеньоры, который чтобы понять надо очень неплохо понимать нутро клюшек и владеть хоть какой-то базой. ему то надо всего док открыл, кнопку нажал, форма закрылась, док помечен. кнопочку на форму, вызов асинхронки из глобальника, одна переменная там же и усё. у меня так сделано чуть для других целей (не пометка), так ещё и в несколько итераций рекурсивно с удлиняющимся интервалом, т.к. док может держать не один пользак. к сожалению я в дороге - не скину. если кратко: кнопка -> ссыль дока в гл.переменную -> вызов гл.обработки ожидания -> закрыть форму -> в обработке пометить док (проверить на то/сё, закрыть/обругать) -> очистить переменную, остановить обработку. потому как, чтобы из какой-то там обработки помечать док, вообще нет проблем, док то не заблокирован, хоть меню в расшифровку.
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший