Имя: Пароль:
1C
1С v8
НайтиПоСсылкам - как отобрать только по документам?
0 Механик
 
14.05.23
15:21
Делаю такую процедуру, чтобы посмотреть, где естьссылки на справочник "Контрагенты", и если в ссылках нет документов - то помечаю контрагента на удаление. В МассивДокументов запихиваю все виды документов из конфигурации, потом вызываю метод "НайтиПоСсылкам(МассивКонтрагентов, ,МассивДокументов)", подставляя туда массив с метаданными-документами, чтобы ограничить найденные ссылки только документами. Однако в возвращаемой таблице значений есть строки не только с документами, но и с другими типами данных. Что я делаю не так?


&НаСервере
Процедура ПометитьНаУдалениеНаСервере()

   МассивДокументов = Новый Массив;
   Для каждого Документ Из Метаданные.Документы Цикл
	 МассивДокументов.Добавить(Документ);
   КонецЦикла;

   Контрагент = Справочники.Контрагенты.Выбрать();
   Пока Контрагент.Следующий() Цикл
	 Если Не Контрагент.ЭтоГруппа Тогда
		МассивКонтрагентов = Новый Массив;
		МассивКонтрагентов.Добавить(Контрагент.Ссылка);

		СсылкиНаДокиТЗ = НайтиПоСсылкам(МассивКонтрагентов, ,МассивДокументов);

		Если СсылкиНаДокиТЗ.Количество() = 0 Тогда
		   КонтрагентОбъект = Контрагент.ПолучитьОбъект();
		   КонтрагентОбъект.ПометкаУдаления = Истина;
		   КонтрагентОбъект.Записать();
		КонецЕсли;
	  КонецЕсли;
   КонецЦикла;

КонецПроцедуры
1 Aleksey
 
14.05.23
15:18
а посмотри как в типовой сделано. Там запрет на редактирование реквизитов, если есть документы (например нельзя менять валюту)
2 Волшебник
 
14.05.23
15:19
У Вас в МассивКонтрагентов всегда 1 контрагент. Это жесть, а не код. На рабочей базе всё будет тормозить.
3 Механик
 
14.05.23
15:46
(2) Так мне надо их по одному проверять и пометку по одному ставить. Тем более это одноразовая обработка, скорость тут некритична.
4 Волшебник
 
14.05.23
16:13
у Вас лишняя запятая в строчке

СсылкиНаДокиТЗ = НайтиПоСсылкам(МассивКонтрагентов, ,МассивДокументов);


в синтакс-помощнике вот так:

НайтиПоСсылкам(<СписокСсылок>, <ОбластьПоиска>, <ВключитьОбъекты>, <ИсключитьОбъекты>)
5 Механик
 
14.05.23
16:24
(4) Думаю, что не лишняя. Так как третьим параметром ("ВключитьОбъекты") я как раз передаю массив с метаданными (документами).
А что касается второго параметра "ОбластьПоиска" - то не совсем понял, о чем идет речь в синтакс-помощнике. Там говорится, что "область устанавливается комбинацией разделителей..".
6 Волшебник
 
14.05.23
17:43
(5) Может всё-таки попробовать?

Кстати, платформа не мобильная?