|
Как сделать запрос по всем документам с отбором по сериям и номенклатуре? | ☑ | ||
---|---|---|---|---|
0
gabd_marat
13.03.20
✎
09:07
|
Добрый день! Можете подсказать как сделать запрос по всем документам с отбором по сериям и номенклатуре
|
|||
1
dka80
13.03.20
✎
09:10
|
Нужно больше деталей: что значит все документы? Прием сотрудника на работу и Требование накладная? Где серии? В табличной части или в реквизитах документа? Может все-таки посмотреть какие регистры двигают документы и по регистру собрать?
|
|||
2
d4rkmesa
13.03.20
✎
09:12
|
(0) В языке запросов 1С нет понятия "все документы". Если только есть критерии отбора, но там специфическое применение.
|
|||
3
dka80
13.03.20
✎
09:14
|
(2) тем не менее, это не мешает динамически сформировать текст запроса по метаданным и получить запрос по всем документам
|
|||
4
gabd_marat
13.03.20
✎
09:32
|
Или можно как то циклом сделать запрос по метаданным где в табл части используется номенклатура и серии, потом через отладчик получить массив данных?
|
|||
5
gabd_marat
13.03.20
✎
09:32
|
(3) Есть примеры?
|
|||
6
gabd_marat
13.03.20
✎
09:36
|
(2) Список документов не известен где используется эта номенклатура с сериями. Серия и номенклатура в табличной части документа.
|
|||
7
Йохохо
13.03.20
✎
09:36
|
(4) покажи что получилось по одному документу
запрос по метаданным, данные из отладчика, кто то наступил на пятницу тринадцатое |
|||
8
ДенисЧ
13.03.20
✎
09:40
|
(6) Вообще ниезвестен? Или только тебе?
|
|||
9
welwel
13.03.20
✎
09:42
|
(5) http://bit.ly/2wScT9D
Первая ссылка на мисту |
|||
10
dka80
13.03.20
✎
09:48
|
Ищи в яндексе обход дерева метаданных
|
|||
11
gabd_marat
13.03.20
✎
13:41
|
Вроде что то получилось
Процедура КнопкаВыполнитьНажатие(Кнопка) Итерация = 0; Запрос = Новый Запрос; МВТ = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МВТ; Запрос.Текст = "ВЫБРАТЬ Таблицы.Номенклатура, |Таблицы.СерияНоменклатуры, |Таблицы.Ссылка |ПОМЕСТИТЬ ВременнаяТаблица ИЗ ( |"; Для Каждого Документ Из Метаданные.Документы Цикл //Сообщить("--------------------------- //|Документ: "+Документ.Имя); к1 = 0; к2 = 0; Для Каждого ТабличнаяЧасть Из Документ.ТабличныеЧасти Цикл //Сообщить("ТабличнаяЧасть: "+ТабличнаяЧасть.Имя); к1 = 0; к2 = 0; Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл //Сообщить("Реквизит: "+Реквизит.Имя); Если Реквизит.Имя = "СерияНоменклатуры" Тогда //Сообщить("------- Хоп"); к1 = 1; КонецЕсли; Если Реквизит.Имя = "Номенклатура" Тогда к2 = 1; КонецЕсли; КонецЦикла; Если к1 = 1 и к2 = 1 Тогда Если Итерация = 1 Тогда Запрос.Текст = Запрос.Текст + " | |ОБЪЕДИНИТЬ |"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ ТЧ.Номенклатура КАК Номенклатура, |ТЧ.Ссылка КАК Ссылка, |ТЧ.СерияНоменклатуры КАК СерияНоменклатуры |ИЗ Документ." +Документ.Имя+ "." +ТабличнаяЧасть.Имя+ " КАК ТЧ |ГДЕ ТЧ.Номенклатура ССЫЛКА Справочник.Номенклатура и ТЧ.СерияНоменклатуры ССЫЛКА Справочник.СерииНоменклатуры"; //Сообщить(Запрос.Текст); Итерация = ?(Итерация = 0,1,1); к1 = 0; к2 = 0; КонецЕсли; КонецЦикла; КонецЦикла; Запрос.Текст = Запрос.Текст + " |) КАК Таблицы"; //Сообщить(Запрос.Текст); ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); //Для Каждого Строка Из ТаблицаЗначений Цикл // Сообщить(Строка(Строка.Номенклатура) + " — " + Строка(Строка.Документ)); //КонецЦикла; //Сообщить(ТаблицаЗначений.Количество()); Запрос1 = Новый Запрос; Запрос1.Текст = " |ВЫБРАТЬ Номенклатура.Ссылка |ИЗ Справочник.Номенклатура КАК Номенклатура |ГДЕ Номенклатура.Ссылка НЕ В (&ТЗ) |УПОРЯДОЧИТЬ ПО Номенклатура.Ссылка.Наименование"; Запрос1.УстановитьПараметр("ТЗ",ТаблицаЗначений); ТаблицаЗначений1 = Запрос1.Выполнить().Выгрузить(); Для Каждого Строка Из ТаблицаЗначений Цикл Сообщить(Строка(Строка.Ссылка)); КонецЦикла; Сообщить(ТаблицаЗначений1.Количество()); КонецПроцедуры (10) (10) |
|||
12
gabd_marat
13.03.20
✎
13:43
|
Делаю точку остановки на строке ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
не могу получить элементы таблицы значений, почему? |
|||
13
ДенисЧ
13.03.20
✎
13:45
|
(12) Потому что у тебя
|ПОМЕСТИТЬ ВременнаяТаблица ИЗ ( |
|||
14
gabd_marat
13.03.20
✎
13:52
|
(13) Мне получается нужно сделать запрос к тз и добавить отбор по номенклатуре и серии?
|
|||
15
ДенисЧ
13.03.20
✎
14:00
|
(14) Если платформа новая - то в отладчике можешь посмотреть в запросе менеджер временных таблиц, там есть временные таблицы, оттуда можно посмотреть
|
|||
16
gabd_marat
13.03.20
✎
15:03
|
8.3.1534 (15)
|
|||
17
gabd_marat
13.03.20
✎
15:04
|
Где смотреть ?
|
|||
18
ДенисЧ
13.03.20
✎
15:08
|
(17) (17) На запрос в отладчике встань и поразворачивай плюсики - увидишь
|
|||
19
gabd_marat
13.03.20
✎
16:41
|
Получилось , вот
Процедура КнопкаВыполнитьНажатие(Кнопка) Итерация = 0; Запрос = Новый Запрос; МВТ = Новый МенеджерВременныхТаблиц; Запрос.МенеджерВременныхТаблиц = МВТ; Запрос.Текст = "ВЫБРАТЬ Таблицы.Номенклатура, |Таблицы.СерияНоменклатуры, |Таблицы.Ссылка |ПОМЕСТИТЬ ВременнаяТаблица ИЗ ( |"; Для Каждого Документ Из Метаданные.Документы Цикл //Сообщить("--------------------------- //|Документ: "+Документ.Имя); к1 = 0; к2 = 0; Для Каждого ТабличнаяЧасть Из Документ.ТабличныеЧасти Цикл //Сообщить("ТабличнаяЧасть: "+ТабличнаяЧасть.Имя); к1 = 0; к2 = 0; Для Каждого Реквизит Из ТабличнаяЧасть.Реквизиты Цикл //Сообщить("Реквизит: "+Реквизит.Имя); Если Реквизит.Имя = "СерияНоменклатуры" Тогда //Сообщить("------- Хоп"); к1 = 1; КонецЕсли; Если Реквизит.Имя = "Номенклатура" Тогда к2 = 1; КонецЕсли; КонецЦикла; Если к1 = 1 и к2 = 1 Тогда Если Итерация = 1 Тогда Запрос.Текст = Запрос.Текст + " | |ОБЪЕДИНИТЬ |"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |ВЫБРАТЬ ТЧ.Номенклатура КАК Номенклатура, |ТЧ.Ссылка КАК Ссылка, |ТЧ.СерияНоменклатуры КАК СерияНоменклатуры |ИЗ Документ." +Документ.Имя+ "." +ТабличнаяЧасть.Имя+ " КАК ТЧ |ГДЕ ТЧ.Номенклатура ССЫЛКА Справочник.Номенклатура и ТЧ.СерияНоменклатуры ССЫЛКА Справочник.СерииНоменклатуры"; //Сообщить(Запрос.Текст); Итерация = ?(Итерация = 0,1,1); к1 = 0; к2 = 0; КонецЕсли; КонецЦикла; КонецЦикла; Запрос.Текст = Запрос.Текст + " |) КАК Таблицы ; |ВЫБРАТЬ ВременнаяТаблица.Номенклатура, |ВременнаяТаблица.Ссылка КАК Ссылка, |ВременнаяТаблица.СерияНоменклатуры КАК СерияНоменклатуры |ИЗ ВременнаяТаблица КАК ВременнаяТаблица |ГДЕ ВременнаяТаблица.Номенклатура.Ссылка = &СсылкаНоменклатура |УПОРЯДОЧИТЬ ПО ВременнаяТаблица.Ссылка"; Запрос.УстановитьПараметр("СсылкаНоменклатура",Справочники.Номенклатура.НайтиПоКоду("Н0021225")); Запрос.УстановитьПараметр("СерияНоменклатуры",Справочники.СерииНоменклатуры.НайтиПоКоду("000030631",Истина)); //Сообщить(Запрос.Текст); ТаблицаЗначений = Запрос.Выполнить().Выгрузить(); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |