Добрый день, Коллеги!
Возникла необходимость формировать программно таблицы значений в таблицы HTML в виде строкового типа 1С, нашел готовый вариант функции: //infostart.ru/public/174149/ но не подошла.
Возможно выше озвученная функция реализована более грамотно, не хотелось её исправлять под себя (это же разбираться надо, а иногда это дольше, чем с нуля), мне нужен простой вариант с возможностью задания цвета шапки таблицы, а так же некоторым колонкам задать свои имя или (и) ширину при необходимости. Вот по этому и родилась данная функция, возможно будет кому-то полезна.
Так же данную функцию можно считать дополнением к моей публикации - Массовая рассылка писем в формате HTML
Ещё хочется отметить, что с помощью параметра можно вывести первую колонку "пункт по порядку", который часто необходим.
Функция ТаблицаЗначенийВТаблицуХТМЛ(ТабЗначений,СтруктураПараметрыТаблицыХТМЛ = Неопределено) Экспорт
//СтруктураПараметрыТаблицыХТМЛ
//
//Общие параметры:
//СтруктураПараметрыТаблицыХТМЛ.ШиринаТаблицы - общая ширина таблица
//СтруктураПараметрыТаблицыХТМЛ.ЦветШапки - цвет шапки таблицы пример "eadbaf"
//СтруктураПараметрыТаблицыХТМЛ.ПунктПорядкуИспользуется - по умолчанию ЛОЖЬ
//
//Индивиуальные для каждой колонки:
//СтруктураПараметрыТаблицыХТМЛ.Заголовок1 - заголовок для первой колонки, цифра на конце обознает номер колонки (не с нуля)
//СтруктураПараметрыТаблицыХТМЛ.Ширина1 - ширина для первой колонки, цифра на конце обознает номер колонки (не с нуля)
//СтруктураПараметрыТаблицыХТМЛ.Положение1 - отвечает за положение текста в колонке (по умол. лево), передовать "center" или "right"
//ТабЗначений = Новый ТаблицаЗначений;
МассивИменКолонок = Новый Массив;
Если ТипЗнч(СтруктураПараметрыТаблицыХТМЛ) <> Тип("Структура") Тогда
СтруктураПараметрыТаблицыХТМЛ = Новый Структура;
КонецЕсли;
КоличествоКолонок = ТабЗначений.Колонки.Количество();
ПунктПорядкуИспользуется = ?(СтруктураПараметрыТаблицыХТМЛ.Свойство("ПунктПорядкуИспользуется"),СтруктураПараметрыТаблицыХТМЛ.ПунктПорядкуИспользуется,ЛОЖЬ);
Если КоличествоКолонок < 0 Тогда
Возврат Неопределено;
КонецЕсли;
ЦветШапки = ?(СтруктураПараметрыТаблицыХТМЛ.Свойство("ЦветШапки")," bgcolor=""#" + СтруктураПараметрыТаблицыХТМЛ.ЦветШапки + """","");
ШиринаТаблицы = ?(СтруктураПараметрыТаблицыХТМЛ.Свойство("ШиринаТаблицы")," style=""width:" + СтруктураПараметрыТаблицыХТМЛ.ШиринаТаблицы + "px""","");
ТаблицаХТМЛ = "<table border=""1"" cellpadding=""1"" cellspacing=""0"" " + ШиринаТаблицы + ">
|<tbody>
|<tr>";
//Первым выводим столбик П/П если он задан в шапку
Если ПунктПорядкуИспользуется Тогда
ТаблицаХТМЛ = ТаблицаХТМЛ + "
|<td" + ЦветШапки + " style=""width:30px"" align=""center"">п/п</td>";
КонецЕсли;
//Формируем шапку
Для Счетчик = 1 по КоличествоКолонок Цикл
ИмяСвойстваШирина = "Ширина" + Счетчик;
ШиринаСтолбца = ?(СтруктураПараметрыТаблицыХТМЛ.Свойство(ИмяСвойстваШирина)," style=""width:" + СтруктураПараметрыТаблицыХТМЛ[ИмяСвойстваШирина] + "px""","");
ИмяКолонки = ТабЗначений.Колонки[Счетчик-1].Имя;
ИмяСвойстваЗаголовок = "Заголовок" + Счетчик;
ЗаголовокКолонки = ?(СтруктураПараметрыТаблицыХТМЛ.Свойство(ИмяСвойстваЗаголовок),СтруктураПараметрыТаблицыХТМЛ[ИмяСвойстваЗаголовок],ИмяКолонки);
ТаблицаХТМЛ = ТаблицаХТМЛ + "
|<td" + ЦветШапки + ШиринаСтолбца + " align=""center"">" + ЗаголовокКолонки + "</td>";
МассивИменКолонок.Добавить(ИмяКолонки);
КонецЦикла;
ТаблицаХТМЛ = ТаблицаХТМЛ + "
|</tr>";
//Заполняем таблицу
ПунктПорядку = 0;
Для каждого СтрокаТаблицы Из ТабЗначений Цикл
ПунктПорядку = ПунктПорядку + 1;
ТаблицаХТМЛ = ТаблицаХТМЛ + "
|<tr>" + ?(ПунктПорядкуИспользуется, Символы.ПС + "<td align=""center"">" + ПунктПорядку + "</td>","") + "";
Для Счетчик = 0 по КоличествоКолонок - 1 Цикл
ИмяСвойстваПоложение = "Положение" + Строка(Счетчик + 1);
Положение = " align=""" + ?(СтруктураПараметрыТаблицыХТМЛ.Свойство(ИмяСвойстваПоложение),СтруктураПараметрыТаблицыХТМЛ[ИмяСвойстваПоложение],"left") + """";
ТаблицаХТМЛ = ТаблицаХТМЛ + "
|<td " + Положение + ">" + СтрокаТаблицы[МассивИменКолонок[Счетчик]] + "</td>";
КонецЦикла;
ТаблицаХТМЛ = ТаблицаХТМЛ + "
|</tr>";
КонецЦикла;
ТаблицаХТМЛ = ТаблицаХТМЛ + "
|</tbody>
|</table>";
Возврат ТаблицаХТМЛ;
КонецФункции
Пример использования #1 - Формируем страничку HTML
Демонстрация работы приводиться на моей конфигурации Тренажер для тестирования (удобно использоваться для подготовки к профессионалу и не только).
Код обработки с заданием ряда параметров для будущей таблицы HTML. Создается готовый 1.html файл на диске, в котором содержится искомая таблица.
&НаКлиенте
Процедура ЧтоТоСделать(Команда)
КодСтраницыХТМЛ = "<html><BODY>" + Символы.ПС + ПолучитьТаблицуХТМЛ() + Символы.ПС + "</BODY></html>";
ТекстовыйДокумент = Новый ТекстовыйДокумент;
ТекстовыйДокумент.УстановитьТекст(КодСтраницыХТМЛ);
ТекстовыйДокумент.НачатьЗапись(,"C:\public\1.html","windows-1251");
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьТаблицуХТМЛ()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| котВопросы.Курс КАК Курс,
| котВопросы.Раздел КАК Раздел,
| котВопросы.НомерВопроса КАК НомерВопроса,
| котВопросы.Вопрос КАК Вопрос,
| котВопросы.НаличиеКартинки КАК НаличиеКартинки,
| котВопросы.НомерВерногоОтвета КАК НомерВерногоОтвета
|ИЗ
| РегистрСведений.котВопросы КАК котВопросы";
ТаблицаЗначений = Запрос.Выполнить().Выгрузить();
Параметры = Новый Структура;
Параметры.Вставить("ПунктПорядкуИспользуется",ИСТИНА);
Параметры.Вставить("ШиринаТаблицы","800");
Параметры.Вставить("ЦветШапки","eadbaf");
Параметры.Вставить("Ширина3","300");
Параметры.Вставить("Положение2","center");
Параметры.Вставить("Положение3","center");
Параметры.Вставить("Положение6","center");
Параметры.Вставить("Заголовок3","Номер вопроса");
Параметры.Вставить("Заголовок5","Наличие картинки");
Параметры.Вставить("Заголовок6","Правильный ответ");
ТаблицаХТМЛ = ТаблицаЗначенийВТаблицуХТМЛ(ТаблицаЗначений,Параметры);
Возврат ТаблицаХТМЛ;
КонецФункции
Результат работы выше написанного кода:
Пример использования #2 - Отправляем таблицу HTML в электронном письме
Но прямое использование породившее функцию для уведомлений по почте в теле HTML сообщения электронной почты:
Удачного кодинга!