» Казахстанский Бухгалтерский форум www.balans.kz

Как заставить правильно работать функцию "НайтиЗначение"

 
Показать сообщения:
Начиная со старых .::. Начиная с новых


Автор: FoXSkr
Добавлено: #1  Пт Апр 16, 2010 15:52:31
Заголовок сообщения: Как заставить правильно работать функцию "НайтиЗначение"

Здравствуйте помогите разобраться как правильно зациклить эту функцию.
Проблема вот в чем:
Пишу такой текст программы:
//выполняется запрос с параметром Запрос.ТМЦ //просто список номенклатуры

ВыгрузитьТабличнуюЧасть(ТекущаяТаблица);
Пока Запрос.Группировка() = 1 Цикл
НомерСтроки=""; // Пробовал еще НомерСтроки=0;
ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ");
ТекущаяТаблица.ПолучитьСтрокуПоНомеру(НомерСтроки);
//Далее работа с этой строкой
КонецЦикла;

Суть проблемы такова:
Он находит мне только одну номенклатуру т.к. сначала НомерСтроки пустая переменная он выполняет поиск во всей Таблице значений а на следующих этамах цикла он ищет только в определенной строки(( //Это мое предположение.
P/S По сути дела все значения ТМЦ в таблице значений и Запрос.ТМЦ имеет один и тот же список ТМЦ просто в разном порядке, ивсе..



Автор: KrEAtive
Добавлено: #2  Пт Апр 16, 2010 16:59:19
Заголовок сообщения:

С ТЗ вроде все нормально, кури, что у тебя в запросе. Посмотри в отладчике Запрос.ТМЦ что возвращает
или вставь хотя бы
Если ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ")=1 Тогда
....
Иначе
Сообщить("Не нашел");
КОнецЕсли;



Автор: Darjal
Добавлено: #3  Пт Апр 16, 2010 17:00:02
Заголовок сообщения:

"Семерка" чтоле?
А запросом к ТЧ обратиться если?
По моему разумению команда

ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ");

будет всегда находить ту строку, в которой значение ВПЕРВЫЕ встречается. Ну то есть если 2 или более значения - уже надо как-то вырезать первую строку найденную, потом опять искать и т.д.



Автор: KrEAtive
Добавлено: #4  Пт Апр 16, 2010 17:14:23
Заголовок сообщения:

Да, если нескольких строк с одним ТМЦ, тогда поиск будет давать первую найденную.
Тогда надо сворачивать ТЗ по ТМЦ (ТекущаяТаблица.Свернуть("ТМЦ", ...)) или добавлять ТекущаяТаблица.УдалитьСтроку(НомерСтроки), хотя на знаю, что в конечном счете нужно получить-то.



Автор: FoXSkr
Добавлено: #5  Вт Апр 20, 2010 08:31:01
Заголовок сообщения:

Вот Запрос:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса ="
|ТМЦ = Справочник.Номенклатура.ТекущийЭлемент;
|Группировка ТМЦ;
|Условие (ТМЦ в СпискеТМЦ);";

СписокТМЦ - это теже самые ТМЦ что из Таблицы значения документа.
Вот СписокТМЦ:
ВыбратьСтроки();
Пока ПолучитьСтроку()=1 цикл
СписокТМЦ.ДобавитьЗначение(ТМЦ);
КонецЦикла;

В итоге я получаю тот же самый список ТМЦ что и в ТЗ. И в запросе я получаю тот же самый список ТМЦ что в ТЗ.
Предистория работы: Чтобы было понятно зачем мне вообще это надо - В документе Инверторизация по кнопке Заполнить заполняются остатки ТМЦ из Бухгалтерских итогов (там они лежат по алфавиту), мне надо что бы табличная часть документа заполнялась в том порядке как они расположены в справочнике Номенклатура, с этой задачей правильно справляется Запрос.
В результате Выполнения Запроса я получаю тот же самый список ТМЦ только груупированный по группам, затем когда я перебираю запрос я ставлю условие:
Если Запрос.ТМЦ.Этогруппа()=0 Тогда
КонецЕсли;
И все проходит в идеале.

Вот... Так в чем вопрос: Я часто сталкиваюсь с этой проблемой когда зацикливаю НайтиЗначение() например как писал KrEAtive

Если ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ")=1 Тогда
....
Иначе
Сообщить("Не нашел");
КОнецЕсли;
Таким образом он находит только 1 тмц а все остальные ненаходит.
Я все время выхожу из эой проблемы таким образом(пишу перебор сам):

Пока Запрос.Группировка() = 1 Цикл
НайденЭлемент = 0;
ТекущаяТаблица.выбратьСтроки()
Пока ТекущаяТаблица.ПолучитьСтроку()=1 Цикл
Если ТекущаяТаблица.ТМЦ = Запрос.ТМЦ Тогда
НомерСтроки = ТекущаяТаблица.НомерСтроки;
НайденЭлемент = 1;
КонецЕсли;
КонецЦикла;
Если НайденЭлемент =1 Тогда
//Нужные мне операторы
КонецЕсли;
КонецЦикла;

Смысл в том что я конечно могу и обойтись без этой функции но сильно хочется знать как ее все таки правильно зациклить, при первом заходе в цикл она срабатывает и находит нужное значение а при остальных заходах в цикл Функция не находит значение((



Автор: jonni_jonni
Добавлено: #6  Вт Апр 20, 2010 09:18:38
Заголовок сообщения:

Пока Запрос.Группировка() = 1 Цикл
ТекущаяТаблица.выбратьСтроки()
Пока ТекущаяТаблица.ПолучитьСтроку()=1 Цикл
НайденЭлемент = 0;
Если ТекущаяТаблица.ТМЦ = Запрос.ТМЦ Тогда
НомерСтроки = ТекущаяТаблица.НомерСтроки;
НайденЭлемент = 1;
КонецЕсли;
Если НайденЭлемент =1 Тогда
//Нужные мне операторы
КонецЕсли;
КонецЦикла;
КонецЦикла;



Автор: FoXSkr
Добавлено: #7  Вс Апр 25, 2010 15:51:26
Заголовок сообщения:

Круто.. :D

Добавлено спустя 20 секунд:

Без комментариев..



  

Служба поддержки WWW.BALANS.KZ