Имя: Пароль:
1C
1С v8
Эксель: ячейка не заполнена, то не обрабатывать
,
0 dft2014
 
23.04.14
12:42
Загружаю из Эксель адреса сотрудников. У некоторых сотрудников адрес не заполнен, и при выгрузке в Эксель, в ячейке у них пусто, только в строке формул одинарный верхний апостроф. Соответственно, надо как-то прописать условие, чтобы у таких сотрудников не обрабатывал адрес. Сейчас программа не видит, что адрес не заполнен (Если ТекСтрока.REG_ADDR_KLADR <> "" Тогда) и начинает его обрабатывать, естественно выдавая ошибку.
Вот код:



Если ТекСтрока.REG_ADDR_KLADR <> "" Тогда
        л_СтруктураАдреса = РазобратьАдрес(ТекСтрока.REG_ADDR_KLADR);
    КонецЕсли;
    
    мНаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();


Как прописать, что если в столбце верхний апостроф, то его не обрабатывать. Писала:

Если (ТекСтрока.REG_ADDR <> "") ИЛИ (ТекСтрока.REG_ADDR <> "'") ИЛИ (ТекСтрока.REG_ADDR <> "<<Адрес не задан>>") Тогда

Не помогает, все равно начинает обрабатывать как адрес!!!
1 Borometr
 
23.04.14
12:44
Может ПустаяСтрока() поможет
2 Borometr
 
23.04.14
12:46
При работе с Экселем больше предпочитаю ExcelЛист.Cells(НомерСтроки, НомерКолонки).value
3 Ёпрст
 
23.04.14
12:47
(0) Или в условии замени на И
4 dft2014
 
23.04.14
13:43
(1), (2) REG_ADDR - это название столбца из таблицы значений.
(3) Пробовала - не помогает.
5 Eugene_life
 
23.04.14
13:45
(4) посчитать кол-во символов в строке, которая вернулась из функции. Если вернулось менее 5 символов (при СокрЛП()), то явно "не то" - не обрабатывать.
6 dk
 
23.04.14
13:49
можно из ячеек читать не value а text, если все данные текстовые
7 dft2014
 
23.04.14
14:29
(5) Написала в начале:
КолСимволов = СокрЛП(СтрДлина(ТекСтрока.REG_ADDR_KLADR));
Сообщить (КолСимволов);

Вернул 240.

Хотя поле пустое!
8 salvator
 
23.04.14
14:31
А так?

КолСимволов = СтрДлина(СокрЛП(ТекСтрока.REG_ADDR_KLADR));
Сообщить(КолСимволов);
9 dft2014
 
23.04.14
14:38
(8) Так выдает 0
10 dft2014
 
23.04.14
14:43
Пишу:

КолСимволов = СтрДлина(СокрЛП(ТекСтрока.REG_ADDR_KLADR));
Если (ТекСтрока.REG_ADDR_KLADR <> "") ИЛИ КолСимволов <> 0 Тогда


Не помогает!
11 Ёпрст
 
23.04.14
15:11
Еще раз... Или замени на и
12 dft2014
 
23.04.14
15:44
(11) НЕ помогло...
13 dft2014
 
23.04.14
15:45
Если встречается сотрудник с незаполненным адресом, то пишет ошибку:

{Форма.Форма.Форма(448)}: Значение не является значением объектного типа (Индекс)
         ЗаписьНабора.Поле1 = л_СтруктураАдреса.Индекс;
14 Ёпрст
 
23.04.14
15:49
(13) еще подумай
15 Ёпрст
 
23.04.14
15:49
и.. больше кода.
16 Borometr
 
23.04.14
15:51
Чё то ты не договариваешь. Пишешь, что КолСимволов = СтрДлина(СокрЛП(ТекСтрока.REG_ADDR_KLADR)) дает 0, а условие проверки
  Если (ТекСтрока.REG_ADDR_KLADR <> "") ИЛИ КолСимволов <> 0 Тогда  не проходить. И по совету Ёпрст ИЛИ заменил на И.
17 dft2014
 
23.04.14
16:02
(15) Вот код:


КонтактИнформАдресФизЛица = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00001");      // адрес для информирования
КонтактЮрАдресФизЛица = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00002");          // адрес по прописке
КонтактФактАдресФизЛица = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00003");        // адрес проживания
КонтактИнформАдресКонтактногоЛица = Справочники.ВидыКонтактнойИнформации.НайтиПоКоду("00015");


// адрес регистрации
КолСимволов = СтрДлина(СокрЛП(ТекСтрока.REG_ADDR_KLADR));
Сообщить(КолСимволов);


// Если (ТекСтрока.REG_ADDR_KLADR <> "") ИЛИ (ТекСтрока.REG_ADDR_KLADR <> "<<Адрес не задан>>")Тогда
Если (ТекСтрока.REG_ADDR_KLADR <> "") И (КолСимволов <> 0) Тогда
    л_СтруктураАдреса = РазобратьАдрес(ТекСтрока.REG_ADDR_KLADR);
КонецЕсли;

мНаборЗаписей = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей();

Если мНаборЗаписей.Количество() = 0 Тогда
    
    мНаборЗаписей.Отбор.Объект.Значение        = СпрФЛ.Ссылка;
    мНаборЗаписей.Отбор.Объект.Использование    = Истина;
    мНаборЗаписей.Отбор.Тип.Значение            = Перечисления.ТипыКонтактнойИнформации.Адрес;
    мНаборЗаписей.Отбор.Тип.Использование        = Истина;
    мНаборЗаписей.Отбор.Вид.Значение            = КонтактЮрАдресФизЛица;
    мНаборЗаписей.Отбор.Вид.Использование        = Истина;
    
    
    ЗаписьНабора = мНаборЗаписей.Добавить();
    ЗаписьНабора.Объект = СпрФЛ.Ссылка;
    ЗаписьНабора.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес;
    ЗаписьНабора.Вид = КонтактЮрАдресФизЛица;
    
    ЗаписьНабора.Поле1 = л_СтруктураАдреса.Индекс;
    ЗаписьНабора.Поле2 = л_СтруктураАдреса.Регион;
    ЗаписьНабора.Поле3 = л_СтруктураАдреса.Район;
    ЗаписьНабора.Поле4 = л_СтруктураАдреса.Город;
    ЗаписьНабора.Поле5 = л_СтруктураАдреса.НасПункт;
    ЗаписьНабора.Поле6 = л_СтруктураАдреса.Улица;
    ЗаписьНабора.Поле7 = СокрЛП(л_СтруктураАдреса.Дом);
    ЗаписьНабора.Поле8 = СокрЛП(л_СтруктураАдреса.Корпус);
    ЗаписьНабора.Поле9 = СокрЛП(л_СтруктураАдреса.Квартира);
    
    ЗаписьНабора.Представление = ЗаписьНабора.Поле1+?(СокрЛП(ЗаписьНабора.Поле2)="","",", "+ЗаписьНабора.Поле2)+
    ?(СокрЛП(ЗаписьНабора.Поле3)="","",", "+ЗаписьНабора.Поле3)+
    ?(СокрЛП(ЗаписьНабора.Поле4)="","",", "+ЗаписьНабора.Поле4)+
    ?(СокрЛП(ЗаписьНабора.Поле5)="","",", "+ЗаписьНабора.Поле5)+
    ?(СокрЛП(ЗаписьНабора.Поле6)="","",", "+ЗаписьНабора.Поле6)+
    ?(СокрЛП(ЗаписьНабора.Поле7)="","",", дом № "+ЗаписьНабора.Поле7)+?(СокрЛП(ЗаписьНабора.Поле8)="","",", корпус "+ЗаписьНабора.Поле8)+?(СокрЛП(ЗаписьНабора.Поле9)="","",", кв."+ЗаписьНабора.Поле9);
    
КонецЕсли;


мНаборЗаписей.Записать(Истина);
18 dft2014
 
23.04.14
16:04
Вот ф-ция, на которую тоже есть ссылка в (17):

Функция РазобратьАдрес(л_Адрес)
    // 1 поле - страна
    // 2 поле - индекс
    // 3 поле регион
    // 4 поле район
    // 5 поле город
    // 6 поле населенный пункт
    // 7 поле улица
    // 8 поле дом
    // 9 поле корпус
    // 10 поле квартира
    
    лСтр = Новый Структура;
    
    // страна
    Страна = "Россия";
    Если Найти(л_Адрес,",")=1           Тогда
        лСтр.Вставить("Страна",Страна);
    ИначеЕсли Найти(л_Адрес,",")>0 Тогда
        Страна = Лев(л_Адрес,Найти(л_Адрес,",")-1);
        лСтр.Вставить("Страна",Страна);
    Иначе
        // не формат
        Возврат лСтр;
    КонецЕсли;
    
    // индекс
    Индекс = "";
    л_Адрес1 = Сред(л_Адрес,Найти(л_Адрес,",")+1);
    Индекс = Лев(л_Адрес1,Найти(л_Адрес1,",")-1);
    лСтр.Вставить("Индекс",Индекс);
    
    // регион
    Регион = "";
    л_Адрес2 = Сред(л_Адрес1,Найти(л_Адрес1,",")+1);
    Регион = Лев(л_Адрес2,Найти(л_Адрес2,",")-1);
    лСтр.Вставить("Регион",Регион);
    
    // район
    Район = "";
    л_Адрес3 = Сред(л_Адрес2,Найти(л_Адрес2,",")+1);
    Район = Лев(л_Адрес3,Найти(л_Адрес3,",")-1);
    лСтр.Вставить("Район",Район);
    
    // Город
    Город = "";
    л_Адрес4 = Сред(л_Адрес3,Найти(л_Адрес3,",")+1);
    Город = Лев(л_Адрес4,Найти(л_Адрес4,",")-1);
    лСтр.Вставить("Город",Город);
    
    // Насел. пункт
    НасПункт = "";
    л_Адрес5 = Сред(л_Адрес4,Найти(л_Адрес4,",")+1);
    НасПункт = Лев(л_Адрес5,Найти(л_Адрес5,",")-1);
    лСтр.Вставить("НасПункт",НасПункт);

    // Улица
    Улица = "";
    л_Адрес6 = Сред(л_Адрес5,Найти(л_Адрес5,",")+1);
    Улица = Лев(л_Адрес6,Найти(л_Адрес6,",")-1);
    лСтр.Вставить("Улица", Улица);

    // Дом
    Дом = "";
    л_Адрес7 = Сред(л_Адрес6,Найти(л_Адрес6,",")+1);
    Дом = Лев(л_Адрес7,Найти(л_Адрес7,",")-1);
    лСтр.Вставить("Дом", Дом);

    // Корпус
    Корпус = "";
    л_Адрес8 = Сред(л_Адрес7,Найти(л_Адрес7,",")+1);
    Корпус = Лев(л_Адрес8,Найти(л_Адрес8,",")-1);
    лСтр.Вставить("Корпус", Корпус);

    // Квартира
    Квартира = "";
    л_Адрес9 = Сред(л_Адрес8,Найти(л_Адрес8,",")+1);
    Квартира = л_Адрес9;
    лСтр.Вставить("Квартира", Квартира);    
    
    Возврат лСтр;
//    ,111111,область,,город,,улица,дом,корпус,квартира
    
КонецФункции
19 Ёпрст
 
23.04.14
16:20
Ну и ? А где проверка на твой апострофф ?
20 Ёпрст
 
23.04.14
16:22
И так напиши, что ле..
Если Не ЗначениеЗаполнено(ТекСтрока.REG_ADDR_KLADR) Тогда
21 Ёпрст
 
23.04.14
16:22
Точнее так :))

Если ЗначениеЗаполнено(ТекСтрока.REG_ADDR_KLADR) Тогда
22 dft2014
 
23.04.14
16:50
(21) Написала так, все равно выдает ошибку (13).

(19) Она тоже была, убрала ее уже.
23 Ёпрст
 
23.04.14
17:53
(21)
Ну напиши так што ле (тест на вшивость)


Если Значениезаполнено(ТекСтрока.REG_ADDR_KLADR Тогда
   Попытка
    л_СтруктураАдреса = РазобратьАдрес(ТекСтрока.REG_ADDR_KLADR);
   Исключение
   Сообщить(ОписаниеОшибки()+"" ""+ТекСтрока.REG_ADDR_KLADR);
  КонецПопытки;
КонецЕсли;


результаты окна сообщений в студию