Часто бывает необходимость обновить конфигурацию. Если 1 или 2 пропущенных релиза, не страшно. Но когда это годовалая база без обновлений, или больше, уже проблема.
А если еще нет возможности обновиться на автомате, встроенными средствами это уже боль.
Сидеть и смотреть в таблицу, а какой можно релиз пропустить, а какой нет, может затратить много времени. А еще и скачать, а еще и если ошибся в цифре. Нервы на грани.
По запросу расплодилось много онлайн калькуляторов, некоторые еще и монетизируются. Я пошёл по другому пути. В связи с разработками мне пришлось поднять веб сервер, с публикацией базы для отладки. И 127.0.0.1 на адресе у меня красовался слоган «Привет, мир». Вот и решил его занять делом.
Написал небольшой скрипт в файле index.html, который читает таблицу в формате CSV и заполняет таблицу на экране браузера.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Путь обновлений</title>
<style>
table {
border-collapse: collapse;
width: 100%;
}
th, td {
border: 1px solid black;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
}
tr:hover {
background-color: #f5f5f5;
}
/* Стиль для скрытия 5-ой колонки */
td:nth-child(5), th:nth-child(5) {
display: none;
}
</style>
</head>
<body>
<select id="fileSelect">
<option value="roznica.csv">1С:Розница</option>
<option value="buh.csv">1С:Бухгалтерия</option>
<!-- Добавить другие конфиги -->
</select>
<p>Выбранный релиз: <span id="selectedRelease">None</span></p>
<p>Путь обновления: <span id="updatePath">None</span></p>
<table id="updatesTable">
<thead>
<tr>
<th>Номер версии</th>
<th>Дата релиза</th>
<th>Доступно с версии</th>
<th>Версия платформы</th>
<th>Ссылка на обновление</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
<script>
function loadCSVData(url) {
fetch(url).then(response => response.text()).then(data => {
const table = document.getElementById('updatesTable').getElementsByTagName('tbody')[0];
table.innerHTML = '';
const rows = data.split('\n');
let firstRow = true;
rows.forEach(rowData => {
if (firstRow) {
firstRow = false;
return;
}
const row = table.insertRow();
const cells = rowData.split(';');
cells.forEach(cellData => {
const cell = row.insertCell();
cell.textContent = cellData;
});
row.onclick = handleRowClick;
});
});
}
function handleRowClick(event) {
const row = event.currentTarget;
if (row.cells.length < 5) {
return;
}
const release = row.cells[0].textContent.trim();
document.getElementById('selectedRelease').textContent = release;
const table = document.getElementById('updatesTable').getElementsByTagName('tbody')[0];
let currentVersion = release;
const path = [{ version: currentVersion, url: row.cells[4].textContent.trim() }];
let lastMatchedVersion = null;
for (let i = table.rows.length - 1; i >= 0; i--) {
const row = table.rows[i];
if (row.cells.length < 5) {
continue;
}
const version = row.cells[0].textContent.trim();
const availableFrom = row.cells[2].textContent.split(',').map(v => v.trim());
const url = row.cells[4].textContent.trim();
if (availableFrom.includes(currentVersion)) {
lastMatchedVersion = { version: version, url: url };
} else if (lastMatchedVersion) {
path.push(lastMatchedVersion);
currentVersion = lastMatchedVersion.version;
lastMatchedVersion = null;
i = table.rows.length;
}
}
if (lastMatchedVersion) {
path.push(lastMatchedVersion);
}
if (path.length === 1) {
document.getElementById('updatePath').textContent = "Путь обновления не найден";
} else {
document.getElementById('updatePath').innerHTML = path.reverse().map(step => `<a href="${step.url}" target="_blank">${step.version}</a>`).join(' <<< ');
}
}
function handleFileChange(event) {
const selectedFile = event.target.value;
loadCSVData(selectedFile);
}
document.getElementById('fileSelect').onchange = handleFileChange;
window.onload = () => loadCSVData('roznica.csv');
</script>
</body>
</html>
При выделении строки по короткому пути выстраивается путь обновлений. Каждый релиз в пути виде гиперссылки с адресом URL из 5 колонки таблицы в файле CSV.
В моем случае домашняя страница веб сервера находится на компьютере на C:\Apache24\htdocs.
Веб сервер у меня, как видно, по пути Apache, но подойдёт и IIS.
У меня в ней 3 файл index(сама HTML страница), и 2 таблице roznica и buh
И вуаля, калькулятор со своими ссылками на скачивания всегда под рукой. А если у вас белый Ip, то доступно хоть откуда. Не надо каждый раз просчитывать, не надо каждый раз нырять в «1с портал».
Как поставить Апач //infostart.ru/1c/articles/691604/ и //infostart.ru/1c/articles/646384/ в статьях описано.
При желании легко добавить таблицы других конфигураций.
ПС. Просто запустить html файл в одной папке с таблицей не выйдет без Веб сервера, в скрипте нужно тогда прописывать прямой путь до файлов таблицы.