Экспорт из jqGrid в Excel часть 2

Описанный вот здесь способ таки оказался неудобен. Однако я вспомнил что Excel отлично открывает файл в формате xml. И формат этот хорошо описан здесь. Так почему бы не формировать xml файл? Сказано — сделано. Код видоизменился в :

function exportExcel(list)
        {
            var mya=new Array();
            mya=$(list).getDataIDs(); 
            var data=$(list).getRowData(mya[0]);  
            var colNames=new Array(); 
            var ii=0;
            for (var i in data){colNames[ii++]=i;}
            var html="";            
            headxls="<?xml version='1.0'?><?mso-application progid='Excel.Sheet'?>"+"\n";
            sworkbook="<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet' xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns:ss='urn:schemas-microsoft-com:office:spreadsheet' xmlns:html='http://www.w3.org/TR/REC-html40'>"+"\n";
            eworkbook="</Workbook>"+"\n";
            styles="<Styles>"+"\n"+
                    "<Style ss:ID='borderedbold'>"+"\n"+
                    "<Borders>"+"\n"+
                    "	  <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "	  <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "	  <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "	  <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "</Borders>"+"\n"+
                    "<Font ss:Bold='1' /> "+"\n"+
                    "</Style>"+"\n"+
                    "<Style ss:ID='bordered'>"+"\n"+
                    "<Borders>"+"\n"+
                    "	  <Border ss:Position='Bottom' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "	  <Border ss:Position='Left' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "	  <Border ss:Position='Right' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "	  <Border ss:Position='Top' ss:LineStyle='Continuous' ss:Weight='1' /> "+"\n"+
                    "</Borders>"+"\n"+                    
                    "</Style>"+"\n"+                    
                    "</Styles> "+"\n";
            sworksheet="<Worksheet ss:Name='WorksheetName'>"+"\n";
            eworksheet="</Worksheet>"+"\n";
            stable="<Table>"+"\n";
            etable="</Table>"+"\n";
            columnw=""+
                    "<Column ss:Index='1' ss:AutoFitWidth='0' ss:Width='60' /> "+"\n"+
                    "<Column ss:Index='2' ss:AutoFitWidth='0' ss:Width='200' /> "+"\n"+
                    "<Column ss:Index='3' ss:AutoFitWidth='0' ss:Width='200' /> "+"\n"+
                    "<Column ss:Index='4' ss:AutoFitWidth='0' ss:Width='130' /> "+"\n"+
                    "<Column ss:Index='5' ss:AutoFitWidth='0' ss:Width='130' /> "+"\n"+
                    "<Column ss:Index='6' ss:AutoFitWidth='0' ss:Width='120' /> "+"\n";
            headcolumn=""+
                    	"<Row>"+"\n"+
			"   <Cell ss:StyleID='borderedbold'><Data ss:Type='String'>Номер</Data></Cell>"+"\n"+
			"   <Cell ss:StyleID='borderedbold'><Data ss:Type='String'>Склад</Data></Cell>"+"\n"+
			"   <Cell ss:StyleID='borderedbold'><Data ss:Type='String'>Номенклатура</Data></Cell>"+"\n"+
			"   <Cell ss:StyleID='borderedbold'><Data ss:Type='String'>Серия</Data></Cell>"+"\n"+
			"   <Cell ss:StyleID='borderedbold'><Data ss:Type='String'>Дата окончания</Data></Cell>"+"\n"+
			"   <Cell ss:StyleID='borderedbold'><Data ss:Type='String'>Количество</Data></Cell>"+"\n"+
			"</Row> "+"\n";
            
            html=html+headxls+sworkbook+styles+sworksheet+stable+columnw+headcolumn;
            
            for(i=0;i<mya.length;i++)
                {
                data=$(list).getRowData(mya[i]); 
                html=html+"<Row>"+"\n";
                for(j=0;j<colNames.length;j++)
                    {
                    html=html+"<Cell ss:StyleID='bordered'><Data ss:Type='String'>"+data[colNames[j]]+"</Data></Cell>"+"\n";                        
                    }
                html=html+"</Row>"+"\n";
                }
            html=html+etable+eworksheet+eworkbook;
            
            document.forms[0].csvBuffer.value=html;
            document.forms[0].method='POST';
            document.forms[0].action='inc/csvExport.php'; 
            document.forms[0].target='_blank';
            document.forms[0].submit();
        };
function ViewReports(list,pager){
jQuery(list).jqGrid({
   	url:'controller/server/operreports/viewremainssert.php',
	datatype: "json",
   	colNames:['Id','Склад','Номенклатура','Серия','Дата окончания','Количество'],
   	colModel:[
   		{name:'id',index:'id', width:20},
                {name:'sklad',index:'sklad', width:155, width:155,summaryType:'count', summaryTpl : '({0}) Всего:'},
   		{name:'namenome',index:'namenome', width:100},
		{name:'seria',index:'seria', width:100},
   		{name:'dtend',index:'dtend', width:100},
                {name:'kol',index:'kol', width:100,sorttype:'number',formatter:'number', summaryType:'sum'}
   	],
        grouping: true,
   	groupingView : {
   		groupField : ['sklad'],
   		groupText : ['<b>{0}</b>'],
                groupCollapse : true,
		groupSummary : true,
   	},        
        
        viewrecords: true,
   	height: 'auto',        
	autowidth: true,	
        shrinkToFit: true, 
   	pager: pager,
   	sortname: 'sklad',
    viewrecords: true,
    rowNum:1000,
    scroll:1,
    sortorder: "asc",    
    caption:"Просоченные сертификаты"
}); 
jQuery(list).jqGrid('navGrid',pager,{edit:false,add:false,del:false,search:false});
jQuery(list).jqGrid('navButtonAdd',pager,{caption:"<img src='controller/client/themes/"+theme+"/ico/disk.png'>",                              
        title: "Экспорт в Excel",
	onClickButton:function(){
            exportExcel(list);
	} 
});
};

   ViewReports("#tbl_rep","#pg_nav");

     $("#viewwork").click(function(){
           jQuery("#tbl_rep").GridUnload("#tbl_rep");
           ViewReports("#tbl_rep","#pg_nav");
    });

Экспорт из jqGrid в Excel

Вариантов на текущий момент два: использовать серверную часть проекта jqgrid-php, и перелопачивать таким образом свой код или написать обработчик на JavaScript который будет формировать файл формата csv. Я предпочел второй вариант. Однако столкнулся с «подводным» камнем. А именно, сайт у меня в кодировке utf8, а виндовый офис (с OpenOffice  и LibreOffice проблем нет) по умолчанию думает что всё что csv, то в формате windows-1251, и нет даже диалога выбора кодировки. Потому для устранения сей пришлось пойти на некоторую хитрость — формирую не файл не с расширением csv, а с расширением txt, с разделителем колонок — табуляция. А далее уже в Excel загружаю его через: Данные — Получение внешних данных — Из текста.

Читать далее Экспорт из jqGrid в Excel

Работа с JSON из 1С

Захотел брать в таблицы jqgrid данные из 1С. Казалось бы простая задача, сформировать в 1С массив JSON. Однако оказалось не все так просто. В УПП 1.3 общих функций для работы с JSON нет. А в Управлении Торговлей — есть. Пришлось выдернуть нужные функции оттуда.
Читать далее Работа с JSON из 1С

Получение данных из 1С в PHP используя WEB сервисы 1С

По мотивам статьи «Прямой доступ к базе 1С через MSSQL«. Как уже писал ранее — не понравилось. Жутко трудозатрадно рисовать запросы «руками», сопоставляя структуру из конфигуратора структуре в MS SQL.

Однако есть способ проще. Не использовал его сразу, т.к. у меня были проблемы с настройкой сервиса на стороне 1С. Итак, для примера сделаем классический HelloWorld веб сервис, от которого лишь требуется ответить что-то на какой-то запрос. А заодно напишем клиентскую часть на PHP, которая собственно этот запрос пошлет и обработает ответ. Ниже далее подразумевается что IIS или Apache у вас на сервере где стоит 1С установлен и настроен. Как? Спросите у гугла, это не сложное действо, потому и не буду описывать.
Читать далее Получение данных из 1С в PHP используя WEB сервисы 1С

Обзор планшета GDIPPO 908A Android 4.2 RK3188

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

Вот его заявленные характеристики:

Операционная система: Android 4.2.2
Процессор/чипсет:    Rockchip RK3188 Cortex A9 quad core 1800МГц
Количество ядер:    4
Оперативная память:    2 гб DDR3
Встроенная память:    16 Гб
Поддержка карт памяти:    microSDHC
Экран:    9.7", 2048 x 1536
Тип экрана:    IPS, Retina
Сенсорный экран:    емкостный, мультитач
Видеопроцессор:    Mali 400 MP4
Беспроводная связь: WiFi, Bluetooth 
3G: нет
GPS: нет
Тыловая камера: 2.0 млн пикс.
Фронтальная камера: 1.3 млн пикс.
Датчики:    акселерометр, гироскоп, компас
Подключение к телевизору/монитору:    Mini HDMI
Емкость аккумулятора:    8000 мАч
Размеры (ДхШхГ):    240 x 187 x 10 мм
Вес:    604 гр

В комплект входит:
1 х Зарядное устройство
1 х USB кабель
1 х OTG кабель
1 х Руководство пользователя

Снимки с камер смысла приводить не вижу — стандартные, низкого качества при слабом свете и приемлемые при хорошем освещении и на улице.

Что хорошего в планшете? Ну конечно экран. И в самом деле разрешение очень хорошее. Отлично виден в браузере любой сайт, нет никаких искажений и отличий по сравнению с «настольным ПК» .

ANTUTU бенчмарк показывает 18194 попугая. Ну это кому интересно письками мерятся. Нам же интересен реальный результат по ощущениям. А он следующий: по сравнению с моим предыдущим планшетом (PIPO M1 MAX), этот планшет «лагает» значительно сильнее. Т.е. временами просто «зависет» на несколько десятков секунд на совершенно пустом месте. Что очень и очень раздражает. А так, в принципе по производительности никаких нареканий нет. Основные игры, а это для нас Angry Birds совершенно не тормозят. Чуток притормаживают игрушки в 3D, но это нормально для такого планшета, учитывая разрешение экрана в 2048х1536 точек.

Еще одним разочарованием явилась не стабильная работа WIFI. А именно WIFI работает хорошо только в непосредственной близости от роутера. Стоит уйти в другую комнату, соединение начинает рандомно рваться. Может быть дело в чехле.

Ну и аккумулятор. Заявленные 5-6 часов держит только с выключенным WIFI. При обычной-же работе в интернете — хватает примерно 2 часа.