Поиск в Таблице значений (7.7)

Тема в разделе "1C и всё что с ней связано", создана пользователем lira89, 31 июл 2010.

  1. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Здравствуйте. Возник срочный вопрос по поиску в Таблице значений.
    Есть сформированная Таблица значений, в которой есть столбцы:
    ТЗ1.НоваяКолонка("Студент",,"Строка",80,,"ФИО студента",80);
    ТЗ1.НоваяКолонка("ИмяЛиста","Строка",30,,"Имя листа",30);
    ТЗ1.НоваяКолонка("РеквизитПоиска",,"Строка",100,,"Реквизит поиска",100);
    Заполнение производиться следующим образом:
    ТЗ1.НоваяСтрока();
    ТЗ1.Студент = Врег((СокрЛП(Строка(ПолучитьЗначение(Лист1,i,1)))));
    ТЗ1.ИмяЛиста = СокрЛП(ИмяЛиста);
    ТЗ1.РеквизитПоиска = СокрЛП(ТЗ1.Студент+" "+ТЗ1.ИмяЛиста); //этот реквизит служит для более точного и однозначного поиска нужной записи (это 8й столбец ТЗ)
    Затем в созданном документе надо выбрать по порядку строки из табличной части и по определенному полю (студент) найти значение в таблице значений:
    ВыбратьСтроки(); //идем по табл части документа
    Пока ПолучитьСтроку()=1 Цикл
    РеквизитДляТочногоПоиска="";
    СтрТабл = "";
    РеквизитДляТочногоПоиска = ""+Студент+" "+СпецДляПоиска; //записываем нужные для поиска значения выбранной строки в табл части документа
    Если ТЗ1.НайтиЗначение(РеквизитДляТочногоПоиска,СтрТабл,8)=1 Тогда
    ТЗ1.ПолучитьСтрокуПоНомеру(СтрТабл);
    .........делаем что нам нужно с найденной записью

    Так вот проблема в том, что значение в таблице значений не находится и вообще, проверяя через отладчик, в ТЗ фигурирует только одна и та же строка и не изменяется. Подскажите в чем проблема, может надо как-то по-другому выполнять поиск по таблице значений или может не хватает какой-либо строки???? Применяя раньше такой способ поиска (правда по числовому полю) все работало, а вот тут возникла проблема(
     
  2. mdbm

    mdbm Гость

    1.Попробуй убрать пробелы
    РеквизитДляТочногоПоиска = ""+СокрЛП(Студент)+" "+СпецДляПоиска;

    2. У тебя в ТЗ Студент, - это строка с Фамилией
    а Табличной части документа, Студент - это наверное справочник...
    Если справочник, то попробуй использовать типа СокрЛП(Студент.Наименование)

    3. Ты ТЗ заполняешь в приведенном тобой примере только одной строкой...
    Покажи полный код заполнения

    Также, для проверки содержимого ТЗ, я часто использую функцию ТЗ.ВыбратьСТроку()
    Для вызова диалога выбора строки ТЗ....
    И в этом диалоге смотрю как заполнена таблица значений
     
  3. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Посмотрела таблицу значений методом ВыбратьСтроку() и оказалось, что поле Студент, ИмяЛиста и РеквизитПоиска пустые, хотя вроде как в отладчике они заполнены.

    PS: извиняюсь, можешь не читать, что написано выше. Я исправила ошибку в заполнении ТЗ. Проблема была лишь в одной запятой). Исправила вот это
    ТЗ1.НоваяКолонка("Студент",,"Строка",80,,"ФИО студента",80);
    на вот это ТЗ1.НоваяКолонка("Студент","Строка",80,,"ФИО студента",80); и ТЗ заполнилась нормально.
     
  4. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Теперь ТЗ заполнена правильно, а вот все равно поиск не работает.
    Изменила поля:
    ТЗ1.РеквизитПоиска = СокрЛП(ТЗ1.Студент) + СокрЛП(ТЗ1.ИмяЛиста);
    и
    РеквизитДляТочногоПоиска = СокрЛП(Студент)+СокрЛП(СпецДляПоиска);
    Если ТЗ1.НайтиЗначение(РеквизитДляТочногоПоиска,СтрТабл,8)=1 Тогда
    ......
    В ТЗ поле Студент это строка, а в документе реквизит Студент это справочник. Везде поставила СокрЛП, но все равно выдает, что не находит ни одной записи. СпецДляПоиска тож справочник и я тоже написала СокрЛП.
    Понятия не имею, что не так. ;)
     
  5. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Попробуй
    РеквизитДляТочногоПоиска = СокрЛП(Строка(Студент))+СокрЛП(Строка(СпецДляПоиска));
     
  6. lira89

    lira89 Well-Known Member

    Регистрация:
    12 мар 2010
    Сообщения:
    159
    Симпатии:
    0
    Попробовала, результат тот же. В отладчике выдает следующее
    РеквизитДляТочногоПоиска = "АБАКУМЕНКО ВЛАДИМИР НИКОЛАЕВИЧ ПсихИПК"
    ТЗ1.РеквизитПоиска = "СЕЛЕДЦОВА АЛЛА АДАМОВНА ИПКБанкДело......................................................" (точки это как бы пробелы в отладчике или просто ширина колонки я не могу понять)
    Вот в таком виде я вижу эти данные в отладчике, причем значение ТЗ1.РеквизитПоиска представляет собой самую
    последнюю запись на самом последнем листе файла, а РеквизитДляТочногоПоиска - первая запись в табличной части
    документа.
    При формировании ТЗ я указала :
    .....
    ТЗ1.НоваяКолонка("РеквизитПоиска","Строка",100,,"Реквизит поиска",100);
    ......
    А при записи в ТЗ:
    ТЗ1.РеквизитПоиска = СокрЛП(СокрЛП(ТЗ1.Студент) +" "+ СокрЛП(ТЗ1.ИмяЛиста));

    Возможно дело в размере поля???? но я же поставила СокрЛП и проблем вроде не должно быть?
     
  7. kaa

    kaa Гость

    ДлинаДобавки = 100-СтрДлина(РеквизитДляТочногоПоиска);

    инд = 1;
    Для инд=1 по ДлинаДобавки Цикл
    РеквизитДляТочногоПоиска = РеквизитДляТочногоПоиска+" ";
    КонецЦикла;
    ТЗ1.НайтиЗначение(РеквизитДляТочногоПоиска,СтрТабл,8)
     
  8. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    lira89, при определении колонок ТЗ не указывайте размерность поля "РеквизитПоиска".
     
Загрузка...

Поделиться этой страницей