Каталог решений - Обмен между 1С 7.7 и 1С 8 через ЗначениеВСтрокуВнутр

Обмен между 1С 7.7 и 1С 8 через ЗначениеВСтрокуВнутр

Обмен между 1С 7.7 и 1С 8 через ЗначениеВСтрокуВнутр

В наличии

Функция разбора строки, содержащей таблицу значений, полученной из 1С 7.7 методом "ЗначениеВСтрокуВнутр"

Категория:

Описание

Часто приходилось встречать обмен м/у конфигурациями написанными в 1С 7.7 посредством методов «ЗначениеВСтрокуВнутр» и «ЗначениеВСтрокуВнутр». В настоящее время возникла необходимость написать обмен м/у 7.7 и 8.2. Из 7.7 выгружается таблица значений в которой находятся различного рода данные (за исключением ссылочных). Дабы не переписывать обмен полностью а только на стороне 1С 8.2 предлагаю вашему вниманию заготовку функции по разбору таблицы. Почему заготовку — потому что данная функция работает упрощенно с типами данных, без преобразования, и имеет еще некоторые недостатки которые для моей задачи не существенны. Все же надеюсь что кому то это наработка поможет.

&НаСервере
Функция ПолучитьТаблицуЗначенийИз1С77(Адрес)

    Таблица        = Новый ТаблицаЗначений;
   
ЧтениеТХТ      = Новый ЧтениеТекста(Адрес);
   
МассивТипов    = Новый Массив;
   
ИндексСтроки   = 0;

    //Сформируем массив начальных строк типов данных
   
МассивТипов.Добавить(«{» + «»»»+ «S»+«»»»+«,»);
   
МассивТипов.Добавить(«{» + «»»»+ «D»+«»»»+«,»);
   
МассивТипов.Добавить(«{» + «»»»+ «N»+«»»»+«,»);
   
МассивТипов.Добавить(«{» + «»»»+ «U»+«»»»+«,»);
   
МассивТипов.Добавить(«{» + «»»»+ «B»+«»»»+«,»);

    Строка = ЧтениеТХТ.ПрочитатьСтроку();

    ПерваяСтрока = Истина;
    Пока
Строка <> Неопределено Цикл

        //Первую строку отбросим
       
Если ПерваяСтрока Тогда

            Строка       = ЧтениеТХТ.ПрочитатьСтроку();
           
ПерваяСтрока = Ложь;
            Продолжить;
        КонецЕсли;

        //Проверим является ли данная строка типом
        //Если строка является типом то это есть строка колонки
        //Если строка Типом не является то это есть новая колонка

        Если СтрДлина(Строка) = 1 Тогда  Строка = ЧтениеТХТ.ПрочитатьСтроку(); Продолжить; КонецЕсли;
        Если
Строка      = «}}}}» Тогда Строка = ЧтениеТХТ.ПрочитатьСтроку(); Продолжить; КонецЕсли;
        Если
Строка      = «},»   Тогда Строка = ЧтениеТХТ.ПрочитатьСтроку(); Продолжить; КонецЕсли;

        //Это строка с названием новой колонки
       
Если МассивТипов.Найти(Лев(Строка,5)) = Неопределено Тогда
           
Колонка = СтрЗаменить(Строка, «,», Символы.ПС);
           
Колонка = СтрПолучитьСтроку(Колонка, 1);

            //Уберем дополнительные символы
           
Колонка = Лев (Колонка, СтрДлина(Колонка) — 1);
           
Колонка = Прав(Колонка, СтрДлина(Колонка) — 2);

            Таблица.Колонки.Добавить(Колонка);
           
ИндексСтроки = 0;
        Иначе
//Это строка со значением

            Значение = Лев(Строка, СтрДлина(Строка)-3);
           
Значение =Прав(Значение, СтрДлина(Строка)-29);


            //Уберем доп символы кавычек из строки значения
           
Пока Лев(Значение, 1) = «»»» Цикл
               
Значение = Прав(Значение, СтрДлина(Значение)-1);
            КонецЦикла;

            Пока Прав(Значение, 1) = «»»» Цикл
               
Значение = Лев(Значение, СтрДлина(Значение)-1);
            КонецЦикла;

            //Добавим колонки которых нет
           
Если Таблица.Количество()< ИндексСтроки+1 Тогда
               
Таблица.Добавить();
            КонецЕсли;

            //УстановимЗначениеСтроки
           
ИскомаяСтрока = Таблица.Получить(ИндексСтроки);
           
ИскомаяСтрока[Колонка]  =  Значение;

            ИндексСтроки = ИндексСтроки+ 1;
        Конецесли;
       
Строка = ЧтениеТХТ.ПрочитатьСтроку();
    КонецЦикла;

    Возврат Таблица;
КонецФункции

Использование функции:

1. На выходе из 1С 7.7 мы имеем таблицу с заранее известными колонками. Допустим есть две колонки «Расчетный счет» и «Организация». Значение строк табличной части — номер Р/С и ИНН организации

2. С помощью метода «ЗначениеВСтроку» записываем нашу таблицу в txt файл.

3.В 1С 8.2 в обработке прописываем вызов вышеописаной функции. В качестве параметра — передадим адрес текстового файла полученного в пункте 2.

4. Результатом вызова функции будет таблица аналогичная таблице записанной в текстовый файл в пункте 2.

5. Поскольку структура таблицы в 1С 7.7 нам известна — мы можем привести типы для таблицы полученной в 4. Например даты будут идти строкой типа 20120312, с помощью функции Дата() можно преобразовать ее к нужному типу.

Данная функция используется на практике при переносе платежных поручений из 1С 7.7 в 1С 8.2

has been added to your cart:
Оформление заказа