8.х читаю из *.dbf а там что то с кодировкой

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем TODD22, 5 апр 2010.

  1. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    подскажите пожалуйста...
    есть процедура:
    Код:
    Путь = "C:\";
    БД = Новый XBase;
    БД.ОткрытьФайл(Путь+"5.dbf");
    Пока БД.Следующая()Цикл
    Сообщить(БД.FAMIL);
    КонецЦикла;
    БД.ЗакрытьФайл();
    
    сообщает какие то нечетаемые символы, как изменить кодировку?
    и ещё такой вопрос как сделать:
    Код:
    БД.ОткрытьФайл(Путь+"5.dbf");
    
    я сделал на форме поле где выбираю где находится файл всё получается, а как его передать не понимаю... я передаю просто через переменную "адрес" то есть
    Код:
    БД.ОткрытьФайл(Адрес);
    
    не получается... хотя в переменной он содержится...
    то есть если вывести как сообщение то оно имеет вид "С:\5.dbf"
  2. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Открой синтаксис помошник и увидишь там есть свойство кодировка..

    Код:
    xB = Новый xBase("C:\temp.dbf");
    xB.Кодировка=КодировкаXBase.OEM;
    
    Насчет открытия файла попробуй СокрЛП(Адрес), а то может там пробелы
  3. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    Подскажите как сделать номера ПФР...
    у меня в базе(*dbf) номер разбит на 2 колонки, первая сам номер вторая проверочные 2 цифры...
    проблема в том что нули обрезаны и что то я не могу сообразить как проверять на количесвто знаков+ноль(если нужен)+ проверочные+ноль если нужен...
    и как я только не пробывал записать номер ПФР(в случае если какие то значения записывались), при открытии элемента справочника выдаёт ошибку"не возможно преобразовать к типу число" общий модуль "регламентированная отчётность" строка 672... уже замучился подскажите что делать?
  4. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Берем только из первой колонки что нам нужно Пусть это будет поле 1, а там где проверочные поле 2.Потом

    Код:
    НомерПФР=Поле1;
    КонтрольнаяСумма=Поле2;
    //Добавляем нули
    Пока СтрДлина(НомерПФР)<9 Тогда
    НомерПФР="0"+НомерПФР"
    КонецЦикла; 
    </span>
    //добавляем контрольные цифры
    
    НомерПФР=""+НомерПФР+КонтрольнаяСумма;
    </FONT></FONT></pre>

    Запустите открытие в отладчике(поставьте галочку остановка при ошибке), тогда точно будете знать что он не может в число преобразовать
  5. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Проблема, скорее всего, в неразрывном пробеле.
  6. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    написал вот так:
    Код:
    Пока СтрДлина(НомерПФР)<9 Цикл
    НомерПФР = ("0"+(НомерПФР));
    КонецЦикла;
    
    
    выводит через сообщить:

    0
    34 318 141
    34 169 226
    30 460 330
    0
    114 598 301
    40 832 587
    то есть как я понимаю ноль у меня не прибавляется...
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    В числах ведущий ноль игнорируется. Используйте функцию формат для изменения представления
  8. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    то есть мне перед записью нужно функцие формат добавить нули? а затем записать?
  9. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    подскажите почему так может быть, читаю из *dbf, но не все данные попадают в справочник физ лиц?
    Код:
    //Открываем БД
    БД = Новый XBase;
    БД.ОткрытьФайл(ПутьДоДБФ1);
    БД.Кодировка=КодировкаXBase.OEM;
    //Читаем БД
    Пока БД.Следующая()Цикл
    ДокВид = СокрЛП(БД.VID);
    ДокСерия = СокрЛП(БД.SERIA);
    ДокНомер = СокрЛП(БД.NOMER);
    Пол = СокрЛП(БД.POL_S);
    ИНН = СокрЛП(БД.INN);
    ФИО = СокрЛП(БД.FIO);
    ДатаРождения = Дата(БД.ROZDEN);
    Если ФИО <> "" Тогда
    // ПОЛ
    Если Пол = "М" Тогда
    Пол = Перечисления.ПолФизическихЛиц.Мужской;
    Иначе Если
    Пол = "Ж" Тогда
    Пол = Перечисления.ПолФизическихЛиц.Женский;
    КонецЕсли;
    //ИНН
    Если ИНН <> Неопределено Тогда
    КодИМНС = Лев(ИНН,4);
    КонецЕсли;
    //ПФР
    //Запись
    ФизЛицо = Справочники.ФизическиеЛица.СоздатьЭлемент();
    ФизЛицо.Наименование = Строка(ФИО);
    ФизЛицо.Пол = Пол;
    ФизЛицо.ДатаРождения = ДатаРождения;
    ФизЛицо.ИНН = ИНН;
    ФизЛицо.КодИМНС = КодИМНС;
    ФизЛицо.Записать();
    КонецЕсли;
    
    КонецЦикла;
    
    
    
    
    то есть у меня вроде одно условие это что бы ФИО не было пустой строкой, но почему то переносятся не все сотрудники, я бы сказал что приблизительно треть не переносится... почему это может быть? я думал может проблема в длинне наименования(ФИО), но не переносятся и короткие фамилии...
  10. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Попробйте при получения данных из ДБФ сразу преобразовывать к нужным Вам типам

    ФИО = СокрЛП(СТРОКА(БД.FIO));
  11. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    не помогает...
  12. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Зпустите в отладчике и гляньте на тех людях почему они не записываются, где он их рубит
  13. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    во время записи....
    то есть перед строкой записать переменная ФИО содержит значение, а не записывает... то есть в справочник это значение не записывается... нет там такого человека...
  14. uza
    Offline

    uza 1С, VBA (EXCEL), VB (.NET + WEB)

    Регистрация:
    10 июл 2007
    Сообщения:
    1.845
    Симпатии:
    1
    Баллы:
    29
    А отладчиком смотреть пробовали?

    Отформатируйте свой код к читабельному виду! (Выделите текст, слева внизу, сразу после флажков активируется кнопочка автоформатирования - пользуйтесь)

    1) Выявите хотябы одного, кто НЕ переноситься.
    2) Сделайте копию DBFки и "грохните" в ней ВСЕ записи, кроме той, что не переноситься
    3) Запуститесь в режиме отладки и наставьте точек останова
    4) Запустите обработку, подсунув ей "обрезанную" DBFку

    - да прибудет с вами F10, да озарит ваш путь F11 - "проваливайтесь" в модуль записи справочника и смотрите когда там происходит отказ.
  15. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Советую поставить еще отладчик в модуль объекта справочника ФЛ в процедурах при записи и перед записью. Просто видно там чего то не хватает и идет отказ. Ну например какой то реквизит не такой или еще что то.
  16. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    Кстати можете вот так еще написать
    вместо

    ФизЛицо.Записать();

    Код:
    Попытка
    ФизЛицо.Записать();
    Исключение
    Инфо = ИнформацияОбОшибке();
    Сообщить("Описание='" + Инфо.Описание + "'");
    Сообщить("ИмяМодуля='" + Инфо.ИмяМодуля + "'");
    Сообщить("НомерСтроки=" + Инфо.НомерСтроки);
    Сообщить("ИсходнаяСтрока='" + Инфо.ИсходнаяСтрока + "'");
    КонецПопытки;
    
  17. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    разобрался я с сотрудниками как всегда всё из за кривости рук....
    Код:
    Если Пол = "М" Тогда 
    Пол = Перечисления.ПолФизическихЛиц.Мужской;         
    Иначе Если                
    Пол = "Ж" Тогда              
    Пол = Перечисления.ПолФизическихЛиц.Женский;          
    КонецЕсли;
    
    
    косяк был в " Иначе Если" пробел тут явно лишний....
  18. TopicStarter Overlay
    TODD22
    Online

    TODD22 Профессионал в 1С Команда форума

    Регистрация:
    23 фев 2009
    Сообщения:
    4.756
    Симпатии:
    147
    Баллы:
    104
    подскажите пожалуйста....
    из пред идущей процедуры вызываю процедуру записи паспортных данных в регистр сведений...
    Код:
    Вид = строка("ИМНС"+ДокВид);
    ВидДока=Справочники.ДокументыУдостоверяющиеЛичность.НайтиПоРеквизиту("КодИМНС",Вид).Ссылка;
    НабЗап = РегистрыСведений.ПаспортныеДанныеФизЛиц.СоздатьНаборЗаписей();
    
    ФизЛицо = Справочники.ФизическиеЛица.НайтиПоНаименованию(ФИО).Ссылка;
    
    
    НоваяЗапись = НабЗап.Добавить();
    НоваяЗапись.Период = ТекущаяДата();
    НоваяЗапись.ДокументВид = ВидДока.Ссылка.Наименование;
    НоваяЗапись.ФизЛицо = ФизЛицо.Ссылка;
    НоваяЗапись.ДокументНомер = ДокНомер;
    НоваяЗапись.ДокументСерия = ДокСерия;
    НоваяЗапись.ДокументДатаВыдачи = ТекущаяДата();
    НабЗап.Записать();
    
    
    что то напутал видимо опять у меня в регистре сведений всего одна запись... я думаю что наверное он стерает пред идущую... и не записывается вид документа... что я делаю не так?
  19. Доктор Руфус Бейли
    Offline

    Доктор Руфус Бейли Опытный в 1С

    Регистрация:
    7 апр 2010
    Сообщения:
    277
    Симпатии:
    0
    Баллы:
    26
    Навскидку: вы каждый раз заново пересоздаёте набор записей, каждый раз занося в него одну запись, после чего - записывая. В итоге, на выходе у вас должна получиться всего одна запись регистра: последняя. Помнится, я с чем-то подобным сталкивался. Два варианта:

    1. Пользоваться иным способом работы с регистром (если не хочется сильно менять код, перейдите на МенеджерЗаписи)
    2. Создавайте набор записи в начале работы, затем циклически заполняйте всеми записями, только потом записывайте.
  20. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.634
    Симпатии:
    946
    Баллы:
    204
    По поводу вида документа у вас строчка

    НоваяЗапись.ДокументВид = ВидДока.Ссылка.Наименование;

    насколько я помню там вид документа это ссылка на справочник

    НоваяЗапись.ДокументВид = ВидДока.Ссылка;

Поделиться этой страницей