Имя: Пароль:
1C
1С v8
Помогите начинающему восьмерочнику с запросом.
0 Alco0
 
14.11.11
10:22
Есть запрос, взятый из модуля документа МЗ_Списание и переделанный для того, чтобы список комиссии заполнялся не из документа, а из реквизита формы внешнего отчета из которого вызывается запрос -  таблицы значений СоставКомиссии, аналогичной штатной из документа.

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

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

Проблема в том, что МЗ_Списание.СоставКомиссии возвращает пустоту.
1 DJ Anthon
 
14.11.11
10:26
а в чем проблема-то?
2 SpellKeeper
 
14.11.11
10:27
А запрос где формируется?
3 Alco0
 
14.11.11
10:30
1. Проблема в том, что ТЗ СоставКомиссии имеет три строки, а запрос возвращает пусто.
2. Запрос сидит во внешнем отчете.
4 SpellKeeper
 
14.11.11
10:34
А таблица СоставКомиссии откуда берется? Она в отчете формируется?
Проверьте не получилось ли так, что запрос вызывается в модуле отчета, а таблица формируется на форме и при этом под них сделаны две переменные с одинаковым названием.
5 Alco0
 
14.11.11
10:42
4. таблица СоставКомиссии заполняется до вызова запроса другой процедурой или можно руками заполнить и лежит на форме отчета, в МенеджерВременныхТаблиц она попадает заполненной. Весь код обработки сидит в форме.
6 Colleg
 
14.11.11
10:46
банально, проверь, что ДатаНач < ДатаКон )
7 Alco0
 
14.11.11
10:52
6. Сам запрос нормально отрабатывает, МЗ_Списание.Материалы заполняется, а МЗ_Списание.СоставКомиссии пустой. Фокус в том, что хочется часть запроса заполнить из документов, а часть своей ТЗ и затем передать запрос в штатную процедуру печати.
8 Andy13
 
14.11.11
10:54
МЗ_Списание.СоставКомиссии - это ведь табличная часть существующего документа?
9 Alco0
 
14.11.11
10:56
8. Да. Хочется подменить данные из штатной ТЗ документа в запросе своими.
10 SpellKeeper
 
14.11.11
10:58
Так Вы ж данные по составу комиссии выбираете из документа, а надо из таблицы, которую в менеджер запихали.
11 SpellKeeper
 
14.11.11
10:59
Ее мало в менеджер вставить, надо же еще и в запросе подключить.
12 Andy13
 
14.11.11
11:01
(9) Может так?

ТЗ.(
НомерСтроки,
ДолжностьЧленаКомиссии,
ФамилияЧленаКомиссии,
ИмяЧленаКомиссии,
ОтчествоЧленаКомиссии
) Как СоставКомиссии
13 Alco0
 
14.11.11
11:08
10. Точно из документа выбирается
11. Как подключить?
12. Ругатся "Поле не найдено "ТЗ"". Похоже хочет "подключить" из 11.
14 Andy13
 
14.11.11
11:15
(13) Гм, а временная таблица то и не описана в запросе. Добавьте.
И уберите: Запрос.УстановитьПараметр("ТЗ",СоставКомиссии); это явно лишнее.
15 SpellKeeper
 
14.11.11
11:15
А там никакой выборки через точку нет?
Вложенные таблицы не понимают такой выборки.
16 Andy13
 
14.11.11
11:25
(15) Точно. не понимают, так как не являются табличными частями. Засада однако...
17 Alco0
 
14.11.11
11:38
16. Как я понимаю путь тупиковый. Легче процедурину печати, идущую за запросом подпилить.
18 SpellKeeper
 
14.11.11
11:39
Никакой засады.
Перед тем, как вставлять в запрос, надо ТЗ обработать: создать все нужные колонки, и заполнить их нужными данными.
19 Alco0
 
14.11.11
11:41
Так колонки один в один, данные присутствуют. Как к запросу прилепить не врублюсь.
20 SpellKeeper
 
14.11.11
11:41
17. Кстати, как вариант.
Будет, даже проще.
Вызвать ЗаполнитьКолонку для ТЗ результат и все.
Там же значения одинаковые?
21 Alco0
 
14.11.11
11:46
20. Имеется ввиду ЗаполнитьКолонку после Запрос.Выполнить()? А разве выборку дает править?
22 SpellKeeper
 
14.11.11
12:24
Нет, конечно.
Выгрузить в таблицу и ее править.
А потом уже из этой таблицы выбирать строки.
23 Alco0
 
14.11.11
12:29
22. Надо попробовать скормить штатной процедуре печати ТЗ вместо результата запроса . Если примет, то проблема снимется.
24 SpellKeeper
 
14.11.11
12:35
Вы посмотрите, как в штатной процедуре выборка делается. Результат запроса и ТЗ две разные вещи.
25 SpellKeeper
 
14.11.11
12:37
В крайнем случае, можно результирующую ТЗ запихить в запрос, сделать из нее выборку и уже ее скормить штатной процедуре.
26 Alco0
 
14.11.11
13:54
Тупое подсовывание ТЗ вместо запроса как и ожидалось не сработало. Буду пробовать 25.