|   |   | 
| 
 | Получить список документов | ☑ | ||
|---|---|---|---|---|
| 0
    
        Тиль 22.08.11✎ 07:35 | 
        Парни такая проблемка:Хочу удалить документы из базы непосредственно по организации, написал такое:
  //выбираем документы по орагнизации Выборка=Документы.ПлатежноеПоручениеИсходящее.Выбрать() ; Пока Выборка.следующий() Цикл Если Выборка.Организация=ПолеВВода1 Тогда//находим документ по реквизиту Организация //проверяем проведен ли документ и если да помечаем на удаление, это удалит все движения по документу и удаляем его Если Выборка.Проведен тогда Док=Выборка.ПолучитьОбъект(); Док.УстановитьПометкуУдаления(Истина); Док.Удалить(); КонецЕсли; //Заканчиваем с пометкой удаления и собственно самим удалением //Сообщаем какой документ удален Сообщить ("Удален Документ " +Выборка.Ссылка); КонецЕсли; КонецЦикла; Но здесь только по одному документу. Как перебрать все документы в базе? | |||
| 1
    
        Азат 22.08.11✎ 07:36 | 
        Для Каждого Док Из Метаданные["Документы"] Цикл
  Имя = Док.Имя; Выборка = Документы[Имя].Выбрать(); бла-бла-бла КонецЦикла; ну как-то так, за точность не ручаюсь | |||
| 2
    
        Wobland 22.08.11✎ 07:43 | 
        Выборка.Организация=ПолеВВода1 - как это?     | |||
| 3
    
        Wobland 22.08.11✎ 07:44 | 
        а непроведённые удалять не будем?     | |||
| 4
    
        Amra 22.08.11✎ 07:46 | 
        (0) Бугага, как думаешь что вернет в твоем случае Выборка.Ссылка в Сообщить?))     | |||
| 5
    
        Тиль 22.08.11✎ 07:51 | 
        (2)-Реквизит на форме обработки Тип-Мправочник.Организации. Мдя, щас непроведенные доделаю...
  (4)-блин, ага, ступил признаю...в цикл воткну поряньше удаления:) | |||
| 6
    
        Wobland 22.08.11✎ 07:53 | 
        (5) ЭлементыФормы.ПолеВвода1.Значение     | |||
| 7
    
        Тиль 22.08.11✎ 07:58 | 
        вот исправил
  Для каждого Документ из Метаданные ["Документы"] Цикл Док=Документ.Имя; //выбираем документы по орагнизации Выборка=Документы[Док].Выбрать() ; Пока Выборка.следующий() Цикл Если Выборка.Организация=ПолеВВода1 Тогда//находим документ по реквизиту Организация Док=Выборка.ПолучитьОбъект(); Док.УстановитьПометкуУдаления(Истина); Док.Удалить(); //Заканчиваем с пометкой удаления и собственно самим удалением КонецЕсли; КонецЦикла; КонецЦикла; (6)-пучему так? там тип то стооит ссылка везде, у меня и так нормально выбирает | |||
| 8
    
        Тиль 22.08.11✎ 08:16 | 
        ап, нормально?     | |||
| 9
    
        Wobland 22.08.11✎ 08:19 | 
        а что скажет Выборка.Организация, если реквизита Организация у документа не будет?     | |||
| 10
    
        Wobland 22.08.11✎ 08:21 | 
        и не лучше ли обработкой пометить, а удаление помеченных стандартно сделать потом?     | |||
| 11
    
        Тиль 22.08.11✎ 08:22 | 
        (9)я так думаю, что этого не будет, ну проверку поставлю на наличие реквизита. Так то код нормальный?     | |||
| 12
    
        Wobland 22.08.11✎ 08:27 | 
        (11) да как-то юзать выборку вместо запроса некошерно. впрочем, если это разовая обработка, какая разница, нормальный код или нет. отработает себе и ладно ;)     | |||
| 13
    
        Тиль 22.08.11✎ 08:33 | 
        да, это разовая обработка     | |||
| 14
    
        Wobland 22.08.11✎ 08:36 | 
        а ещё есть групповая обработка документов, там вообще писать не надо     | |||
| 15
    
        Тиль 22.08.11✎ 08:44 | 
        да, есть но там не по организации выборка идет а в общем и ставится только пометка на удаление     | |||
| 16
    
        Wobland 22.08.11✎ 08:53 | 
        (15) да ну? отбирать по многим реквизитам можно. напрямую не удаляет, да, но, может, оно и не надо?     | |||
| 17
    
        Тиль 22.08.11✎ 08:54 | 
        надо, нам блин базу дали работать а там орагниизаций, котоорые с ней раньше работали куча, только без них объектов, помеченных на удаление больше 300 000     | |||
| 18
    
        Тиль 22.08.11✎ 10:52 | 
        а как поставить проверку на наличие этого реквизита в документе? например Документ Корректировка записей регистров этого реквизита не имеет     | |||
| 19
    
        Reset 22.08.11✎ 10:56 | 
        Имхо, базе абзац.     | |||
| 20
    
        Wobland 22.08.11✎ 10:57 | 
        цитирую ОбщегоНазначения.ЕстьРеквизитДокумента():
  Если МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено Тогда | |||
| 21
    
        Reset 22.08.11✎ 10:58 | 
        (18) Документ.Реквизиты.Найти("Организация")     | |||
| 22
    
        Aleksey 22.08.11✎ 10:58 | 
        А не проще ле взять готовую обработку. Ведь там кроме документов есть куча справочников (например договора), куча Регистр Сведений?     | |||
| 23
    
        Тиль 22.08.11✎ 11:09 | 
        Для каждого Документ из Метаданные ["Документы"] Цикл
  Док=Документ.Имя; //выбираем документы по орагнизации Выборка=Документы[Док].Выбрать() ; ДокументОбъект=Выборка.ПолучитьОбъект(); МетаданныеДокумента=ДокументОбъект.Метаданные(); Если МетаданныеДокумента.Реквизиты.Найти("Организация") <> Неопределено тогда Пока Выборка.следующий() Цикл Если Выборка.Организация=ПолеВВода1 Тогда//находим документ по реквизиту Организация Док=Выборка.ПолучитьОбъект(); Док.УстановитьПометкуУдаления(Истина); Док.Удалить(); //Заканчиваем с пометкой удаления и собственно самим удалением КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; вот что получилось | |||
| 24
    
        Wobland 22.08.11✎ 11:14 | 
        после Выборка=Документы[Док].Выбрать() надо Следующий() делать     | |||
| 25
    
        Тиль 22.08.11✎ 11:18 | 
        сделал...Значение не является значением объектного типа ПолучитьОбъект()     | |||
| 26
    
        Wobland 22.08.11✎ 11:19 | 
        (25) плохо сделал     | |||
| 27
    
        Азат 22.08.11✎ 11:19 | 
        пздц, из копеечной задачи запутали автора в трех соснах...     | |||
| 28
    
        Тиль 22.08.11✎ 11:25 | 
        (27) можешь подсказать как надо? в чем ошибка?     | |||
| 29
    
        Тиль 22.08.11✎ 11:48 | 
        Для каждого Документ из Метаданные ["Документы"] Цикл
  ИМЯДок=Документ.Имя; //выбираем документы по орагнизации Выборка=Документы[ИМЯДок].Выбрать() ; Если Документ.Реквизиты.Найти("Организация" <> Неопределено тогда Пока Выборка.следующий() Цикл Если Выборка.Организация=ПолеВВода1 Тогда//находим документ по реквизиту Организация Док=Выборка.ПолучитьОбъект(); Док.УстановитьПометкуУдаления(Истина); Док.Удалить(); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла; вот так сделал..вроде нормально..прогоняется | |||
| 30
    
        Wobland 22.08.11✎ 11:49 | 
        резервную копию сделал хоть?     | |||
| 31
    
        Азат 22.08.11✎ 11:50 | 
        Для каждого Документ из Метаданные ["Документы"] Цикл
  ИМЯДок=Документ.Имя; //выбираем документы по орагнизации Выборка=Документы[ИМЯДок].Выбрать() ; Пока Выборка.следующий() Цикл Попытка Орг = Выборка.Организация; Исключение Прервать; КонецПопытки; Если Выборка.Организация=ПолеВВода1 Тогда Док=Выборка.ПолучитьОбъект(); Док.УстановитьПометкуУдаления(Истина); Док.Удалить(); КонецЕсли; КонецЦикла; КонецЦикла; | |||
| 32
    
        Reset 22.08.11✎ 11:52 | 
        (31) Писец
  Ты бы еще вместо проверки на 0 перед делением, само деление в попытку заключал | |||
| 33
    
        Reset 22.08.11✎ 11:54 | 
        (31)
  код в (29) на порядок грамотней, чем твой | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |