Пробуем ReactJS

Если честно, пока не представляю, что можно сделать с ReactJS, что нельзя сделать удобно и понятно при помощи Jquery+PHP. Но решил таки попробовать. Итак, что такое ReactJS — фактически это надстройка над JavaScript написанная на языке JavaScript. Т.е. всё что написано на ReactJS — компилируется или «на лету» при помощи babel в javascript или при выкладывании в «продакт» и далее подключается вызовом обычного JavaScript.

Чтобы не разделять «продакт» «девелоп» и не возиться с бабелом, я у себя настроил один из вариантов, а именно в косоли висит запущеный скрипт-компилятор, который мониторит изменения файлов в папке src и при изменении чего-либо, компилирует файл в папку js. Соответственно всегда имеем «продакт».

Что нужно сделать чтоб начать пользоваться ReactJS:

1) Поставить NodeJS и ReactJS на компьютере где разрабатываем (компиляция кода ReactJS в JavaScript происходит при помощи его):

apt install nodejs
npm install babel-cli@6 babel-preset-react-app@3

2) Ставим npx — утилита которая позволяет запускать npm пакеты

npm install -g npx

3) Зпаускаем в консоли что-типа:

npx babel --watch src --out-dir js --presets react-app/prod

В моем случае все скрипты из папки src компилируются в папку js

В итоге html страница может выглядеть так:

<!DOCTYPE html>
<html>    
    <script src="https://unpkg.com/react@16/umd/react.development.js" crossorigin></script>
    <script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin></script>
    <head>
        <meta charset="UTF-8">
        <title id="rj_title"></title>
    </head>
    <body id="rj_body">
        <div id="root"></div>
        <script src="js/test.js"></script>
    </body>
</html>

а файл src/test.js так:

const name='Павел Игоревич';
const element = <h1>Привет {name}!</h1>;
ReactDOM.render(
  element,
  document.getElementById('root')
);

В браузере выведет:

jqgrid-free экспорт в эксель

В «свободном» форке jqgrid, к сожалению нет «встроенного» способа сформировать на основании таблицы файл Excel. Однако можно использовать сторонний способ https://github.com/SheetJS/sheetjs

Тогда код может получиться примерно следующий:

        jQuery("#paylist").jqGrid('navButtonAdd',"#paypager",{caption:'Excel',                              
             title: "Выгрузить в Excel",buttonicon: "none",position:"last",
             onClickButton:function(){                
                          var filename = "export_rents.xlsx",
                            data = $("#paylist").getRowData();
                            dataAsArray = [["dt", "amount", "comment"]];
                              for (i = 0; i < data.length; i++) {
                                item = data[i];
                                dataAsArray.push([item.dt, item.amount, item.comment]);
                              }
                              var ws_name = "SheetJS";
                              var wb = XLSX.utils.book_new(),
                                  ws = XLSX.utils.aoa_to_sheet(dataAsArray);
                              XLSX.utils.book_append_sheet(wb, ws, ws_name);
                              XLSX.writeFile(wb, filename);                
             }        
         });

Иногда при попытке установить (apt-get update) какой то пакет в Ubuntu можно увидеть ошибки вида:

Ош  http://security.ubuntu.com vivid-security/multiverse i386 Packages
  404  Not Found [IP: 91.189.91.24 80]
W: Не удалось получить http://ru.archive.ubuntu.com/ubuntu/dists/vivid/main/source/Sources  404  Not Found [IP: 213.180.204.183 80]

Скорее всего это лишь означает, что версия Ubuntu устарела, и обновления и пакеты далее доступны по другому адресу:

http://old-releases.ubuntu.com/ubuntu/pool/main/

Что делать: открываем файл источников ПО, и заменяем ссылки вида http://security.ubuntu.com на http://old-releases.ubuntu.com/

mcedit /etc/apt/sources.list

mysql_virtual_alias_maps.cf is unavailable. unsupported dictionary type: mysql после обновления Postfix

После обновления части пакетов, обновился и postfix. После чего перестала отправляться/приниматься почта с ошибкой в логах:

mysql_virtual_alias_maps.cf is unavailable. unsupported dictionary type: mysql

Решение: отвалился модуль postfix-mysql. Порывшись так и не нашел как установить сиё через pkg install

Поставил posfix из портов, отметив модуль mysql

pkg remove postfix
cd /usr/ports/mail/postfix-sasl
make config
make install

Массовая печать «Счетов на оплату» и «Акт выполненных работ» в Розница 2.2

Задача: в некой таблице перечислены документы, для которых нужно программно вывести печатные формы счетов и актов.

Решение:

&НаСервере
Функция ПолучитьПечатнуюФормуСчета()
	// вхДок это просто ссылка на документ счет на оплату покупателю
	ттт=новый ТабличныйДокумент();
	для каждого стр из объект.Контрагенты цикл
		счДок=стр.Счет;	
		сообщить(счДок);
		ОбъектыПечати = Новый СписокЗначений;
		ОбъектыПечати.Добавить(счДок.ПолучитьОбъект());
		МассивОбъектов = Новый Массив();
		МассивОбъектов.Добавить(счДок); 
		ПараметрыПечати = Новый Структура;
		ТаблицаСведенийСчетНаОплату=Документы.СчетНаОплатуПокупателю.ПолучитьТаблицуСведенийСчетаНаОплату(МассивОбъектов);
		ПараметрыПечати.Вставить("ВидДокументаПечати",  "СчетНаОплатуПокупателю");
		ПараметрыПечати.Вставить("ИмяПараметровПечати", "ПАРАМЕТРЫ_ПЕЧАТИ_СчетНаОплатуПокупателю_Счет");
		ПараметрыПечати.Вставить("ИмяМакетаПечати",     "ОбщийМакет.ПФ_MXL_СчетЗаказ");
		ТаблицаСведенийСчетНаОплату.Колонки.Добавить("Ссылка");
		ТаблицаСведенийСчетНаОплату[0].Ссылка = счДок;       
		ТаблицаСведенийСчетНаОплату[0].Документ = счДок;
		ТабДок = ПечатьТорговыхДокументов.ПечатьСчетаНаОплату(ТаблицаСведенийСчетНаОплату, ОбъектыПечати, ПараметрыПечати);
		ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
	    ттт.Вывести(ТабДок);		
	конеццикла;				
	возврат ттт;
КонецФункции

&НаКлиенте
Процедура ПечатьСчетов(Команда)
	табдок=ПолучитьПечатнуюФормуСчета();
	табдок.показать();
КонецПроцедуры

&НаСервере
Функция ПолучитьСтатусСчета(счет)
	Запрос = Новый Запрос;
 		Запрос.Текст = 		
		"ВЫБРАТЬ
		|	СтатусыДокументов.Статус.Ссылка КАК СтатусСсылка
		|ИЗ
		|	РегистрСведений.СтатусыДокументов КАК СтатусыДокументов
		|ГДЕ
		|	СтатусыДокументов.Организация = &Организация
		|	И СтатусыДокументов.Документ = &Документ";
	
	    Запрос.УстановитьПараметр("Организация", объект.Организация);
		Запрос.УстановитьПараметр("Документ",счет);
		ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать();
		статус=перечисления.СтатусОплатыСчета.НеОплачен;
		Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			статус=ВыборкаДетальныеЗаписи.СтатусСсылка;
	    конеццикла;	
	возврат статус;
КонецФункции	
&НаСервере
Функция ПечатьАктовНаСервере()
	// вхДок это просто ссылка на документ счет на оплату покупателю
	ттт=новый ТабличныйДокумент();
	для каждого стр из объект.Контрагенты цикл
		счДок=стр.Акт;	
		сообщить(счДок);
		ОбъектыПечати = Новый СписокЗначений;
		ОбъектыПечати.Добавить(счДок.ПолучитьОбъект());
		МассивОбъектов = Новый Массив();
		МассивОбъектов.Добавить(счДок); 
		ПараметрыПечати = Новый Структура;
		ТаблицаСведенийАкт=Документы.РеализацияТоваровУслуг.ПолучитьТаблицуСведенийАктаОбОказанииУслуг(МассивОбъектов);
		ПараметрыПечати.Вставить("ВидДокументаПечати",  "РеализацияТоваровУслуг");
		ПараметрыПечати.Вставить("ИмяПараметровПечати", "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_Акт");
		ПараметрыПечати.Вставить("ИмяМакетаПечати",     "Документ.РеализацияТоваровУслуг.ПФ_MXL_Акт");
		ТаблицаСведенийАкт.Колонки.Добавить("Ссылка");
		ТаблицаСведенийАкт[0].Ссылка = счДок;       
		ТаблицаСведенийАкт[0].Документ = счДок;
		ТабДок = ПечатьТорговыхДокументов.ПечатьАктаОбОказанииУслуг(ТаблицаСведенийАкт, ОбъектыПечати, ПараметрыПечати);
		ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
	    ттт.Вывести(ТабДок);		
	конеццикла;				
	возврат ттт;
КонецФункции

&НаКлиенте
Процедура ПечатьАктов(Команда)
	табдок=ПечатьАктовНаСервере();
	табдок.показать();
КонецПроцедуры