JSON: Туда и Обратно

07.06.21

Интеграция - Внешние источники данных

Рабочий механизм чтения/записи строк в формате JSON для 1С 7.7. Тестировалось на релизах 7.70.25 и 27.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
JSON: Туда и Обратно
.7z 16,05Kb
62
62 Скачать (1 SM) Купить за 1 850 руб.

Тема не нова, однако при реализации одного проекта столкнулся с отсутствием нормального механизма работы с данными типа JSON. И да, я не последователь "Любителей ВК", если только это не является действительно необходимым.

Так что, немало порыскав на просторах Бездны, и надергав оттуда идей, проявив недюжинную храбрость и сообразительность... )) Ну, Вы поняли

А еще я сторонник идеи "Информация для всех", потому выложу все тексты для широких масс, благо букв хоть и много, но не слишком. Может, Иегова сочтет за благое деяние (привет Леша).

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

 

Источники:

https://gist.github.com/sthor69/8398788

https://forum.mista.ru/topic.php?id=799040

Ниже текст обработки "JSON_Туда_И_Обратно.ert"

 

 

А тут небольшой пример ее использования

 

 

Обновлено 07.06.21:

Исправлена ошибка при работе с числами с плавающей точкой

Использован механизм формирования длинной строки "внутри" скрипта функцией СкриптФормироватьСтроку (обход критической ошибки вызывающей крах приложения при передаче длинной строки в скрипт)

JSON 1с77 parse stringify

См. также

Зарплата Внешние источники данных Бухгалтер Расчет 7.7 1С:Зарплата и кадры 7.7 Россия Бухгалтерский учет Абонемент ($m)

Загрузка электронных листов нетрудоспособности (электронных больничных) в ЗиК 7.7 из файлов, например, из СБИС. Не нашел похожих разработок, может, плохо искал, для 1С 7.7 ЗиК.

1 стартмани

14.04.2020    8607    4    hvv2002    2    

2

Внешние источники данных Файловый обмен (TXT, XML, DBF), FTP Программист Руководитель проекта Платформа 1С v7.7 1С:Комплексная 7.7 Оптовая торговля, дистрибуция, логистика Управленческий учет Абонемент ($m)

Обработки обмена номенклатурой (SKU), дополнительными штрихкодами (AltSku), приемкой (AdvancedShipNotice), подтверждением приема (ASNClosed), выдачей (ShipmentOrder), подтверждением выдачи (CustomerOrderLoaded) для учетной системы 1С 7.7. Здесь выгрузка и загрузка для 1C 7.7.

1 стартмани

21.10.2019    15966    1    ksnik    0    

2

Внешние источники данных Программист Платформа 1С v7.7 Конфигурации 1cv7 Абонемент ($m)

Обработка для универсальной выгрузки данных из конфигурации 7.7 в JSON. Может быть полезна для задач переноса данных из различных конфигураций в другие конфигурации, для перехода на другие версии 1С, для перехода на 8.3, для переноса данных в другие системы учета, для организации онлайн выгрузки с целью синхронизации разных систем учета. Выгрузка справочников, документов, результатов запросов, остатков по планам счетов.

2 стартмани

09.10.2019    17142    75    Malice    16    

12

Внешние источники данных Оптовая торговля Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v7.7 Россия Управленческий учет Абонемент ($m)

Обработка позволяет реализовать обмен данными между решением SalesWorks и 1c 7.7.

5 стартмани

16.07.2019    16059    6    vv-adm    2    

2

Внешние источники данных Программист Оперативный учет 7.7 1С:Торговля и склад 7.7 Абонемент ($m)

Обработка выгружает данные контрагентов и создает два файла: один текстовый со всеми данными, другой формата vcards.vcf для загрузки контактных данных в андроид.

1 стартмани

10.05.2019    9593    4    rid636674    1    

0
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. RustIG 1729 16.12.19 15:14 Сейчас в теме
используйте вставку кода и вставку спойлеров в публикации - читать удобнее будет
2. Steelvan 305 16.12.19 17:17 Сейчас в теме
да, со свертками было бы меньше крутки
3. Volvo32 29 17.12.19 11:11 Сейчас в теме
4. user1061229 07.02.20 11:45 Сейчас в теме
Спасибо за обработку - скачал ее.
Хотел бы сделать полный цикл:
1. Получение по запросу данные в формате JSON. Их сохранение - вопрос как? На 7.7 - через какой объект это можно сделать?
2. Уже обработка JSON

У меня сейчас есть пример для загрузки через API в формате XML
xmlDoc.Load("http://mapon.com/client/export/reaton.xml.php?&date=20200207);
xmlDoc.Save(КаталогИБ()+"ExtForms\autotransport\mapon\20200207.xml");

как тоже самое сделать с JSON?
5. Volvo32 29 11.02.20 13:37 Сейчас в теме
Ну например так:
WinHttp = СоздатьОбъект("WinHttp.WinHttpRequest.5.1");
	WinHttp.Option(2,"utf-8");
	WinHttp.Open("GET","http://mapon.com/client/export/reaton.xml.php?&date=20200207",0);
	WinHttp.SetRequestHeader("Content-Type", "application/json");
	WinHttp.Send();   
		
	лпОтвет = WinHttp.ResponseText();

	лпСпс = ОбработатьДанныеJSON(лпОтвет,0);
Показать


ЭТО НЕ РАБОЧИЙ ВАРИАНТ, А ПРОСТО ПРИМЕР ТОГО, КАК МОГЛО БЫ БЫТЬ

Невозможно ответить на вопрос как получить JSON через АПИ. В каждом конкретном случае это решают разработчики АПИ. В этом примере идет получение строки JSON прямо из тела ответа (метод ResponseText).
Теоретически можно сохранять JSON-строку в виде файла на диск, но нет смысла - все равно потом придется прочитать файл и обработать полученный текст.

А сам объект WinHttpRequest весьма рекомендую. В силу привычки, и ради простоты программирования я его даже в 8-ке использую
6. konfedos 20.11.20 11:04 Сейчас в теме
Пример (код взят из текста статьи) не работает. По директивам "Сообщить" ничего не выводиться
7. Volvo32 29 20.11.20 14:51 Сейчас в теме
В тексте примера вкралась небольшая опечатка. Вместо переменной "фТекст", следует использовать "лпТекст". В остальном пример и основная разработка полностью работоспособны.
8. user1276552 18.12.20 19:19 Сейчас в теме
А возможно это перевести в код 81 82, чтобы была обработка епф.
Я занимаюсь кассовыми аппаратами мне разработчики прислали пример подкючения к 77 - там всё из вашей обработки и примера. 77 всё работает, я дописал , что было нужно, но перенести на ранние версии 81 типа ут 103 не могу . Можете помочь?
9. Volvo32 29 21.12.20 09:53 Сейчас в теме
Приятно узнать что твоя разработка используется.

Для восьмерки тоже есть вариант. Он немного изменен, но не существенно. Прикрепляю решение в этом посте.

А всем обладателям версий 8.3.6 и выше советую пользоваться глобальными ПрочитатьJSON и ЗаписатьJSON
Прикрепленные файлы:
JSON(v8).epf
10. user1276552 24.12.20 16:28 Сейчас в теме
Спасибо за обработку . Для кассового аппарата на 1с77 я всё сделал немного в обход обработки, но там всё работает. Но так как я не сталкивался с 1с 8, то я наткнулся на неразрешимую для меня пока задачу.
Хотя , может, спрашиваю не по теме, но мне нужна помощь программиста. В самой Конфигурации 1с8 не могу найти пример. Старая 1с8 УТ 10,3 со старыми обработками епф. Я сделал, что аппарат открывает смену, берёт кассира из пользователя, но никак не могу добиться в документе , скажем, ЧекККМ взять наименование товара, количество, сумму.
В 1с 77 это просто
Пока ПолучитьСтроку() = 1 Цикл
и просто пишу Номенклатура.Наименование
Количество Цена и всё В чеке всё выводится. Но в 1с 8 такого нет. Всё ночь бился, так ничего и не смог сделать. Если сможете, помогите, как 1с 8 ут 10,3 в Документе , скажем, Чек ККМ сделать кнопку с циклом, где перебираются наименования товаров, чтобы я сделал команду сообщить (наименование).
Могу выделить наименование из печатной формы (получается целый лист команд вместо одной строчки ПолучитьСтроку() = 1 Цикл 1с77), примеры в интернете не могу применить, вылазят ошибки. В конфигурации пример найти не могу.

Вот Что я написал без туда и обратно в 77
при открытии
Перем VTKktTcpX;
Перем КлючСессии;
Перем ИмяПорта;
  
Процедура ПроверкаСвязиККТ()
    Сообщить ("Connect="+VTKktTcpX.Connect ("127.0.0.1", 50009)); 
		ЗапросJSON = "{""command"":""OpenSession"",""sessionKey"":null,""portName"":""COM3"",""baudRate"":""115200"",""model"":""185F"",""userNumber"":""1"",""userPassword"":""0""}";
	Сообщить("запрос="+ЗапросJSON);
    VTKktTcpX.WriteString(ЗапросJSON);
    VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
	Сообщить ("ответ="+ОтветJSON); 
	ОтветJSON1 = глРазложить(СОКРЛП(ОтветJSON),Симв(34)); 
	Если ОтветJSON1.РазмерСписка() > 0 Тогда
	КлючСессии = Симв(34)+ОтветJSON1.ПолучитьЗначение(6)+Симв(34);
	Сообщить ("sessionKey="+ КлючСессии);
    КонецЕсли; 
	ЗапросJSON ="{""sessionKey"":"+КлючСессии+",""command"":""GetStatus""}";
    Сообщить("запрос="+ЗапросJSON);
    Сообщить ("WriteString="+VTKktTcpX.WriteString(ЗапросJSON));

	ЗапросJSON ="{""command"":""CloseSession"",""sessionKey"":"+КлючСессии+"}";
	Сообщить("запрос="+ЗапросJSON);
    Сообщить ("WriteString="+VTKktTcpX.WriteString(ЗапросJSON));
    VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
    Сообщить ("ответ="+ОтветJSON); 
    VTKktTcpX.Disconnect();
 
КонецПроцедуры
 
Процедура ЧекККТ() 
		ЧекИлиВозвр = "Печатать чек?";
		Если БезналичнаяОплЧека =0 Тогда 
			ОплНалБезнал = "Оплата наличными?";
		Иначе ОплНалБезнал = "Оплата безаличными?";
		КонецЕсли;	
        Если ВозвратЧека = 0 Тогда 
		ЧекИлиВозвр = "Печатать чек?";
	    Иначе ЧекИлиВозвр = "Печатать возврат чека?";
		КонецЕсли;
		Если Вопрос(ЧекИлиВозвр,4,0) = 6 Тогда
		
		Если Вопрос(ОплНалБезнал,4,0) = 6 Тогда	
	
    Сообщить ("Connect="+VTKktTcpX.Connect ("127.0.0.1", 50009)); 
		ЗапросJSON = "{""command"":""OpenSession"",""sessionKey"":null,""portName"":""COM3"",""baudRate"":""115200"",""model"":""185F"",""userNumber"":""1"",""userPassword"":""0""}";
	Сообщить("запрос="+ЗапросJSON);
    VTKktTcpX.WriteString(ЗапросJSON);
    VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
	Сообщить ("ответ="+ОтветJSON); 
	ОтветJSON1 = глРазложить(СОКРЛП(ОтветJSON),Симв(34)); 
	Если ОтветJSON1.РазмерСписка() > 0 Тогда
	КлючСессии = Симв(34)+ОтветJSON1.ПолучитьЗначение(6)+Симв(34);
	Сообщить ("sessionKey="+ КлючСессии);
    КонецЕсли; 
	ЗапросJSON ="{""command"":""OpenShift"",""sessionKey"":"+КлючСессии+",""cashierInfo"":{""cashierName"":"+Симв(34)+ФИО(Константа.Кассир.Получить(ДатаДок))+Симв(34)+"}}";
	Сообщить("запрос="+ЗапросJSON);
     VTKktTcpX.WriteString(ЗапросJSON);  
	VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
	Сообщить ("ответ="+ОтветJSON); 

    Если ПечИННПокупателя = 1 Тогда
	ИННКонтрагента = ?(Контрагент.ВидКонтрагента = Перечисление.ВидыКонтрагентов.ЧастноеЛицо, СРЕД(Контрагент.ИНН,1,12),СРЕД(Контрагент.ИНН,1,10));
    ЗапросJSON ="{""command"":""OpenCheck"",""sessionKey"":"+КлючСессии+",""checkType"":"+ВозвратЧека+",""taxSystem"":2,""cashierInfo"":{""cashierName"":"+Симв(34)+ФИО(Константа.Кассир.Получить(ДатаДок))+Симв(34)+"},""buyerInfo"":{""buyerName"":"+Симв(34)+СокрЛП(Контрагент.Наименование)+Симв(34)+",""buyerINN"":"+Симв(34)+ИННКонтрагента+Симв(34)+"}}";
	Иначе
	ЗапросJSON ="{""command"":""OpenCheck"",""sessionKey"":"+КлючСессии+",""checkType"":"+ВозвратЧека+",""taxSystem"":2,""cashierInfo"":{""cashierName"":"+Симв(34)+ФИО(Константа.Кассир.Получить(ДатаДок))+Симв(34)+"}}";
    КонецЕсли;
    Сообщить("запрос="+ЗапросJSON);
    VTKktTcpX.WriteString(ЗапросJSON);
    VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
	Сообщить ("ответ="+ОтветJSON); 

		//Товары
	
		ВыбратьСтроки();
        	Пока ПолучитьСтроку() = 1 Цикл 
		ЗапросJSON ="{""command"":""AddGoods"",""sessionKey"":"+КлючСессии+",""checkType"":"+ВозвратЧека+",""taxSystem"":2,""cashierInfo"":{""cashierName"":"+Симв(34)+ФИО(Константа.Кассир.Получить(ДатаДок))+Симв(34)+"},""productName"":"+Симв(34)+Номенклатура.Наименование+Симв(34)+",""qty"":"+Количество*10000+",""taxCode"":6,""price"":"+Цена*100+"}";
		Сообщить("запрос="+ЗапросJSON);
        VTKktTcpX.WriteString(ЗапросJSON);
   		VTKktTcpX.ReadString();
	    ОтветJSON = VTKktTcpX.ReceivedString;
	    Сообщить ("ответ="+ОтветJSON); 
          КонецЦикла; 
    	  Если БезналичнаяОплЧека = 1 Тогда 
          ЗапросJSON ="{""command"":""CloseCheck"",""sessionKey"":"+КлючСессии+",""payment"":{""ecash"":"+Итог("Сумма")*100+"}}";
          Иначе
	      ЗапросJSON ="{""command"":""CloseCheck"",""sessionKey"":"+КлючСессии+"}";
          КонецЕсли;
		Сообщить("запрос="+ЗапросJSON);
        VTKktTcpX.WriteString(ЗапросJSON);
        VTKktTcpX.ReadString();
	    ОтветJSON = VTKktTcpX.ReceivedString;
	    Сообщить ("ответ="+ОтветJSON); 
        ЧекПробит=1;
		ЗапросJSON ="{""command"":""CloseSession"",""sessionKey"":"+КлючСессии+"}";
	Сообщить("запрос="+ЗапросJSON);
    VTKktTcpX.WriteString(ЗапросJSON);
    VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
    Сообщить ("ответ="+ОтветJSON); 
    VTKktTcpX.Disconnect();
Иначе 
КонецЕсли;
Иначе 
КонецЕсли;
КонецПроцедуры         



Процедура ЗакрытьСмену() 
	Если Вопрос("Закрыть смену?",4,0) = 6 Тогда
	
  Сообщить ("Connect="+VTKktTcpX.Connect ("127.0.0.1", 50009)); 
		ЗапросJSON = "{""command"":""OpenSession"",""sessionKey"":null,""portName"":""COM3"",""baudRate"":""115200"",""model"":""185F"",""userNumber"":""1"",""userPassword"":""0""}";
	Сообщить("запрос="+ЗапросJSON);
    VTKktTcpX.WriteString(ЗапросJSON);
    VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
	Сообщить ("ответ="+ОтветJSON); 
	ОтветJSON1 = глРазложить(СОКРЛП(ОтветJSON),Симв(34)); 
	Если ОтветJSON1.РазмерСписка() > 0 Тогда
	КлючСессии = Симв(34)+ОтветJSON1.ПолучитьЗначение(6)+Симв(34);
	Сообщить ("sessionKey="+ КлючСессии);
    КонецЕсли; 
	ЗапросJSON ="{""sessionKey"":"+КлючСессии+",""command"":""CloseShift"",""cashierInfo"":{""cashierName"":"+Симв(34)+ФИО(Константа.Кассир.Получить(ДатаДок))+Симв(34)+"}}";
    Сообщить("запрос="+ЗапросJSON);
     VTKktTcpX.WriteString(ЗапросJSON);

	ЗапросJSON ="{""command"":""CloseSession"",""sessionKey"":"+КлючСессии+"}";
	Сообщить("запрос="+ЗапросJSON);
	VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
	Сообщить ("ответ="+ОтветJSON); 
     VTKktTcpX.WriteString(ЗапросJSON);
   	
	
	ЗапросJSON ="{""command"":""CloseSession"",""sessionKey"":"+КлючСессии+"}";
	Сообщить("запрос="+ЗапросJSON);
     VTKktTcpX.WriteString(ЗапросJSON);
    VTKktTcpX.ReadString();
	ОтветJSON = VTKktTcpX.ReceivedString;
    Сообщить ("ответ="+ОтветJSON); 
    VTKktTcpX.Disconnect();
	Иначе
	КонецЕсли;
	
КонецПроцедуры
Показать
11. Volvo32 29 25.12.20 09:47 Сейчас в теме
(10) Это не "немного в обход". Это называется в лоб. Прямо расстроили Вы меня ((

В восьмерке почти все циклы выглядят вот так

Для Каждого ПеременнаяПриемник Из ОбъектИсточник Цикл
сообщить(ПеременнаяПриемник.Наименование);
КонецЦикла;

ОбъектИсточник - в Вашем случае, что-то вроде "ЭтотОбъект.ИМЯТАБЛИЧНОЙЧАСТИ". Имя табличной части посмотрите в конфигураторе

А ПеременнаяПриемник - очередная строка из табличной части, со всеми реквизитами
12. an2007 13.04.21 00:48 Сейчас в теме
Спасибо за обработку, но есть вопрос: у меня строка Json бывает более 500k. 1с-ка вылетает.
Можно ли как-то решить проблему?
13. Volvo32 29 13.04.21 08:07 Сейчас в теме
Если строка оказывается слишком длинной, и при ее передаче в скрипт 1С-ка вылетает, то есть только один вариант: собирать строку по кускам "внутри" скрипта.

например вот так

Функция СкриптФормироватьСтроку(прСтрПарам, прПерем, scriptCtrl) Экспорт
	Если (ПустоеЗначение(scriptCtrl) = 1) Тогда
		scriptCtrl =  СоздатьОбъект("MSScriptControl.ScriptControl");
		scriptCtrl.Language="javascript";
	КонецЕсли;
	scriptCtrl.Eval("var "+прПерем+"=''"); 
	
	лпСтрПарам = прСтрПарам;
	Пока (СтрДлина(лпСтрПарам)>0)  Цикл
		Если СтрДлина(лпСтрПарам) <= 200000 Тогда
			лпЛевСтрПарам = лпСтрПарам;
			лпСтрПарам = "";
		Иначе
			лпЛевСтрПарам = Лев(лпСтрПарам, 200000);
			лпСтрПарам = Сред(лпСтрПарам, 200001);
		КонецЕсли;
		
		лпЛевСтрПарам = СтрЗаменить(лпЛевСтрПарам,"\","\\");  //для JS
		
		scriptCtrl.Eval(прПерем+"="+прПерем+" + '"+лпЛевСтрПарам+"'");
	КонецЦикла;
	Возврат scriptCtrl;
КонецФункции
Показать
14. user1422633 06.06.21 21:18 Сейчас в теме
(13)
Функция СкриптФормироватьСтроку(прСтрПарам, прПерем, scriptCtrl) Экспорт
Если (ПустоеЗначение(scriptCtrl) = 1) Тогда
scriptCtrl = СоздатьОбъект("MSScriptControl.ScriptControl");
scriptCtrl.Language="javascript";
КонецЕсли;
scriptCtrl.Eval("var "+прПерем+"=''");

лпСтрПарам = прСтрПарам;
Пока (СтрДлина(лпСтрПарам)>0) Цикл
Если СтрДлина(лпСтрПарам) <= 200000 Тогда
лпЛевСтрПарам = лпСтрПарам;
лпСтрПарам = "";
Иначе
лпЛевСтрПарам = Лев(лпСтрПарам, 200000);
лпСтрПарам = Сред(лпСтрПарам, 200001);
КонецЕсли;

лпЛевСтрПарам = СтрЗаменить(лпЛевСтрПарам,"\","\\"); //для JS

scriptCtrl.Eval(прПерем+"="+прПерем+" + '"+лпЛевСтрПарам+"'");
КонецЦикла;
Возврат scriptCtrl;
КонецФункции
Показать

а можно поподробней куда это "всунуть"?
спасибо
15. Volvo32 29 07.06.21 19:08 Сейчас в теме
Обновил публикацию. Там все уже "всунуто". Работает. Правда при использовании данного варианта есть ограничения на форматирование строки с данными: не допускаются символы "оформления" - табуляция, перевод строки... Строка должна быть непрерывной
Parazyte; Antoska; +2 Ответить
16. user1422633 13.06.21 15:04 Сейчас в теме
(15)я так понимаю эта функция для формирования строки в json, а у меня 1с зависает при преобразовании строки из json
17. user1422633 13.06.21 18:28 Сейчас в теме
(15)Спасибо! разобрался, работает)
19. Antoska 17 29.09.21 11:30 Сейчас в теме
(15) Спасибо большое. Пользуюсь и радуюсь!
Добавил в ПриОткрытии:
			Данные = СтрЗаменить(Данные,РазделительСтраниц,"");
			Данные = СтрЗаменить(Данные,РазделительСтрок,"");
			Данные = СтрЗаменить(Данные,СимволТабуляции,"");
			
			СкриптФормироватьСтроку(Данные, "strparam", scriptCtrl);
18. zoeh 31 23.06.21 14:53 Сейчас в теме
VTKktTcpX = СоздатьОбъект("VTKktTcpX.Client");

вылетает в ошибку
Сигнатура проблемы:
Имя события проблемы: APPCRASH
Имя приложения: 1cv7s.exe
Версия приложения: 7.70.0.27
Отметка времени приложения: 4573fcd8
Имя модуля с ошибкой: KERNELBASE.dll
Версия модуля с ошибкой: 6.1.7601.24545
Отметка времени модуля с ошибкой: 5e0eb7f5
Код исключения: 0eedfade
Смещение исключения: 0000c5af
Версия ОС: 6.1.7601.2.1.0.16.7
Код языка: 1049
Дополнительные сведения 1: e3ed
Дополнительные сведения 2: e3ed4a522cb2bd562a642e1f3590b58d
Дополнительные сведения 3: 048e
Дополнительные сведения 4: 048e5145e7ac5a70c66f7d84fe1366d4

Ознакомьтесь с заявлением о конфиденциальности в Интернете:
http://go.microsoft.com/fwlink/?linkid=104288&clcid=0x0419

Если заявление о конфиденциальности в Интернете недоступно, ознакомьтесь с его локальным вариантом:
C:\Windows\system32\ru-RU\erofflps.txt

RUNTIME ERROR 217 at062769B9

даю права админа стает все о.к., но вот админ мне не дает права админа.
куда рыть? Яндекс не дал результатов
20. user848320 21.11.21 23:36 Сейчас в теме
у меня при передаче СпискаЗначений все работает отлично, но если в качестве одного из значений СЗ передать ТаблицуЗначений - обработка выдает "Поле агрегатного объекта не обнаружено (Значение)".
ТЗ следущего формата:
_тзТабличнаяЧасть=СоздатьОбъект("ТаблицаЗначений");
//_тзТабличнаяЧасть.НоваяКолонка("НомерСтроки");
_тзТабличнаяЧасть.НоваяКолонка("КодТМЦ");
_тзТабличнаяЧасть.НоваяКолонка("НаименованиеТМЦ");
_тзТабличнаяЧасть.НоваяКолонка("Количество");
_тзТабличнаяЧасть.НоваяКолонка("Цена");
_тзТабличнаяЧасть.НоваяКолонка("Сумма");

Я что-то делаю не так?
21. Volvo32 29 23.11.21 10:12 Сейчас в теме
Дело в том, что для ТЗ в формате JSON нет однозначного соответствия. Есть Объекты - произвольный набор элементов, и есть Массивы - упорядоченный набор. В виду ограниченности сущностей, доступных в 1с 7, для преобразования были выбраны СписокЗначений и ТаблицаЗначений для указанных выше типов. Причем ТаблицыЗначений, передаваемые для сериализации, должны соответствовать принятой мной модели: иметь колонку "Значение" для хранения значений.

В Вашем случае, полагаю, должна быть ТЗ, в колонке "Значение" которой, будут расположены СписокЗначений, с элементами КодТМЦ, НаименованиеТМЦ..., а значения из строк должны быть отображены в представлении этих элементов.
SagittariusA; serdes; +2 Ответить
22. user848320 23.11.21 19:55 Сейчас в теме
Спасибо,что уделили время на ответ. Я думаю легче делать все через список значений)
23. sanek_kop 15 09.03.22 13:38 Сейчас в теме
Добрый день!
Может кто сталкивался с подобной проблемой. При работе с "большими" числовыми значениями, зануляет последние символы.
Пример кода:
лпТекст = "{""title"":""Conference"",""room"":{""number"":1000000000000001}}";

лпСпс = ОбработатьДанныеJSON(лпТекст,0);

лпid = ПолучитьЗначениеИзСписка(лпСпс, "room/number");

сообщить(лпid);

В итоге сообщает "1000000000000000".
Понимаю, что дело в bigint, но как заставить его понимать это?
24. Volvo32 29 09.03.22 20:52 Сейчас в теме
(23)
1000000000000001


Решение судя по всему существует. ГитХаб
Используется библиотека bignumber.js
25. sanek_kop 15 10.03.22 07:39 Сейчас в теме
(24) Осталось понять, как это прикрутить к 7.7.
26. SnakePlisskin 3 15.08.22 12:37 Сейчас в теме
Доброго дня!
Пытаюсь сделать выгрузку из 1С в формате JSON, не совсем понимаю в каком виде нужно подавать данные что бы обработка сформировала json файл ?
К примеру у меня должен быть на выходе вот такой структуры файл :

[
{
"guid": "05BCFF88-D11D-4014-8C7B-5C1D0BD20434",
"name": "Бренд1"
},
{
"guid": "0B89F5EE-84BF-4FC4-9AC5-87E8D734714B",
"name": "Бренд2"
},
{
"guid": "0ED56F48-543E-42A4-A854-6DE3E7AD45D8",
"name": "Бренд3"
}
]
27. SnakePlisskin 3 16.08.22 09:21 Сейчас в теме
Разобрался, что подавать на вход, примерно вот такую конструкцию :
СЗ = = СоздатьОбъект("СписокЗначений");
Цикл по результатам запроса
Структура = СоздатьОбъект("СписокЗначений");
Структура.ДобавитьЗначение(Выборка.parent_guid,"guid");
Структура.ДобавитьЗначение(Выборка.guid,"property_guid");
СЗ.ДобавитьЗначение(Структура);

Вот только на выходе почему-то только одна пара значение + ключ...куда остальное пропадает загадка.
28. Volvo32 29 17.08.22 19:30 Сейчас в теме
(27) Вы пытаетесь создать объект без идентификатора. Нужно так

СЗ.ДобавитьЗначение(Структура, "guids");
SagittariusA; +1 Ответить
29. SagittariusA 09.11.22 11:51 Сейчас в теме
Правильно понимаю, что данное существо не проглатывает тип "Дата" и пр.? Только строки понимает?
30. SagittariusA 09.11.22 13:55 Сейчас в теме
Что означает строка на выходе "Плохой тип переменной"?
31. srt2020 17.01.23 11:14 Сейчас в теме
И что обработка действительно работает?
32. Snus71 233 09.03.24 18:40 Сейчас в теме
33. Snus71 233 09.03.24 18:42 Сейчас в теме
(0) СпсТЗ.Значение - произвольную ТЗ нельзя на вход подать? почему ТЗ должна иметь колонку "Значение". Что в этой колонке? Где тогда описание входных переменных?
Оставьте свое сообщение