Вход | Регистрация


1С:Предприятие ::

Метки: 

Можно ли при обходе через менеджер узнать есть ли реквизит?

Я
   temsa
 
26.12.12 - 08:26
Есть такой код:
Для Каждого Док Из Документы Цикл
        ОбработкаПрерыванияПользователя();
        ЕстьОрганизация = (Док.Реквизиты.Найти("Организация")<>Неопределено);
        Если ЕстьОрганизация Тогда
              Выборка = Док.Выбрать();    
            Пока Выборка.Следующий() Цикл
                Если Выборка.Организация <> ВыбОрг Тогда
                    Состояние(""+Выборка.Ссылка);
                    Если Выборка.ПометкаУдаления = Ложь Тогда
                        Объект = Выборка.ПолучитьОбъект();
                        Объект.УстановитьПометкуУдаления(Истина);
                    КонецЕсли;    
                КонецЕсли;    
                Прервать;// Убрать
 
            КонецЦикла;    
        КонецЕсли; 
        Прервать;// Убрать
 
    КонецЦикла;

Не работает это ЕстьОрганизация = (Док.Реквизиты.Найти("Организация")<>Неопределено);

Как это решить?
 
 
   1Сергей
 
1 - 26.12.12 - 08:27
Метаданные()
   temsa
 
2 - 26.12.12 - 08:27
Хочу удалить доки другой организации. Но заранее  не знаю в каких видах документа нет реквизит организация. Хотелось бы знать при обходе.
   temsa
 
3 - 26.12.12 - 08:28
(1) Проборвал Док.Метаданные() Нельзя.
   1Сергей
 
4 - 26.12.12 - 08:28
(3) чего нельзя?
   Ursus maritimus
 
5 - 26.12.12 - 08:30
Коллекция Документы у тебя от сырости образовалась? Может на этапе её создания проверять? Когда ты имена документов знаешь.
   Starhan
 
6 - 26.12.12 - 08:31
в типовых же есть методы проверки существования реквизитов
   Alexaha
 
7 - 26.12.12 - 08:31
Док.Метаданные.Реквизиты.Найти(ИмяРеквизитаКотороеИщешь)
   Ursus maritimus
 
8 - 26.12.12 - 08:33
А вообще код в (0) полное гуано.
   Alexaha
 
9 - 26.12.12 - 08:33
Док.Метаданные().Реквизиты.Найти(ИмяРеквизитаКотороеИщешь)

пардон
   1Сергей
 
10 - 26.12.12 - 08:34
(9) +1
Хотя, хз что у него там в "Документы"
 
 Рекламное место пустует
   Alexaha
 
11 - 26.12.12 - 08:35
(10) ну по идее таки документ ))))
   Heckfy
 
12 - 26.12.12 - 08:35
Для Каждого Док из Метаданные.Документы Цикл
А дальше запросом

        Запрос=Новый Запрос;
        Запрос.Текст=
        "ВЫБРАТЬ
        |    БлаБлаБла
        |ИЗ
        |    Документ."+Док.Имя+" КАК Документ
|Где
|БлаБлаБла"
        ;
        РезультатЗапроса=Запрос.Выполнить().Выбрать();


Или я чего то не понял......
   temsa
 
13 - 26.12.12 - 08:35
Выражение - Док    
Значение  - ДокументМенеджер.ABCКлассификацияПокупателей    Тип   - ДокументМенеджер.ABCКлассификацияПокупателей
   Alexaha
 
14 - 26.12.12 - 08:39
(13) а че ты вообще за задачу решаешь?
снимаешь пометку удаления с помеченных доков по выбранной организации?
   1Сергей
 
15 - 26.12.12 - 08:40
(13) так бы сразу и сказал. У менеджера нет метаданных. нужен объект или ссылка
   temsa
 
16 - 26.12.12 - 08:40
(14) Мне нужно в базе с несколькими организациями убрать лишние организации.
   Heckfy
 
17 - 26.12.12 - 08:41
Групповая обрабока справочников и документов не подойдет?
   Alexaha
 
18 - 26.12.12 - 08:42
(16) а с доками по этим олрганизациям что делать будешь?
   1Сергей
 
19 - 26.12.12 - 08:44
Если Не Док.ПустаяСсылка().Метаданные().Реквизиты.Найти(ИмяРеквизитаКотороеИщешь) = Неопределено Тогда
   temsa
 
20 - 26.12.12 - 08:58
(17) Там отбор по реквизиту организация нет.

(18) Удалять.
   Heckfy
 
21 - 26.12.12 - 09:01
(20) Есть.
   temsa
 
22 - 26.12.12 - 09:11
(21) У меня казахские   а там нет.
   1Сергей
 
23 - 26.12.12 - 09:14
(22) ты (19) пробовал?
   Serg_1960
 
24 - 26.12.12 - 09:33
(0) Код - в топку, автора - в поиск!   хмм... Новый год всё-таки скоро...

ТС, посмотри в сторону НайтиПоСсылкам() - организация упоминается не только в документах.
И ещё: то, что ты разыскиваешь, не всегда "оно" называться может быть  "Организация" (фиг его знает что там в казахских конфигурациях натворили...)
   temsa
 
25 - 26.12.12 - 09:34
нашел такой кусочек

Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Организация", ВыбОрг);


    Для Каждого ДокументМетаданные ИЗ Метаданные.Документы Цикл
        
        Запрос.Текст = Запрос.Текст + ?(Запрос.Текст = "", "", "
        |ОБЪЕДИНИТЬ ВСЕ
        |") + "ВЫБРАТЬ """ + ДокументМетаданные.Имя + """ КАК ИмяДокумента, Представление КАК Представление, Ссылка КАК Ссылка, Дата КАК Дата ИЗ Документ." + ДокументМетаданные.Имя;
    
        Если ВыбОрг <> Неопределено И ДокументМетаданные.Реквизиты.Найти("Организация") <> Неопределено Тогда
            Если ТипЗнч(ВыбОрг) = Тип("Массив") Тогда
                Запрос.Текст = Запрос.Текст + " И Организация В (&Организация)";
            Иначе
                Запрос.Текст = Запрос.Текст + " И Организация = &Организация";
            КонецЕсли;
        КонецЕсли;
        
    КонецЦикла;

    ТаблицаДокументов = Запрос.Выполнить().Выгрузить();
   cw014
 
26 - 26.12.12 - 09:43
Замени:
Для Каждого Док Из Документы Цикл
на:
Для Каждого Док Из Метаданные.Документы Цикл
   Мыш
 
27 - 26.12.12 - 09:48
> Выражение - Док     
> Значение  - ДокументМенеджер.ABCКлассификацияПокупателей    Тип   - ДокументМенеджер.ABCКлассификацияПокупателей

Док.ПустаяСсылка().Метаданные()
и далее по тексту )
   Aprobator
 
28 - 26.12.12 - 09:52
граждане, в связи с участившимися случаями кражи СП и типовых конфигураций, будьте предельно внимательны. Отгоняйте подозрительных личностей от своего компьютера и отключите его от интернета.
   temsa
 
29 - 26.12.12 - 10:03
Осоили код 
Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("Организация", ВыбОрг);
      Для Каждого ДокументМетаданные ИЗ Метаданные.Документы Цикл
        Запрос.Текст = Запрос.Текст + ?(Запрос.Текст = "", "", "
        |ОБЪЕДИНИТЬ ВСЕ
        |") + "ВЫБРАТЬ """ + ДокументМетаданные.Имя + """ КАК ИмяДокумента ИЗ Документ." + ДокументМетаданные.Имя+"
        |ГДЕ ";
        
        Если ВыбОрг <> Неопределено И ДокументМетаданные.Реквизиты.Найти("Организация") <> Неопределено Тогда
            Запрос.Текст = Запрос.Текст + ДокументМетаданные.Имя+".Организация <> &Организация";
        КонецЕсли;
    КонецЦикла;
    ТаблицаДокументов = Запрос.Выполнить().Выгрузить();
Но не рабочий (((
   Мыш
 
30 - 26.12.12 - 10:30
Что именно не работает? Почему запрос используется, хотя никаких данных не тянет?
   temsa
 
31 - 26.12.12 - 10:41
{Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (Выполнить)
    ТаблицаДокументов = Запрос.Выполнить().Выгрузить();
по причине:
{(3, 1)}: Синтаксическая ошибка "ОБЪЕДИНИТЬ"
<<?>>ОБЪЕДИНИТЬ ВСЕ
   Мыш
 
32 - 26.12.12 - 10:47
(31) У тебя ошибка в тексте запроса. Подозреваю, что ОБЪЕДИНИТЬ идет сразу после ГДЕ без условия.
И ещё раз спрошу, зачем запросом делаешь, если данные не выбираешь?
   temsa
 
33 - 26.12.12 - 10:52
(32) Данные я буду вибирать. посто хотябы сначала запрос заработал.
Вот еще пример накопал здесь
ЗапросТекст = "";
Для каждого ДокументМетаданные Из Метаданные.Документы Цикл
    ЗапросТекст = ЗапросТекст + Символы.ПС + "ВыБРАТЬ ССЫЛКА ИЗ Документ."+ДокументМетаданные.Имя;
КонецЦикла;

Запрос = новый Запрос(СтрЗаменить(СокрЛП(ЗапросТекст), Символы.ПС, " ОБЪЕДИНИТЬ ВСЕ "));
ЗапросВыборка = Запрос.Выполнить().Выбрать();

Пока ЗапросВыборка.Следующий() Цикл
    Сообщить(ЗапросВыборка.Ссылка)
КонецЦикла;

еще
Для Каждого ВидДока Из Метаданные.Документы Цикл
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |    &ВидДока.Ссылка
    |ИЗ
    |    Документ.&ВидДока КАК &ВидДока";
    Запрос.Текст = СтрЗаменить(Запрос.Текст,"&ВидДока",ВидДока.Имя);
    Выборка = Запрос.Выполнить().Выбрать();
КонецЦикла;
 
 
   Serg_1960
 
34 - 26.12.12 - 11:16
Автор, ты точно уверен что в твоей конфигурации нет документов, например, "ВнутреннееПеремещениеНаличныхДенежныхСредств" (где организация указана в реквизитах "ОрганизацияОтправитель", "ОрганизацияПолучатель") и ему подобных? Если не уверен - то ещё раз повторю:

Ищи по типу!
   Serg_1960
 
35 - 26.12.12 - 11:31
Я у автора в игноре? Игнорировать собеседника нехорошо. Наказание - подскажу, но через пол-часа.
   temsa
 
36 - 26.12.12 - 12:54
(35) Прошу прощения.  Я перезжал, пробки.
(34) На счет этой идеи понял. Но я думал что не смотря на то что несколько фирм сидят в базе они все равно ведут учет обособлено. Ведь нет же такого документа перемещение ТМЦ между организациями. Юридичеки они же разные и значит между ними не  должны быть перемещений
   Serg_1960
 
37 - 26.12.12 - 13:56
Документы, проведенные только по управленческому учету, но имеющие реквизит "Организация" - тоже будешь удалять "не глядя"? Например, документы перемещения товаров между складами? Удаление документов (да и не только их) - процесс творческий :)

PS: я тут написал болванку - может пригодится:

    ПоискЧто = "Справочник.Организации";
    ПоискТип = ТипЗнч(Справочники.Организации.ПустаяСсылка());
    ТекстЗапроса = "";
        
    Для Каждого Документ ИЗ Метаданные.Документы Цикл
        Для Каждого Реквизит Из Документ.Реквизиты Цикл
            Если Реквизит.Тип.СодержитТип(ПоискТип) Тогда
                ТекстЗапроса = ТекстЗапроса +
                "ОБЪЕДИНИТЬ ВСЕ
                |ВЫБРАТЬ
                | ТекОбъект.Ссылка КАК Ссылка                        
                |ИЗ
                |    Документ." + Документ.Имя + " КАК ТекОбъект
                |ГДЕ
                |    ТекОбъект." + Реквизит.Имя + " ССЫЛКА " + ПоискЧто + "
                |    И ТекОбъект." + Реквизит.Имя + " = &Ссылка
                |";
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
    ТекстЗапроса = Сред(ТекстЗапроса,16);
   temsa
 
38 - 26.12.12 - 17:35
(37) Спасибо. Буду удалять все кроме одной организации.
   temsa
 
39 - 26.12.12 - 17:36
по ходу мой вариант. как бы там ни говорили код рабочий.

    
    Для Каждого Док Из Документы Цикл
        ОбработкаПрерыванияПользователя();
        мд = Док.ПустаяСсылка().Метаданные();
        ЕстьОрганизация = (мд.Реквизиты.Найти("Организация")<>Неопределено);
        Если ЕстьОрганизация Тогда
              Выборка = Док.Выбрать();    
            Пока Выборка.Следующий() Цикл
                Если Выборка.Организация <> ВыбОрг Тогда
                    Состояние(""+Выборка.Ссылка);
                    Если Выборка.ПометкаУдаления = Ложь Тогда
                        Объект = Выборка.ПолучитьОбъект();
                        Попытка
                        Объект.УстановитьПометкуУдаления(Истина);
                    Исключение
                        сообщить(" "+Объект+"!!!");
                    КонецПопытки;    
                    КонецЕсли;    
                КонецЕсли;    
           //    Прервать; // Убрать
 
            КонецЦикла;    
        КонецЕсли; 
       //Прервать; // Убрать
 
    КонецЦикла;
   Aprobator
 
40 - 26.12.12 - 18:22
а млин, так Док это менеджер документа. Типа Документы.РеализацияТоваровИУслуг. Вот почему так тема названа то была )
   Aprobator
 
41 - 26.12.12 - 18:23
все тупо в код в (0) уперлись, вот и развели бодягу на ровном месте.



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