а вот корректно считать с JSON-файла уже не получается.
ПараметрыНастроек = СериализаторXDTO.ПрочитатьJSON(ЧтениеJSON);
Не получится, так как читаете в структуру. А там такие имена ключей... которые не поддерживаются в структуре.
Или меняйте имена ключей или читайте в соответствие.
ошибку возвращает
Недопустимое значение аргумента функции
[xdto - D:\Jenkins\ci_builder\WindowsBuild2_XQV1CCIIPB0O\Platform\src\xdto\src\XDTOFactoryImpl.cpp
С вываливанием из 1С.Предприятие
если
ЧтениеJSON = новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ПолноеИмяФайлаНастроек);
Нов = ПрочитатьJSON(ЧтениеJSON);
То
Ошибка при вызове метода контекста (ПрочитатьJSON)
{ВнешняяОбработка.ЗаполнениеТабличнойЧастиРеализации.Форма.Форма.Форма(384)}:Нов = ПрочитатьJSON(ЧтениеJSON);
по причине:
Недопустимое имя свойства: '#type' для чтения JSON в объект Структура
если
Нов = ПрочитатьJSON(ЧтениеJSON,Истина);
что более правильное, то структура странная в прикреплённом файле
(4) тут по-ходу надо функцию разбора файла писать. У меня изначально СООТВЕТСТВИЯ. А уже в них массивы. А в итоге получаю соответствия соответствий, где ключи хотя вполне понятные, но нужен их разбор и собирание по результатам нужного мне соответствия с массивами
(11) делайте через обычный ЗаписатьJSON\ПрочитатьJSON
тогда получите, что положили, то и прочитали
и да, разбирать после чтения надо будет отдельно в любом случае и стерилизатор вам тут не поможет, а только усложнит задачу
(13) соответствия просто ЗаписьJSON не пишет. В этом то и проблема
Ошибка при вызове метода контекста (ЗаписатьJSON)
{ВнешняяОбработка.ЗаполнениеТабличнойЧастиРеализации.Форма.Форма.Форма(360)}:ЗаписатьJSON(ЗаписьJSON, ПараметрыНастроек, НазначениеТипаXML.Явное);
по причине:
Недопустимый тип значения ключа элемента соответствия
(12) (14) вот тут согласен
было дело, тоже с такой фигней мучался
правда там не я сам писал json, а получал его из сервиса, но разбирать надо было и там да, куча соответствий, которые надо было правильно интерпретировать и разложить
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку();
Массив = Новый Массив;
Массив.Добавить(1);
Массив.Добавить(2);
Данные = Новый Соответствие;
Данные.Вставить(Контр1,Массив);
Данные.Вставить(Контр2,Массив);
СериализаторXDTO.ЗаписатьJSON(Запись,Данные, НазначениеТипаXML.Явное);
Стр = Запись.Закрыть();
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(Стр);
Нов = СериализаторXDTO.ПрочитатьJSON(Чтение);
Чтение.Закрыть();
Показать
Контрагент1 и Контрагент2 это что и какого типа?
Похоже с ними проблема.
(16)
(16) это чистая ссылка на контрагент. В файле это UUID. Как раз с ними проблем нет. Проблема в том, что соответствие Контрагент-массив, а как прочитается, то в соответствии СООТВЕТСТВИЕ-СООТВЕТСТВИЕ... т.е. массив уходит в соответствие ...
(25)
(25) так и есть! Сохраняет всё так. Но мне надо теперь прочитать и сохранить в то, что было, т.е. в соответствия, где в каждом соответствии массив. Сейчас он этот массив суёт в соответствия тоже с огромным количеством вложений. Картинку прикреплял
(19)
(21)
Стр = Запись.Закрыть(); - это у меня в другой процедуре. Я сохраняю раз в неделю в файл. Стр не запомнится никаким образом при следующем открытии, а если сбойнёт, то мне надо не "стр", а прочитать настройки с файла уже
Есть сохранение настроек, а есть чтение настроек - это совсем другая процедура и я её буду пользоваться при сбоях
Так-то я храню все настройки в хранилищеЗначений, но в файл надо на всякий случай
(22) Вам шашечки или ехать?
Для тестирования не важно что там и как. В момент записи используете приведенный код и сразу смотрите результат. Это не продакшен решение.
(23) ладно. Я сохранил вчера.
Сегодня открыл обработку и читаю с файла. И это потому, что пользователь сам сбил настройки и мен надо вернуть. Откуда мне взять "стр"? с настроек мне нельзя, потому что они испорчены... только с файла
(24) Вы понимаете разницу в тестировании и код в продакшене?
У Вас проблема формата сохранения. Делаете тестирование, что и как сохраняется и сразу пробуете это загрузить.
Вот, когда это отладите, тогда и прописываете с сохранением в файл и т.д. как надо.
Наверно проще не массив а строку сделать, а потом разобрать в массив, так что ли ((((
Т.е. соответствия Контрагент - строка. Хотя разбор строк та ещё проблема, понапишут всякие символы, потом разбор порушится (
А так вот только часть просмотра того, что дает простое чтение JSON именно соответствий
Только парсинг.
Или не надо лохматить бабушку.
Все равно ссылочные значения не передаются.
Или передаются в виде отдельной структуры с описанием метаданных.
Которые потом все равно надо дополнительно читать из базы.
(30)
(30) ну, изначально я и хотел использовать давно проверенный JSON и структуру. Но как фиксировать какой контрагент в структуре?
Не нашёл простого решения. Код не прокатывает из-за символов. Вводить доп реквизит -"не фонтан"... надо ещё покумекать (
(39)
(32)тогда структура будет выглядеть так -
"Контраент1" а в нем своя структура,
"Контраент2" а в нем своя структура
Ключ будет только таким, каким его поддерживает структура, к примеру он не может быть "00-00021" и не "К00-00021" или пр.
В соответствии это UUID контаргента - массив
Сейчас проверяю ещё. Играюсь параметрами ЧтениеJSON
(34)
(34) вот в структуре ничего, а в соответствии он есть контрагент. Ссылка четко формируется. Я же так работаю и это соответствие у меня сохраняется в Хранилище Значений. А вот на всякий случай попросили сохранить в файл
(35) Ну да.
1. Если он в этой базе существует под этим же GUID.
2. Это все равно постобработка структуры/соответствия. Сама платформа за вас ничего получать не собирается.
(39) Прекрасно. И в каких типовых конфигурациях это работает? (Намекаю на поддержку совместимости)
// на вондерленде nginx упал. Лучшая IT-компания России.
// Поднялся.
(46) Я все понимаю. Но я формат JSON воспринимаю как формат для обмена между различными системами.
А пытаться обмениваться джейсоном между одинаковыми системами 1С - глупость. Тут проще нормальный XML.
Вы бы прислали нужный формат, текста JSON и тогда бы проще было. А сейчас вообще не понятно что вам надо и в чем сложности.
Просто структура в JSON хорошо ложится без всяких костылей.
Сохраняемые данные не соответствуют заявленным. Т.е. сохраняете не соответствие с ключами Ссылка справочника и значением Массив, а совсем что-то другое.
Решил проблему. Описываю решение.
1. Хотя у меня в ХранилищеЗначения было соответствие и то, что было и всё это работало, мешало мне сохранить и восстановить. Делал через
И это сохраняло во вполне нормальную читабельную структуру, но десериализовать это не получилось. Скорее у меня нет опыта, а нужно было написать функцию разбора (указание на неё есть в описании, примера нет),
Вычитал также, что лучше в соответствие сохранять не ссылку на контрагента, хотя это не мешало раньше работать, а строку УИД.
2. Сохранил
ЧтениеJSON = новый ЧтениеJSON;
ЧтениеJSON.ОткрытьФайл(ПолноеИмяФайлаНастроек);
ПараметрыНастроек = ПрочитатьJSON(ЧтениеJSON,Истина); // истина потому, что есть соответствие
ЧтениеJSON.Закрыть();
- увидел, что массив остался, а вот структуру с числами ЧтениеJSON преобразовало в соответствие(наверно потому, что задана ИСТИНА)
Поэтому сделал проще. Сразу задал параметры как соответствия. Они и пишутся как соответствия теперь и читаются.
P.S. Забыл дописать - ЛЮБЛЮ 1С за хорошее описание и незабываемый "сек*с" с ним. Ну... опыт есть опыт
(39)
(47) мне надо сохранить некую структуру, в которой каждому контрагенту соответствует массив чисел. Также я сохраняю в эту структуру массив строк, но он принадлежит другому объекту - ТЗ.
Это у меня рабоатет, т.к. сохраняется в ХранилищеЗначений (см. прикрепление). Но меня попросили сохранить в файл на всякий случай эти настройки