» | Казахстанский Бухгалтерский форум www.balans.kz | Как заставить правильно работать функцию "НайтиЗначение" |
|
Показать сообщения: Начиная со старых .::. Начиная с новых |
Автор: | FoXSkr |
Добавлено: | #1  Вс Апр 25, 2010 15:51:26 |
Заголовок сообщения: | |
Круто.. :D Добавлено спустя 20 секунд: Без комментариев.. |
Автор: | jonni_jonni |
Добавлено: | #2  Вт Апр 20, 2010 09:18:38 |
Заголовок сообщения: | |
Пока Запрос.Группировка() = 1 Цикл ТекущаяТаблица.выбратьСтроки() Пока ТекущаяТаблица.ПолучитьСтроку()=1 Цикл НайденЭлемент = 0; Если ТекущаяТаблица.ТМЦ = Запрос.ТМЦ Тогда НомерСтроки = ТекущаяТаблица.НомерСтроки; НайденЭлемент = 1; КонецЕсли; Если НайденЭлемент =1 Тогда //Нужные мне операторы КонецЕсли; КонецЦикла; КонецЦикла; |
Автор: | FoXSkr |
Добавлено: | #3  Вт Апр 20, 2010 08:31:01 |
Заголовок сообщения: | |
Вот Запрос: Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса =" |ТМЦ = Справочник.Номенклатура.ТекущийЭлемент; |Группировка ТМЦ; |Условие (ТМЦ в СпискеТМЦ);"; СписокТМЦ - это теже самые ТМЦ что из Таблицы значения документа. Вот СписокТМЦ: ВыбратьСтроки(); Пока ПолучитьСтроку()=1 цикл СписокТМЦ.ДобавитьЗначение(ТМЦ); КонецЦикла; В итоге я получаю тот же самый список ТМЦ что и в ТЗ. И в запросе я получаю тот же самый список ТМЦ что в ТЗ. Предистория работы: Чтобы было понятно зачем мне вообще это надо - В документе Инверторизация по кнопке Заполнить заполняются остатки ТМЦ из Бухгалтерских итогов (там они лежат по алфавиту), мне надо что бы табличная часть документа заполнялась в том порядке как они расположены в справочнике Номенклатура, с этой задачей правильно справляется Запрос. В результате Выполнения Запроса я получаю тот же самый список ТМЦ только груупированный по группам, затем когда я перебираю запрос я ставлю условие: Если Запрос.ТМЦ.Этогруппа()=0 Тогда КонецЕсли; И все проходит в идеале. Вот... Так в чем вопрос: Я часто сталкиваюсь с этой проблемой когда зацикливаю НайтиЗначение() например как писал KrEAtive Если ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ")=1 Тогда .... Иначе Сообщить("Не нашел"); КОнецЕсли; Таким образом он находит только 1 тмц а все остальные ненаходит. Я все время выхожу из эой проблемы таким образом(пишу перебор сам): Пока Запрос.Группировка() = 1 Цикл НайденЭлемент = 0; ТекущаяТаблица.выбратьСтроки() Пока ТекущаяТаблица.ПолучитьСтроку()=1 Цикл Если ТекущаяТаблица.ТМЦ = Запрос.ТМЦ Тогда НомерСтроки = ТекущаяТаблица.НомерСтроки; НайденЭлемент = 1; КонецЕсли; КонецЦикла; Если НайденЭлемент =1 Тогда //Нужные мне операторы КонецЕсли; КонецЦикла; Смысл в том что я конечно могу и обойтись без этой функции но сильно хочется знать как ее все таки правильно зациклить, при первом заходе в цикл она срабатывает и находит нужное значение а при остальных заходах в цикл Функция не находит значение(( |
Автор: | KrEAtive |
Добавлено: | #4  Пт Апр 16, 2010 17:14:23 |
Заголовок сообщения: | |
Да, если нескольких строк с одним ТМЦ, тогда поиск будет давать первую найденную. Тогда надо сворачивать ТЗ по ТМЦ (ТекущаяТаблица.Свернуть("ТМЦ", ...)) или добавлять ТекущаяТаблица.УдалитьСтроку(НомерСтроки), хотя на знаю, что в конечном счете нужно получить-то. |
Автор: | Darjal |
Добавлено: | #5  Пт Апр 16, 2010 17:00:02 |
Заголовок сообщения: | |
"Семерка" чтоле? А запросом к ТЧ обратиться если? По моему разумению команда ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ"); будет всегда находить ту строку, в которой значение ВПЕРВЫЕ встречается. Ну то есть если 2 или более значения - уже надо как-то вырезать первую строку найденную, потом опять искать и т.д. |
Автор: | KrEAtive |
Добавлено: | #6  Пт Апр 16, 2010 16:59:19 |
Заголовок сообщения: | |
С ТЗ вроде все нормально, кури, что у тебя в запросе. Посмотри в отладчике Запрос.ТМЦ что возвращает или вставь хотя бы Если ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ")=1 Тогда .... Иначе Сообщить("Не нашел"); КОнецЕсли; |
Автор: | FoXSkr |
Добавлено: | #7  Пт Апр 16, 2010 15:52:31 |
Заголовок сообщения: | Как заставить правильно работать функцию "НайтиЗначение" |
Здравствуйте помогите разобраться как правильно зациклить эту функцию. Проблема вот в чем: Пишу такой текст программы: //выполняется запрос с параметром Запрос.ТМЦ //просто список номенклатуры ВыгрузитьТабличнуюЧасть(ТекущаяТаблица); Пока Запрос.Группировка() = 1 Цикл НомерСтроки=""; // Пробовал еще НомерСтроки=0; ТекущаяТаблица.НайтиЗначение(Запрос.ТМЦ, НомерСтроки, "ТМЦ"); ТекущаяТаблица.ПолучитьСтрокуПоНомеру(НомерСтроки); //Далее работа с этой строкой КонецЦикла; Суть проблемы такова: Он находит мне только одну номенклатуру т.к. сначала НомерСтроки пустая переменная он выполняет поиск во всей Таблице значений а на следующих этамах цикла он ищет только в определенной строки(( //Это мое предположение. P/S По сути дела все значения ТМЦ в таблице значений и Запрос.ТМЦ имеет один и тот же список ТМЦ просто в разном порядке, ивсе.. |