Имя: Пароль:
1C
1C 7.7
v7: Тз и НайтиЗначение
0 FaustNz
 
06.05.15
12:26
День добрый.
Не пойму почему ТзСклады.НайтиЗначение(Склад, , ) всегда возвращает 0 , даже если повторно выбрать склад, который уже есть в ТЗ
код:
///+код
Склад = СоздатьОбъект("Справочник.Склады");
Если (Склад.Выбрать("Укажите склад","ФормаСписка")=0) Тогда
    Возврат;
КонецЕсли;
Если ТзСклады.НайтиЗначение(Склад, , )=1 Тогда
    Возврат;
КонецЕсли;
ТзСклады.НоваяСтрока();
ТзСклады.Склад = Склад;
///-код

В чем бяда? Спасиб
1 Spyke
 
06.05.15
12:30
(0) ТзСклады.Склад какой тип?
2 Cap_1977
 
06.05.15
12:31
Если ТзСклады.НайтиЗначение(Склад, , )=1 Тогда
замени на
Если ТзСклады.НайтиЗначение(Склад.ТекущийЭлемент(), , )=1 Тогда
3 Эльниньо
 
06.05.15
12:32
с = 0;
с = ТзСклады.НайтиЗначение(Склад, с, "Склад");
Если с > 0 Тогда
ВонОн = ТзСклады.ПолучитьЗначение(с, "Склад");
4 FaustNz
 
06.05.15
12:42
(1) произвольное
(2) не помогло. Склад спозиционирован правильно(отладчиком проверил)
(3) С указанием колонки не находит, в С строку не возвращает

///+код
Процедура ПриОткрытии()
    ТзСклады.НоваяКолонка("Склад");
КонецПроцедуры

Процедура ПоКнДобавитьСклад()  
    Склад = СоздатьОбъект("Справочник.Склады");
    Если (Склад.Выбрать("Укажите склад","ФормаСписка")=0) Тогда
        Возврат;
    КонецЕсли;
    Стр = 0;
    Если (ТзСклады.НайтиЗначение(Склад.ТекущийЭлемент(),Стр ,"Склад")=1) или (Стр>0) Тогда
        Возврат;
    КонецЕсли;
    ТзСклады.НоваяСтрока();
    ТзСклады.Склад = Склад;          
Конецпроцедуры
///-код

загадка какая-то ...
5 Cap_1977
 
06.05.15
12:43
(Стр>0) это лишнее
6 Cap_1977
 
06.05.15
12:43
и .НайтиЗначение сравнивай с нулем )
7 1Сергей
 
06.05.15
12:46
ТзСклады.Склад = Склад.ТекущийЭлемент();
8 FaustNz
 
06.05.15
12:48
(5) Да эт я так, с избыточностью написал от отчаянья )

(6) Почему? Мне наличие в Тз склада надо выловить

(7) Помогло! Только пока не въехал почему.
9 Spyke
 
06.05.15
12:48
(4) Если произвольное, значит строка, замени на
ТзСклады.НайтиЗначение(СОКРЛП(Склад.ТекущийЭлемент().Наименование, ,)
10 FaustNz
 
06.05.15
12:51
(9) В сторону типа тож копал, пробовал по наименованию, не помогало. В отладчике в Тз сидели именно элементы справочника
11 DCKiller
 
06.05.15
13:02
(7) Потому что когда ты устанавливаешь ТзСклады.Склад = Склад, ты устанавливаешь в ячейку ТЗ элемент-объект "Справочник.Склады", а ТекущийЭлемент() возвращает ссылку на элемент справочника.
12 FaustNz
 
06.05.15
13:04
(11) Спасиб, дошло. Объект и ссылка в 8-ке. Думал тут такого нет.
13 1Сергей
 
06.05.15
13:05
(9) меня всегда корёжит от вот такого написания:

Склад.ТекущийЭлемент().Наименование
14 FaustNz
 
06.05.15
13:13
(13) Почему?
15 DCKiller
 
06.05.15
13:15
(14) В данном случае достаточно просто Склад.Наименование
16 Злопчинский
 
06.05.15
14:59
(13) такое написание читает актуальные данные
потому что
Склад.Наименование <> Склад.ТекущийЭлемент().Наименование
может быть

???
17 Serginio1
 
06.05.15
15:36
(4) Проще использовать глобальную функцию
Функция глНайтиЗначениеВТз(Тз,Значение,ИмяКолонки) Экспорт
     стр=0;
                      Если Тз.НайтиЗначение(Значение,стр,ИмяКолонки)=1 Тогда
                          Тз.ПолучитьСтрокуПоНомеру(стр);
                          Возврат 1;
                      КонецЕсли;    
                      Возврат 0;    
КонецФункции // глНайтиЗначениеВТз