Base64.encode(Object.toJSON(data))
var Base64 = {
_keyStr : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
//пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ base64 пїЅпїЅ javascript
encode : function (input) {
var output = "";
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
var i = 0
input = Base64._utf8_encode(input);
while (i < input.length) {
chr1 = input.charCodeAt(i++);
chr2 = input.charCodeAt(i++);
chr3 = input.charCodeAt(i++);
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if( isNaN(chr2) ) {
enc3 = enc4 = 64;
}else if( isNaN(chr3) ){
enc4 = 64;
}
output = output +
this._keyStr.charAt(enc1) + this._keyStr.charAt(enc2) +
this._keyStr.charAt(enc3) + this._keyStr.charAt(enc4);
}
return output;
},
//пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ base64
decode : function (input) {
var output = "";
var chr1, chr2, chr3;
var enc1, enc2, enc3, enc4;
var i = 0;
input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");
while (i < input.length) {
enc1 = this._keyStr.indexOf(input.charAt(i++));
enc2 = this._keyStr.indexOf(input.charAt(i++));
enc3 = this._keyStr.indexOf(input.charAt(i++));
enc4 = this._keyStr.indexOf(input.charAt(i++));
chr1 = (enc1 << 2) | (enc2 >> 4);
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
chr3 = ((enc3 & 3) << 6) | enc4;
output = output + String.fromCharCode(chr1);
if( enc3 != 64 ){
output = output + String.fromCharCode(chr2);
}
if( enc4 != 64 ) {
output = output + String.fromCharCode(chr3);
}
}
output = Base64._utf8_decode(output);
return output;
},
// пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅ utf8
_utf8_encode : function (string) {
string = string.replace(/\r\n/g,"\n");
var utftext = "";
for (var n = 0; n < string.length; n++) {
var c = string.charCodeAt(n);
if( c < 128 ){
utftext += String.fromCharCode(c);
}else if( (c > 127) && (c < 2048) ){
utftext += String.fromCharCode((c >> 6) | 192);
utftext += String.fromCharCode((c & 63) | 128);
}else {
utftext += String.fromCharCode((c >> 12) | 224);
utftext += String.fromCharCode(((c >> 6) & 63) | 128);
utftext += String.fromCharCode((c & 63) | 128);
}
}
return utftext;
},
//пїЅпїЅпїЅпїЅпїЅ пїЅпїЅпїЅ пїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅпїЅ пїЅпїЅ urf8
_utf8_decode : function (utftext) {
var string = "";
var i = 0;
var c = c1 = c2 = 0;
while( i < utftext.length ){
c = utftext.charCodeAt(i);
if (c < 128) {
string += String.fromCharCode(c);
i++;
}else if( (c > 191) && (c < 224) ) {
c2 = utftext.charCodeAt(i+1);
string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
i += 2;
}else {
c2 = utftext.charCodeAt(i+1);
c3 = utftext.charCodeAt(i+2);
string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
i += 3;
}
}
return string;
}
}
$myVal = json_decode(base64_decode(<!!! значениеиз переменной в POST запросе !!!>,true);
/* пример выборки
invoice_number | invoice_amount | invoice_customer | invoice_date | date_check | order_id | order_data_id | quantity | price | item_uuid
----------------+----------------+--------------------------------------+---------------------+------------------+----------+---------------+----------+-------+--------------------------------------
00000000073 | 493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 | | 5110 | 10125 | 8 | 41160 | 76e80df8-5802-11e4-6686-0e459e882122
00000000073 | 493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 | | 5110 | 10124 | 4 | 41160 | bde6a7ce-32c2-11e2-92a8-c692850d4a80
00000000073 | 493920 | bd63f5ba-55f1-11e5-5d98-0e459e882122 | 2017-03-02 01:51:35 | | 5110 | | 1 | 111 | e6b5251c-feb3-11e6-ef88-26a4bef88324
1. Пользоваетель добавляет инвойс через сайт, соответствие позициций заказа сохраняется через order_data_id, а то что в инвойсе через item_uuid
2. Если в 1с кто-то удаляет позицию, то мы в базе также обязаны удалить запись и из invoice_data
2.1 Алгоритм поиска записи:
2.1.1 получаем из этого запроса все текущие позиции с item_uuid
2.1.2. ищем такую запись в массиве $invoice['Товары']. Если не найдено, то строку нужно удалить
2.2 Процесс удаления:
2.2.1 перед удалением нам надо изменить в таблице order_data стаус на OrderState::CANCELED -> Отменен
2.2.2 затем удалить запись из invoice_data, так как в инвойсе этой строки не существует
3. Если в 1с кто-то добавляет позицию, а в CMR такой позиции нет, то мы должны будем ее добавить в invoice_data
3.1. Добавляем запись без указания order_data_id. Это будет говорить о том, что в счете есть такая позиция, а в CRM она никуда не привязана
3.2. Необходимо в веб сокете передать эту информацию и на сторое JS сделать информирование и обработку этих данных
4. Необходимо сравнить все позиции и высчитать новые значения
5. Пустая выборка означает, что полученный счет никуда не привязан
*/
function getData() {
console.log('1. вхождение в функцию');
$.ajax({
url: '../elem/search.php',
type: 'POST',
cache:false,
success : function(search) {
console.log('3. результат вызова');
console.log(search);
return search;
}
})
console.log('2. выход из функции');
}
var data = getData();
console.log(data);
function getData() {
console.log('1. вхождение в функцию');
var result;
$.ajax({
url: '../elem/search.php',
type: 'POST',
cache:false,
async: false,
success : function(search) {
result = search;
console.log('3. результат вызова');
console.log(data);
}
})
console.log('2. выход из функции');
return result;
}
var data = getData();
console.log(data);
function GoodsSave()
{
if ($('Parent_Key').value == 0) {alert('Укажите группу номенклатуры'); return; }
if (!$('Artikul').value) {alert('Укажите артикул'); return; }
if (!$('Description').value) {alert('Укажите краткое наиименование'); return; }
if (!$('NaimenovaniePolnoe').value) {alert('Укажите полное наименование'); return; }
if ($('VidNomenklatury_Key').value == 0) {alert('Укажите вид номенклатуры'); return; }
if ($('BazovayaEdinicaIzmereniya_Key').value == 0) {alert('Укажите единицу измерения'); return; }
if ($('StavkaNDS_Key').value == 0) {alert('Укажите ставку НДС'); return; }
new (Ajax.Request)
(
"/",
{
method: "POST",
parameters: {
'Driver1c' : '<?=Driver1c::ADD_GOODS?>',
'Parent_Key' : $('Parent_Key').value,
'Artikul' : $('Artikul').value,
'Description' : $('Description').value,
'NaimenovaniePolnoe' : $('NaimenovaniePolnoe').value,
'VidNomenklatury_Key' : $('VidNomenklatury_Key').value,
'BazovayaEdinicaIzmereniya_Key' : $('BazovayaEdinicaIzmereniya_Key').value,
'StavkaNDS_Key' : $('StavkaNDS_Key').value
},
encoding: 'UTF-8',
onComplete: function (a) {
$('goods_add_form').reset();
var row = a.responseJSON;
Goods.push ({
value: row.value,
label: row.label,
description: row.description,
'СтавкаНДС_Key': row.СтавкаНДС_Key,
'БазоваяЕдиницаИзмерения_Key': row.БазоваяЕдиницаИзмерения_Key
});
ProcessingInput.value = row.description;
ProcessingInput.referer.value = row.value;
ProcessingInput.referer.onchange();
GoodsCancel();
},
onFailure: function (a) {alert('Во время работы произошла ошибка, пожалуйста сообщите администратору!');}
}
);
}