8.х Обработка для чтения dbf загрузки в 1с аптека

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

  1. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Здравствуйте. Скажите,как записать номенклатуру из дбф в 1с. Я написала таким образом,у меня создается документ,записывается количество,единица измерения, а номенклатура не записывается. Подскажите, что я не так сделала.
    Код:
    &НаСервере
    Процедура ОбработатьНАСервере()
       ДБФ = Новый XBASE;
       FileSystemObject=Новый COMObject("Scripting.FileSystemObject");
       ФайлКор= FileSystemObject.getFile(Файл).ShortPath;
       ДБФ.ОткрытьФайл(ФайлКор);
       ДБФ.Кодировка=КодировкаXBase.OEM;
       Если НЕ ДБФ.Открыта()  Тогда
         Сообщить("Ошибка открытия");
       КонецЕсли;
       Если ДБФ.Первая() = Ложь Тогда
         Сообщить("не найдена первая запись");
         Возврат;
       КонецЕсли;
       Пока Не ДБФ.вконце() Цикл
         НаимНом = Справочники.Номенклатура.НайтиПоНаименованию(дбф.name_post);
         Если Не ЗначениеЗаполнено(НаимНом) Тогда
           НовНом = Справочники.Номенклатура.СоздатьЭлемент();
           НовНом.Наименование = дбф.name_post; 
           НовНом.БазоваяЕдиницаИзмерения = Справочники.ЕдиницыИзмеренияНоменклатуры.НайтиПоНаименованию("уп");
           НовНом.ГруппаБухгалтерскогоУчета = Справочники.ГруппыБухгалтерскогоУчета.НайтиПоНаименованию("Основная");
           НовНом.Записать();
         Иначе
           НовНом = НаимНом;
         КонецЕсли;
         НовДок = Документы.ПоступлениеТоваров.СоздатьДокумент();
         НовДок.Дата = ТекущаяДата();
         НовДок.Организация = Организация;
         НовДок.Контрагент = Контрагент;
        
         НовТаб = НовДок.Товары.Добавить();
         НовТаб.номенклатура = сокрЛП(ДБФ.name_post);
         НовТаб.СерияНоменклатуры = дбф.seria;
         НовТаб.Количество = дбф.kol_tov;
         НовТаб.ЕдиницаИзмерения = Справочники.ЕдиницыИзмеренияНоменклатуры.НайтиПоНаименованию("уп");
         НовТаб.Цена = дбф.prcenabnds;
        ДБФ.Следующая();
         НовДок.Записать(РежимЗаписиДокумента.Запись);
         КонецЦикла;
    КонецПроцедуры;
    Последнее редактирование модератором: 22 янв 2015
  2. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Не удается открыть файл,выходит ошибка., Ошибка-перед выполнением операции установите объект на запись. Меняла путь,расположение файла.Не помогает. Подскажите! УпрФормы

    Код:
    
    &НаСервере
    Процедура ОбработатьНаСервере()
    
    ДБФ = Новый XBASE();
      FileSystemObject=Новый COMObject("Scripting.FileSystemObject");
      ФайлКор= FileSystemObject.getFile(Файл).ShortPath;
      ДБФ.ОткрытьФайл(ФайлКор);
     
      ДБФ.Кодировка=КодировкаXBase.OEM;
      Если НЕ ДБФ.Открыта()  Тогда
          Сообщить("неоткрыт");
      КонецЕсли;
      Если ДБФ.Первая() = Ложь Тогда
          Сообщить("не найдена первая запись");
          Возврат;
      КонецЕсли;
       Пока Не ДБФ.вконце() Цикл
    
    
    
    //Диалог открытия
    
    
    
    &НаКлиенте
    
    Процедура ФайлНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка)
      СтандартнаяОбработка = Ложь;
      Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
      Диалог.Заголовок = "Выберите файл";
      Диалог.ПолноеИмяФайла = "";
      Фильтр = "(*.dbf)|*.dbf";
      Диалог.Фильтр = Фильтр;
      Диалог.МножественныйВыбор = Ложь;
      Диалог.Каталог = "H:\Новая папка\";
      Если Диалог.Выбрать() Тогда
          Файл = Диалог.ПолноеИмяФайла;
      КонецЕсли;
    КонецПроцедуры
    Последнее редактирование модератором: 22 янв 2015
  3. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    а вот именно прямо DBF нужен?
  4. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    да,файл дбф
  5. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    я понял что исходный в dbf

    его можно и в эксель перевести
    открыть в экселе и подобном и сохранить в другом формате
  6. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.579
    Симпатии:
    717
    Баллы:
    204
    Длина имени файла <= 8 символов?
  7. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Скажите,почему не проставляется серия Номенклатуры в документе? и количество?
    Код:
    НовТаб.СерияНоменклатуры = дбф.seria;
    новтаб.количество = ДБФ.Kol_tov
    Я меняю тип значения
    Код:
    СТР = число(ДБФ.Kol_tov);
          НовТаб.Количество = стр;
    но результата нет.
    а в серии встречаются как числа,так и буквы,как решить вопрос?
    НовТаб.СерияНоменклатуры = дбф.seria;
    Последнее редактирование модератором: 22 янв 2015
  8. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    дайте полный код процедуры

    и оформляте код нормально
    upload_2015-1-10_0-35-8.png
  9. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ОбработатьНаСервере()
        ДБФ = Новый XBASE;
       FileSystemObject=Новый COMObject("Scripting.FileSystemObject");
       ФайлКор= FileSystemObject.getFile(Файл).ShortPath;
       ДБФ.ОткрытьФайл(файлкор);
       ДБФ.Кодировка=КодировкаXBase.OEM;
       Если НЕ ДБФ.Открыта()  Тогда
          Сообщить("Ошибка открытия");
       КонецЕсли;
       Если ДБФ.Первая() = Ложь Тогда
          Сообщить("не найдена первая запись");
          Возврат
        КонецЕсли;
              сч = 0;
    
    Пока  не ДБФ.вконце() Цикл
       
          
          НаимНом = Справочники.Номенклатура.НайтиПоНаименованию(дбф.name_post);
          Если Не ЗначениеЗаполнено(НаимНом) Тогда
             НовНом = Справочники.Номенклатура.СоздатьЭлемент();
             НовНом.Наименование = дбф.name_post;
             НовНом.БазоваяЕдиницаИзмерения = Справочники.ЕдиницыИзмеренияНоменклатуры.НайтиПоНаименованию("уп");
             НовНом.ГруппаБухгалтерскогоУчета = Справочники.ГруппыБухгалтерскогоУчета.НайтиПоНаименованию("Основная");
             НовНом.Записать();
             НоменклатураВДокумент = НовНом.Ссылка;
          Иначе
             НоменклатураВДокумент = НаимНом;
         КонецЕсли;
         Если сч = 0 тогда
                      
          НовДок = Документы.ПоступлениеТоваров.СоздатьДокумент();
          НовДок.Дата = ТекущаяДата();
          НовДок.Организация = Организация;
          НовДок.Контрагент = Контрагент;
          НовТаб = НовДок.Товары.Добавить();
          НовТаб.номенклатура =НоменклатураВДокумент;
          ст = Строка(дбф.seria);
          НовТаб.СерияНоменклатуры = Ст;
          СТР = число(ДБФ.Kol_tov);
          НовТаб.Количество = стр;
          НовТаб.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
          НовТаб.ЕдиницаИзмерения = Справочники.ЕдиницыИзмеренияНоменклатуры.НайтиПоНаименованию("уп");
          НовТаб.Цена = дбф.prcenabnds;
              дбф.Следующая();
              сч = сч + 1
          иначе
          НовТаб = НовДок.Товары.Добавить();
          НовТаб.номенклатура =НоменклатураВДокумент;
          ст = Строка(дбф.seria);
          НовТаб.СерияНоменклатуры = Ст;
          СТР = число(ДБФ.Kol_tov);
          НовТаб.Количество = стр;
          НовТаб.Сумма = дбф.pcena_nds;
          НовТаб.ЕдиницаИзмерения = Справочники.ЕдиницыИзмеренияНоменклатуры.НайтиПоНаименованию("уп");
          НовТаб.Цена = дбф.prcenabnds;
          НовТаб.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
          НовДок.Записать(РежимЗаписиДокумента.Запись);
           ДБФ.Следующая()
             КонецЕсли;
            Если не дбф.Следующая() тогда
               Прервать;
            КонецЕсли;
        КонецЦикла;
    дбф.ЗакрытьФайл();
    КонецПроцедуры;
    
    --- Объединение сообщений, 10 янв 2015 ---
    Скажите,почему не проставляется серия Номенклатуры в документе? и количество?
    --- Объединение сообщений, 10 янв 2015 ---
    да
  10. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    а Цена проставляется?
  11. TopicStarter Overlay
    ppkmlite
    Offline

    ppkmlite Опытный в 1С

    Регистрация:
    28 окт 2014
    Сообщения:
    70
    Симпатии:
    0
    Баллы:
    26
  12. LordMaverick
    Offline

    LordMaverick Профессионал в 1С

    Регистрация:
    17 мар 2014
    Сообщения:
    3.443
    Симпатии:
    375
    Баллы:
    104
    то есть
    эта конструкция у вас не срабатывает
    Код:
          НовТаб.номенклатура =НоменклатураВДокумент;
          ст = Строка(дбф.seria);
          НовТаб.СерияНоменклатуры = Ст;
          СТР = число(ДБФ.Kol_tov);
          НовТаб.Количество = стр;
    
    а эта работает?
    Код:
          НовТаб.номенклатура =НоменклатураВДокумент;
          НовТаб.Сумма = дбф.pcena_nds;
          НовТаб.Цена = дбф.prcenabnds;
    
  13. notaSS
    Offline

    notaSS Опытный в 1С

    Регистрация:
    22 ноя 2014
    Сообщения:
    73
    Симпатии:
    0
    Баллы:
    26
    здравствуйте,выходит ошибка длинаимени файла больше 8 символов, не реагирует даже так
    Код:
    FileSystemObject=Новый COMObject("Scripting.FileSystemObject");
       ФайлКор= FileSystemObject.getFile(Файл).ShortPath;
  14. nomad_irk
    Online

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.579
    Симпатии:
    717
    Баллы:
    204
    Из С-П 1С:

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