Имя: Пароль:
1C
1С v8
Можно ли при обходе через менеджер узнать есть ли реквизит?
0 temsa
 
26.12.12
08:26
Есть такой код:

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

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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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

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

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