Можно ли записать в JSON тип Справочник.Ссылка.Товары?

1. G_118211003767742849645 17.09.22 11:51 Сейчас в теме
Стоит задача, записать в JSON Товары и их остатки.
Беру их из регистр накопления через запрос.
Но ничего не записывает JSON.
Потом прочитала, что в JSON нельзя записывать тип Ссылка.

Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Артикул","%"+Артикул+"%"); 
	Запрос.Текст = 
	"ВЫБРАТЬ
	|Остатки.Товар КАК tovar,
	|Остатки.Количество КАК kol
	|ИЗ
	|	РегистрНакопления.Остатки КАК Остатки
	|ГДЕ
	|	Остатки.Товар ПОДОБНО &Артикул";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Массив= Новый Массив;
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		Структура = Новый Структура ("tovar,kol");
		ЗаполнитьЗначенияСвойств(Структура,ВыборкаДетальныеЗаписи);
		Массив.Добавить(Структура);

	КонецЦикла;
	
	ЗаписьJSON= Новый ЗаписьJSON;
	ЗаписьJSON.УстановитьСтроку();
	ЗаписатьJSON(ЗаписьJSON,Массив);
	
	СтрокаJSON=ЗаписьJSON.Закрыть();
	Возврат СтрокаJSON;
	

КонецФункции 

Показать


Подскажите пожалуйста:
1.Откуда еще можно брать Товары+Остатки.
2. На что можно еще записывать кроме JSON.
Спасибо.
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Release 17.09.22 12:32 Сейчас в теме
(1)
Потом прочитала, что в JSON нельзя записывать тип Ссылка.

Вроде как нельзя, но можно записывать код и наименование, и даже артикул, как и любые другие реквизиты простого типа.
Можно записывать представление ссылки или уникальный идентификатор, зависит от задачи.
(1)
Откуда еще можно брать Товары+Остатки.

От туда, где они есть - хранятся или можно рассчитать (самостоятельно в коде или платформой).
(1)
На что можно еще записывать кроме JSON.

В каком угодно формате: xml, csv, в xls(x) например. Да, хоть в картинку, если алгоритм напишите или используете готовый.
Это должен определять разработчик, консультант или еще кто, кто ответственен за постановку задачи.

Может стоит тогда озвучить задачу полностью? А так, нужно в json, пишите в json.
G_118211003767742849645; +1 Ответить
5. G_118211003767742849645 17.09.22 14:20 Сейчас в теме
3. cassper 17.09.22 12:33 Сейчас в теме
В качестве товара можно получить либо ГУИД ссылки, либо какой-то ключевой параметр, по которому можно идентифицировать товар в другой системе, например, тот же артикул выгружать. Или вам в качестве товара нужна вся структура объекта?
G_118211003767742849645; +1 Ответить
4. G_118211003767742849645 17.09.22 14:13 Сейчас в теме
(3)Мне нужна выгружать только товар + остатки и передать из через http-сервис.
6. ishelper 17.09.22 14:59 Сейчас в теме
(4)
выгружать только товар + остатки и передать из через http-сервис
И что принимающая сторона будет делать со ссылкой (если вам удастся ее передать)?

Ваша ссылка действует только в пределах вашей базы, вне ее она лишена малейшего смысла. На пальцах: если дорожный указатель "Агрыз 5 км" (это - ссылка) передать, например, во Францию - какой там с него прок? Его можно воткнуть где-нибудь под Парижем, но там просто не поймут - что он означает? И уж Агрыз от этого там точно не появится. :-)

P.S. Программирование надо не только учить, но и понимать.
G_118211003767742849645; +1 Ответить
7. G_118211003767742849645 17.09.22 15:03 Сейчас в теме
(6)Принимающая сторона через http-сервис будет только проверять/наблюдать/читать товарные остатки. И все.
8. ishelper 17.09.22 15:16 Сейчас в теме
(7)
Принимающая сторона через http-сервис будет только проверять/наблюдать/читать товарные остатки
Ага, всего-то - проверять погоду в Агрызе. Из Парижа. По указателю.

Объяснять, я вижу, бесполезно. Поэтому просто напомню на десерт: в конце концов, по сути JSON - это текст. Вот из этого и исходите в своих хотелках.
G_118211003767742849645; +1 Ответить
10. user1831019 17.09.22 16:31 Сейчас в теме
(7) Ну так отправляйте строковый гуид, и придумайте в принимающей базе место для хранения этого строкового значения.
И потом по хттп будете посылать эти гуиды обратно в базу-источник, и пусть она вам по ним возвращает остатки. Это и будет "наблюдение". Надо только обе эти базы научить разговаривать на одном языке.

Ну или артикул, если он уникален и синхронизировать в обеих базах.
G_118211003767742849645; +1 Ответить
9. winapi 60 17.09.22 15:33 Сейчас в теме
Выгружайте уникальные поля, по которым внешняя система сможет определить товар. Например бывает артикул + производитель.
G_118211003767742849645; +1 Ответить
11. user1831019 17.09.22 16:37 Сейчас в теме
(9) Производитель - это тоже ссылка обычно.
G_118211003767742849645; +1 Ответить
12. Raf_f 17.09.22 17:55 Сейчас в теме
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Структура = Новый Структура ();
        Структура.Вставить("tovar", Строка(ВыборкаДетальныеЗаписи.tovar.УникальныйИдентификатор()))
        Структура.Вставить("kol", ВыборкаДетальныеЗаписи.kol)
        Массив.Добавить(Структура);
КонецЦикла;


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


    Запрос = Новый Запрос;
    Запрос.Текст = 
	    "ВЫБРАТЬ
	    |Остатки.Товар КАК Товар,
	    |Остатки.Товар.Наименование КАК Наименование,
	    |Остатки.Количество КАК Количество
	    |ИЗ
	    |    РегистрНакопления.Остатки КАК Остатки
	    |ГДЕ
	    |    Остатки.Товар ПОДОБНО &Артикул";
    Запрос.УстановитьПараметр("Артикул","%"+Артикул+"%");
    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
    Массив= Новый Массив;
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
        Структура = Новый Структура ();
        Структура.Вставить("material_id", Строка(ВыборкаДетальныеЗаписи.Товар.УникальныйИдентификатор());
	Структура.Вставить("material_name", ВыборкаДетальныеЗаписи.Наименование);
	Структура.Вставить("material_amount", ВыборкаДетальныеЗаписи.Количество);
        Массив.Добавить(Структура);
    КонецЦикла;
    
    ЗаписьJSON= Новый ЗаписьJSON;
    ЗаписьJSON.УстановитьСтроку();
    ЗаписатьJSON(ЗаписьJSON,Массив);
    
    СтрокаJSON=ЗаписьJSON.Закрыть();
    Возврат СтрокаJSON;
Показать


Не понятно вот что, вы написали что нужно записать товары(все) в JSON. Зачем тогда отбирать по артикулу? Получается при получении http запроса вам должен приходить данный параметр? или что? Если нужно просто переслать все товары, тогда наложите отбор только на пометку удаления.
G_118211003767742849645; +1 Ответить
13. user1831019 17.09.22 17:58 Сейчас в теме
(12)
Не понятно вот что, вы написали что нужно записать товары(все) в JSON. Зачем тогда отбирать по артикулу? Получается при получении http запроса вам должен приходить данный параметр? или что? Если нужно просто переслать все товары, тогда наложите отбор только на пометку удаления.
Это первоначальная выгрузка.
14. Raf_f 17.09.22 17:58 Сейчас в теме
(12) Так же лучше будет за основную таблицу взять справочник Номенклатура и к ней уже присоединять РегистрНакопления. Так как Только что созданый товар в ваш запрос не попадёт так как по нему ещё не было движений в регистре, а в справочнике он уже есть.
G_118211003767742849645; +1 Ответить
15. user1831019 17.09.22 18:13 Сейчас в теме
(14) И зачем товар по которому нет остатков нужен в другой базе? Зачем тянуть и обрабатывать лишний трафик?
17. Raf_f 17.09.22 20:13 Сейчас в теме
(15)
При создании новой номенклатуры без движений, подразумевается, что остатки по данному товару ноль. А остаток ноль это тоже остаток. Тоже самое и с ценами кстати.

Если остатки товара с движениями будет ноль(купили 100, продали 100). Вы это тоже не будете передавать?

Если не будете передавать, значит на той стороне будет не верная информация об остатках в количестве 100. Ну или вообще не будет.

Если будете передавать, значит и товары без движений тоже нужно передать. Так как ноль тоже остаток.

Это конечно мое виденье. На мой взгляд лучше передавать, я не знаю как будут распоряжаться информацией на той стороне, может им как и раз и нужны остатки товаров подходящие к нулю или уже которые ноль.
G_118211003767742849645; +1 Ответить
18. user1831019 17.09.22 20:20 Сейчас в теме
(17) Не буду. Есть первичное наполнение базы, а есть актуализация остатков. Данные о номенклатуре обычно передаются заранее по факту её появления или изменения.
А остатки автору нужны только по запрошенной номенклатуре.
Если по заброшенной номенклатуре не пришёл остаток - значит он равен 0.
Это уже вопрос интерпретации на стороне получателя.
G_118211003767742849645; +1 Ответить
21. Raf_f 17.09.22 20:29 Сейчас в теме
(18)
Ясно. Значит информация о товарах передаются отдельно.
Тогда согласен.
Нет смысла прикреплять справочник. Получаем УИД, получаем остаток и т.д.
G_118211003767742849645; +1 Ответить
16. Dr.HiHi 3 17.09.22 20:00 Сейчас в теме
смотрите в сторону xdto ;))
G_118211003767742849645; +1 Ответить
19. user1831019 17.09.22 20:20 Сейчас в теме
(16) А кто тебе сказал, что на стороне приёмника есть XDTO?
G_118211003767742849645; +1 Ответить
20. Dr.HiHi 3 17.09.22 20:29 Сейчас в теме
(19) а при чем тут сторона приемник и xdto??
приемник сам должен распарсить и посмотреть какой тип...
если так не нравиться, то тогда в помещается блок с типом и значением
G_118211003767742849645; +1 Ответить
22. user1831019 17.09.22 20:33 Сейчас в теме
(20) А кто тебе сказал, что на той стороне вообще 1С? Какие типы парсить собрался? Текст он и есть текст.
G_118211003767742849645; +1 Ответить
23. Dr.HiHi 3 17.09.22 20:36 Сейчас в теме
(22) так я и не писал про 1с с другой стороны %))
или во Вашему парсинг существует только в 1с??))))))))))
G_118211003767742849645; +1 Ответить
24. user1831019 17.09.22 21:10 Сейчас в теме
(23) Тогда зачем XDTO, если автор хочет просто передать некий уникальный идентификатор номенклатуры (он по привычке называет это ссылкой)?
Ему не надо передавать всю структуру объекта номенклатуры.

Нет, я понимаю, что теоретически плуг можно прицепить и к гелендвагену...
G_118211003767742849645; +1 Ответить
25. Dr.HiHi 3 17.09.22 21:56 Сейчас в теме
(24) а при чем тут вся структура объекта номенклатуры??
автор не передает в структуру объект... он передает ссылка... сериализация произойдет только ссылки, а не всего объекта %))

на выходе что-то такое
[
{
"tovar": {"type": "CatalogRef.Номенклатура","value": "acd9f674-aed3-11ea-8110-005056802936"},
"kol": 600
}
]

можно и руками все прописать без сериализации... но это зависит от автора, что ему нужно

p.s. вопрос автора в том как передать ссылка... ссылка под собой подразумевает тип и значение

правда не знаю что другой стороне делать с ГУИД %))
если это стороннее ПО / сервис, то скорее всего рациональнее передавать что-то типа артикула
G_118211003767742849645; +1 Ответить
27. user1831019 17.09.22 22:44 Сейчас в теме
(25) Потому что в (7) автор пояснил, что по этому идентификатору он затем хочет получать информацию из основной системы об остатках.
G_118211003767742849645; +1 Ответить
26. ishelper 17.09.22 22:19 Сейчас в теме
Удивился сильно выросшему размеру ветки, заглянул... джентльмены, вам не надоел этот спор ни о чем?

Напоминаю, автор сформулировала задачу так:
Стоит задача, записать в JSON Товары и их остатки.
Это - фсё!
G_118211003767742849645; +1 Ответить
28. G_118211003767742849645 18.09.22 06:06 Сейчас в теме
P.S. Мне надо передать по http- сервису данные, а принимающая сторона по параметру(Артикул, название) должен увидеть что, сколько осталось на складе.
Вся номенклатура им не нужна, только отбор по параметру.
Спасибо.
29. ishelper 18.09.22 11:11 Сейчас в теме
(28)
принимающая сторона по параметру(Артикул, название) должен увидеть что, сколько осталось на складе.
В чём "увидеть"? В какой программе? В Блокноте? В браузере? В Word'е? Или в 1С, загрузив файл в такую же базу? Или не в такую же?

Мариночка, сертифицированный телепат форума сейчас в отпуске, а те, что остались - сами видите, на что годятся... только плюсики получать. ;-P

P.S. Для энтузиастов - еще одна ветка автора, не хуже этой. ;-)
30. G_118211003767742849645 18.09.22 11:25 Сейчас в теме
31. ishelper 18.09.22 11:33 Сейчас в теме
(30)
В браузере
Тогда почему выбран формат JSON? Напоминаю - это текст, но специально структурированный, что делает его не слишком удобным для просмотра. Потому что его основное предназначение - загрузка в какую-то информационную систему.

Грубо говоря - это формат для компьютеров, а не для людей.

Гораздо правильнее было бы сформировать такой отчет в HTML и его высылать... но я так понимаю, что до этого уровня вам, как до Парижа. ;-)

P.S. Ну что, телепаты - обломались со своими XDTO, ГУИДами и прочими премудростями? В женской ветке отвечать - это вам не код писать... :-P
32. G_118211003767742849645 18.09.22 11:37 Сейчас в теме
(31) Мне бы только 1 строчки:

Например:

Ведро 10

(Название или Артикул товара и количество остатка)
33. ishelper 18.09.22 11:45 Сейчас в теме
(32)
Мне бы только 1 строчки:
Тогда JSON - последнее, что вам нужно. Используйте текстовый формат.
Например:

Ведро 10
Выводите в текст наименование товара, ссылка тут вообще не при делах.

Ветка не стоит выеденного яйца.

P.S. 10 ведер - это много, на голову достаточно одного. Впрочем, если брать по числу участников этого бессмысленного обсуждения... каждому! ;-)
G_118211003767742849645; +1 Ответить
34. user1831019 18.09.22 13:36 Сейчас в теме
(33) А примерный код не покажете?
G_118211003767742849645; +1 Ответить
37. ishelper 18.09.22 13:59 Сейчас в теме
(34)
примерный код не покажете?
"Даром - за амбаром!" Люди за это $m просят: https://infostart.ru/public/987880/
38. user1831019 18.09.22 14:03 Сейчас в теме
(37) Злой ты. Разлюбил я тебя ))
35. G_118211003767742849645 18.09.22 13:50 Сейчас в теме
36. user1831019 18.09.22 13:54 Сейчас в теме
39. ishelper 18.09.22 14:07 Сейчас в теме
(38) Заслужил - нефиг тут при всех сарказмом заниматься. :-)
40. user1831019 18.09.22 14:08 Сейчас в теме
(39) А я уже взрослый! Мне мама разрешает!
41. ishelper 18.09.22 14:10 Сейчас в теме
(40) Тогда не плачь и не жалуйся - терпи молча.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот