Обработка в JSON формате + бонус "Суперсила"

Публикация № 436405 18.12.15

Задачи пользователя - Универсальные обработки

json

Пример обработки для чтения/Запись формата JSON, с источником/приемником com-массивом.

JSON

 Обработка для записи JSON потребовалась совсем недавно, заказчик переходит на данный формат, и сперва возник вопрос: зачем "?", разве не хватает xml? Но, немного почитав про данный формат, пришел к выводу, что он как раз может заменить "тормозной" и тяжелый xml, буквально на днях столкнулся с обработкой xml в данной публикации //infostart.ru/public/428819/, где содержалось 100 тыс. объектов и 1С от этого числа буквально поплохело). Начиная с версии 8.3.6 данный формат поддерживается  1С встроенными методами. 

ЗАПИСЬ

Из описания процедуры:

// При записи JSON вы самостоятельно формируете его структуру. Чтобы «подстраховать» вас от ошибок, объект ЗаписьJSON автоматически проверяет правильность записываемой структуры. 
// Для увеличения скорости работы эту проверку можно отключить. В примере ниже это строка:
ЗаписьJSON.ПроверятьСтруктуру = Ложь;

// Также при записи вы можете управлять некоторыми параметрами формируемого текста, например использованием двойных кавычек, переносом строк, символами отступа и экранированием символов. 

// Потоковая запись JSON может выглядеть следующим образом. Записывается массив из четырёх элементов. Три из них примитивного типа, а четвёртый элемент - это объект с двумя свойствами:
// Пример записи JSON. ЗаписьJSON = Новый ЗаписьJSON;
// Для увеличения скорости работы можно отключить автоматическую проверку // правильности структуры записываемого документа JSON. ЗаписьиЗСЖ.ПроверятьСтруктуру = Ложь;
// Для красоты результирующего текста можно увеличить "лесенку".
// Стандартный отступ - 1 пробел.
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON( , Символы.Таб);
// Либо открыть файл, в который будет выполнена запись,
// либо указать, что запись будет выполнена в строку, которую вернет метод Закрыть().
ЗаписьJSON.ОткрытьФайл("ИмяФайла", , , ПараметрыЗаписиJSON);
//ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
// Записать массив.
ЗаписьJSON.ЗаписатьНачалоОбъекта();
ЗаписьJSON.ЗаписатьИмяСвойства("СвойствоТипаМассив");
ЗаписьJSON.ЗаписатьНачалоМассива();
// Первый элемент массива - Строка. ЗаписьJSON.ЗаписатьЗначение("Значение строка");
// Второй элемент массива - Число. ЗаписьJSON.ЗаписатьЗначение(12.345, Истина);
// Третий элемент массива - Булево. ЗаписьJSON-ЗаписатьЗначение(Истина);
// Четвертый элемент массива - объект с двумя свойствами. ЗаписьJSON.ЗаписатьНачалоОбъекта();
// Первое свойство объекта - Строка
ЗаписьJSON.ЗаписатьИмяСвойства("СвойствоТипаСтрока");
ЗаписьJSON.ЗаписатьЗначение("Значение строка");
// Второе свойство объекта - Неопределено
ЗаписьJSON.ЗаписатьИмяСвойства("СвойствоТипаНеопределено");
ЗаписьJSON.ЗаписатьЗначение(Неопределено);
ЗаписьJSON.ЗаписатьКонецОбъекта();
Запись JSON. ЗаписатьКонецМассива () ;
ЗаписьJSON.ЗаписатьКонецОбъекта();
ЗаписьJSON.Закрыть();
//CTpoKaJSON = ЗаписьJSON.Закрыть();  

Теперь как это выглядит в реальности на примере процедуры через com-массив. Почему именно массив "?", попробуйте прогнать "миллионную" таблицу через выборку полей RecordSet, и разница будет ощутимой Smile Основное назначение - синхронизация, обмен данными большого объема, структурированными данными без возможности соединиться с базами напрямую провайдерами. Если ваш EDI-провайдер еще не перешел на поддержку данного формата, это произойдет уже скоро ). 

&НаСервере
Процедура ПрайсЗаписьJSON() Экспорт
    
    Сообщить(" Выгрузка прайс-листа... ");
    
    Connection = Новый COMОбъект("ADODB.Connection");
    Connection.ConnectionString = "Provider=SQLOLEDB;User ID=sa;Password=;Initial Catalog=;Data Source=";
    Connection.Open();
    
    ИмяФайла = "C:\Price.json";
    
    Query = "...запрос TSQL...";
    
    Попытка
        COMObject = Connection.Execute(Query);
        COMSafeArray = COMObject.GetRows();
    Исключение
        Сообщить(Query + " // " + ОписаниеОшибки());
    КонецПопытки;
    
    ЗаписьJSON = Новый ЗаписьJSON;
    ЗаписьJSON.ПроверятьСтруктуру = Ложь;
    
    ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON( , Символы.Таб);
    ЗаписьJSON.ОткрытьФайл(ИмяФайла, , , ПараметрыЗаписиJSON);
    
    providerName = "ООО";
    updateDate = Формат(ТекущаяДата(), "ДФ=дд.ММ.гггг");
    
    ЗаписьJSON.ЗаписатьНачалоОбъекта();
    ЗаписьJSON.ЗаписатьИмяСвойства("providerName"); ЗаписьJSON.ЗаписатьЗначение(providerName);
    ЗаписьJSON.ЗаписатьИмяСвойства("updateDate"); ЗаписьJSON.ЗаписатьЗначение(updateDate);
    ЗаписьJSON.ЗаписатьИмяСвойства("items");
    ЗаписьJSON.ЗаписатьНачалоМассива();
    
    Для Индекс = 0 по COMSafeArray.GetUpperBound() - 1 Цикл
        
        code = Строка(COMSafeArray.GetValue(Индекс, 0)); //Код товара поставщика
        name = Строка(COMSafeArray.GetValue(Индекс, 1)); //Наименование товара
        manufacturer = Строка(COMSafeArray.GetValue(Индекс, 2)); //Производитель
        manufacturerCountry = Строка(COMSafeArray.GetValue(Индекс, 3)); //Страна
        barcode = Строка(COMSafeArray.GetValue(Индекс, 4)); //Штрихкод производителя
        quantity = Число(COMSafeArray.GetValue(Индекс, 5)); //Количество
        price = Число(COMSafeArray.GetValue(Индекс, 6)); //Цена с НДС, руб.
        Если Число(COMSafeArray.GetValue(Индекс, 6)) > 0 Тогда
            multiplicity = (COMSafeArray.GetValue(Индекс, 7)); //Кратность
        Иначе
            multiplicity = 1; //Кратность
        КонецЕсли;
        ratends = Число(COMSafeArray.GetValue(Индекс, 8)); //Ставка НДС, %
        expirationDate = ""; //Срок годности
        
        ЗаписьJSON.ЗаписатьНачалоОбъекта();
        ЗаписьJSON.ЗаписатьИмяСвойства("code"); ЗаписьJSON.ЗаписатьЗначение(code);
        ЗаписьJSON.ЗаписатьИмяСвойства("name"); ЗаписьJSON.ЗаписатьЗначение(name);
        ЗаписьJSON.ЗаписатьИмяСвойства("manufacturer"); ЗаписьJSON.ЗаписатьЗначение(manufacturer);
        ЗаписьJSON.ЗаписатьИмяСвойства("manufacturerCountry"); ЗаписьJSON.ЗаписатьЗначение(manufacturerCountry);
        ЗаписьJSON.ЗаписатьИмяСвойства("barcode"); ЗаписьJSON.ЗаписатьЗначение(barcode);
        ЗаписьJSON.ЗаписатьИмяСвойства("quantity"); ЗаписьJSON.ЗаписатьЗначение(quantity);
        ЗаписьJSON.ЗаписатьИмяСвойства("price"); ЗаписьJSON.ЗаписатьЗначение(price);
        ЗаписьJSON.ЗаписатьИмяСвойства("multiplicity"); ЗаписьJSON.ЗаписатьЗначение(multiplicity);
        ЗаписьJSON.ЗаписатьИмяСвойства("ratends"); ЗаписьJSON.ЗаписатьЗначение(ratends);
        ЗаписьJSON.ЗаписатьИмяСвойства("expirationDate"); ЗаписьJSON.ЗаписатьЗначение(expirationDate);
        ЗаписьJSON.ЗаписатьКонецОбъекта();
        
    КонецЦикла;
    
    ЗаписьJSON.ЗаписатьКонецМассива();
    ЗаписьJSON.ЗаписатьКонецОбъекта();
    ЗаписьJSON.Закрыть();
    
    Connection.Close();
    
КонецПроцедуры

 

"СУПЕРСИЛА" - небольшое отступление от темы.

  Как создать формат json без цикла строк, казалось бы не реально? Но вот T-SQL запрос...)))

Аналог запроса можно проверить на "FOR xml PATH", "FOR json PATH" будет работать только на последней версии SQL Server.

  Посмотрел пару сериализаторов на паблике, но типовой от 1С на мой вкус самый простейший http://v8.1c.ru/o7/201501json/index.htm:

В результате будет получен файл JSON следующего содержания:

{
	"#type": "jcfg:CatalogObject.Контрагенты",
	"#value": {
		"IsFolder": false,
		"Ref": "3d710076-8d04-11dc-8ca0-000d8843cd1b",
		"DeletionMark": false,
		"Parent": "9d5c422c-8c4c-11db-a9b0-00055d49b45e",
		"Code": "000000012",
		"Description": "Мосхлеб ОАО",
		"Регион": "9d5c422f-8c4c-11db-a9b0-00055d49b45e",
		"Индекс": "456789",
		"Страна": "Россия",
		"Город": "Москва",
		"Улица": "Петровка",
		"Дом": "12",
		"Телефон": "+7(999)234-78-64",
		"ЭлектроннаяПочта": "mh@hleb.ru",
		"Факс": "",
		"ВебСайт": "",
		"ВидЦен": "9d5c4225-8c4c-11db-a9b0-00055d49b45e",
		"ДополнительнаяИнформация": "Поставка хлеба",
		"КонтактноеЛицо": "Громышева П.Р.",
		"Широта": 55.762744,
		"Долгота": 37.618102
	}
}

 

ЧТЕНИЕ

Рассмотрим, как происходит чтение, пример с обработкой формы заявки от покупателя будет опубликован чуть позже, сейчас как это выглядит в теории:

// Пример чтения JSON.
ЧтениеJSON = Новый ЧтениеJSON;
// Либо открыть файл, из которого будет выполняться чтение, // либо установить строку, из которой будет выполняться чтение.
ЧтениеJSON.ОткрытьФайл("ИмяФайла");
//ЧтениеJSON.УстановитьСтроку("СтрокаJSON");
Пока ЧтениеJSON.Прочитать() Цикл
    TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
    Если TипJSON = ТипЗначенияJSON.Число ИЛИ TипJSON = ТипЗначенияJSON.Строка ИЛИ TипJSON = ТипЗначенияJSON.Булево ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
        // Обработать значение
        Значение = ЧтениеJSON.ТекущееЗначение;
    ИначеЕсли ТипJSON = ТипЗначенияJSON.Комментарий Тогда
        // Обработать комментарий
        Комментарий = ЧтениеJSON.ТекущееЗначение;
    ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
        // Обработать имя свойства
        ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
    ИначеЕсли TипJSON = ТипЗначенияJSON.НачалоМассива ИЛИ TипJSON = ТипЗначенияJSON.КонецМассива ИЛИ TипJSON = ТипЗначенияJSON.НачалоОбъекта ИЛИ TипJSON = ТипЗначенияJSON.КонецОбъекта ИЛИ TипJSON = ТипЗначенияJSON.Ничего Тогда
        // Обработать начало/конец массива/объекта или отсутствие данных, // ТекущееЗначение читать не нужно.
    КонецЕсли;
КонецЦикла;
ЧтениеJSON.Закрыть();

ЗАЯВКА

Вот и пришла долгожданная заявка, но где же код адреса О_О? Пока разбираемся с этим вопросом, рассмотрим формат:

{  
   "providerName":"Феникс",
   "orderNumber":"23415",
   "orderDate":"01.12.2015",
   "filial":"Аптека 1",
   "address":"6afc1644-342c-11e6-80d6-00155d020c01",
   "items":[  
      {  
         "code":"4261",
         "name":"Капотен 25мг №40 табл Акрихин",
         "manufacturer":"Акрихин ХФК ОАО Россия",
         "manufacturerCountry":"Россия",
         "barcode":"4601969000580",
         "quantity":1,
         "price":185.92,
         "multiplicity":1,
         "expirationDate":"01.10.2019"
      },
      {  
         "code":"4264",
         "name":"Гастрофарм 2,5 №6 табл",
         "manufacturer":"НАЦИОНАЛЬНАЯ ДИСТРИБЬЮТОРСКАЯ КОМПАНИЯ",
         "manufacturerCountry":"Болгария",
         "barcode":"3800043700519",
         "quantity":2,
         "price":52.32,
         "multiplicity":1,
         "expirationDate":"01.05.2017"
      }
   ]
}

Он особо не отличается от отправленного нами прайс-листа, попробуем его обработать через наш "коннектор 1С" и передать в КИС на базе СУБД MS SQL.

FileName = КаталогЗагрузки + "\" + Строка(objFile.Name);

Сообщить(FileName);

items = 0;

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(FileName);
Пока ЧтениеJSON.Прочитать() Цикл
    
    TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
    Если TипJSON = ТипЗначенияJSON.Число ИЛИ TипJSON = ТипЗначенияJSON.Строка ИЛИ TипJSON = ТипЗначенияJSON.Булево ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
        Значение = ЧтениеJSON.ТекущееЗначение;
    ИначеЕсли TипJSON = ТипЗначенияJSON.Комментарий Тогда
        Комментарий = ЧтениеJSON.ТекущееЗначение;
    ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
        ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
    КонецЕсли;
    
    Если ИмяСвойства = "providerName" Тогда
        providerName = Значение;
    ИначеЕсли ИмяСвойства = "orderNumber" Тогда
        orderNumber = Значение;
    ИначеЕсли ИмяСвойства = "orderDate" Тогда
        orderDate = Значение;
    ИначеЕсли ИмяСвойства = "filial" Тогда
        filial = Значение;
    ИначеЕсли ИмяСвойства = "address" Тогда
        address = Значение;
    КонецЕсли;
    
    Если TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
        items = 1;
        
        ТТ = Справочники.ТорговыеТочкиАптек.НайтиПоРеквизиту("GUID", address, , );
        
        Док = Документы.ЗаказыАптеки.СоздатьДокумент();
        Док.Тип = 30;
        Док.Номер = orderNumber;
        Док.Дата = ТекущаяДата();
        Док.Контрагент = ТТ.ТорговаяТочкаКИС.Ссылка;
        
    КонецЕсли;
    
    Если items = 1 Тогда
        
        Если TипJSON = ТипЗначенияJSON.НачалоОбъекта и items = 1 Тогда
            СтрокаТовара = Док.ТабличнаяЧасть.Добавить();
        КонецЕсли;
        
        Если ИмяСвойства = "code" Тогда
            code = Значение;
        ИначеЕсли ИмяСвойства = "quantity" Тогда
            quantity = Значение;
        ИначеЕсли ИмяСвойства = "price" Тогда
            price = Значение;
        КонецЕсли;
        
        Если TипJSON = ТипЗначенияJSON.КонецОбъекта Тогда
            СтрокаТовара.Номенклатура = Справочники.Номенклатура.НайтиПоКоду(code);
            СтрокаТовара.Количество = Число(quantity);
            СтрокаТовара.Цена = price; //
        КонецЕсли;
        
    КонецЕсли;
    
    Если TипJSON = ТипЗначенияJSON.КонецМассива Тогда
        items = 0;
    КонецЕсли;
    
КонецЦикла;
ЧтениеJSON.Закрыть();

//DocumentStatus
Док.НомерКИС = orderNumber;

Попытка
    Док.Записать(РежимЗаписиДокумента.Проведение);
Исключение
    Сообщить(ОписаниеОшибки());
КонецПопытки;

Сообщить("Создан заказ № " + orderNumber);

Скачать файлы

Наименование Файл Версия Размер
json

.epf 6,73Kb
39
.epf 6,73Kb 39 Скачать

Специальные предложения

Отзывы
19. JetBrain 75 11.12.20 23:34 Сейчас в теме
(13) для такого источника данных Массив будет десериализован в массив. Объект JSON будет преобразован в соответствие или структуру:

 	СтрокаJSON    = HTTPОтвет.ПолучитьТелоКакСтроку();
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
	Данные = ПрочитатьJSON(ЧтениеJSON, Истина);
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. aximo 1975 19.12.15 10:47 Сейчас в теме
приятно видеть, что инструментарий платформы 1с развивается.
2. vano-ekt 122 19.12.15 16:19 Сейчас в теме
//сдесь получаем массив

сдесь желание смотреть код пропало
Oslo696; NN2P; DrAku1a; BigB; +4 Ответить
3. JetBrain 75 19.12.15 18:56 Сейчас в теме
(2) vano-ekt, есть другие варианты обработать COMObject быстрее? Сами варианты то конечно есть...
Или имелось ввиду перегнать сразу за "пару секунд" массив в формат json, без циклов обхода строк, но тогда эта "сверхсекретная" информация не для данного паблика :)
4. CyberCerber 977 21.12.15 09:52 Сейчас в теме
(3) думаю, имелось в виду совсем другое... :-)
Получать массив нужно не сдесь, а здесь.
8. JetBrain 75 22.12.15 22:56 Сейчас в теме
(2) vano-ekt, специально для Вас бонус см. разделе "суперсила", дальше смотреть код и не нужно ;)
5. AndreyNit 57 22.12.15 09:00 Сейчас в теме
Познавательно, автору плюс.
6. dj_serega 385 22.12.15 18:53 Сейчас в теме
А почему:
        code                = Строка(COMSafeArray.GetValue(Индекс,0)); //Код товара поставщика
        name                = Строка(COMSafeArray.GetValue(Индекс,1)); //Наименование товара
        manufacturer        = Строка(COMSafeArray.GetValue(Индекс,2)); //Производитель
        manufacturerCountry = Строка(COMSafeArray.GetValue(Индекс,3)); //Страна
        barcode             = Строка(COMSafeArray.GetValue(Индекс,4)); //Штрихкод производителя
        quantity            = Число(COMSafeArray.GetValue(Индекс,5)); //Количество
        price               = Число(COMSafeArray.GetValue(Индекс,6)); //Цена с НДС, руб.
        Если Число(COMSafeArray.GetValue(Индекс,6)) > 0 Тогда
            multiplicity = (COMSafeArray.GetValue(Индекс,7)); //Кратность 
        Иначе 
            multiplicity = 1; //Кратность 
        КонецЕсли;
        ratends            = Число(COMSafeArray.GetValue(Индекс,8)); //Ставка НДС, %
Показать

И
        ЗаписьJSON.ЗаписатьИмяСвойства("code");                ЗаписьJSON.ЗаписатьЗначение(code);
          ЗаписьJSON.ЗаписатьИмяСвойства("name");                ЗаписьJSON.ЗаписатьЗначение(name);
          ЗаписьJSON.ЗаписатьИмяСвойства("manufacturer");        ЗаписьJSON.ЗаписатьЗначение(manufacturer);
          ЗаписьJSON.ЗаписатьИмяСвойства("manufacturerCountry"); ЗаписьJSON.ЗаписатьЗначение(manufacturerCountry);
          ЗаписьJSON.ЗаписатьИмяСвойства("barcode");             ЗаписьJSON.ЗаписатьЗначение(barcode);
          ЗаписьJSON.ЗаписатьИмяСвойства("quantity");            ЗаписьJSON.ЗаписатьЗначение(quantity);
          ЗаписьJSON.ЗаписатьИмяСвойства("price");               ЗаписьJSON.ЗаписатьЗначение(price);
          ЗаписьJSON.ЗаписатьИмяСвойства("multiplicity");        ЗаписьJSON.ЗаписатьЗначение(multiplicity);
          ЗаписьJSON.ЗаписатьИмяСвойства("ratends");             ЗаписьJSON.ЗаписатьЗначение(ratends);
          ЗаписьJSON.ЗаписатьИмяСвойства("expirationDate");      ЗаписьJSON.ЗаписатьЗначение(expirationDate);
 
Показать

не через общие функции реализовано?
EMelihoff; +1 Ответить
7. JetBrain 75 22.12.15 21:58 Сейчас в теме
(6) dj_serega, задачи такой не ставилось, пример должен быть как можно проще, и каким образом этот сделать?
9. kosmo0 107 23.12.15 10:44 Сейчас в теме
А кусок кода на запись так и должна совпадать с кодом на чтение?
10. JetBrain 75 23.12.15 11:05 Сейчас в теме
(9) kosmo0, нет так не должно быть, блок записи исправил.
11. alex_4x 84 09.02.16 13:22 Сейчас в теме
для 1С 8.2 нет реализации ? чтобы не типовыми методами 8.3 Чтение и запись делать....
12. JetBrain 75 10.02.16 07:15 Сейчас в теме
(11) alex_4x, для 8.2 самописные функции, примеры разные http://infostart.ru/public/59535/
13. user633364_seleznev.ua 17.05.20 13:16 Сейчас в теме
ЗаголовокЗапросаHTTP = Новый Соответствие();
	
	ssl1 = Новый ЗащищенноеСоединениеOpenSSL(
	Новый СертификатКлиентаWindows(СпособВыбораСертификатаWindows.Авто),
	Новый СертификатыУдостоверяющихЦентровWindows());

	//ИмяСервера = "happykids.ru";
	ЗаголовокЗапросаHTTP.Вставить("Content-type", "application/x-www-form-urlencoded;charset=utf-8");
	HTTP =  Новый HTTPСоединение(ИмяСервера,,"", "",,,ssl1);     //Адрес сайта и порт если потребуется. пример - http://localhost:8000
	запросPOST = Новый HTTPЗапрос("/pointWebHook/handler.php");          // адрес url веб-сервиса /api/v1/datafill/ 
	запросPOST.УстановитьИмяФайлаТела(ИмяВременногоФайла);
	
	Стр = ЗапросPost.ПолучитьТелоКакСтроку();
	Попытка
		//Отправляем для обрааботки на наш сервер
		ФайлРезультата = ПолучитьИмяВременногоФайла();
		HTTPОтвет = HTTP.ОтправитьДляОбработки(запросPOST, ФайлРезультата);
		ТекстовыйФайлОтвет = Новый ТекстовыйДокумент;
		ТекстовыйФайлОтвет.Прочитать(ФайлРезультата,КодировкаТекста.UTF8);
		ОтветСервера = ТекстовыйФайлОтвет.ПолучитьТекст();
		
	Исключение
		Сообщить(ОписаниеОшибки());
	КонецПопытки;
Показать
19. JetBrain 75 11.12.20 23:34 Сейчас в теме
(13) для такого источника данных Массив будет десериализован в массив. Объект JSON будет преобразован в соответствие или структуру:

 	СтрокаJSON    = HTTPОтвет.ПолучитьТелоКакСтроку();
	
	ЧтениеJSON = Новый ЧтениеJSON;
	ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
	Данные = ПрочитатьJSON(ЧтениеJSON, Истина);
14. zavsom 102 02.12.20 13:35 Сейчас в теме
{ВнешняяОбработка.json.Форма.Форма.Форма(27,34)}: Переменная не определена (СтрокаЗапроса)
COMObject = Connection.Execute(<<?>>СтрокаЗапроса); (Проверка: Сервер)

Вы хоть проверяете перед тем как продавать?
15. JetBrain 75 05.12.20 09:28 Сейчас в теме
(14) читайте описание:
  Query = "...запрос TSQL...";

    Попытка
        COMObject = Connection.Execute(Query); 
        COMSafeArray = COMObject.GetRows(); 
    Исключение
        Сообщить(Query + " // " + ОписаниеОшибки());
    КонецПопытки;
16. zavsom 102 05.12.20 15:06 Сейчас в теме
Если б было так никто б Вам не написал а там так:
Query = "...запрос TSQL...";

Попытка
COMObject = Connection.Execute(Запрос);
17. zavsom 102 05.12.20 15:07 Сейчас в теме
поправьте - мелочь но некорректно жеж
18. JetBrain 75 10.12.20 09:47 Сейчас в теме
(17) добрый день.
публикация про разбор Json формата, не про работу с внешним источником через odbc. запрос Query и сам источник данных любой произвольный, поэтому и не имеет конкретного кода. его с таким же успехом можно заменить на внутренний запрос 1с .
Оставьте свое сообщение

См. также

Групповая обработка справочников и документов через таблицу v 1.0

Универсальные обработки Обработка документов Обработка справочников Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Думаю, что многим знакома ситуация: пользователь что-то посчитал в Excel и просит разработчика подгрузить из таблички изменения в базу. Я долго мучался, писал какие-то разовые загрузки и в итоге родил представленную в публикации идею. Проверял на платформе версии 8.3.10.2309.

2 стартмани

12.04.2023    6111    12    kser87    17    

52

Расширение: Быстрые отборы через буфер [Alt+C] Копировать список, [Alt+V] Вставить список, [Ctrl+C] Копировать из файлов

Универсальные обработки Инструментарий разработчика Универсальные функции Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Копирует в буфер значения из списков, из ячеек отчетов, таблиц, настроек списков, других отборов и вставляет в выбранную настройку отбора. Работает с Объект не найден. Работает как в одной так и между разными базами 1С. Использует комбинации [Alt+C] Копировать список, [Alt+V] Вставить список. Также для копирования данных используется стандартная [Ctrl+C] (например из открытого xls, mxl, doc и т.п. файла скопировать список наименований)

1 стартмани

13.10.2022    11636    85    sapervodichka    92    

114

Ручное редактирование реквизитов и табличных частей объектов и их движений в обход формы

Универсальные обработки Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Если вы всё ещё в каждый раз пишете обработку для того, чтобы отредактировать какой-либо скрытый или заблокированный реквизит на форме какого либо справочника или документа или пишете обработку для чистки движений документа или для их редактирования, то эта обработка для вас).

3 стартмани

21.02.2022    6479    28    serjserg    6    

5

Предпросмотр PDF, JPG, PNG, TIFF, Word, Excel

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Предварительный просмотр присоединенных файлов PDF, JPG, PNG, TIFF, Word, Excel через расширение. Позволяет изменять масштаб, поворачивать и листать. Не требует подключения к интернету и внешних компонент.

2 стартмани

01.11.2021    10328    99    TyurinArt    33    

39

Управление платформенными обработками (расширение для типовых) [update 8.3.23]

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Расширение использует недокументированную возможность для управления платформенными обработками. Например, чтобы подменить "Активные пользователи" или доработать "Конструктор запросов".

1 стартмани

07.10.2021    12294    23    SeiOkami    25    

99

Универсальная обработка переноса данных из основной конфигурации в расширение

Универсальные обработки Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка предназначена для разработчиков, для тех случаев, когда ранее дописанный функционал, перенесен в расширение и появляется необходимость перенести данные из объектов основной конфигурации в объекты расширения. Перенос осуществляется настройкой соответствия объектов основной конфигурации объектам расширения.

5 стартмани

05.10.2020    21358    127    biz-intel    109    

60

Улучшенная обработка универсального обмена данными в формате XML (УФ)

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

Улучшенная обработка "Универсальный обмен данными" с полноценными возможностями СКД для выборки данных (не только для отборов).

1 стартмани

23.06.2020    23959    213    Lem0n    1    

71

Панель #Расширение объекта: Редактор, Права, Поиск, Сторно, Обмен

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Панель команд текущего объекта (документа, справочника и т.д.) со следующим возможностями: Редактор реквизитов, таблиц и движений текущего объекта, Анализ прав доступа к текущему объекту, Поиск ссылок на объект с отборами, Сторно движений документа, Выгрузка/загрузка текущего объекта между базами. Реализована всплывающей панелью в форме объекта. Подключается как расширение конфигурации (*.cfe) либо отдельными обработками.

1 стартмани

01.05.2020    23930    133    sapervodichka    3    

130

Яндекс сервисы [Расширение]

Универсальные обработки WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Расширение для работы с Яндекс-сервисами (предиктор,переводчик,проверка орфографии)

1 стартмани

24.10.2019    23372    13    noprogrammer    12    

42

Генерация QR кода для любых конфигураций 1С (обычные и управляемые формы)

Универсальные обработки Универсальные функции Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Для генерации используется компонента типовой конфигурации УТ11, встроенная в общий макет "КомпонентаПечатиQRКода". Ниже приведены процедуры, чтобы сделать обработку самостоятельно (только для УФ).

1 стартмани

11.10.2019    47890    243    dm1try    0    

30

Работа с файлами (обычная и управляемая форма)

Универсальные обработки Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Нужно загрузить файл с клиента на сервер или же, наоборот, файл загрузить с сервера на клиент, а впридачу все это на web-клиенте, да еще и асинхронно? Нет ничего проще, читай далее, как это сделать!

1 стартмани

10.06.2019    63840    327    Xershi    81    

151

Электронная таблица средствами 1С (Версия 2.0)

Универсальные обработки Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Функционал электронной таблицы для программ на платформе 1С реализован на основе табличных документов. Функционал реализован в виде обработки. Большую часть формы обработки занимают листы (закладки) с табличными документами, которые выполняет роль электронной таблицы. Листы могут быть добавлены, удалены или переименованы. Ограничение по количеству листов определяется возможностью платформы. В формулах электронной таблицы можно использовать любые языковые конструкции, процедуры и функции 1С, ссылки на другие ячейки электронной таблицы расположенные в том числе и на других листах. Допустимо обращаться к ячейкам электронной таблицы по имени именованной области. В случае использования в формулах электронной таблицы данных из самой таблицы пересчет зависимых ячеек с формулами производится автоматически. Электронную таблицу можно сохранить в файл.

1 стартмани

23.04.2019    31539    102    user706545_kseg1971    41    

84

Снятие блокировки элементов управляемой формы для редактирования

Универсальные обработки Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Внешняя обработка + код с одной функций разблокировки элементов управляемой формы владельца для редактирования в любых конфигурациях с использованием БСП. Тестировалось на платформе 8.3.10.2667 и выше

1 стартмани

21.03.2019    16337    9    independ    6    

39

Редактор объектов информационной базы 8.3

Универсальные обработки Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Абонемент ($m)

Универсальная внешняя обработка для редактирования реквизитов и табличных частей объектов информационной базы, редактирование движений документов. Доступ ко всем реквизитам объектов, есть возможность выгрузки и загрузки данных (объекты и движения документов) через XML. Платформа 8.3, управляемые формы. Версия 1.1.0.71 от 07.05.2023

2 стартмани

23.01.2019    59364    699    ROL32    87    

128

Сравнение pdf-файлов актов сверки

Универсальные обработки Взаиморасчеты Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 2.0 Россия Бухгалтерский учет Абонемент ($m)

Обработка сравнивает два pdf-файла, в которых находятся стандартные печатные формы актов сверки, и показывает на экране совпадающие и/или отличающиеся по суммам документы взаиморасчетов.

1 стартмани

19.12.2018    30952    22    Torin99    8    

5

Выгрузка изображений из справочника на диск

Учет ТМЦ Универсальные обработки Платформа 1С v8.3 1С:Управление торговлей 11 Оптовая торговля, дистрибуция, логистика Россия Абонемент ($m)

Обработка позволяет записать изображения из справочка Номенклатура на диск в указанное место.

1 стартмани

30.11.2018    33962    14    wrooom    16    

6

Обнуление остатков регистров бухгалтерии и накопления

Универсальные обработки Чистка данных Платформа 1С v8.3 Бухгалтерский учет Оперативный учет Управляемые формы 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Зарплата и Управление Персоналом 2.5 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия государственного учреждения 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Обработка позволяет обнулить остатки по регистру накопления или бухгалтерии на определенную дату. Поддерживается большинство типовых конфигураций (БП 3, БП 2, УТ 11, УТ 10, ЗУП 3, ЗУП 2, БГУ 2, БГУ 1, ERP, УПП, КА 2, КА 1, УХ 3, УХ 1, УНФ). Гибкая настройка (отборы, заполнение реквизитов и любых полей корр. счета, возможность обнулять ресурсы выборочно). Несколько режимов работы. Два интерфейса: простой и с расширенным набором настроек.

2 стартмани

19.11.2018    49238    626    morozov.sv    69    

72

Подключаемые печатные формы с .DOCX макетом без Word'а

Универсальные обработки Печатные формы Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Данная обработка является подключаемой печатной формой в docx, своего рода шаблоном для удобного и быстрого выпуска новых печатных форм на основе docx макета. При этом не требуется установленный word.

1 стартмани

25.07.2018    24972    73    🅵🅾️🆇    33    

39

Просмотр, изменение реквизитов объекта. Сравнение двух одинаковых объектов метаданных ИБ

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Показывает реквизиты объекта (ов) или сравнивает два одинаковых объекта конфигурации справочники, документы.

1 стартмани

26.04.2018    28669    34    Vin_Tik    0    

2

Групповая обработка прикрепленных файлов

Универсальные обработки Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Абонемент ($m)

Кому не знакомы авралы в бухгалтерии, когда налоговая требует представить копии всех документов за два-три года? Кто не получал сюрпризов в виде отсутствия документов, когда завтра их нужно уже представлять проверяющим? 1С предлагает прикрепление и хранение копий документов (в том числе со сканера) в базе, а данная обработка решает вопрос их быстрой подборки, сортировки и выгрузки, а также быстрого и эффективного контроля наличия или отсутствия документов в базе с формированием реестров как выгруженных, так и отсутствующих документов. В настоящий момент обработка бесплатна, в дальнейшем планируется платная версия с расширенными возможностями. Скажите решительное "Нет" авралам в бухгалтерии и штрафам за несвоевременное представление документов!

4 стартмани

16.04.2018    26234    72    Krasnyj    0    

63

Построение маршрута доставки с расчётом расстояния для любой базы УФ

Универсальные обработки WEB-интеграция Оптовая торговля Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Графическое изображение маршрутного листа по картам гугл. Работает на любой конфигурации с управляемыми формами. Использует новую версию api google-карт от 13.02.2018 года под IE11.

10 стартмани

24.02.2018    53029    47    KorotkovRV    17    

67

Проверка орфографии средствами Yandex Speller

Универсальные обработки WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Проверка орфографии средствами Yandex Speller с опциями и коррекцией ошибок. Возможность вызова как с сервера, так и с клиента (с последующим исправлением).

1 стартмани

09.11.2017    41561    67    🅵🅾️🆇    41    

88

Ведение локального каталога обработок с Инфостарт

Универсальные обработки WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка наводит порядок в ваших скачанных и локально хранимых обработках с Инфостарта. Это особенно удобно тем коллегам, которые уже скачали немалый объем обработок и хотят получить удобный инструмент навигации по списку.

1 стартмани

06.10.2017    42375    71    rpgshnik    48    

75

Инструменты бухгалтера: Виджеты рабочего стола

Универсальные обработки Рабочее место Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Абонемент ($m)

Настраиваемые виджеты на начальной странице, своеобразная панель для быстрого доступа к объектам. Виджеты это элементы интерфейса в виде цветных прямоугольников со ссылками на объекты конфигурации. Использование виджетов позволяет сконцентрировать на начальной странице часто используемые функции, например, варианты отчетов, списки документов, или используя виджет вводить новый документ прямо из начальной страницы.

2 стартмани

28.08.2017    54310    199    Bazil    33    

148

Поиск и восстановление битых ссылок (обычная и управляемая форма) 8.2-8.3

Универсальные обработки Поиск данных Корректировка данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Обработка для поиска и восстановления битых ссылок (Объект не найден). Адаптирована для конфигураций на обычных и управляемых формах 8.2 - 8.3

1 стартмани

08.04.2017    55410    772    Xershi    66    

40

Консоль сравнения данных (1С 8, 1С 7.7, SQL, CSV, TXT, DBF, XLS, DOC, XML, JSON, табличный документ) (версия 15.9.65)

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Обработка Консоль сравнения данных (КСД) предназначена для сравнения данных, полученных из разных источников данных: информационных баз 1С 8, 1С 7.7, баз данных SQL, файлов формата CSV/TXT/DBF/XLS/DOC/XML, строки JSON, вручную заполненного табличного документа. Минимально необходимая версия платформы: 8.3.6.1977.

1 стартмани

13.02.2017    51883    181    sertak    137    

125

Разбор адреса на составляющие с помощью Яндекс API и Google API

Универсальные обработки WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Есть адрес строкой, а нужно разбить его на составляющие? Для этого не обязательно писать собственный код, пользуемся Яндекс API и Google API.

1 стартмани

10.02.2017    41660    150    Ivon    24    

47

Образец внешней обработки с длительной операцией на базе БСП 2.3 (Переработанная)

Универсальные обработки БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Переработанная внешняя обработка для запуска длительных операций на базе БСП 2.3. Показывает прогресс, не требует изменений в конфигурации, лёгкая в отладке и использовании, работает в безопасном режиме, простая для понимания.

1 стартмани

30.11.2016    48194    211    ЕСТЬNULL    15    

47

Настройка начальной страницы (Рабочего стола)

Работа с интерфейсом Рабочее место Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Альтернатива стандартной настройке начальной страницы. В типовой доступны лишь те формы, что явно "разрешены" разработчиком в режиме конфигуратора. Эта обработка позволяет собрать "Рабочий стол" из любых подходящих форм в пользовательском режиме. Без программирования. БСП не используется. Не расширение. Универсальна, т.е. подойдет для любой конфигурации (в т.ч. самописной).

2 стартмани

19.10.2016    56968    304    Erne100    34    

69

Поиск и отключение зависших сеансов на сервере 1С: Предприятия

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Россия Абонемент ($m)

Обработка предназначена для мониторинга и отключения спящих (зависших) сеансов на сервере 1С: Предприятия.

1 стартмани

14.09.2016    47268    71    wowchik_85    12    

13

Редактор движений документа. Сохранение в XML, обмен между базами, замена регистратора.

Обработка документов Универсальные обработки Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 Абонемент ($m)

Редактор набора записей движений документа. Позволяет сохранить набор записей в XML, в настройки пользователя, прочитать сохраненный XML в другой идентичной базе, заменить регистратор. Можно изменять порядок записей, менять активность, как массово, так и по одной и др. Тонкий клиент, управляемые формы.

1 стартмани

07.09.2016    62859    183    Aphanas    5    

31

Универсальный поиск объектов по глобальному уникальному идентификатору (ГУИД, GUID)

Универсальные обработки Поиск данных Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Универсальная обработка поиска объектов информационной базы по глобальному уникальному идентификатору (ГУИД, GUID) или по его части.

1 стартмани

06.09.2016    47485    126    Dzenn    9    

11

Обработка "Распознавание штрихкода с помощью утилиты Zbar" для Документооборот ред. 2

Универсальные обработки Документооборот и делопроизводство (СЭД) Платформа 1С v8.3 1С:Документооборот Абонемент ($m)

В связи с тем, что стандартный функционал программы «Документооборот» ред. 2.1 дает возможность распознавания штрихкодов только форма EAN-13, данная обработка - альтернативный способ для распознавания штрихкода в программе 1С: Документооборот ред. 2 с помощью утилиты Zbar, которая распознает в том числе и в формате Code 128 (один из стандартных штрихкодов кодирования документов, например, «Управление торговлей» ред. 11), а также с возможностью поэтапно проследить все действия от распознавания до прикрепления к документу или простой загрузки в каталоги файлов в базе 1С.

5 стартмани

05.09.2016    36511    196    SEOAngels    11    

18

Оптимальный способ расчета контрольной суммы объекта/записи регистра (CRC32, MD5, SHA1, SHA256)

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

(©ТопчийДЮ) Была задача сравнить документы в распределенных базах и пометить на выгрузку измененные. Но сравнение изменений документов методом перебора реквизитов - долгоиграющий процесс, особенно если общее количество сравниваемых данных переваливает за миллион. Был найден выход, который ускоряет процесс сравнения - расчет контрольной суммы объекта и сравнение ее с другой контрольной суммой. Скорость сравнения увеличивается во много раз.

1 стартмани

01.08.2016    49189    10    hakerxp    10    

25

Проверка правописания в 1С с помощью Яндекс.Спеллера

Универсальные обработки Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Универсальная проверка правописания для поля "HTML"

1 стартмани

11.07.2016    26385    79    d.alexandr    12    

44

Работа с Яндекс.Диском (обычная и управляемая форма)

Универсальные обработки WEB-интеграция Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Возникла необходимость хранить картинки, а может и другие файлы в Яндекс.Диске? Нет ничего проще, работай с Ядекс.Диском прямо из 1С!

1 стартмани

10.07.2016    45535    225    Xershi    55    

85