Имя: Пароль:
1C
1С v8
Удаление подчиненных документов? помогите
0 BadimB
 
21.11.11
08:40
УПП 8.2
Раздел "заказы на производство"
Есть много заказов на производство, на основании заказов созданы "отчеты производства за смену" и "требование накладная" и возможно что то еще.
Задача: есть обработка которая выгружает в 1С "заказы на производство"
и если такой заказ уже был
1. Надо удалить заказ
2. Распровести и удалить все вытекающие из него документы

Никак не могу получить список подчиненных документов

подскажите фрагмент кода поиска документов
1 BadimB
 
21.11.11
08:44
Лучшее что нашел вот это:

Процедура КнопкаВыполнитьНажатие(Кнопка)
ВыбКонтрагент=Документы.ЗаказНаПроизводство.НайтиПоНомеру("00000008129");
//МассивСсылок = КритерииОтбора.СвязанныеДокументы.Найти(ВыбКонтрагент);

МассивСсылок =ПолучитьСписокПодчиненныхДокументов(ВыбКонтрагент);
Для Каждого Ссылка Из МассивСсылок Цикл
   Сообщить(Ссылка);
КонецЦикла;
   // Вставить содержимое обработчика.
КонецПроцедуры
Функция ПолучитьСписокПодчиненныхДокументов(ДокументОснование) Экспорт
       
   Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                  |    СтруктураПодчиненности.Ссылка
                  |ИЗ
                  |    КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СтруктураПодчиненности";
   
   Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ДокументОснование);
   Возврат Запрос.Выполнить().Выгрузить();
   
КонецФункции

Но он мне выдает все задания на производство
2 Повелитель
 
21.11.11
08:50
НайтиПоСсылкам(<СписокСсылок>)
Параметры:

<СписокСсылок> (обязательный)

Тип: Массив.
Массив со списком ссылок на объекты, ссылки на которые нужно найти.
Возвращаемое значение:

Тип: ТаблицаЗначений.
Возвращает ссылки на найденные объекты в виде ТаблицаЗначений.
Первая колонка - исходная ссылка.
Вторая колонка - ссылка на объект, если найденная ссылка соответствует объектной таблице или значение, олицетворяющее запись необъектной таблицы.
Третья колонка - объект метаданных, которому соответствуют данные в которых найдена ссылка.
Описание:

Осуществляет поиск ссылок на объекты, переданные в параметре <СписокСсылок>.
3 BadimB
 
21.11.11
09:26
Что то делаю не так

Процедура КнопкаВыполнитьНажатие(Кнопка)
   
ВыбКонтрагент=Документы.ЗаказНаПроизводство.НайтиПоНомеру("00000008129");

МассивСсылок =НайтиПоСсылкам(ВыбКонтрагент);
//Ссылки.ВыбратьСтроку();
Для Каждого Ссылка Из МассивСсылок Цикл
   Сообщить ("" + СокрЛП(Ссылка[0]) + " - " + СокрЛП(Ссылка[1]));
КонецЦикла;
   
КонецПроцедуры

вываливается в ошибку
4 Повелитель
 
21.11.11
09:42
Процедура КнопкаВыполнитьНажатие(Кнопка)
   
ВыбКонтрагент=Документы.ЗаказНаПроизводство.НайтиПоНомеру("00000008129");

мМассив = Новый Массив;
мМассив.Добавить(ВыбКонтрагент);

МассивСсылок =НайтиПоСсылкам(мМассив);

Для Каждого Состав Из МассивСсылок Цикл
   Сообщить (Состав.Ссылка);
КонецЦикла;
   
КонецПроцедуры
5 BadimB
 
21.11.11
09:55
Спасибо, про массив не допер

но результат, все равно не тот
У заказа на производство "00000008129" в подчиненных есть отчет за смену
его видно если запросить "структуру подчиненности документа"

а процедура его не показывает
в колонке "данные" выдала все текущие "заказы на производство", но они не нужны
надо показать какие документы подчинены заказу, чтобы потом их удалить
6 hhhh
 
21.11.11
10:18
(5) детская ошибка. У метода НайтиПоНомеру - два параметра.
7 BadimB
 
21.11.11
10:30
Второй параметр искать в диапазоне, но это не спасает

код:

ВыбКонтрагент=Документы.ЗаказНаПроизводство.НайтиПоНомеру("00000008129","10 декабря 2011 года");

мМассив = Новый Массив;
мМассив.Добавить(ВыбКонтрагент);

МассивСсылок =НайтиПоСсылкам(мМассив);

Для Каждого Состав Из МассивСсылок Цикл
   Сообщить ("" + СокрЛП(Состав[0]) + " - " + СокрЛП(Состав[1]));

Выдает следующий результат:

...
- Заказ на производство 00000000328 от 26.10.2011 0:00:00
- Заказ на производство 00000000329 от 26.10.2011 0:00:00
- Заказ на производство 00000000330 от 26.10.2011 0:00:00
- Заказ на производство 00000000331 от 26.10.2011 0:00:00
- Заказ на производство 00000000332 от 26.10.2011 0:00:00
- Заказ на производство 00000000333 от 26.10.2011 0:00:00
- Заказ на производство 00000000334 от 26.10.2011 0:00:00
- Заказ на производство 00000000335 от 26.10.2011 0:00:00
- Заказ на производство 00000000336 от 26.10.2011 0:00:00
- Заказ на производство 00000000337 от 26.10.2011 0:00:00
- Заказ на производство 00000000338 от 26.10.2011 0:00:00
- Заказ на производство 00000000339 от 26.10.2011 0:00:00
...

мягко это немного не то
а надо что то типа

00000000040 Отчет производства за смены от 26.10.2011
8 BadimB
 
21.11.11
10:38
ВыбКонтрагент=Документы.ЗаказНаПроизводство.НайтиПоНомеру("00000008129",ТекущаяДата());

мМассив = Новый Массив;
мМассив.Добавить(ВыбКонтрагент);

МассивСсылок =НайтиПоСсылкам(мМассив);

Для Каждого Состав Из МассивСсылок Цикл
   Сообщить ("" + СокрЛП(Состав[0]) + " - " + СокрЛП(Состав[1]));
КонецЦикла;

выдал вроде то что надо:


Заказ на производство 00000008129 от 17.11.2011 12:21:11 - Отчет производства за смену 00000000039 от 17.11.2011 12:21:50
Заказ на производство 00000008129 от 17.11.2011 12:21:11 - Заказ на производство 00000008129 от 17.11.2011 12:21:11
Заказ на производство 00000008129 от 17.11.2011 12:21:11 - РегистрСведенийКлючЗаписи.ВерсииОбъектов
9 BadimB
 
21.11.11
10:43
Сейчас на основании "Отчета производства за смену" создал и провел "Требование накладную"
Повторно выполнил процедуру
Требование накладную она не показала?
10 BadimB
 
21.11.11
11:42
НайтиПоСсылкам находит только на один уровень вниз
а если дальше, в глубь, надо зацикливать?
11 BadimB
 
21.11.11
14:52
Пробую цепочку связей раскрутить дальше
У "Отчета производство за смену" точно дальше есть ссылка (сам создавал)


ВыбКонтрагент=Документы.ЗаказНаПроизводство.НайтиПоНомеру("00000008129",ТекущаяДата());

мМассив = Новый Массив;
мМассив.Добавить(ВыбКонтрагент);

МассивСсылок =НайтиПоСсылкам(мМассив);

МассивСсылок.ВыбратьСтроку();
Для Каждого Ссылка Из МассивСсылок Цикл
     Сообщить ("" + СокрЛП(Ссылка[0]) + " - " + СокрЛП(Ссылка[1])+ " - " + СокрЛП(Ссылка[2]));
 
     Если Ссылка.Метаданные = "Отчет производства за смену" тогда
               ВыбКонтрагент=Документы.ОтчетПроизводстваЗаСмену.НайтиПоНомеру(Ссылка[1],ТекущаяДата());
               мМассив2 = Новый Массив;
               мМассив2.Добавить(ВыбКонтрагент);

               МассивСсылок2 =НайтиПоСсылкам(мМассив2);
               Для Каждого Ссылка2 Из МассивСсылок2 Цикл
                     Сообщить ("" + СокрЛП(Ссылка2[0]) + " - " + СокрЛП(Ссылка2[1])+ " - " + СокрЛП(Ссылка2[2]));
               КонецЦикла;
     конецесли;
КонецЦикла;

Почему то не идет через ЕСЛИ
12 hhhh
 
21.11.11
14:59
разве в массивСсылок номера? Почему НайтиПоНомеру?
13 BadimB
 
21.11.11
15:05
точно, притупил
14 BadimB
 
21.11.11
15:10
вроде получилось

только вопрос среди связанных объектов фигурирует

РегистрСведенийКлючЗаписи.ВерсииОбъектов

Если я найду и удалю связанные:
1. Заказ на производство
2. Отчет производства за смену
3. Требование-накладная

то РегистрСведенийКлючЗаписи то же удалять надо?
Программист всегда исправляет последнюю ошибку.