Имя: Пароль:
1C
1С v8
Проблема с отбором документов
0 1Слайт
 
09.06.20
13:45
Выдает ошибку
{Отчет.АктОбУничтожении.Форма.ФормаОтчета.Форма(129)}: Ошибка при вызове метода контекста (Выбрать)
                        Документ = Документы.АрхивныйДокумент.Выбрать(,,ДецНомерСтруктура);
по причине:
Недопустимое значение параметра (параметр номер '3')

ТаблицаДецНомера = Новый ТаблицаЗначений;
            ТаблицаДецНомера.Колонки.Добавить("Номер", Новый ОписаниеТипов ("Число",,,,,,), ,);
            ТаблицаДецНомера.Колонки.Добавить("ДецНомер", Новый ОписаниеТипов ("СправочникСсылка.НомераДок"), ,);
            Запрос4 = Новый Запрос;
            Запрос4.Текст ="ВЫБРАТЬ
                    | СписокНомеров.Номер КАК Номер,
                    | СписокНомеров.ДецНомер КАК ДецНомер
                    | ПОМЕСТИТЬ СписокНомеров
                    | ИЗ
                    | &ТаблицаДецНомера КАК СписокНомеров
                    |;
                    |////////////////////////////////////////////////////////////////////////////////
                    |ВЫБРАТЬ
                    | СписокНомеров.Номер КАК Номер,
                    | СписокНомеров.ДецНомер КАК ДецНомер
                    |ИЗ
                    | СписокНомеров КАК СписокНомеров";
            Запрос4.УстановитьПараметр("ТаблицаДецНомера", ТаблицаДецНомера);
            
            Для каждого Значение из Отчет.Документы Цикл
                  НоваяСтр = ТаблицаДецНомера.Добавить();
                  ЗаполнитьЗначенияСвойств(НоваяСтр,Значение);
            КонецЦикла;
              
            Если Запрос4.Выполнить().Пустой() Тогда
                Сообщить("Пусто");
            Иначе
                Выборка4 = Запрос4.Выполнить().Выбрать();  
                ДецНомерСтруктура = Новый Структура;
                ДецНомерСтруктура.Вставить("Номер", Выборка4.ДецНомер);
                 Сообщить(ДецНомерСтруктура);
                Пока Выборка4.Следующий() Цикл
                    Для Каждого Значения Из ДецНомерСтруктура Цикл
                        Документ = Документы.АрхивныйДокумент.Выбрать(,,ДецНомерСтруктура);
                        Сообщить(Документ.Наименование);
                    КонецЦикла;    
                КонецЦикла;
            КонецЕсли;
1 Ненавижу 1С
 
гуру
09.06.20
13:55
а зачем ту туда структуру суешь?
2 ДенисЧ
 
09.06.20
13:57
(1) А что предлагаешь? Просто по "Номер" отбор так не сделать...
3 1Слайт
 
09.06.20
13:58
ребят, вопрос снят, заказчик изменил задачу
спасибо)
4 Ненавижу 1С
 
гуру
09.06.20
14:00
(2) Да, согласен, но " В качестве полей для отбора могут задаваться только поля "Дата" и реквизиты документа, для которых в конфигураторе признак индексирования установлен в значение "Индексировать" или в значение "Индексировать с доп. упорядочиванием".
То есть "Номер" не подходит. Хотя какя-то недоговоренность есть в терминах: поле, атрибут, реквизит, свойство...
5 1Слайт
 
09.06.20
14:05
сморите, документ я нахожу, в нет есть 2 Табл. части Проекты и Темы
как эти значения мне вытащить?
Снова создавать таблицу значений?
Если Запрос4.Выполнить().Пустой() Тогда
                Сообщить("Пусто");
            Иначе
                Выборка4 = Запрос4.Выполнить().Выбрать();  
                Пока Выборка4.Следующий() Цикл
                        Документ = Документы.АрхивныйДокумент.НайтиПоРеквизиту("ДецНомер", Выборка4.ДецНомер);
                        Сообщить(Документ.Проекты);
                КонецЦикла;
            КонецЕсли;
6 ДенисЧ
 
09.06.20
14:06
Если Запрос4.Выполнить().Пустой() Тогда
                Сообщить("Пусто");
            Иначе
                Выборка4 = Запрос4.Выполнить().Выбрать();

А зачем два раза?
7 1Слайт
 
09.06.20
14:11
(6) что два раза?
8 Ненавижу 1С
 
гуру
09.06.20
14:12
возможно ты все усложняешь и все это вообще в одном запросе надо делать

но так тоже можно:

ТЗПроекты = Документ.Проекты.Выгрузить();
9 Ненавижу 1С
 
гуру
09.06.20
14:13
(7) 2 раза запрос выполняешь методом Выполнить()
кстати это может привести к результату, когда их результаты будут разные
10 1Слайт
 
09.06.20
14:13
(8) допускаю, возможно все и усложняю)
11 1Слайт
 
09.06.20
14:17
(9) я же для проверки пусто или нет
12 Ненавижу 1С
 
гуру
09.06.20
14:20
(11)

РезультатЗапроса = Запрос4.Выполнить();
Если РезультатЗапроса.Пустой() Тогда
                Сообщить("Пусто");
            Иначе
                Выборка4 = РезультатЗапроса.Выбрать();
13 1Слайт
 
09.06.20
14:21
ок) как тут пишут новички - я только учусь))
14 1Слайт
 
09.06.20
14:25
(8) в одном запросе не получилось(возможно не доразобралась)
основная цель отчет : пользователь выбирает несколько документов(в таблицу значений), нужно из этих документов вытащить необходимую инфу, вот например проекты и темы хранятся тоже в таблицах, вот с этими со всеми таблицами и возникли у меня сложности, просто через запрос не получается, как с обычными реквизитами(опыта маловато)
15 Ненавижу 1С
 
гуру
09.06.20
14:26
А вообще можно и не выделять отдельно случай пустого запроса - просто цикл не выполнится ни разу:

Пока Выборка4.Следующий() Цикл
16 Ненавижу 1С
 
гуру
09.06.20
14:28
(14) достаточно передать список документов как параметр в запрос
17 1Слайт
 
09.06.20
14:32
(8) кстати. выдает мне не значения, а ТаблицаЗначений
18 1Слайт
 
09.06.20
14:39
(16)
вот пробовала запросом
выдает ошибку: в запросе, формирующем временную таблицу, не могут выбираться вложенные таблицы <<?>>АрхивныйДокумент.Экземпляры.(

ВЫБРАТЬ
    АрхивныйДокумент.ДецНомер КАК ДецНомер,
    АрхивныйДокумент.Дата КАК Дата,
    АрхивныйДокумент.Наименование КАК Наименование,
    АрхивныйДокумент.КолвоПодл КАК КолвоПодл,
    АрхивныйДокумент.КолЛистов КАК КолЛистов,
    АрхивныйДокумент.Экземпляры.(
        Номер КАК Номер
    ) КАК Экземпляры,
    АрхивныйДокумент.Проекты.(
        КодПроекта КАК КодПроекта
    ) КАК Проекты,
    АрхивныйДокумент.ТемыШифры.(
        НазваниеТемыШифр КАК НазваниеТемыШифр
    ) КАК ТемыШифры
ПОМЕСТИТЬ ВТ
ИЗ
    Документ.АрхивныйДокумент КАК АрхивныйДокумент
ГДЕ
    АрхивныйДокумент.ДецНомер  = &ДецНомер
;

////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
    ВТ.ДецНомер КАК ДецНомер,
    ВТ.Дата КАК Дата,
    ВТ.Наименование КАК Наименование,
    ВТ.КолвоПодл КАК КолвоПодл,
    ВТ.КолЛистов КАК КолЛистов,
    ВТ.Экземпляры.(
        Номер КАК Номер
    ) КАК Экземпляры,
    ВТ.Проекты.(
        КодПроекта КАК КодПроекта
    ) КАК Проекты,
    ВТ.ТемыШифры.(
        НазваниеТемыШифр КАК НазваниеТемыШифр
    ) КАК ТемыШифры
ИЗ
    ВТ КАК ВТ
19 Ненавижу 1С
 
гуру
09.06.20
14:54
(17) естественно, там же табличная часть
(18) лучше начать с чего мы хотим (что дано более-менее понятно)
20 1Слайт
 
09.06.20
14:58
(14) вот тут
21 Eiffil123
 
09.06.20
17:40
(3) вообще некорректно так темы закрывать. если вопрос решился - нужно хотя бы решение привести
22 1Слайт
 
10.06.20
09:05
(21) так тема и не закрыта, изменились условия
23 Ненавижу 1С
 
гуру
10.06.20
09:09
20) нет, что с данными этими делать, просто их списком выбрать и все?
24 1Слайт
 
10.06.20
09:15
(23) да, проекты и темы мне нужно просто в строчку через запятую записать в ячейку макета
25 1Слайт
 
10.06.20
09:16
и еще есть номера экземпляров, тоже таблица, но их занесу в отчетную таблицу
26 Ненавижу 1С
 
гуру
10.06.20
09:22
ну хорошо, несколькими запросами, например, один из них:

ВЫБРАТЬ
    АрхивныйДокументПроекты.КодПроекта КАК КодПроекта
ИЗ
    Документ.АрхивныйДокумент.Проекты КАК АрхивныйДокументПроекты
ГДЕ
    АрхивныйДокументПроекты.Ссылка  В (&СписокДокументов)
27 1Слайт
 
10.06.20
10:04
(26) Спасибо огромное!!!
немного подкорректировала
поняла ошибку, я напрямую к ДецНомеру обращалась, надо было через таблицу и ссылку
теперь остальное доработаю)

ВЫБРАТЬ
    АрхивныйДокументПроекты.КодПроекта КАК КодПроекта
ИЗ
    Документ.АрхивныйДокумент.Проекты КАК АрхивныйДокументПроекты
ГДЕ
    АрхивныйДокументПроекты.Ссылка.ДецНомер  В (&СписокДокументов)
28 Ненавижу 1С
 
гуру
10.06.20
11:23
(27) будем надеяться, что данный запрос не в цикле
29 1Слайт
 
10.06.20
11:45
(28) не))))
Ошибка? Это не ошибка, это системная функция.