Имя: Пароль:
1C
1С v8
Не помечает на удаление
,
0 r2d24
 
20.01.14
12:58
В прошлый раз обращался за помощь, тогда не смог воспользоваться вашими подсказками, делаю другим способом.
В обработке есть реквизит "Организация". Я перебираю все справочники и документы, если у них есть реквизит "Организация", равен выбранному значению, то помечаю на удаление.

    //--СПРАВОЧНИКИ
Перем СписокСправочников;  
Для каждого Справочник из Метаданные.Справочники Цикл
ИмяСправочника = Справочник.Имя;
    //Если ИмяСправочника = "ДоговорыКонтрагентов" Тогда
    Спр = Справочники[ИмяСправочника].Выбрать();
    Пока Спр.Следующий() Цикл
        Попытка
            Если Спр.Организация = Организация Тогда
                 Спр.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Истина);
             КонецЕсли;
        Исключение
             //Сообщить("Попытка не удалась для справочника ");
        КонецПопытки;
    КонецЦикла;
КонецЦикла;
         //-- ДОКУМЕНТЫ
Для каждого Документ из Метаданные.Документы Цикл
    ИмяДокумента = Документ.Имя;
    Док = Документы[ИмяДокумента].Выбрать();
    Пока Док.Следующий() Цикл
        Попытка
            Если Док.Организация = Организация Тогда
                 //Док.ПолучитьОбъект().Записать(РежимЗаписиДокумента.ОтменаПроведения);
                 Док.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Истина);
                 //Док.УстановитьПометкуУдаления(Истина,Истина);
                 //Док.ПолучитьОбъект().ПометкаУдаления=Истина;
                 //Док.ПометкаУдаления=Истина;                                       
             КонецЕсли;
         Исключение     
             Сообщить("Попытка не удалась для документа " + ИмяДокумента);
             //Док.ПолучитьОбъект().ПометкаУдаления=Истина;
         КонецПопытки;
    КонецЦикла;
КонецЦикла


Не получается пометить на удаления ни один документ.
1 Господин ПЖ
 
20.01.14
12:59
а в документе/справочнике раз и нету Организации... сразу нннааааааа лопатой по спине....
2 skunk
 
20.01.14
13:00
попробуй рукаи прибить ... и посмотреть почему не прибивается
3 1dvd
 
20.01.14
13:00
где .Записать(...); ?
4 Рэйв
 
20.01.14
13:00
открой для себе НайтиПоСсылкам()
и медитируй
5 Господин ПЖ
 
20.01.14
13:00
.УстановитьПометкуУдаления()

а оно чо, будет без .Записать() работать?
6 1dvd
 
20.01.14
13:01
(5) неа
7 Borteg
 
20.01.14
13:01
(0) наверное записать еще надо и нужна проверка на есть ли такой реквизит в Справочнике?! и документе соответственно
8 hhhh
 
20.01.14
13:02
(5) по идее должно
9 r2d24
 
20.01.14
13:02
Со справочниками все работает, а с документами, не хочет
10 Рэйв
 
20.01.14
13:03
(8)Даже в СП в примере:

РасходнаяНакладная.УстановитьПометкуУдаления(Истина);
РасходнаяНакладная.Записать()
11 Borteg
 
20.01.14
13:03
(9) Записать надо потомучто
12 r2d24
 
20.01.14
13:03
(7) Зачем проверять, у меня там стоит "Попытка"
13 Господин ПЖ
 
20.01.14
13:05
(12) за такие штуки принято бить чем-то тяжелым...
14 Borteg
 
20.01.14
13:05
(12) так ты ускоришь обработку в разы, зачем если в справочнике на 10000 элементов нету реквизита организация, получать эти 10000 элементов?
15 Господин ПЖ
 
20.01.14
13:06
накой лупить по базе выборкой если в этом типе документов нет организации??
16 r2d24
 
20.01.14
13:07
(14) спасибо за совет, обязательно сделаю
17 1dvd
 
20.01.14
13:08
(16) из типовой:


// Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
//
// Параметры:
//  ИмяРеквизита - строковое имя искомого реквизита,
//  МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
//  Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт

    Возврат НЕ (МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено);

КонецФункции // ЕстьРеквизитДокумента()
18 Господин ПЖ
 
20.01.14
13:08
еще как вариант - типовая и закрытый период без полных прав или типовая и запрет удаления если проведен другой документ (ведомость з/п и ппи) и прочее
19 Borteg
 
20.01.14
13:08
(16) и записать припиши, и поидее должно работать
20 Жан Пердежон
 
20.01.14
13:10
(5) (9) (10)
Синтаксис:

УстановитьПометкуУдаления(<ПометкаУдаления>)

***

Примечание:

Применение метода влечет инициирование события ПередЗаписью, т.к. происходит сохранение измененного свойства ПометкаУдаления.
Если документ проведен, применение метода приводит к отмене проведения.
Если объект модифицирован, то выполнение метода вызывает исключение.
21 Borteg
 
20.01.14
13:10
(20) в сп в примере есть метод записать()
22 hhhh
 
20.01.14
13:12
(21) работает без Записать() многократно проверено. В том числе и здесь у ТС со справочниками работает.
23 Господин ПЖ
 
20.01.14
13:13
>В том числе и здесь у ТС со справочниками работает

какие-то у него странные справочники
24 r2d24
 
20.01.14
13:15
Так, что мне делать, синтаксис правильный?
25 r2d24
 
20.01.14
13:20
Что мне нужно добавить, что бы работало?
26 Borteg
 
20.01.14
13:24
(25) а почему в установитьпометкуудаление(истина,истина) - два параметра?
27 Borteg
 
20.01.14
13:24
(25) для документов там один параметр
28 Borteg
 
20.01.14
13:24
(25) для справочников 2, вот поэтому для документов и  не работает
29 Рэйв
 
20.01.14
13:25
(21)Скриншот дать?:-)
30 hhhh
 
20.01.14
13:25
(25) может

      Исключение    
             Сообщить("Попытка не удалась для документа " + ИмяДокумента + " " + ОписаниеОшибки());
31 Borteg
 
20.01.14
13:25
УстановитьПометкуУдаления(<ПометкаУдаления>)  - документы
УстановитьПометкуУдаления(<ПометкаУдаления>, <ВключаяПодчиненные>)  - справочники
32 Borteg
 
20.01.14
13:25
для документов валится скорей всего с ошибкой изза второго параметра
33 Borteg
 
20.01.14
13:27
(25) для документов убери вторую истину в установитьпометкаудаления, и все таки поставь лучше проверку на реквизит
34 r2d24
 
20.01.14
13:32
(31) Док.УстановитьПометкуУдаления(Истина);
Тоже не работает, у меня несколько вариантов написано, закоментированы.
А если написать:

Сообщить("Попытка не удалась для документа " + ИмяДокумента +" "+ОписаниеОшибки());
то описание ошибки:

Метод объекта не обнаружен (УстановитьПометкуУдаления)
35 1Сергей
 
20.01.14
13:36
(34) ещё раз покажи код, где получаешь объект документа и помечаешь
36 r2d24
 
20.01.14
13:42
о, работает, наверное глюк был. Вот весь код
    //--СПРАВОЧНИКИ
Перем СписокСправочников;  
Для каждого Справочник из Метаданные.Справочники Цикл
ИмяСправочника = Справочник.Имя;
    //Если ИмяСправочника = "ДоговорыКонтрагентов" Тогда
    Спр = Справочники[ИмяСправочника].Выбрать();
    Пока Спр.Следующий() Цикл
        Попытка
            Если Спр.Организация = Организация Тогда
                 Спр.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Истина);
             КонецЕсли;
        Исключение
             //Сообщить("Попытка не удалась для справочника ");
        КонецПопытки;
    КонецЦикла;
КонецЦикла;
         //-- ДОКУМЕНТЫ
Для каждого Документ из Метаданные.Документы Цикл
    ИмяДокумента = Документ.Имя;
    Док = Документы[ИмяДокумента].Выбрать();
    Пока Док.Следующий() Цикл
        Попытка
            Если Док.Организация = Организация Тогда
                 //Док.ПолучитьОбъект().Записать(РежимЗаписиДокумента.ОтменаПроведения);
                 //Док.ПолучитьОбъект().УстановитьПометкуУдаления(Истина,Истина);
                 Док.ПолучитьОбъект().УстановитьПометкуУдаления(Истина);
                 //Док.ПолучитьОбъект().ПометкаУдаления=Истина;
                 //Док.ПометкаУдаления=Истина;                                       
             КонецЕсли;
         Исключение     
             Сообщить("Попытка не удалась для документа " + ИмяДокумента +" "+ОписаниеОшибки());
             //Док.ПолучитьОбъект().ПометкаУдаления=Истина;
         КонецПопытки;
    КонецЦикла;
КонецЦикла


Спасибо всем за помощь!
37 Жан Пердежон
 
20.01.14
14:43
(21) безоговорчно веришь примерам из СП?
посмотри пример для
ОбработкаПроверкиЗаполненияНаСервере
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.