Добрый день!
Поставили задачу сделать импорт TXT файла по мобильной связи в 1С.Я начинающий программист,поетому не судите строго).
1).Суть в том что в файле не нужно перебирать все строки.
2).В нем нужно использовать несколько разделителей.
3).Данные находятся в текстовых блоках
Попробовал создать процедуру,но она перебирает все строки и по 10 раз заполняет номера
Процедура ОсновныеДействияФормыЗаполнить(Кнопка)
Перем Стр;
Стр = "";
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогОткрытияФайла = Новый ДиалогВыбораФайла(Режим);
ДиалогОткрытияФайла.ПолноеИмяФайла = "";
Текст = "ru = "" Текст""; en = ""Text""";
Фильтр = Нстр(Текст)+"(*.txt)|*.txt";
ДиалогОткрытияФайла.Фильтр = Фильтр;
ДиалогОткрытияФайла.МножественныйВыбор = Ложь;
Если ДиалогОткрытияФайла.Выбрать() Тогда
ИмяФайла = ДиалогОткрытияФайла.ПолноеИмяФайла;
Сообщить (ИмяФайла);
Иначе
Текст = "ru= ""Файл не выбран!""; en=""File not selected""";
Предупреждение(НСтр(Текст));
КонецЕсли;
Текст = Новый ТекстовыйДокумент();
Текст.Прочитать(ИмяФайла);
Для а = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(а);
Тел=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+4)),7);
Стр = Текст.ПолучитьСтроку(а);
СтрТаб = ЭтотОбъект.Номера.Добавить();
СтрТаб.НомерТелефона = Тел;
КонецЦикла;
КонецПроцедуры
Не совсем понятен вопрос. Перебирать вам все равно надо будет все строки. Строку ЗАГАЛОМ ЗА КОНТРАКТОМ (БЕЗ ПДВ ТА ПФ) можно рассматривать как разделитель блоков.
Vofka @ Сегодня, 9:51
,
Vofka @ Сегодня, 9:51
,
А можно какой нибудь пример
jojojoba2 @ Сегодня, 10:25
,
Почитайте про алгоритмы парсинга текста. Есть много вариантов решения вашей задачи.
jojojoba2 @ Сегодня, 9:45
,
Вопрос сформирован не совсем понятно. Но попробую натолкнуть на місль как єто сделать.
И так как я понял, запись "ЗАГАЛОМ ЗА КОНТРАКТОМ" присутствует в каждом блоке, и она всегда последняя
Поєтому можно сделать так как советует Vofka
Контракт="";
Тел="";
Пакет="";
Тариф=0; //гле подразумевается число ставим 0 где текст-пустое место
..... // и так для всех возможных реквизитов в блоках
Загалом=0;
Текст.Прочитать(ИмяФайла);
Для а = 1 по Текст.КоличествоСтрок() Цикл
Стр = Текст.ПолучитьСтроку(а);
Если Найти(Стр,"Контракт №")>0 тогда
Тел=Прав(СокрЛП(Сред(Стр,Найти(Стр,"Контракт №")+4)),7);
Контракт=//похожая формула
ИначеЕсли Найти(Стр,"Тарифний Пакет:")>0 тогда
Тариф=//Також витягуэмо тз строки тариф
...... Итак для всех возможных реквизитов
ИначеЕсли Найти(Стр,"ЗАГАЛОМ ЗА КОНТРАКТОМ")>0 тогда
Загалом=// витягуємо їз строки загалом
// і тут заповн.ємо в базу, чи куди потрібно всі реквізити для одного абонента
СтрТаб = ЭтотОбъект.Номера.Добавить();
СтрТаб.НомерТелефона = Тел;
СтрТаб.КонтрактТелефона = Контракт;
........... //всі інші реквізити
// А тепер онулимо реквізити для заповнення для нового абонента
Контракт="";
Тел="";
Пакет="";
Тариф=0; //гле подразумевается число ставим 0 где текст-пустое место
..... // и так для всех возможных реквизитов в блоках
Загалом=0;
КонецЕсли;
это водафон?
И еще если вам не нужно реквизитов из каких то строк, то блок из ИначеЕсли не прописываем для них
кусочек кода из подобной обработки...
Функция НайтиПозициюРазделителя(СтрокаТекста)
Позиция = Найти(СтрокаТекста,":");
Если Позиция = 0 Тогда
Позиция = Найти(СтрокаТекста,". .");
КонецЕсли;
Возврат Позиция;
КонецФункции
Функция УбратьЛишниеСимволы(Значение)//для цифр
Пока Найти("-0123456789",Лев(Значение,1)) = 0 Цикл
Значение = Сред(Значение, 2);
КонецЦикла;
Возврат Значение;
КонецФункции
Процедура Сформировать()
ТекстФайла = ПолучитьТекстФайла();
НомерБлока = 0;
Для НомерСтроки=1 По ТекстФайла.КоличествоСтрок() Цикл
СтрокаТекста = ТекстФайла.ПолучитьСтроку(НомерСтроки);
Если ПустаяСтрока(СтрокаТекста) = 1 Тогда
Продолжить;
КонецЕсли;
Если Лев(СтрокаТекста, 8 ) = "Контракт" Тогда
НомерБлока = НомерБлока + 1;
Сообщить("Блок: " + НомерБлока);
КонецЕсли;
Позиция = НайтиПозициюРазделителя(СтрокаТекста);
Ключ = Лев(СтрокаТекста, Позиция - 1);
Значение = УбратьЛишниеСимволы(Сред(СтрокаТекста, Позиция + 1));
Сообщить("Ключ: " + Ключ + ", Значение: "+ Значение);
КонецЦикла;
КонецПроцедуры
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua