Консультация № 130817
06.04.2008, 15:28
0.00 руб.
08.09.2009, 18:15
0 3 3
Здравствуйте эксперты вопрос такой, вообщем нужно отобрать элементы по реквизиту, значение реквизита берется из таблицы значений так вот при выполнении программа берет почему то только первый элемент в списке.В чем может быть ошибка?

Алгоритм
1. заполняется 1 таблица значений
2. Выполняется отбор по реквизиту
3. Заполняется 2 таблица значений

См приложение

Приложение:
Процедура Поиск()
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
ТЗ2.НоваяКолонка("Наименование");
ТЗ2.НоваяКолонка("Показ","Число",19,3);
Спр = СоздатьОбъект("Справочник.Абонент");
Размер = ТЗ.КоличествоСтрок();
Для Ном1 = 1 По Размер Цикл
Состояние("Обрабатывается строка "+Ном1+"!");
ТЗ.ВыбратьСтроки();
ЗН = ТЗ.ПолучитьЗначение(Ном1,"Наименование");
Спр.ВыбратьЭлементыПоРеквизиту("Абонент",ЗН,1,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
ТЗ2.НоваяСтрока();
ТЗ2.Наименование = Спр.Наименование;
ТЗ2.Показ = Спр.Расход.Получить(ДатаДок);
Продолжить;
КонецЦикла; //Выбор
КонецЦикла; //Основной
КонецПроцедуры

Обсуждение

Неизвестный
06.04.2008, 16:14
общий
08.09.2009, 18:06
это ответ
Здравствуйте, DiamondES!
Если ты Вы явно указываешь указываете строку и номер ТЗ, то зачем перд этим ВыбираешьСтроки выбираете строки ТЗ? Попробуйте без выбора строк. Это лишнее.
Неизвестный
07.04.2008, 05:10
общий
08.09.2009, 18:10
это ответ
Здравствуйте, DiamondES!

Код:
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Таблица");
ТЗ2.НоваяКолонка("Наименование");
ТЗ2.НоваяКолонка("Показ","Число",19,3);
Спр = СоздатьОбъект("Справочник.Абонент");
Размер = ТЗ.КоличествоСтрок();

Для Ном1 = 1 По Размер Цикл
Состояние("Обрабатывается строка "+Ном1+"!");
//ТЗ.ВыбратьСтроки(); - Иначе ТЗ - позиционируется на 1 строку
ЗН = ТЗ.ПолучитьЗначение(Ном1,"Наименование");
Спр.ВыбратьЭлементыПоРеквизиту("Абонент",ЗН,1,0);
Пока Спр.ПолучитьЭлемент() = 1 Цикл
ТЗ2.НоваяСтрока();
ТЗ2.Наименование = Спр.Наименование; 
ТЗ2.Показ = Спр.Расход.Получить(ДатаДок);
//Продолжить; - Здесь это лишнее
КонецЦикла; //Выбор
КонецЦикла; //Основной
КонецПроцедуры


Либо просто
Код:
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
ЗН = ТЗ.Наименование;
...
...
КонецЦикла;
Неизвестный
07.04.2008, 09:30
общий
08.09.2009, 18:13
это ответ
Здравствуйте, DiamondES!
Возможно я не до конца разобрался, но попробуйте так.

Приложение:
Процедура Поиск()
Таб = СоздатьОбъект("Таблица"); // Для чего?
Таб.ИсходнаяТаблица("Таблица");
ТЗ2=СоздатьОбъект("ТаблицаЗначений"); // Новая. Или ТЗ2.Очистить(); // если уже была
ТЗ2.НоваяКолонка("Наименование");
ТЗ2.НоваяКолонка("Показ","Число",19,3);
Спр = СоздатьОбъект("Справочник.Абонент");
Размер = ТЗ.КоличествоСтрок();
Для Ном1 = 1 По Размер Цикл
Состояние("Обрабатывается строка "+Ном1+"!");
ТЗ.ВыбратьСтроки();
ЗН = ТЗ.ПолучитьЗначение(Ном1,"Наименование");
Спр.ВыбратьЭлементыПоРеквизиту("Абонент",ЗН,1,0); //Признак "Сортировка" для "Абонент" включен?
Пока Спр.ПолучитьЭлемент() = 1 Цикл
ТЗ2.НоваяСтрока();
ТЗ2.Наименование = Спр.ТекущийЭлемент().Наименование;
ТЗ2.Показ = Спр.ТекущийЭлемент().Расход.Получить(ДатаДок); // Дата документа сооответствует?
КонецЦикла; //Выбор
КонецЦикла; //Основной
//Куда выводится ТЗ2 ?
КонецПроцедуры
Форма ответа