Имя: Пароль:
1C
1C 7.7
v7: Запрос к табличной части документа
,
0 GOshaSaveiko
 
16.04.12
15:49
Помогите пожалуйста, нужно найти в табличной части конкретного документа значение колонки конкретного сотрудника. 7.7.
Как делаю:

СотрудникТабель = Запрос.Сотр;
ДокументТабель = Запрос.Док.ТекущийДокумент();
ТекстЗапросаПоДок = "
|ТекДок = Документ.Табель.ТекущийДокумент;
|Сотрудник = Документ.Табель.Сотрудник;
|Дней = Документ.Табель.Дней;
|Функция ДнейСумма = Сумма(Дней);
|Условие(Сотрудник = СотрудникТабель);
|Условие(ТекДок = ДокументТабель);";
ЗапросПоДок=СоздатьОбъект("Запрос");
Если ЗапросПоДок.Выполнить(ТекстЗапросаПоДок)=0 Тогда
Сообщить("Ошибка выполнения запроса");
Возврат
КонецЕсли;
Сообщить(ЗапросПоДок.ТекДок);

Сотрудник и документ выбираются в предыдущем запросе.
Сообщить(Запрос.Сотр); //отдает сотрудника нормально
Сообщить(Запрос.Док); //отдает документ нормально
Убирал условие по сотруднику, все равно 0. Т.е. даже на док не позиционируется.

Результатом ДБ единственная строка. Что я не так делаю? Пробовал выгружать в ТЗ - единственная строка-единственная колонка "0"
Скажите, где прошляпился, пожалуйста.
1 Voronve
 
16.04.12
15:50
(0) Группровку по доку забыл сделать
2 Voronve
 
16.04.12
15:52
ТекстЗапросаПоДок = "
|ТекДок = Документ.Табель.ТекущийДокумент;
|Сотрудник = Документ.Табель.Сотрудник;
|Дней = Документ.Табель.Дней;
|Функция ДнейСумма = Сумма(Дней);
|Группировка ТекДок;
|Условие(Сотрудник = СотрудникТабель);
|Условие(ТекДок = ДокументТабель);";
";

Если ЗапросПоДок.Выполнить(ТекстЗапросаПоДок)=1 Тогда
Пока Запрос.Группировка(1) = 1 Цикл
... тут шаришься по документам полученным ...
КонецЦикла;
КонецЕсли;
3 miki
 
16.04.12
15:54
период не нужен?
4 GOshaSaveiko
 
16.04.12
15:57
А фиг там - даже в группировку не заходит. Я туда "Сообщить" запилил
5 GOshaSaveiko
 
16.04.12
15:58
(3) Давайте попробуем с периодом - но у меня есть ссылка на конкретный док
6 miki
 
16.04.12
15:59
(5)тогда зачем вообще запрос?
7 GOshaSaveiko
 
16.04.12
16:00
(6) - вы правы, нужно было указать период. Запрос для того, чтобы быстро спозиционироваться на сотрудника в табличной части документа. Есть другие предложения? С удовольствием посмотрел бы.
8 Обработка
 
16.04.12
16:05
(7) запрос делаете в модуле формы документа?
9 GOshaSaveiko
 
16.04.12
16:07
(8) - Запрос во внешнем отчете
10 Voronve
 
16.04.12
16:08
(7)
Имея документ в котором есть искомый сотрудник:
Перем ТЗ;
...
ДокументТабель.ВыгрузитьТабличнуюЧасть(ТЗ);
Переменная = 0;
Если ТЗ.НайтиЗначение(СотрудникТабель, Переменная,"<название колонки таблицы где находятся жлементы справочника сотрудники>") = 1 Тогда
ТЗ.ПолучитьСтрокуПоНомеру(Переменная);
КонецЕсли;

Пойдет ?
11 miki
 
16.04.12
16:10
>>Запрос для того, чтобы быстро спозиционироваться на сотрудника в табличной части документа

А найти нужную строку и сделать её текущей?

Я не вижу задачи вцелом, возможно, весь твой алгоритм стОит потереть...
12 miki
 
16.04.12
16:11
+ вот так: (10)
Строку можно взять и не только в ТЗ, а сразу в ТЧ.
13 GOshaSaveiko
 
16.04.12
16:21
(10),(12) - спасибо. Разрулил. Работает и так, и так. Но без подзапроса шустрее.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.