![]() |
![]() |
![]() |
|
Запрос ко всем документам | ☑ | ||
---|---|---|---|---|
0
Eeelena
12.09.13
✎
11:54
|
Здравствуйте, подскажите пожалуйста, как мне перебрать табличные части всех документов и если встречается номенклатура помеченная на удаление в этой табличной части, то удалить ее ?
Вот так выбираю все документы: МассивДокументов=Метаданные.Документы; Для каждого СтрМас Из МассивДокументов Цикл ДокТип=СтрМас.Имя; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | "+ДокТип+".Ссылка |ИЗ | Документ."+ДокТип+" КАК "+ДокТип; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Сообщить(" "+ВыборкаДетальныеЗаписи.Ссылка); КонецЦикла; КонецЦикла; Как мне выбрать только те документы в которых есть номенклатура помеченная на удаление и удалить ее? |
|||
1
Maxus43
12.09.13
✎
11:56
|
>>Как мне выбрать только те документы в которых есть номенклатура помеченная на удаление и удалить ее?
кури НайтиПомеченныеНаУдаление + НайтиПоСсылкам |
|||
2
Eeelena
12.09.13
✎
11:58
|
а как выбрать табличную часть? они же по разному называются для всех документов?
|
|||
3
Maxus43
12.09.13
✎
11:59
|
Можешь просто сделать удаление помеченных номенклатур, контроль сам скажет где они есть, в т.ч. и документы какие
|
|||
4
Eeelena
12.09.13
✎
12:00
|
а как мне потом удалить номенклатуру из этих документов? их же там много? в ручную это очень долго
|
|||
5
spu79
12.09.13
✎
12:00
|
Запрос не к документам, а к табличным частям (не помню ни одного документа с номенклатурой в шапке). Есть общая процедура проверки, есть ли указанный реквизит в объекте. Дальше совсем просто
| ГДЕ ...Номенклатура.ПометкаУдаления |
|||
6
catena
12.09.13
✎
12:01
|
Вот от удаления документов дошли до удаления номенклатуры из документов. Следующая тема будет, видимо, "как удалить из движений" либо "после перепроведения документов изменились остатки"
|
|||
7
spu79
12.09.13
✎
12:01
|
(4) есть консоль запросов с функцией обработки полученного результата (у меня только под обычное приложение)
|
|||
8
Eeelena
12.09.13
✎
12:03
|
spu79, подскажите пожалуйста что за процедура проверки?
|
|||
9
sda553
12.09.13
✎
12:05
|
Несколько запросов в цикле, который формируется по метаданным табличных частей. Заодно можно отбросить все те типизированные ТЧ в которых номенклатуры в принципе быть не может.
|
|||
10
Maxus43
12.09.13
✎
12:07
|
устанешь запрос сочинять, я реально. Найди просто все помеченный на удалени, отфильтруй оттуда только номенклатуру и НайтиПоссылкам(массив номенклатур)
|
|||
11
Eeelena
12.09.13
✎
12:08
|
как сделать запрос к табличным частям всех документов?
|
|||
12
Maxus43
12.09.13
✎
12:09
|
что в лоб, что по лбу. Неверный путь выбрали изначально. Ну как хотите
|
|||
13
Serg_1960
12.09.13
✎
12:09
|
(0) Eeelena , удаление помеченных объектов - это есть во всех конфигурациях. Полный интерфейс - Операции - Удаление помеченных объектов. Чем оно тебя не устраивает?
|
|||
14
Eeelena
12.09.13
✎
12:09
|
мне нужно не просто удалит номенклатуру, а именно из документов
|
|||
15
Serg_1960
12.09.13
✎
12:10
|
(14) Там есть возможность выбрать только номенклатуру и удалить только из документов.
|
|||
16
Maxus43
12.09.13
✎
12:10
|
(15) нет там возможности удалить из документов строки с номенклатурой. Или у вас продвинутая версия?
|
|||
17
Euguln
12.09.13
✎
12:12
|
(14) удалить номенклатуру или строки с номенклатурой?
|
|||
18
Eeelena
12.09.13
✎
12:13
|
простите, строки номенклатуры из документа
|
|||
19
Euguln
12.09.13
✎
12:15
|
(18) а как насчет (6)????
|
|||
20
Eugene_life
12.09.13
✎
12:16
|
(18) А с суммой документа что будет при этом? Был документ на сумму 100 руб и 10 позиций. Вы убираете строку №7 на сумму 15 руб. Сумма документа меняется. И чем вам лучше?
|
|||
21
Eeelena
12.09.13
✎
12:17
|
дак без разницы что с суммой нужно удалить строку
|
|||
22
Serg_1960
12.09.13
✎
12:20
|
(16) Упс. Сорри, был не прав. "Погорячился"(с)
|
|||
23
spu79
12.09.13
✎
12:29
|
(8) МетаданныеОбъекта = Объект.Ссылка.Метаданные();
МетаданныеОбъекта.Реквизиты.Найти(Реквизит) <> Неопределено проверка на наличие реквизита. пример из: Общий модуль, ОбщегоНазначенияУТ. конф УТ 11.1.2.8 метод найти (раздел Работа с объектами метаданных) Найти (Find) Синтаксис: Найти(<ИмяПоля>) Параметры: <ИмяПоля> (обязательный) Тип: Строка. Имя искомого поля ввода по строке. Возвращаемое значение: Тип: Поле; Неопределено. Если не найден, возвращается Неопределено. Описание: Осуществляет поиск поле ввода по строке по его имени. Доступность: Сервер, толстый клиент, внешнее соединение. |
|||
24
Serg_1960
12.09.13
✎
12:39
|
Сорри, имхо методически неверные решения. Сейчас попробую набросать болванку алгоритма.
|
|||
25
Eeelena
12.09.13
✎
12:48
|
буду очень признательна
|
|||
26
Serg_1960
12.09.13
✎
13:17
|
Вот такая методика поиска и отбора подходит? Дальше есть смысл писать?
ТипСсылокПомеченныхНаУдаление = Тип("СправочникСсылка.Номенклатура"); МассивПомеченныхНаУдаление = Новый Массив(); Для Каждого СсылкаПомеченнаяНаУдаление Из НайтиПомеченныеНаУдаление() Цикл Если ТипЗнч(СсылкаПомеченнаяНаУдаление) = ТипСсылокПомеченныхНаУдаление Тогда МассивПомеченныхНаУдаление.Добавить(СсылкаПомеченнаяНаУдаление); КонецЕсли; КонецЦикла; Для Каждого НайденнаяСсылка Из НайтиПоСсылкам(МассивПомеченныхНаУдаление) Цикл Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(НайденнаяСсылка.Данные)) Тогда Сообщить("Документ """ + НайденнаяСсылка.Данные + """, содержит ссылку на """ + НайденнаяСсылка.Ссылка + """"); КонецЕсли; КонецЦикла; |
|||
27
Eeelena
12.09.13
✎
13:38
|
спасибо большое, вы очень помогли)
|
|||
28
Eeelena
12.09.13
✎
13:43
|
еще подскажите пожалуйста как мне удалить эту найденную номенклатуру?
|
|||
29
Serg_1960
12.09.13
✎
13:45
|
Наберись терпения, сейчас допишу (надо ведь ещё базу найти,которую не жалко:)
|
|||
30
Eeelena
12.09.13
✎
13:46
|
очень жду) только номенклатуру нужно удалить именно из документа
|
|||
31
Maxus43
12.09.13
✎
14:28
|
(30) сейчас сравни (1) и (26), это одно и тоже
|
|||
32
Serg_1960
12.09.13
✎
14:51
|
Вот, разродился гадким утёнком. Алгоритм, имхо, - не фонтан. Вы спросите "Почему?".
Потому что мне не понятна позиция автора в случае, когда в табличной части присутствуют несколько колонок с типом справочника Номенклатура. Ну, например, в таблице документа есть колонки "Материал" и "Продукция". И что в таком случае проверять будем? Непонятно :( |
|||
33
Serg_1960
12.09.13
✎
14:52
|
ТипСсылокПомеченныхНаУдаление = Тип("СправочникСсылка.Номенклатура");
МассивПомеченныхНаУдаление = Новый Массив(); Для Каждого СсылкаПомеченнаяНаУдаление Из НайтиПомеченныеНаУдаление() Цикл Если ТипЗнч(СсылкаПомеченнаяНаУдаление) = ТипСсылокПомеченныхНаУдаление Тогда МассивПомеченныхНаУдаление.Добавить(СсылкаПомеченнаяНаУдаление); КонецЕсли; КонецЦикла; Для Каждого НайденнаяСсылка Из НайтиПоСсылкам(МассивПомеченныхНаУдаление) Цикл Если Документы.ТипВсеСсылки().СодержитТип(ТипЗнч(НайденнаяСсылка.Данные)) Тогда НадоЗаписать = Ложь; Объект = НайденнаяСсылка.Данные.ПолучитьОбъект(); Для Каждого МетаданныеТабличнаяЧасть Из Объект.Метаданные().ТабличныеЧасти Цикл ТабличнаяЧастьОбъекта = Объект[МетаданныеТабличнаяЧасть.Имя]; Пока Истина Цикл СтрокаТабличнойЧасти = ТабличнаяЧастьОбъекта.Найти(НайденнаяСсылка.Ссылка); Если СтрокаТабличнойЧасти = Неопределено Тогда Прервать; Иначе Сообщить("Документ """ + НайденнаяСсылка.Данные + """, строка № " + СтрокаТабличнойЧасти.НомерСтроки + " содержит ссылку на """ + НайденнаяСсылка.Ссылка + """"); ТабличнаяЧастьОбъекта.Удалить(СтрокаТабличнойЧасти); НадоЗаписать = Истина; КонецЕсли; КонецЦикла; КонецЦикла; Если НадоЗаписать Тогда Если Объект.Проведен Тогда Объект.Записать(РежимЗаписиДокумента.Проведение); Иначе Объект.Записать(РежимЗаписиДокумента.Запись); КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; Возврат; |
|||
34
Eeelena
13.09.13
✎
07:20
|
Serg_1960, спасибо большое)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |