Имя: Пароль:
1C
1C 7.7
v7: Преобразовать файл правил обмена XML так, чтобы его можно было запихнуть в MXL и обратно
0 SleepyHead
 
гуру
09.07.18
04:40
Есть старая база на 1с77, для которой писал выгрузку через КД2 в ЗУП 3.1. Обмен работает, данные выгружать нужно раз в квартал. Поэтому срабатывает чисто человеческий фактор - файл правил теряется, пути забывают. В итоге чуть ли не каждый раз достаю прикопанный у меня файл правил обмена, и высылаю клиенту, а потом еще целая история напомнить их админу, куда это файл положить. Задолбало.

Текстовых и двоичных макетов в 1с77 нет, поэтому задумался о преобразовании в табличный документ 1с77. Одна строка табличного документа - одна строка текстового файла. И чтобы можно было потом выгрузить в текстовый файл во временном каталоге, переименовать в XML и скормить обработке выгрузки..

Пробовал несколько преобразовалок в TXT, теряют код на 1с8, прописанный в правилах обмена.

Сейчас задумался, стоит ли вообще эта овчинка выделки, и можно ли преобразовать в текст построчно без потерь.

Может, есть опыт такого преобразования у кого-то? Посоветуйте преобразовалки, пожалуйста.
1 Aleksey
 
09.07.18
04:50
Почему просто нельзя считать таблицу и сохранить в текст средствами 1С? Зачем преобразовывать mxl в txt?
2 Aleksey
 
09.07.18
04:52
ну или

Записать(<?>,);
Синтаксис:
Записать(<ИмяФайла>,<ТипФайла>)
Назначение:
Записать таблицу в файл.
Параметры:
<ИмяФайла> - имя файла.
<ТипФайла> - необязательный параметр. Числовое или строковое выражение, определяющее тип файла:
· отсутствует, 0 или ''MXL'' - формат 1C;
· 1 или ''XLS'' - формат Ms Excel;
· 2 или ''HTM'' или ''HTML'' - формат HTML;
· 3 или ''TXT'' - формат TXT.
Замечание:
Метод может использоваться при работе с таблицей в режиме ввода данных.
3 SleepyHead
 
гуру
09.07.18
04:59
(1) Почему бы сначала не внимательно прочитать вопрос?
4 SleepyHead
 
гуру
09.07.18
05:00
Задача - преобразовать файл правил обмена (XML-формат) в текст построчно.
5 Aleksey
 
09.07.18
05:19
(4) xml это обычный текстовый файл, его не надо преобразовывать. Возъми смени расширение xml на txt вот и все преобразование
6 SleepyHead
 
гуру
09.07.18
05:25
(5) А что он выгружается в одну строку компонентой v7plus, при выгрузке правил,ты в курсе?

Просьба не писать ответы, если ты не понял проблему, и не засорять тему. Все описано в (0)
7 АНДР
 
09.07.18
06:14
Значениевстрокувнутр()
Значениевстрокувнутр()
?
8 SleepyHead
 
гуру
09.07.18
06:27
(7) Да, но как сохранить это в конфе?

Идея такая : выгружать файл правил обмена в текстовый файл. Вопрос - где хранить в конфигураторе 77, если там нет текстового или двоичного макета?

В табличном документе обработки. Но тогда нужно как-то загнать этот текст в макет так, чтобы потом можно было выгрузить в текстовый файл.
9 АНДР
 
09.07.18
06:35
(8) если (7) прокатывает, то
1) получаешь текстовую строку, заносить ее в свой модуль;
2) получаешь из строки текст, его записываешь и переименовываешь.
10 Мимохожий Однако
 
09.07.18
06:38
(0) "Пробовал несколько преобразовалок в TXT, теряют код на 1с8,". Расшифруй, что значит "теряют код"?
11 Aleksey
 
09.07.18
06:39
(6) Причем тут компонента v7plus? Мы же говорим про правила выгруженные из кд2

Пару строк кода по загрузки из текстового (xml) файла с правилами в таблицу. Сохраняем эту таблицу как таблицу во внешней обработки
И пару строк кода по преобразования по выгрузки в текстовый (Xml) файл

В чем затык?
12 Aleksey
 
09.07.18
06:40
Зачем тебе двоичные данные, ты же не картинку переносишь и не обработку
13 SleepyHead
 
гуру
09.07.18
06:44
(9) дошло, спасибо, ведь простая же идея и должна быть достаточно легко реализуема. Преобразую в текст так, как мне нужно, потом вставлю в модуль в виде строки, состояющей из подстрок.
14 SleepyHead
 
гуру
09.07.18
06:44
(10) В исходном файле код есть, в преобразованном нет.
15 AliAksA
 
09.07.18
08:30
(8), (9) ммм ... а вот можно ещё и с СохранитьЗначение() и ВосстановитьЗначение() поколдовать, чтобы не лазить в конфигуратор а через обработку править
16 SleepyHead
 
гуру
09.07.18
08:48
Оказалось все еще проще. Открыл файл как текст в 1с8, сохранил как обычный текстовый документ.

Сохранил как обычный текст с кодовой страницей Windows.

Потом открыл этот текст в 1с77 и загнал его в табличный документ, все наконец получилось.

Ошибка была в том, что пытался работать с этим файлом только в 1с77.
17 Aleksey
 
09.07.18
08:54
(16)
    Табл = СоздатьОбъект("Таблица");
    Стрим = СоздатьОбъект("ADODB.Stream");
    Стрим.Type = 2;
    Стрим.charset = "windows-1251";
    Стрим.Open();
    Стрим.LoadFromFile("b:\ПравилаОбмена.xml");
    Стрим.charset = "utf-8";
    ВремТекст = СоздатьОбъект("Текст");
    й=0;
    Пока Стрим.EOS=0 Цикл
        й=й+1;
        Табл.Область(й,1).Текст = Стрим.readText(-2);
    КонецЦикла;
    Стрим.close();
    Табл.Показать();
    
    СтримВыход=СоздатьОбъект("ADODB.Stream");
    СтримВыход.Type=2;
    СтримВыход.charset="utf-8";
    СтримВыход.LineSeparator=-1;
    СтримВыход.Open();
    Для й = 1 по Табл.ВысотаТаблицы() Цикл
        СтримВыход.WriteText(Табл.Область(й,1).Текст);
    КонецЦикла;
    СтримВыход.SaveToFile("b:\ПравилаОбмена2.xml",2);
18 Aleksey
 
09.07.18
08:56
Первая половина кода открывает табличный документ в 7-ки с загруженными правилами, попутная преобразовывая в win кодировку


Вторая часть кода из табличного документа сохраняeт в xml файл правил в кодировки utf-8
19 mistеr
 
09.07.18
09:58
(0) Допилить обработку выгрузки, чтобы сама цепляла файл, который лежит рядом — слабо?
20 Бертыш
 
09.07.18
10:08
+19 Вот вот
А если мосье понимает толк в извращениях, то можно либо
а)Засунуть во внешнюю компоненту
б)При помощи внешней компоненты compound.dll или подобных решений DOcBrowser Fara засовывать правила внутрь самой обработки и потом с помощью приёма
http://catalog.mista.ru/public/115207/
Вытаскивать
21 SleepyHead
 
гуру
09.07.18
10:14
(19) А слабо тебе допилить обработку выгрузки так, чтобы она сама находила файл правил, потерянный пользователем ?
22 SleepyHead
 
гуру
09.07.18
10:14
(19) Когда ж вы читать научитесь, прежде чем комментировать..
23 SleepyHead
 
гуру
09.07.18
10:16
Если бы они каталоги не чистили, проблемы бы не было. Обработку я встроил в конфигурацию. Но месье 19 не читатье, по всей видимости, а писатель.
24 mistеr
 
09.07.18
10:16
(21) А файл обработки пользователь, значит, не теряет?
25 mistеr
 
09.07.18
10:18
(23) А зачем они "чистят каталоги"?
Как они базу еще не потеряли?
26 SleepyHead
 
гуру
09.07.18
10:18
(24) А как он его потеряет, если он встроен в конфу?
27 Бертыш
 
09.07.18
10:22
(26) А чего тогда правила не константа с типом бесконечная строка?
28 SleepyHead
 
гуру
09.07.18
10:23
(27) Это вариант, можно попробовать, спасибо.
(17) спасибо, этот вариант тоже попробую.
29 SleepyHead
 
гуру
09.07.18
10:24
(27) Правила могут меняться, так что у себя мне в любом случае придется хранить преобразовалку из правил в строку.
30 Адинэснег
 
09.07.18
10:33
(0) ты им продавай каждый раз, начнут трепетно хранить
31 SleepyHead
 
гуру
09.07.18
10:35
(30) Идея отличная, но увы :) Я не собираюсь вечно вариться в этом проекте.
32 Бертыш
 
09.07.18
10:39
Еже ли нет у них есть и есть v7plus.dll то можно положить правила на сайт и пусть себе обработка качает их при необходимости отработать
33 SleepyHead
 
гуру
09.07.18
10:44
(17) Чтение файла почему-то теряет заголовок XML, но это не проблема.

Как только при создании файла добавил первой строкой "<?xml version="1.0"?>", все заработало.

Спасибо за помощь, объектом V7TextFile не получалось, там нет возможности указать кодировку UTF-8, в остальном методы аналогичные.
34 SleepyHead
 
гуру
09.07.18
10:44
(32) Это бюджетники. Какой там сайт, там при входе с автоматами обыскивают, а выход в интернет только особо доверенным лицам.
35 d4rkmesa
 
09.07.18
11:40
(22) Не надоело в каждой теме брюзжать?

По теме, я бы сделал все в виде одной обработки в 8-ке приемнике, навроде загрузки данных из предыдущих версий.
36 SleepyHead
 
гуру
09.07.18
11:41
(35) А зачем мне делать обработку в 1с8, если есть технология КД2?
37 Вафель
 
09.07.18
11:43
Создай веб-сервис. поставь клиента на абонентку )))
38 JeHer
 
09.07.18
11:43
(36) Ну вот и тяни из 7-ки в 8-ку, подсунув в 8-ке правила обмена. Нафига действие "выгрузить" в 7-ке?
39 SleepyHead
 
гуру
09.07.18
11:43
(37) см. 34
40 SleepyHead
 
гуру
09.07.18
11:44
(38) Базы на разных серверах.
41 SleepyHead
 
гуру
09.07.18
11:45
(38) Скажите, а вы точно понимаете, что такое выгрузка/загрузка через КД2 ?
42 Вафель
 
09.07.18
11:45
а почему просто файл рядом не класть?
43 SleepyHead
 
гуру
09.07.18
11:45
Проблема уже решена, пошел решать следующую, всем спасибо.
44 Бертыш
 
09.07.18
12:52
(43) +42 . Кстати. Религия то не запрещает xml файлу изменять его стандартное расширение на другое. Если база у клиента dbf, то положить к прочим dbf и оно буде жить, цвести, пахнуть и бакапится
45 Ёпрст
 
09.07.18
13:48
(0) в мокселе можно хранить что угодно, потом распаковывать куда надо.
так, например
http://catalog.mista.ru/public/14459/

http://catalog.mista.ru/public/70304/
46 Ёпрст
 
09.07.18
13:54
47 d4rkmesa
 
10.07.18
10:27
(36) Я именно про КД2. Подключение и вызов выгрузки из 7-ки, а затем инициализация обработки универсального обмена с загрузкой правил и файла с выгруженными данными. Удобно для пользователя, в первую очередь, если, конечно, он оплачивает все свистелки и прочее.
48 SleepyHead
 
гуру
10.07.18
10:53
(47) Перечитайте тему. Разные сервера. ЗУП 3.1 на одном сервере, база 77 на другом. Разные админы (это я не писал), разные сети. Один с другим договаривается с трудом, молчу уж о пользователях.