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

Хранилище

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

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



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

Говорящий
***
Группа: Пользователи
Сообщений: 56
Спасибо сказали: 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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

это водафон?

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

 

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