Реквизит документов

1. Serg0FFan 25.04.14 19:40 Сейчас в теме
Добрый вечер уважаемые!
Помогите в решении следующей задачи: нужно обойти все документы конфигурации (КА 1.1.46.4) и в тех документах, где есть реквизит Проект, выставить его в определенное значение. Ума не приложу как это организовать. Смотреть в конфиге по документам в котором есть этот реквизит и потом обработкой заполнять - умом тронуться можно :)
Спасибо.
P.S. Может есть какая красивая обработка для таких целей?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Cooler 22 26.04.14 00:32 Сейчас в теме
(1) Обработка наверняка есть, и очень даже может быть, что прямо тут: http://infostart.ru/public/?rubric=1565

Только кто за вас эту кучу лопатить будет?

P.S. На всякий случай, если никто больше не откликнется:

Смотреть в конфиге по документам в котором есть этот реквизит и потом обработкой заполнять - умом тронуться можно


Можно и не трогаться умом, а в конфигураторе щелкнуть ПКМ по этому "Проекту" и выбрать "Поиск ссылок на объект".
3. Serg0FFan 26.04.14 00:50 Сейчас в теме
(2) Cooler, это все хорошо, спасибо.
Я наверное не правильно выразился. Обойти надо все документы (виды) в режиме Предприятия.
Помню в 7.7 была такая фишка. Т.е. обходим все документы через Метаданные....
И у каждого обходим реквизиты, сравниваем реквизит на тип или имя (не помню) и если "оно" то выдаём в список
либо обрабатываем. Воооот.
А как это повторить в 8ке что то "не помню" :)
5. AnryMc 849 26.04.14 01:00 Сейчас в теме
(3) Serg0FFan, Так в 8-ке тоже есть и свойство и метод - Метаданные...
7. Serg0FFan 26.04.14 01:30 Сейчас в теме
(5) AnryMc:
1) обходим документы по виду и ищем реквизит, если нашли то
2) выбираем документы этого вида и заменяем реквизит (а хоть из формы обработки)
3) ищем дальше...
8. ipoloskov 164 26.04.14 11:16 Сейчас в теме
(3) Serg0FFan, в 8 тоже есть метаданные, и по ним можно обходить. Например:

Для Каждого МетаданныеДокумент Из Метаданные Цикл
   Для Каждого Реквизит Из МетаданныеДокумент.Реквизиты Цикл
     Если Реквизит.Имя = "Проект" Тогда
         ДокВыборка = Документы[МетаданныеДокумент.Имя].Выбрать();
         Пока ДокВыборка.Следующий() Цикл
             //бла-бла-бла
         КонецЦикла;
     КонецЕсли;
   КонецЦикла
КонецЦикла;
Показать
Serg0FFan; +1 Ответить
9. Serg0FFan 26.04.14 12:04 Сейчас в теме
(8) ipoloskov, урра! Спасибо :) Сейчас попробую
10. Cooler 22 26.04.14 12:37 Сейчас в теме
+(8) Я бы кроме имени реквизита проверил еще и его тип - тот ли это "Проект"?
11. Serg0FFan 26.04.14 12:42 Сейчас в теме
(10) Cooler, ну это понятно :)
Тут еще одна засада обнаружилась, документы ПлатёжноеПоручениеВходящее(Исходящее) не содержат в явном виде реквизит Проект %)
Зато если открыть форму в конфигураторе то можно увидеть что он все же есть на форме и свойства его такие:
Имя: Проект
Данные: ЭлементыФормы.РасшифровкаПлатежа.ТекущиеДанные.Проект
и как интересно обратиться к нему? %) Т.е. думаю вот, будет ли он найден при проходе по алгоритму предложенному уважаемым ipoloskov?
12. ipoloskov 164 26.04.14 13:02 Сейчас в теме
(11) Serg0FFan, В таком случае нужно еще делать цикл по табличным частям
Для Каждого МетаданныеДокумент Из Метаданные Цикл
   Для Каждого МетаданныеТабличнаяЧасть Из МетаданныеДокумент.ТабличныеЧасти Цикл
       Для Каждого Реквизит Из МетаданныеТабличнаяЧасть.Реквизиты Цикл
           Если Реквизит.Имя = "Проект" Тогда
               ДокВыборка = Документы[МетаданныеДокумент.Имя].Выбрать();
               Пока ДокВыборка.Следующий() Цикл
                   //бла-бла-бла
               КонецЦикла;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
КонецЦикла;
Показать
Serg0FFan; +1 Ответить
13. Serg0FFan 26.04.14 18:10 Сейчас в теме
(12) ipoloskov, все сделал, получилось, только вот проблема с табличной частью, не пишет в неё, выдаёт ошибку:
{Форма.Форма.Форма(17)}: Поле объекта не обнаружено (Проект)
						Если ОбъектДокумент.Проект <> Проект Тогда

Вот сам код обработки:


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

Показать
4. AnryMc 849 26.04.14 00:59 Сейчас в теме
(1) Serg0FFan, Почти во всех типовых конфигурациях (или на диске ИТС) есть типовая обработка "Групповая обработка документов и справочников" с её помощью можно отобрать нужные и установить нужный реквизит в нужное значение...
6. Serg0FFan 26.04.14 01:19 Сейчас в теме
(4) AnryMc, отобрать да, только если я заранее знаю что такой реквизит у документа есть! А если не знаю? Может быть там таких документов до едрени фени! Вот потому бы и помог обход всех документов в конфигурации и поиск реквизита по параметрам. Если реквизит есть, то уже тогда делаем выборку докумнтов такого вида и заполняем у них у всех этот реквизит. Вот только как в коде это изобразить не очень понимаю. :)
14. jigourt 31 26.04.14 18:23 Сейчас в теме
вы в цикле находите реквизит табличной части Проект, а потом пытаетесь поместить значение в реквизит документа, которого видимо нет
15. Serg0FFan 26.04.14 18:33 Сейчас в теме
(14) jigourt, вот и пытаюсь понять как исправить, чтобы работало.
16. jigourt 31 26.04.14 18:44 Сейчас в теме
Для Каждого МетаданныеДокумент Из Метаданные.Документы Цикл
        Для Каждого МетаданныеТабличнаяЧасть Из МетаданныеДокумент.ТабличныеЧасти Цикл
            Для Каждого Реквизит Из МетаданныеТабличнаяЧасть.Реквизиты Цикл
               Если Реквизит.Имя = "Проект" Тогда
                  ДокВЫборка = Документы[МетаданныеДокумент.Имя].Выбрать();
                  Пока ДокВыборка.Следующий() ЦИкл
                    ОбъектДокумент = ДокВыборка.ПолучитьОбъект();
                    Для Каждого Строчка Из ОбъектДокумент[МетаданныеТабличнаяЧасть.Имя] Цикл
                       Строчка.Проект = Проект;
                    КонецЦикла;
                    ОбъектДокумент.Записать();
                  КонецЦикла;
               КонецЕсли;      
            КонецЦикла;
        КонецЦикла;
        Для Каждого Реквизит Из МетаданныеДокумент.Реквизиты Цикл
            Если Реквизит.Имя = "Проект" Тогда
               ДокВЫборка = Документы[МетаданныеДокумент.Имя].Выбрать();
               Пока ДокВыборка.Следующий() Цикл
                  ДокументОбъект = ДокВыборка.ПолучитьОбъект();
                  ДокументОбъект.Проект = Проект;
                  ДокументОбъект.Записать();
               КонецЦикла;
            КонецЕсли;
        КонецЦикла;
      КонецЦИкла;
Показать

примерно так, писал в форуме
Serg0FFan; +1 Ответить
17. Serg0FFan 26.04.14 18:59 Сейчас в теме
(16) jigourt, вот! теперь все замечательно! Спасибо огромное :)
Осталось подрихтовать код на предмет проверки, что тип = Справочник.Проекты :)
18. jigourt 31 26.04.14 19:02 Сейчас в теме
(17) Serg0FFan, пожалуйста. ну дальше уж сами думаю справитесь...
19. Serg0FFan 26.04.14 23:29 Сейчас в теме
Все сделал, всем спасибо :)
Еще один вопрос, вытекающий :)))
А можно теперь как то оформить код (теоретически) в виде запроса? Чтобы обработка не лопатила 20 минут все документы, а выбрала только нужные по условию и уже дальше выборку обработала. Применяя в запросе объект Метаданные...
20. jigourt 31 27.04.14 23:00 Сейчас в теме
(19) Serg0FFan, даю наводку, текст запроса имеет как не странно тип текст. как совет, постройте текст запроса конструктором для одного документа и в этом тексте имена документов замените на переменные...
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот