Имя: Пароль:
1C
1C 7.7
v7: Не могу выбрать элемент справочника с заполненым "Наименование"
,
0 YaroslavStr
 
20.08.13
19:48
Не могу выбрать элемент справочника с заполненым "Наименование" при формировании списка ТЗ.

Перебирая все элементы справочника, не отображается элемент с заполненным реквизитом "Наименование". Разве такое может быть?

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

            ТЗ.НоваяСтрока();
            ТЗ.Фам = Спр.ТекущийЭлемент().Наименование;        
            ТЗ.Адрес = Спр.ТекущийЭлемент().Адресс;
            ТЗ.Город = Спр.ТекущийЭлемент().Город.Наименование;        
            ТЗ.ДатаКонтакта = Спр.ТекущийЭлемент().ДатаСохраненияЭлемента;
            ТЗ.Должность = Спр.ТекущийЭлемент().Должность;        
            ТЗ.Имя = Спр.ТекущийЭлемент().Имя;
            ТЗ.Отчество = Спр.ТекущийЭлемент().Отчество;        
            ТЗ.Моб1 = Спр.ТекущийЭлемент().Моб1;
            ТЗ.Моб2 = Спр.ТекущийЭлемент().Моб2;
            ТЗ.Моб3 = Спр.ТекущийЭлемент().Моб3;
            ТЗ.Тел1 = Спр.ТекущийЭлемент().Телефон1;
            ТЗ.Тел2 = Спр.ТекущийЭлемент().Телефон2;
            ТЗ.Тел3 = Спр.ТекущийЭлемент().Телефон3;
            ТЗ.Организация = Спр.ТекущийЭлемент().Организация;
            
        //КонецЕсли;  
    КонецЦикла;
КонецПроцедуры


Эта процедура формирует ТЗ на основании списка элементов справочника "Контакты". Метод Сообщить() должен сообщить о коде элемента под номером 1 или 2, в котором заполнен реквизит "Наименование", но метод просто не находит этот элемент :)
1 NS
 
20.08.13
19:52
При чем тут заполнен или нет реквизит наименование?
И справочник у тебя подчиненный.
Ну и писать реквизиты через текущийэлемент() не надо.
2 YaroslavStr
 
20.08.13
19:55
(1) Через .ТекущийЭлемент() - это уже из-за отчаяния. :) Думал, мало ли... Справочник не подчиненный. Элементы, в которых не заполнен реквизит "Наименование" заполняются строками в ТЗ без проблем.
3 YaroslavStr
 
20.08.13
19:57
Главное, что если удалишь значение в реквизите "Наименование" - все грузится. :)
4 NS
 
20.08.13
19:59
Напиши ТЗ.выбратьстроку()
И посмотри заполнена ли где-нибудь колонка "Фам"
5 YaroslavStr
 
20.08.13
20:05
Поставил на исправление базы данных - может в этом проблема...
6 YaroslavStr
 
20.08.13
20:05
(4) Значение этой колонки пустое во всех строках - я пробовал.
7 YaroslavStr
 
20.08.13
20:19
При переборе 1С должна выбирать от первого и до последнего элемента, согласно его кода - правильно? От первого элемента с кодом "1" и до последнего с кодом "n"?

У меня перебирает элементы как-то странно: от 1 до 9, а потом может взять элемент с кодом 14367...
8 NS
 
20.08.13
20:21
(7) Нет, по умолчанию - по наименованию.
Хочешь по коду - спр.порядоккодов()
9 YaroslavStr
 
20.08.13
20:27
Вот тебе и на! Вроде знаю, а действительно в этом и была проблема!


Спр = СоздатьОбъект("Справочник.Контакты");
Спр.ПорядокКодов();
Спр.ВыбратьЭлементы();    
Пока Спр.ПолучитьЭлемент() > 0 Цикл

И все работает! :) Спасибо!
10 NS
 
20.08.13
20:28
(9) И так работало, оно у тебя последним выходило, и ты просто не дожидался.
11 YaroslavStr
 
20.08.13
20:29
Я дожидался. Пробовал несколько раз - не выводило в ТЗ эти элементы ни в какую. Больше десяти раз пробовал... Странно как-то.
12 YaroslavStr
 
20.08.13
20:30
Я делал проверку:

Если Спр.Код = 1 Тогда
   Сообщить(Спр.Код);
КонецЕсли;

Результат:  не сообщало.
13 NS
 
20.08.13
20:31
(12) А если написать
Если сокрлп(Спр.Код) = "1" Тогда
   Сообщить(Спр.Код);
КонецЕсли;
14 NS
 
20.08.13
20:32
Или
Если число(сокрлп(Спр.Код)) = 1 Тогда
   Сообщить(Спр.Код);
КонецЕсли;