7.7 Переписываю код из 7.7 в 8.3

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем Skaylans23, 3 мар 2017.

  1. TopicStarter Overlay
    Skaylans23
    Offline

    Skaylans23

    Регистрация:
    9 дек 2016
    Сообщения:
    6
    Симпатии:
    0
    Баллы:
    1
    Я перешел на 1с 8.3 и начал переписывать свои обработки из 7.7 и столкнулся с такой проблемой, код немного отличается и когда я пытаюсь сам разобраться у меня ничего не получается. Уважаемые пользователи не могли бы мне подсказать как данный код будет примерно выглядеть в версии 8.3. Заранее спасибо!

    Процедура Сформировать()

    Текст = СоздатьОбъект("Текст");

    Каталог = "c:\temp";

    ФС.УстТекКаталог(Каталог);

    ИмяФайла = ФС.НайтиПервыйФайл("*.txt");

    Пока ПустаяСтрока(ИмяФайла)= 0 Цикл

    Текст.Открыть("C:\temp" +"\"+ ИмяФайла);

    Если Текст.КоличествоСтрок() = 0 Тогда

    Предупреждение("Текст пустой!");

    Возврат;

    КонецЕсли;

    Для НомерСтроки = 1 По Текст.КоличествоСтрок() Цикл

    Час1 = 0;
    Мин1 = 0;
    Сек1 = 0;

    Стр = Текст.ПолучитьСтроку(НомерСтроки);
    Сз = СоздатьОбъект("СписокЗначений");
    Сз.ИзСтрокиСРазделителями(Стр);

    Код = ?(СтрДлина(Сз.ПолучитьЗначение(6))=0,Сз.ПолучитьЗначение(2),СокрЛП(Сз.ПолучитьЗначение(6)));
    ДатаСоб = Сз.ПолучитьЗначение(3);

    Час1 = Число(Сред(Сз.ПолучитьЗначение(4),1,2));
    Мин1 = Число(Сред(Сз.ПолучитьЗначение(4),4,2));
    Сек1 = Число(Сред(Сз.ПолучитьЗначение(4),7,2));

    Время = Час1*3600+Мин1*60+Сек1;

    Тип = Сз.ПолучитьЗначение(5);

    ТЧ.НоваяСтрока();
    ТЧ.Филиал = Лев(ИмяФайла,Найти(ИмяФайла,"_") - 1);
    ТЧ.Код = СокрЛП(Код);
    ТЧ.ДатаСоб = ДатаСоб;
    ТЧ.Время = Время;
    ТЧ.Тип = Тип;

    ИмяФайла = ФС.НайтиСледующийФайл();

    КонецЦикла;

    КонецЦикла;

    КонецПроцедуры;
  2. 1с-ник
    Offline

    1с-ник Профессионал в 1С Заблокирован

    Регистрация:
    5 окт 2014
    Сообщения:
    998
    Симпатии:
    164
    Баллы:
    104
    Алгоритм никак не поменяется. Изменится лишь синтаксис. А примеры работы со строками и файлами можно найти на любом ресурсе, в том числе и в синтаксис-помощнике.
  3. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    539
    Симпатии:
    83
    Баллы:
    54
    Если еще актуально, то вот примерный код, работающий в 8.3
    Код:
    &НаКлиенте
    Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
        МассивСтрок = Новый Массив();
        Если Разделитель = " " Тогда
            Стр = СокрЛП(Стр);
            Пока 1=1 Цикл
                Поз = Найти(Стр,Разделитель);
                Если Поз=0 Тогда
                    МассивСтрок.Добавить(Стр);
                    Возврат МассивСтрок;
                КонецЕсли;
                МассивСтрок.Добавить(Лев(Стр,Поз-1));
                Стр = СокрЛ(Сред(Стр,Поз));
            КонецЦикла;
        Иначе
            ДлинаРазделителя = СтрДлина(Разделитель);
            Пока 1=1 Цикл
                Поз = Найти(Стр,Разделитель);
                Если Поз=0 Тогда
                    МассивСтрок.Добавить(Стр);
                    Возврат МассивСтрок;
                КонецЕсли;
                МассивСтрок.Добавить(Лев(Стр,Поз-1));
                Стр = Сред(Стр,Поз+ДлинаРазделителя);
            КонецЦикла;
        КонецЕсли;
       
    КонецФункции
    
    &НаКлиенте
    Процедура Сформировать(Команда)
        Каталог = "c:\temp";
        НайденныеФайлы = НайтиФайлы(Каталог, "*.txt");
        Для Каждого Файл Из НайденныеФайлы Цикл
            Текст = Новый ЧтениеТекста(Файл.ПолноеИмя, КодировкаТекста.Системная);
            Стр = Текст.ПрочитатьСтроку();
            Пока Стр <> Неопределено Цикл
                Час1 = 0;
                Мин1 = 0;
                Сек1 = 0;
                Сз = РазложитьСтрокуВМассивПодстрок(Стр,";");
                Код = ?(СтрДлина(Сз[5])=0,Сз[1],СокрЛП(Сз[5]));
                ДатаСоб = Сз[2];
                Час1 = Число(Сред(Сз[3],1,2));
                Мин1 = Число(Сред(Сз[3],4,2));
                Сек1 = Число(Сред(Сз[3],7,2));
                Время = Час1*3600+Мин1*60+Сек1;
                Тип = Сз[4];
                НоваяСтрока = Объект.ТЧ.Добавить();
                НоваяСтрока.Филиал = Лев(Файл.Имя,Найти(Файл.Имя,"_") - 1);
                НоваяСтрока.Код = СокрЛП(Код);
                НоваяСтрока.ДатаСоб = ДатаСоб;
                НоваяСтрока.Время = Время;
                НоваяСтрока.Тип = Тип;
                Стр = Текст.ПрочитатьСтроку();
            КонецЦикла;
        КонецЦикла;
    КонецПроцедуры;
    
    --- Объединение сообщений, 13 мар 2017 ---
    Если без дополнительной функции, то так:
    Код:
    &НаКлиенте
    Процедура Сформировать(Команда)
        Каталог = "c:\temp";
        НайденныеФайлы = НайтиФайлы(Каталог, "*.txt");
        Для Каждого Файл Из НайденныеФайлы Цикл
            Текст = Новый ЧтениеТекста(Файл.ПолноеИмя, КодировкаТекста.Системная);
            Стр = Текст.ПрочитатьСтроку();
            Пока Стр <> Неопределено Цикл
                Час1 = 0;
                Мин1 = 0;
                Сек1 = 0;
                Сз = СтрЗаменить(Стр,";",Символы.ПС);
                Код = ?(СтрДлина(СтрПолучитьСтроку(Сз, 6))=0,СтрПолучитьСтроку(Сз,2),СокрЛП(СтрПолучитьСтроку(Сз,6)));
                ДатаСоб = СтрПолучитьСтроку(Сз,3);
                Час1 = Число(Сред(СтрПолучитьСтроку(Сз,4),1,2));
                Мин1 = Число(Сред(СтрПолучитьСтроку(Сз,4),4,2));
                Сек1 = Число(Сред(СтрПолучитьСтроку(Сз,4),7,2));
                Время = Час1*3600+Мин1*60+Сек1;
                Тип = СтрПолучитьСтроку(Сз,5);
                НоваяСтрока = Объект.ТЧ.Добавить();
                НоваяСтрока.Филиал = Лев(Файл.Имя,Найти(Файл.Имя,"_") - 1);
                НоваяСтрока.Код = СокрЛП(Код);
                НоваяСтрока.ДатаСоб = ДатаСоб;
                НоваяСтрока.Время = Время;
                НоваяСтрока.Тип = Тип;
                Стр = Текст.ПрочитатьСтроку();
            КонецЦикла;
        КонецЦикла;
    КонецПроцедуры;
    
    Последнее редактирование: 13 мар 2017
    Skaylans23 нравится это.