Имя: Пароль:
1C
1C 7.7
v7: не выгружается в ДБФ реквизит справочника из торговли 7.7
0 leonid0407
 
15.04.15
11:21
Делаю обработку по выгрузке контрагентов из торговли 7 7в ДБФ файл  почему то не выгружаются значения некоторых реквизитов в частности ИНН, в отладчике отслеживается присвоение значения полю в дбф а после транзакции пусто(
1 Андрей_Андреич
 
naïve
15.04.15
11:24
(0) Там связка через физлица и юрлица
2 leonid0407
 
15.04.15
11:25
ИННКПП            =СокрЛП(Строка(ТекКонт.ЮрФизЛицо.ИНН)) вот так а потом ДБФ.Inn            = ИННКПП;
3 leonid0407
 
15.04.15
11:26
такой же конструкции ДБФ.PolnName    = Строка(ТекКонт.ЮрФизЛицо.ПолнНаименование); присваивает значение
4 povar
 
15.04.15
11:28
"Строка" убери, для начала
5 leonid0407
 
15.04.15
11:30
строку добавил после того как увидел что простое присваивание значения не срабатывает
6 leonid0407
 
15.04.15
11:31
без строки тож не заполняет поле
7 serpentt
 
15.04.15
11:33
(2) ДБФ.Inn тип какой ? может числовой?
8 Андрей_Андреич
 
naïve
15.04.15
11:33
(6) тип?
9 leonid0407
 
15.04.15
11:34
нее строковый и по длине так же как и в ТиС ДБФ.ДобавитьПоле("Inn",            2,20,);
10 povar
 
15.04.15
11:35
покажи код
11 serpentt
 
15.04.15
11:39
(9) может это натолкнет на мысль

ИмяФайлаАдресов = КаталогИБ()+"address.dbf";
Текст = СоздатьОбъект("XBase");
Текст.ДобавитьПоле("Address","S",255,0);
Текст.ДобавитьПоле("RAddress","S",255,0);
Текст.СоздатьФайл(ИмяФайлаАдресов);
12 leonid0407
 
15.04.15
11:41
а как код вставить?
13 serpentt
 
15.04.15
11:41
ТИП я указываю "C" "D" "N"
у тебя тагого не заметил
14 serpentt
 
15.04.15
11:41
Копи - ПАСТ
15 leonid0407
 
15.04.15
11:42
Пока Запрос.Группировка(1) = 1 Цикл
        
        ТекКонт             = Запрос.Контрагенты;
        Если ПомУд = 0 Тогда
            Если  ТекКонт.ПометкаУдаления() = 1 Тогда
                Продолжить;
            КонецЕсли;
        КонецЕсли;
        СчетчикЦикла = СчетчикЦикла + 1;
        
        Если ТекКонт.ЭтоГруппа() = 1 Тогда
            
            КонтрагентКод     = СокрЛП(ТекКонт.Код);
            РодитКод         = "";
            Если ТекКонт.Уровень() > 0 Тогда
                РодитКод      = СокрЛП(ТекКонт.Родитель.Код);
            КонецЕсли;
            
            ДБФ.Добавить();
            ДБФ.Group        =    1;
            ДБФ.Kod            =    КонтрагентКод;
            ДБФ.Name        =    Строка(ТекКонт.Наименование);
            ДБФ.Rod_kod        =    РодитКод;
            ДБФ.Rod_name    =    Строка(ТекКонт.Родитель.Наименование);
            ДБФ.Записать();
            Состояние("Выгружаем группу: "+ТекКонт);
        Иначе
            
            Если ТекКонт.ЮрФизЛицо.Вид() = "СвоиЮрЛица" Тогда
                Продолжить;
            КонецЕсли;
            
            КонтрагентКод     = ТекКонт.Код;
            РодитКод          = ТекКонт.Родитель.Код;
            ИННКПП            =СокрЛП(Строка(ТекКонт.ЮрФизЛицо.ИНН));
            
            ДБФ.Добавить();
            ДБФ.Group        = 0;
            ДБФ.Kod            = КонтрагентКод;
            ДБФ.Name        = Строка(ТекКонт.Наименование);
            ДБФ.PolnName    = Строка(ТекКонт.ЮрФизЛицо.ПолнНаименование);
            ДБФ.Rod_kod        = РодитКод;
            ДБФ.Rod_name    = Строка(ТекКонт.Родитель.Наименование);
            
            ДБФ.Inn            = ИННКПП;
            ДБФ.AdresUr        = ТекКонт.ЮрФизЛицо.ЮрАдрес;
            ДБФ.AdresFk        = ТекКонт.ЮрФизЛицо.ФактАдрес;
            ДБФ.Tel            = ТекКонт.ЮрФизЛицо.Телефоны;
            
            Если ТекКонт.ЮрФизЛицо.Вид() = "ЮрЛица" Тогда
                ДБФ.Vid        = "ЮрЛицо";
                ДБФ.OKPO    = ТекКонт.ЮрФизЛицо.ОКПО;
            ИначеЕсли ТекКонт.ЮрФизЛицо.Вид() = "ФизЛица" Тогда
                ДБФ.Vid        = "ФизЛицо";
                ДБФ.Dokum    = ТекКонт.ЮрФизЛицо.ДокументУдЛичность;
            Иначе
                Сообщить("Не указан вид контрагента: "+ТекКонт.Наименование);
            КонецЕсли;
            ДБФ.Записать();
16 leonid0407
 
15.04.15
11:44
тип можно и циферками указывать 2 - строка
17 serpentt
 
15.04.15
11:44
покажи код создание полей ДБФ
18 leonid0407
 
15.04.15
11:45
Полное наименование тож по ссылке ЮРфизлица берется а оно в отличии от инн попадает в дбф-ку
19 leonid0407
 
15.04.15
11:46
НачатьТранзакцию();
    
    ДБФ = Создатьобъект("XBase");
    
    ДБФ.ДобавитьПоле("Group",        1,1,);      
    ДБФ.ДобавитьПоле("Kod",            2,8,);      
    ДБФ.ДобавитьПоле("Name",        2,100,);
    ДБФ.ДобавитьПоле("PolnName",    2,100,);
    
    ДБФ.ДобавитьПоле("Rod_kod",        2,8,);      
    ДБФ.ДобавитьПоле("Rod_name",    2,100,);      
    
    ДБФ.ДобавитьПоле("Vid",            2,50,);
    
    ДБФ.ДобавитьПоле("DogKod",        2,8,);
    ДБФ.ДобавитьПоле("Dog",            2,50,);
    ДБФ.ДобавитьПоле("DogValKod",    2,3,);
    ДБФ.ДобавитьПоле("DogVal",        2,20,);
    ДБФ.ДобавитьПоле("DogUm",        2,8,);
    
    ДБФ.ДобавитьПоле("SchetKod",    2,8,);
    ДБФ.ДобавитьПоле("Schet",        2,50,);
    ДБФ.ДобавитьПоле("BankKod",        2,9,);
    ДБФ.ДобавитьПоле("Bank",        2,60,);
    ДБФ.ДобавитьПоле("SchetUm",        2,8,);
    
    ДБФ.ДобавитьПоле("SchetBank",    2,20,);
    ДБФ.ДобавитьПоле("MestoBank",    2,50,);
    ДБФ.ДобавитьПоле("AdresBank",    2,300,);
    ДБФ.ДобавитьПоле("TelBank",        2,30,);
    
    ДБФ.ДобавитьПоле("NomSchet",    2,20,);
    ДБФ.ДобавитьПоле("Naznach",        2,300,);
    ДБФ.ДобавитьПоле("ScValKod",    2,3,);
    ДБФ.ДобавитьПоле("SchetVal",    2,20,);
    
    ДБФ.ДобавитьПоле("Inn",            2,20,);
    ДБФ.ДобавитьПоле("AdresUr",        2,300,);
    ДБФ.ДобавитьПоле("AdresFk",        2,300,);
    ДБФ.ДобавитьПоле("Tel",            2,50,);
    ДБФ.ДобавитьПоле("Dokum",        2,300,);
    ДБФ.ДобавитьПоле("OKPO",        2,13,);
    
    ДБФ.СоздатьФайл(ВыгФайл);
    ДБФ.Записать();      
    
    ВыбратьКонтрагентов(ДБФ);
    
    ЗафиксироватьТранзакцию();
20 Масянька
 
15.04.15
11:49
А в справочнике Контрагенты есть реквизит ИНН?
21 serpentt
 
15.04.15
11:50
(20) НЕТ
22 serpentt
 
15.04.15
11:51
а случайно "/" слеш в ИНН не мешает?
23 leonid0407
 
15.04.15
11:51
до самого окончания процедуры в отладчике следил за  знчаением ДБФ.Inn было заполнено
24 leonid0407
 
15.04.15
11:52
да вроде не должен мешать значение строковое
25 leonid0407
 
15.04.15
11:53
я и его в коде "острочил" еще раз
26 Злопчинский
 
15.04.15
11:53
Инн у юрика или физика не заполнено и все
27 leonid0407
 
15.04.15
11:54
неее заполнено а не переносится вот насчет слэша попробую убрать а потом при загрузке подставить
28 Злопчинский
 
15.04.15
11:55
(27)  брэд
Не должен слеш мешать
29 Андрей_Андреич
 
naïve
15.04.15
11:57
(25) Может 1С тупо видит что число, хоть и строка, и приводит к числу.
Бред, конечно, но попробуй
ДБФ.Inn = "Ы"+ИНН;
Все равно умные мысли кончились :)
30 Масянька
 
15.04.15
11:59
(29) Я бы еще (на всякий пожарный) добавила:
ДБФ.Inn = "Ы"+ИНН+"Ы"
31 serpentt
 
15.04.15
12:02
Вот такой код работает
Процедура Сформировать()
    ИмяФайлаАдресов = КаталогИБ()+"address.dbf";
    ТаблDBF = СоздатьОбъект("XBase");
    ТаблDBF.ДобавитьПоле("Address","S",255,0);
    ТаблDBF.ДобавитьПоле("RAddress","S",255,0);
    ТаблDBF.СоздатьФайл(ИмяФайлаАдресов);
    ТаблDBF.КодоваяСтраница(1);
    
    спрК = СоздатьОбъект("Справочник.Контрагенты");
    спрК.ВыбратьЭлементы();
    Нашли=0;
    Пока (спрК.ПолучитьЭлемент() = 1) и (Нашли=0) Цикл
        Если спрК.ЭтоГруппа()=0 Тогда
            Сообщить(спрК.ЮрФизЛицо.инн);
            ТаблDBF.Добавить();
            ТаблDBF.Address = спрК.ЮрФизЛицо.инн;
            ТаблDBF.Записать();
            Нашли=1;
        КонецЕсли;
    КонецЦикла;
    
КонецПроцедуры

Если тип поменять с "S" на "N" значение обрезается до слеша
32 leonid0407
 
15.04.15
12:05
щас попробую и с Ы и поле увеличить)
33 serpentt
 
15.04.15
12:05
(28) Слеш мешает если поле числовое
34 serpentt
 
15.04.15
12:06
(32) "Ы" никак не поможет
попробуй тип указать не цифрами а символом "S"
35 leonid0407
 
15.04.15
12:08
да Ы не помогло щас тип укажу S
36 serpentt
 
15.04.15
12:11
Попробуй мою процедуру из (31)
она точно работает :)
37 serpentt
 
15.04.15
12:13
или попробуй всем установить фиксированное значение
ДБФ.Inn = "1111111111111111111"
38 leonid0407
 
15.04.15
12:14
слешь даже в справочнике убрал не выгружается щас проверю  1111111111111
39 Злопчинский
 
15.04.15
12:16
Может пора по тиму подключиться и посмотреть покая ддобрый?
40 leonid0407
 
15.04.15
12:16
ничего не понимаю что ему надо в коде уже указал напрямую "111111111"
41 leonid0407
 
15.04.15
12:17
ммм давай
42 Злопчинский
 
15.04.15
12:18
Ну да
Для начала неплохо бы в качестве теста прогнать 31
43 Злопчинский
 
15.04.15
12:18
прогоняй (31) и сообщай результат
Также при этом проверить
Что в итоге смотришь именно тот файл который формировался
А не другой какойнибудь
44 leonid0407
 
15.04.15
12:24
прогнал все нормуль номер присваивается(((   - значит у меня косяк какойто в коде
45 Злопчинский
 
15.04.15
12:28
(44)  ктобы сомневался
46 dangerouscoder
 
15.04.15
12:29
(44) Скорре всего в ДНК косяк...
Сделай сначала заполнение Таблицы значений на форме потом из нее загружай в файл.. всегда так легче сделать отладку..
47 Масянька
 
15.04.15
12:32
ДБФ.Inn=СокрЛП(Строка(ТекКонт.ЮрФизЛицо.ИНН)); - а так?
48 leonid0407
 
15.04.15
12:37
вобщем получилось  не знаю почему просто при объявлении полей дбф инн присваивание сделал сразу после полногонаименование  - сработало  - бред конечно но сработало
49 leonid0407
 
15.04.15
12:38
а так в списке полей инн стоял почти самой последней
50 leonid0407
 
15.04.15
12:41
может для объекта Xbase есть ограничение на количество полей в таблице?
51 dangerouscoder
 
15.04.15
12:47
(50) а что выбрал дбф а не xml?
52 serpentt
 
15.04.15
12:49
(48) Вобщем помог ШАМАНСКИЙ танец с бубнами.
53 leonid0407
 
15.04.15
12:50
хмл долго обрабатывается
54 serpentt
 
15.04.15
12:53
(53) для xml есть неплохая компанента "OpenXML"
55 Злопчинский
 
15.04.15
13:34
(51) потому что дбф обрабатывается на порядки быстрее
56 Злопчинский
 
15.04.15
13:36
(54)  ромиксовская что ли?
Там есть чисто мелкие неудобные бяки
Независимо от того, куда вы едете — это в гору и против ветра!