1

Тема: 1C--->txt--->MT (Выгрузка из 1С)

Есть задача создать (и поддерживать в актуальном состоянии) каталог продукции путем выгрузки данных из 1С в промежуточный файл и с последующей загрузкой в МТ.
(не сильно ли сумбурна моя мысль в столь ранний час)

промежуточный txt файл выглядит примерно так (категория, артикул, название, цена. кол-во на складе и тд и тп)

Выгрузкаиз1С
+
00000004    Компьютерные                                0   
Z0000813    Консольные                                0   
Z0002669    Blu-ray                                0   
00000666    DVD                                0   
00000008    Аудио CD                                0   
00000021    Расходные                                0   
00038891    Журналы                                0   
PY006345    Билеты                                0   
Z0005185    Адан "Жизель" 2сд    500,00    1    Классика            00000008        1   
Z0005186    Адан "Почтальен из лонжюмо" 2сд    500,00    1    Классика            00000008        1   
Z0005187    Аллегри "Miserere / Messe vidi turbam magnam / Motets" 2сд    180,00    1    Классика            00000008        1   
Z0005190    Альбенис "Иберия / Наварра / испанская сюита" 2 CD    250,00    1    Классика            00000008        1   
Z0005192    Альбенони "Соч.1 Трио сонаты"    180,00    1    Классика            00000008        1   
Z0005195    Альбенони "Соч.5 Концерты"    180,00    1    Классика            00000008        1   
Z0005196    Альбенони "Соч.6 Гармонические забавы" 2 CD    250,00    1    Классика            00000008        1   
Z0005200    Альбенони "Соч.7 Концерты"    180,00    2    Классика            00000008        1   
Z0005202    Альбенони "Соч.9 Адажио для органа" 2 CD    250,00    0    Классика            00000008        1   
Z0005204    Аренский "Силуеты"    180,00    1    Классика            00000008        1   
Z0005206    Аренский "Фортепианные миниатюры"    180,00    1    Классика            00000008        1

Всю эту гадость нужно "загнать" в МТ и периодически обновлять таким же методом..
каталог должен получится самый обычный - одна категория=1 лист с таблицей, например такого плана  (на корзинки внимания не обращайте)

Друзья, какие у вас будут соображения на сей счёт?
Быть может у Вас уже был опыт импорта-экпорта через *.xls *.csv *.txt в Movable Type

2

Re: 1C--->txt--->MT (Выгрузка из 1С)

не понимаю зачем микроскопом пытаться забивать гвозди?
Вам что нужно? Страничка каталога товаров? Ну так сделайте просто парсер который будет клеить из вашего файл.тхт - хтмл страницу, а на неё просто сделайте ссылки.
Или как вы сами себе это представляете?

3

Re: 1C--->txt--->MT (Выгрузка из 1С)

я не программист, поэтому обратился с вопросом

4

Re: 1C--->txt--->MT (Выгрузка из 1С)

На самом деле, мысль интересная. Многие CMS поддерживают импорт из 1С. Было бы хорошо, если можно было бы настраивать экспорт из 1С в формат Movable Type. Такое возможно?

5

Re: 1C--->txt--->MT (Выгрузка из 1С)

Фича не сложная для программера, тут смысл в каком формате 1С выдает инфо, в тексте или еще как... Я писал прогу которая обрабатывала *txt  файл... жопа...

6

Re: 1C--->txt--->MT (Выгрузка из 1С)

выгрузка идёт в *тхт, формат как в первом посте, целиковый файл весит 2.5 мб
лежит тут - http://narod.ru/disk/5329938000/goods.txt.tar.gz.html (в tar.gz ~566,1 Кбайт)

7

Re: 1C--->txt--->MT (Выгрузка из 1С)

liketts пишет:

я не программист, поэтому обратился с вопросом

liketts пишет:

Друзья, какие у вас будут соображения на сей счёт?

Вы простите про соображения спрашивали, надо было сразу говорить что нужен пример.

<?php

set_time_limit(0);

$filename  = "goods.txt"; // Файл выгрузки
$filewrite = "temp.html"; // Получаемый файл. Должны быть права на запись.

$goods = file($filename);

$htmltemplate = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\"><html lang=\"ru\" xmlns=\"http://www.w3.org/1999/xhtml\"><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /></head>
                <body>Начинаем упражнения:<br><br>";

foreach($goods as $good){
    $vars = explode("\t", $good);
    if(count($vars) > 0){

        $htmltemplate .= "<font size=\"1px\">
        Код товара:".$vars[0]."&nbsp;&nbsp;&nbsp;
        Имя товара:".$vars[1]."&nbsp;&nbsp;&nbsp;
        Цена товара:".$vars[2]."&nbsp;&nbsp;&nbsp;"
            .$vars[3]."&nbsp;&nbsp;"
            .$vars[4]."&nbsp;&nbsp;"
            .$vars[5]."&nbsp;&nbsp;"
            .$vars[6]."&nbsp;&nbsp;"
            .$vars[7]."&nbsp;&nbsp;"
            .$vars[8]."&nbsp;&nbsp;"
            .$vars[9]."&nbsp;&nbsp;";

        $htmltemplate .= "<br />";
    }
}

$htmltemplate .="</body></html>";

if (is_writable($filewrite)){
    if (!$handle = fopen($filewrite, 'w')) {
         echo "Не могу открыть файл ($filewrite)";
         exit;
    }

    if (fwrite($handle, $htmltemplate) === FALSE){
        echo "Не могу произвести запись в файл ($filewrite)";
        exit;
    }

    echo "All done";

    fclose($handle);
}else{
    echo "Файл $filewrite недоступен для записи";
}
?>

Вот сделал вам пример, который разобьет ваш файл и сделает из него html страничку. Далее стоит поиграться с дизайном, что бы подогнать под стиль сайта и сделать разбиение на несколько файлов, например по 100 результатов, а то файлы слишком большие получаются.

8

Re: 1C--->txt--->MT (Выгрузка из 1С)

saahov пишет:

Было бы хорошо, если можно было бы настраивать экспорт из 1С в формат Movable Type. Такое возможно?

А что такое формат Movable Type ?

Мы же говорим о простых данных, возникают логичные вопросы:
[listo][li]Где их хранить?[/li][li]Как их представлять?[/li][/listo]

Причем тут MT вообще не понимаю? Или вы хотите ими из админки управлять?

9

Re: 1C--->txt--->MT (Выгрузка из 1С)

Формат Movable Type — это что-то типа этого:

BODY:
This is the body.
-----
EXTENDED BODY:
Here is some more text.
-----
COMMENT:
AUTHOR: Foo
DATE: 01/31/2002 15:47:06
This is
the body of this comment.
-----
PING:
TITLE: Foo Bar
URL: http://www.foo.com/baz/archives/000015.html
DATE: 08/05/2002 04:05:23 PM
This is
the excerpt of the ping.
-----

Подробнее: http://www.movabletype.org/documentatio … ormat.html

Добавлено спустя       47 секунд:
Т.е. обычный текстовый файл, в котором контент расположен определённым образом.

10

Re: 1C--->txt--->MT (Выгрузка из 1С)

saahov пишет:

Т.е. обычный текстовый файл, в котором контент расположен определённым образом.

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

11

Re: 1C--->txt--->MT (Выгрузка из 1С)

Rpsl а разбивка по алфавиту сильно трудоёмка? ;)

12

Re: 1C--->txt--->MT (Выгрузка из 1С)

Rpsl пишет:

Вот сделал вам пример, который разобьет ваш файл и сделает из него html страничку. Далее стоит поиграться с дизайном, что бы подогнать под стиль сайта и сделать разбиение на несколько файлов, например по 100 результатов, а то файлы слишком большие получаются.

:) долго писал? 1С может сохранять файлы и в формате html... только по моему криво таблица сохраняется...

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

1.    ВОДКА НЮАНС МЕДОВАЯ  ШАЦК 0,5Л.     40 %    1/20    0.5 Л.    66.55 РУБ.
2.      Водка НЮАНС МЕДОВАЯ  ШАЦК 0,5Л.     40 %    1/20    0.5 Л.    66.55 Руб.

это одна и та-же водка только забита по разному, поэтому приходится писать еще кучу дополнительного кода как-то:

1. перевод регистр букв, например все буквы в файле должны быть большими
2. анализ и удаление одинаковых строк, если один из параметров строки еще имеет и количество, что тоже реально, то необходимо сплюсовать оба значения количества

а еще бывают такие сокращения как:

гор. настойка
горьк. наст.

и это то-же одинаковые позиции, тут я голову особо не ломал, просто смотрел визуально весь файл и прописал в коде:

while(<HJ>){
$_ =~ s/ГОР.НАСТ./ГОРЬКАЯ НАСТОЙКА /g || s/ГОРЬК.НАСТ./ГОРЬКАЯ НАСТОЙКА / || s/НАСТ. ГОР./ГОРЬКАЯ НАСТОЙКА /g;
$_ =~ s/ВИН.НАП./ВИННЫЙ НАПИТОК /g || s/СЛАД.НАСТ./СЛАДКАЯ НАСТОЙКА /g || s/КОКТ./КОКТЕЙЛЬ /g;
$_ =~ tr/"/ /;
if($_ =~ m/\s*?(\d+)\.(\d+)\s*?(РУБ\.)/ || m/\s*?(\d+)\s*?(РУБ\.)/){
print JK "$_\n";
}

вообще лучше обратится на какую-нибудь фриланс биржу а там тебе однозначно помогут, за деньги разумеется.

Отредактировано marlik (04:02:2009 18:23:51)