Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Импорт данных с TXT файла в 1С с множественными разделителями          
jojojoba2 Подменю пользователя
сообщение 05.03.20, 9:45
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 50
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день!

Поставили задачу сделать импорт TXT файла по мобильной связи в 1С.Я начинающий программист,поетому не судите строго).
1).Суть в том что в файле не нужно перебирать все строки.
2).В нем нужно использовать несколько разделителей.

3).Данные находятся в текстовых блоках
Попробовал создать процедуру,но она перебирает все строки и по 10 раз заполняет номера
Процедура ОсновныеДействияФормыЗаполнить(Кнопка)
    
    Перем Стр;
          Стр = "";
          Режим = РежимДиалогаВыбораФайла.Открытие;
          ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
          ДиалогОткрытияФайла.ПолноеИмяФайла = "";
          Текст = "ru = "" Текст""; en = ""Text""";
          Фильтр = Нстр(Текст)+"(*.txt)|*.txt";
          ДиалогОткрытияФайла.Фильтр = Фильтр;
          ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
          
          Если ДиалогОткрытияФайла.Выбрать() Тогда
              ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;

          Сообщить (ИмяФайла);
      Иначе
          Текст = "ru= ""Файл не выбран!""; en=""File not selected""";
          Предупреждение(НСтр(Текст));      
      КонецЕсли;
      Текст = Новый ТекстовыйДокумент();
      
    Текст.Прочитать(ИмяФайла);
          Для а = 1 по Текст.КоличествоСтрок() Цикл
                  Стр = Текст.ПолучитьСтроку(а);
          Тел=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+4)),7);
          Стр = Текст.ПолучитьСтроку(а);
          СтрТаб = ЭтотОбъект.Номера.Добавить();
          СтрТаб.НомерТелефона = Тел;           
           КонецЦикла;  
КонецПроцедуры


Пожалуйста,помогите разобраться. Если можно скиньте пример даной релизации.

Спасибо.

jojojoba2 @ Сегодня, 9:44 * ,
Цитата
Контракт № 3954343434 Номер телефону: 380502423420
Тарифний Пакет: RED Business S
ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: . . . . . . . . . . . . . . . . . . . . 0.0000 78.4314 78.4314
КОНТЕНТ-ПОСЛУГИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3333
НАДАНІ КОНТЕНТ-ПОСЛУГИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3333
Голосові довідкові, розважальні та інші сервіси за спец. цінами . . . . . . . . . . . . . . . 13.3333
ЗНИЖКИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -7.8431
Знижка на суму особового рахунку . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . -7.8431
ЗАГАЛОМ ЗА КОНТРАКТОМ (БЕЗ ПДВ ТА ПФ): . . . . . . . . . . . . . . . . . . . . . . . . . . . 83.9216




Контракт № 3954006243433 Номер телефону: 380504466577
Тарифний Пакет: RED Business ULTRA L
ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: . . . . . . . . . . . . . . . . . . . . 0.0000 352.9412 352.9412
ЗНИЖКИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -35.2941
Знижка на суму особового рахунку . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . -35.2941
ЗАГАЛОМ ЗА КОНТРАКТОМ (БЕЗ ПДВ ТА ПФ): . . . . . . . . . . . . . . . . . . . . . . . . . . . 317.6471




Контракт № 395381614342 Номер телефону: 380503459087
Тарифний Пакет: RED Business S
ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: . . . . . . . . . . . . . . . . . . . . 0.0000 78.4314 78.4314
КОНТЕНТ-ПОСЛУГИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5686
НАДАНІ КОНТЕНТ-ПОСЛУГИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.5686
SMS\USSD\MMS\довідкові\розважальні\контент та інші сервіси за спец. цінами. . . . . . . . . . 1.5686
ЗНИЖКИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -7.8431
Знижка на суму особового рахунку . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . -7.8431
ЗАГАЛОМ ЗА КОНТРАКТОМ (БЕЗ ПДВ ТА ПФ): . . . . . . . . . . . . . . . . . . . . . . . . . . . 72.1569




Контракт № 395381612863 Номер телефону: 380505353433
Тарифний Пакет: RED Business M
ВАРТІСТЬ ПАКЕТА/ЩОМІСЯЧНА ПЛАТА: . . . . . . . . . . . . . . . . . . . . 0.0000 141.1760 141.1760
ЗНИЖКИ: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -14.1176
Знижка на суму особового рахунку . . . . .. . . . . . . . . . . . . . . . . . . . . . . . . . -14.1176
ЗАГАЛОМ ЗА КОНТРАКТОМ (БЕЗ ПДВ ТА ПФ): . . . . . . . . . . . . . . . . . . . . . . . . . . . 127.0584


Сообщение отредактировал Vofka - 05.03.20, 9:48

Vofka Подменю пользователя
сообщение 05.03.20, 9:51
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13242
Из: Киев
Спасибо сказали: 4043 раз
Рейтинг: 3179.3

Не совсем понятен вопрос. Перебирать вам все равно надо будет все строки. Строку ЗАГАЛОМ ЗА КОНТРАКТОМ (БЕЗ ПДВ ТА ПФ) можно рассматривать как разделитель блоков.

jojojoba2 Подменю пользователя
сообщение 05.03.20, 10:25
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 50
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 9:51 * ,
Vofka @ Сегодня, 9:51 * ,

А можно какой нибудь пример

andr_andrey Подменю пользователя
сообщение 05.03.20, 10:39
Сообщение #4

Почти ветеран
Иконка группы
Группа: Местный
Сообщений: 512
Спасибо сказали: 119 раз
Рейтинг: 95.5

jojojoba2 @ Сегодня, 10:25 * ,
Почитайте про алгоритмы парсинга текста. Есть много вариантов решения вашей задачи.


Signature
#define private public
enum BOOL { FALSE, TRUE, FILENOTFOUND } is made my day

volodya1122 Подменю пользователя
сообщение 05.03.20, 10:46
Сообщение #5

Оратор
Иконка группы
Группа: Местный
Сообщений: 250
Из: Тернопіль
Спасибо сказали: 89 раз
Рейтинг: 90.8

jojojoba2 @ Сегодня, 9:45 * ,
Вопрос сформирован не совсем понятно. Но попробую натолкнуть на місль как єто сделать.
И так как я понял, запись "ЗАГАЛОМ ЗА КОНТРАКТОМ" присутствует в каждом блоке, и она всегда последняя
Поєтому можно сделать так как советует Vofka
Контракт="";
Тел="";
Пакет="";
Тариф=0; //гле подразумевается число ставим 0 где текст-пустое место
.....  // и так для всех возможных реквизитов в блоках
Загалом=0;
   Текст.Прочитать(ИмяФайла);
          Для а = 1 по Текст.КоличествоСтрок() Цикл
                  Стр = Текст.ПолучитьСтроку(а);
Если Найти(Стр,"Контракт №")>0 тогда
Тел=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+4)),7);
Контракт=//похожая формула
ИначеЕсли Найти(Стр,"Тарифний Пакет:")>0 тогда
Тариф=//Також витягуэмо тз строки тариф
...... Итак для всех возможных реквизитов
ИначеЕсли Найти(Стр,"ЗАГАЛОМ ЗА КОНТРАКТОМ")>0 тогда
Загалом=// витягуємо їз строки загалом
// і тут заповн.ємо в базу, чи куди потрібно всі реквізити для одного абонента
СтрТаб = ЭтотОбъект.Номера.Добавить();
СтрТаб.НомерТелефона = Тел;
СтрТаб.КонтрактТелефона = Контракт;
........... //всі інші реквізити
// А тепер онулимо реквізити для заповнення для нового абонента
Контракт="";
Тел="";
Пакет="";
Тариф=0; //гле подразумевается число ставим 0 где текст-пустое место
.....  // и так для всех возможных реквизитов в блоках
Загалом=0;
КонецЕсли;


Можливі помилки в цьому коді, так як писав прямо тут на форумі

Сообщение отредактировал volodya1122 - 05.03.20, 10:51

sava1 Подменю пользователя
сообщение 05.03.20, 10:49
Сообщение #6

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2233
Из: Проскуров
Спасибо сказали: 535 раз
Рейтинг: 522.8

это водафон?

volodya1122 Подменю пользователя
сообщение 05.03.20, 11:41
Сообщение #7

Оратор
Иконка группы
Группа: Местный
Сообщений: 250
Из: Тернопіль
Спасибо сказали: 89 раз
Рейтинг: 90.8

И еще если вам не нужно реквизитов из каких то строк, то блок из ИначеЕсли не прописываем для них

jojojoba2 Подменю пользователя
сообщение 05.03.20, 12:08
Сообщение #8

Говорящий
***
Группа: Пользователи
Сообщений: 50
Спасибо сказали: 0 раз
Рейтинг: 0

volodya1122 @ Сегодня, 11:41 * ,
Спасибо,буду крутить

takefive Подменю пользователя
сообщение 05.03.20, 13:44
Сообщение #9

Говорящий
***
Группа: Пользователи
Сообщений: 50
Из: Днепропетровск
Спасибо сказали: 18 раз
Рейтинг: 18.9

кусочек кода из подобной обработки...

Функция НайтиПозициюРазделителя(СтрокаТекста)
    Позиция = Найти(СтрокаТекста,":");
    Если Позиция = 0 Тогда
        Позиция = Найти(СтрокаТекста,". .");
    КонецЕсли;
    Возврат Позиция;
КонецФункции

Функция УбратьЛишниеСимволы(Значение)//для цифр
    Пока Найти("-0123456789",Лев(Значение,1)) = 0 Цикл
        Значение = Сред(Значение, 2);
    КонецЦикла;
    Возврат Значение;
КонецФункции

Процедура Сформировать()
    ТекстФайла = ПолучитьТекстФайла();
    НомерБлока = 0;
    Для НомерСтроки=1 По ТекстФайла.КоличествоСтрок() Цикл
        СтрокаТекста = ТекстФайла.ПолучитьСтроку(НомерСтроки);
        Если ПустаяСтрока(СтрокаТекста) = 1 Тогда
            Продолжить;
        КонецЕсли;
        Если Лев(СтрокаТекста, 8 ) = "Контракт" Тогда
            НомерБлока = НомерБлока + 1;
            Сообщить("Блок: " + НомерБлока);
        КонецЕсли;
        Позиция = НайтиПозициюРазделителя(СтрокаТекста);
        Ключ = Лев(СтрокаТекста, Позиция - 1);
        Значение = УбратьЛишниеСимволы(Сред(СтрокаТекста, Позиция + 1));
        Сообщить("Ключ: " + Ключ + ", Значение: "+ Значение);
    КонецЦикла;
КонецПроцедуры


Signature
без свинга нет музыки...

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 01.04.20, 10:11
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!