Печать
Родительская категория: Статьи
Категория: 1C

В данной статье рассмотрим возможность работы с базой данных MySQL из программно. К примеру, сделаем выгрузку прайса из 1С Управление торговлей на сайт в БД MySQL.

В предыдущей статье мы делали выгрузку простого прайса из 1С УТ в формате HTML - создавали таблицу с волями: Товар, Артикул, Цена, Остаток на складе.

В данном случае принцип будет несколько отличаться: мы записываем данные в БД MySQL через запросы на PHP. Именно PHP файлы мы будем программно формировать в 1С и выполнять их так же на стороне 1С через HTTP подключение.

Возьмем за основу нашу базу данных MySQL, где будет таблица Товары('trd_goods") - именно в ней будет храниться каталог, который будет отображаться на сайте.

Структура таблицы trd_goods:

 Файл index.php расположен в директории testprice на нашем сайте и выводит каталог. Текст файла index.php:

<?php
include 'connection.php';

$query1 = mysqli_query($link, "SELECT * FROM trd_goods");

$myrow = mysqli_fetch_array($query1);

echo "<h3>Прайс</h3>";
echo "<table><tbody>";
echo "<tr><td><b>Артикул</b></td><td><b>Наименование</b></td><td><b>Цена</b></td><td><b>Количество</b></td></tr>";
while($row=mysqli_fetch_array($query1))
{
echo "<tr><td>" . $row['article_number'] . "</td><td>" . $row['name'] . "</td><td>" . $row['price'] . "</td><td>" . $row['quantity'] . "</td></tr>";
}
echo "</tbody></table>";
?>

В файле connection.php - параметры подключения к БД: $link = mysqli_connect("server", "user", "password", "data_base_name");

Основные запросы к БД MySQL, которые мы будем использовать:

Добавить строку в таблицу: 

$query1 = mysqli_query($link, "INSERT INTO trd_goods (name, article_number, price, quantity) VALUES ('[name]', '[article_number]', '[price]', '[quantity]')");

Очистить таблицу Товары:

$query1 = mysqli_query($link, "TRUNCATE TABLE trd_goods;");

 

Обработка 1С.

Ссылка на обработку

 

&НаСервере
Функция ПодключитьсяКFTPСерверу()
Соединение = Новый FTPСоединение(
"server.ru", // адрес ftp сервера
21, // порт
"user", // логин
"password", // пароль
Неопределено, // прокси не используется
Истина, // пассивный режим работы
0, // таймаут (0 - без ограничений)
Неопределено // незащищенное соединение
);
Возврат Соединение;
КонецФункции

&НаСервере
Процедура ВыгрузитьПрайсНаСервере()
Соединение = ПодключитьсяКFTPСерверу();
Соединение.УстановитьТекущийКаталог("/public_html/testprice/");

ТекстовыйДок = Новый ТекстовыйДокумент;

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Номенклатура.Артикул КАК Артикул,
| ЦеныНоменклатурыСрезПоследних.Номенклатура КАК Номенклатура,
| ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
| ЕСТЬNULL(ТоварыОрганизацийОстатки.КоличествоОстаток, 0) КАК Количество
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &Период,
| ВидЦены = &ВидЦены
| И Номенклатура.ПометкаУдаления = ЛОЖЬ) КАК ЦеныНоменклатурыСрезПоследних
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.Остатки(&Период, ) КАК ТоварыОрганизацийОстатки
| ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = ТоварыОрганизацийОстатки.АналитикаУчетаНоменклатуры.Номенклатура.Ссылка";

Запрос.УстановитьПараметр("ВидЦены", Справочники.ВидыЦен.НайтиПоНаименованию("Мин цена продажи"));
Запрос.УстановитьПараметр("Период", ТекущаяДата());
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();

//Текст файла начало
ТекстовыйДок.ДобавитьСтроку("<?php include 'connection.php';");
ТекстовыйДок.ДобавитьСтроку("$query1 = mysqli_query($link, ""TRUNCATE TABLE trd_goods;"");");

Пока Выборка.Следующий() Цикл
ТекстовыйДок.ДобавитьСтроку("$query1 = mysqli_query($link, ""INSERT INTO trd_goods (name, article_number, price, quantity) VALUES ('"+Выборка.Номенклатура+"', '"+Выборка.Артикул+"', '"+Выборка.Цена+"', '"+Выборка.Количество+"')"");");
КонецЦикла;
ТекстовыйДок.ДобавитьСтроку("?>");
//Текст файла конец

ВременныйФайл = ПолучитьИмяВременногоФайла("php");
ТекстовыйДок.Записать(ВременныйФайл);
Соединение.Записать(ВременныйФайл,"update.php");

Объект.ПолеHTMLДокумента1 = "http://informatiktv.ru/testprice/update.php";

КонецПроцедуры

Подробнее в видео: