Имя: Пароль:
1C
1С v8
Добавление нового элемента справочника
,
0 Natalia_28
 
29.09.15
10:31
Столкнулась с такой проблемой. Нужно из файла Ексель выгрузить данные и на основании этих данных добавить в справочник Контрагенты нового контрагента, если он не существует и создать для него договор. А если контрагент есть, то проверить наличие договора. Сделала вот так:

    ФИО = Док.Sheets(ТекНомер).Cells(НомерСтроки,2).Value;
                НомерДоговора = Док.Sheets(ТекНомер).Cells(НомерСтроки,4).Value;
                ВыдачаНаличных = Док.Sheets(ТекНомер).Cells(НомерСтроки,10).Value;
                
                Если Справочники.Контрагенты.НайтиПоНаименованию(ФИО, Истина, ГруппаКонтрагентов, ) = Неопределено Тогда
                    НовСтр = Справочники.Контрагенты.Новый();
                    НовСтр.НаименованиеПолное = ФИО;
                    НовСтр.Наименование = ФИО;
                    НовСтр.ЮрФизЛицо = "Физ. лицо";
                    НовСтр.Владелец = ГруппаКонтрагентов;
                    НовСтр.Записать();  
                Иначе
                    
                КонецЕсли;

Но при отладке показывает, что в этот цикл не заходит. В чем может быть проблема?
1 Альбатрос
 
29.09.15
10:32
(0) Потому что ПустаяСсылка возвращается, а не определено
2 Альбатрос
 
29.09.15
10:33
ЮрФизЛицо - это перечисление
3 Альбатрос
 
29.09.15
10:33
в типовых конфах у справочника контрагенты нет владельца. Ты наверно хочешь родителя задать
4 НЕА123
 
29.09.15
10:34
>Но при отладке показывает, что в этот цикл не заходит.
где же он - "этот цикл"?
5 Natalia_28
 
29.09.15
10:35
(3) - может и родителя, не спорю.я с этим никак не разберусь.
Вот цикл весь:
Для ТекНомер = 1 По КоличествоСтраниц Цикл
        ЭлементыФормы.Индикатор1.Значение = СтрокаС;
        ЭлементыФормы.Индикатор1.МинимальноеЗначение = СтрокаС;
        ЭлементыФормы.Индикатор1.МаксимальноеЗначение = СтрокаПо;
        Для НомерСтроки = СтрокаС По СтрокаПо Цикл
            ОбработкаПрерыванияПользователя();
            Дата = Док.Sheets(ТекНомер).Cells(НомерСтроки,5).Value;
            Операция = СокрЛП("Выдача кредита");
            Группа = ГруппаКонтрагентов;
            Если Дата = Неопределено Тогда
                НомерСтроки = НомерСтроки + 1;
                ЭлементыФормы.Индикатор1.Значение = ЭлементыФормы.Индикатор1.Значение + 1;
            Иначе            
                
                ЭлементыФормы.Индикатор1.Значение = ЭлементыФормы.Индикатор1.Значение + 1;
                ФИО = Док.Sheets(ТекНомер).Cells(НомерСтроки,2).Value;
                НомерДоговора = Док.Sheets(ТекНомер).Cells(НомерСтроки,4).Value;
                ВыдачаНаличных = Док.Sheets(ТекНомер).Cells(НомерСтроки,10).Value;
                
                Если Справочники.Контрагенты.НайтиПоНаименованию(ФИО, Истина, ГруппаКонтрагентов, ) = Неопределено Тогда
                    НовСтр = Справочники.Контрагенты.Новый();
                    НовСтр.НаименованиеПолное = ФИО;
                    НовСтр.Наименование = ФИО;
                    НовСтр.ЮрФизЛицо = "Физ. лицо";
                    НовСтр.Владелец = ГруппаКонтрагентов;
                    НовСтр.Записать();  
                Иначе
                    
                КонецЕсли;                
            КонецЕсли;            
        КонецЦикла;        
    КонецЦикла;    

Точнее не в цикл не заходит, а в условие это. Оно его перескакивает
6 Альбатрос
 
29.09.15
10:36
(5) Я тебе уже объяснил почему не выполняется условие
7 НЕА123
 
29.09.15
10:38
ответ в (1)
8 Natalia_28
 
29.09.15
10:40
(6), (7) я понимаю, что для Вас, тех кто с 1С работает очень долго, ответ в (1) говорит все. Для меня это ничего не сказало
9 Альбатрос
 
29.09.15
10:42
Если Справочники.Контрагенты.НайтиПоНаименованию(ФИО, Истина, ГруппаКонтрагентов, ) = Справочники.Контрагенты.ПустаяСсылка() Тогда
10 НЕА123
 
29.09.15
10:42
(8)
СП. НайтиПоНаименованию.
11 hhhh
 
29.09.15
10:42
(8) пиши по-русски

              Если НЕ ЗначениеЗаполнено( Справочники.Контрагенты.НайтиПоНаименованию(ФИО, Истина, ГруппаКонтрагентов, )) Тогда

там никогда не будет Неопределено. Если ты написала = Неопределено, никогда не войдет в это условие, даже если биться головой об стену.
12 Мимохожий Однако
 
29.09.15
10:46
Научись пользоваться отладчиком и СП. Намного облегчишь себе жизнь. Обычно указывают конфигурацию или параметры объекта с проблемой.
13 Natalia_28
 
29.09.15
10:47
(9) спасибо
(11) с этим я согласна, просто первое время трудно работать с программой, если видишь ее не очень давно
14 Natalia_28
 
29.09.15
10:47
(12) учусь
15 jurassic
 
29.09.15
10:49
(11) ну, допустим, бывают справочники без наименования...
16 jurassic
 
29.09.15
10:51
(13) и ты решила молчать, как партизан, раз уж не поняла
17 Ненавижу 1С
 
гуру
29.09.15
10:51
(0) с Украины?
18 Natalia_28
 
29.09.15
10:53
(16) почему молчать? что сказать, то нужно? или что услышать хочешь?
(17) с Украины и? Это проблема?
19 jurassic
 
29.09.15
10:54
(18) между (1) и (5) сказать "ой, о чём это?"
20 Natalia_28
 
29.09.15
10:56
(19) под... засчитан. ты так самоутверждаешься или как?
21 jurassic
 
29.09.15
10:57
(20) или как
22 hhhh
 
29.09.15
11:09
(18) наверно уже нет смысла осваивать 1с, всё равно его скоро запретят.
23 Natalia_28
 
29.09.15
11:14
(22) кто вам такой бред сказал?
24 magicSan
 
29.09.15
11:19
(23) Путин, для украины больше не будет обновлятся 1С
25 magicSan
 
29.09.15
11:19
(23) Вам там с европы САп придет или от мелкосотфа софтина
26 Ненавижу 1С
 
гуру
29.09.15
11:19
(23) санкции на использование вражеского продукта
поди еще и на русском языке
27 magicSan
 
29.09.15
11:21
(0) 1. ГРузим контрагентов в ТЗ, делаем запрос с учетом Тз отбираем тех кого надо создать.
2. С договорами тоже самое - можно одним запросом впринципе.
28 Natalia_28
 
29.09.15
11:21
(26) посмотрим
29 Гёдза
 
29.09.15
11:23
НайтиПоНаименования = ПустаяСсылка
32 magicSan
 
29.09.15
11:25
не значениеЗаполнение(...найтипонаименованию) но не кошерно
41 Fish
 
модератор
29.09.15
11:47
Давайте ближе к сабжу.
42 ИС-2
 
naïve
29.09.15
12:01
(0) сравнивать надо с пустой ссылкой. Чтобы посмотреть отладчиком какое значение возвращает функция надо выделить строку
Справочники.Контрагенты.НайтиПоНаименованию(ФИО, Истина, ГруппаКонтрагентов, )

и нажать shift-F9

-Чем отличается версия 1C для Белоруссии от версии для РФ?
-Наличием метода "БатькоСказал"
43 SiAl-chel
 
29.09.15
12:54
(0) Тебе в (9) сказали неправду. Вот как надо

Если Справочники.Контрагенты.НайтиПоНаименованию(ФИО, Истина, ГруппаКонтрагентов).Пустая() Тогда

ПустаяСсылка() - это метода реквизитов полей таблиц в запросах.
44 Альбатрос
 
29.09.15
13:11
(43) СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
ПустаяСсылка (EmptyRef)
Синтаксис:

ПустаяСсылка()
Возвращаемое значение:

Тип: СправочникСсылка.

Описание:

Получает пустое значение ссылки на справочник данного вида.

Доступность:

Сервер, толстый клиент, внешнее соединение.
45 jurassic
 
29.09.15
13:12
а что такое метод реквизитов полей?
46 vhl
 
29.09.15
13:17
(0) Не делай в цикле обращений к базе. Делай так:
    ТаблицаКонтр = Новый ТаблицаЗначений;
    ТаблицаКонтр.Колонки.Добавить("ФИО", Новый ОписаниеТипов("Строка"));
    ТаблицаКонтр.Колонки.Добавить("НомерДоговора");
    ТаблицаКонтр.Колонки.Добавить("ВыдачаНаличных");
    
    Для ТекНомер = 1 По КоличествоСтраниц Цикл
        ...
        ФИО = Док.Sheets(ТекНомер).Cells(НомерСтроки,2).Value;
        НомерДоговора = Док.Sheets(ТекНомер).Cells(НомерСтроки,4).Value;
        ВыдачаНаличных = Док.Sheets(ТекНомер).Cells(НомерСтроки,10).Value;
        
        НовСтр = ТаблицаКонтр.Добавить();
        НовСтр.ФИО = ФИО;
        НовСтр.НомерДоговора = НомерДоговора;
        НовСтр.ВыдачаНаличных = ВыдачаНаличных;
    КонецЦикла;    

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    Таб.ФИО
    |ПОМЕСТИТЬ Таб
    |ИЗ
    |    &Таб КАК Таб
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |    Таб.ФИО
    |ИЗ
    |    Таб КАК Таб
    |        ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
    |        ПО Таб.ФИО = Контрагенты.Наименование
    |            И (Контрагенты.Владелец = &ГруппаКонтрагентов)
    |ГДЕ
    |    Контрагенты.Ссылка ЕСТЬ NULL ";
    
    Запрос.УстановитьПараметр("ГруппаКонтрагентов", ГруппаКонтрагентов);
    Запрос.УстановитьПараметр("Таб", ТаблицаКонтр);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        
        НовСтр = Справочники.Контрагенты.Новый();
        НовСтр.НаименованиеПолное = Выборка.ФИО;
        НовСтр.Наименование = Выборка.ФИО;
        НовСтр.ЮрФизЛицо = "Физ. лицо";
        НовСтр.Владелец = ГруппаКонтрагентов;
        НовСтр.Записать();  
        
    КонецЦикла;
47 magicSan
 
29.09.15
13:32
(46) молодец , меня хватило только на опсиание действий (27) )))
48 Natalia_28
 
29.09.15
13:38
(46) спасибо)))Я пока в цикле все сделала, а не через ТЗ
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс