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.
Спасибо.
Потом прочитала, что в JSON нельзя записывать тип Ссылка.
Вроде как нельзя, но можно записывать код и наименование, и даже артикул, как и любые другие реквизиты простого типа.
Можно записывать представление ссылки или уникальный идентификатор, зависит от задачи.
(1)
Откуда еще можно брать Товары+Остатки.
От туда, где они есть - хранятся или можно рассчитать (самостоятельно в коде или платформой).
(1)
На что можно еще записывать кроме JSON.
В каком угодно формате: xml, csv, в xls(x) например. Да, хоть в картинку, если алгоритм напишите или используете готовый.
Это должен определять разработчик, консультант или еще кто, кто ответственен за постановку задачи.
Может стоит тогда озвучить задачу полностью? А так, нужно в json, пишите в json.
В качестве товара можно получить либо ГУИД ссылки, либо какой-то ключевой параметр, по которому можно идентифицировать товар в другой системе, например, тот же артикул выгружать. Или вам в качестве товара нужна вся структура объекта?
выгружать только товар + остатки и передать из через http-сервис
И что принимающая сторона будет делать со ссылкой (если вам удастся ее передать)?
Ваша ссылка действует только в пределах вашей базы, вне ее она лишена малейшего смысла. На пальцах: если дорожный указатель "Агрыз 5 км" (это - ссылка) передать, например, во Францию - какой там с него прок? Его можно воткнуть где-нибудь под Парижем, но там просто не поймут - что он означает? И уж Агрыз от этого там точно не появится. :-)
P.S. Программирование надо не только учить, но и понимать.
(7) Ну так отправляйте строковый гуид, и придумайте в принимающей базе место для хранения этого строкового значения.
И потом по хттп будете посылать эти гуиды обратно в базу-источник, и пусть она вам по ним возвращает остатки. Это и будет "наблюдение". Надо только обе эти базы научить разговаривать на одном языке.
Ну или артикул, если он уникален и синхронизировать в обеих базах.
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Структура = Новый Структура ();
Структура.Вставить("tovar", Строка(ВыборкаДетальныеЗаписи.tovar.УникальныйИдентификатор()))
Структура.Вставить("kol", ВыборкаДетальныеЗаписи.kol)
Массив.Добавить(Структура);
КонецЦикла;
Но я бы на ваше месте заменил псевдонимы в запросе на русские. Плюс вытащие наименование товара, чтобы на принимающей стороне могли не только идентифицировать товары но и увидеть наименование, если конечно такое требуется. Ключи бы тоже поменять т. е. по хорошему так.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
|Остатки.Товар КАК Товар,
|Остатки.Товар.Наименование КАК Наименование,
|Остатки.Количество КАК Количество
|ИЗ
| РегистрНакопления.Остатки КАК Остатки
|ГДЕ
| Остатки.Товар ПОДОБНО &Артикул";
Запрос.УстановитьПараметр("Артикул","%"+Артикул+"%");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Массив= Новый Массив;
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Структура = Новый Структура ();
Структура.Вставить("material_id", Строка(ВыборкаДетальныеЗаписи.Товар.УникальныйИдентификатор());
Структура.Вставить("material_name", ВыборкаДетальныеЗаписи.Наименование);
Структура.Вставить("material_amount", ВыборкаДетальныеЗаписи.Количество);
Массив.Добавить(Структура);
КонецЦикла;
ЗаписьJSON= Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON,Массив);
СтрокаJSON=ЗаписьJSON.Закрыть();
Возврат СтрокаJSON;
Показать
Не понятно вот что, вы написали что нужно записать товары(все) в JSON. Зачем тогда отбирать по артикулу? Получается при получении http запроса вам должен приходить данный параметр? или что? Если нужно просто переслать все товары, тогда наложите отбор только на пометку удаления.
Не понятно вот что, вы написали что нужно записать товары(все) в JSON. Зачем тогда отбирать по артикулу? Получается при получении http запроса вам должен приходить данный параметр? или что? Если нужно просто переслать все товары, тогда наложите отбор только на пометку удаления.
(12) Так же лучше будет за основную таблицу взять справочник Номенклатура и к ней уже присоединять РегистрНакопления. Так как Только что созданый товар в ваш запрос не попадёт так как по нему ещё не было движений в регистре, а в справочнике он уже есть.
(15)
При создании новой номенклатуры без движений, подразумевается, что остатки по данному товару ноль. А остаток ноль это тоже остаток. Тоже самое и с ценами кстати.
Если остатки товара с движениями будет ноль(купили 100, продали 100). Вы это тоже не будете передавать?
Если не будете передавать, значит на той стороне будет не верная информация об остатках в количестве 100. Ну или вообще не будет.
Если будете передавать, значит и товары без движений тоже нужно передать. Так как ноль тоже остаток.
Это конечно мое виденье. На мой взгляд лучше передавать, я не знаю как будут распоряжаться информацией на той стороне, может им как и раз и нужны остатки товаров подходящие к нулю или уже которые ноль.
(17) Не буду. Есть первичное наполнение базы, а есть актуализация остатков. Данные о номенклатуре обычно передаются заранее по факту её появления или изменения.
А остатки автору нужны только по запрошенной номенклатуре.
Если по заброшенной номенклатуре не пришёл остаток - значит он равен 0.
Это уже вопрос интерпретации на стороне получателя.
(19) а при чем тут сторона приемник и xdto??
приемник сам должен распарсить и посмотреть какой тип...
если так не нравиться, то тогда в помещается блок с типом и значением
(23) Тогда зачем XDTO, если автор хочет просто передать некий уникальный идентификатор номенклатуры (он по привычке называет это ссылкой)?
Ему не надо передавать всю структуру объекта номенклатуры.
Нет, я понимаю, что теоретически плуг можно прицепить и к гелендвагену...
(24) а при чем тут вся структура объекта номенклатуры??
автор не передает в структуру объект... он передает ссылка... сериализация произойдет только ссылки, а не всего объекта %))
на выходе что-то такое
[
{
"tovar": {"type": "CatalogRef.Номенклатура","value": "acd9f674-aed3-11ea-8110-005056802936"},
"kol": 600
}
]
можно и руками все прописать без сериализации... но это зависит от автора, что ему нужно
p.s. вопрос автора в том как передать ссылка... ссылка под собой подразумевает тип и значение
правда не знаю что другой стороне делать с ГУИД %))
если это стороннее ПО / сервис, то скорее всего рациональнее передавать что-то типа артикула
28.
G_118211003767742849645
18.09.22 06:06 Сейчас в теме
P.S. Мне надо передать по http- сервису данные, а принимающая сторона по параметру(Артикул, название) должен увидеть что, сколько осталось на складе.
Вся номенклатура им не нужна, только отбор по параметру.
Спасибо.
Тогда почему выбран формат JSON? Напоминаю - это текст, но специально структурированный, что делает его не слишком удобным для просмотра. Потому что его основное предназначение - загрузка в какую-то информационную систему.
Грубо говоря - это формат для компьютеров, а не для людей.
Гораздо правильнее было бы сформировать такой отчет в HTML и его высылать... но я так понимаю, что до этого уровня вам, как до Парижа. ;-)
P.S. Ну что, телепаты - обломались со своими XDTO, ГУИДами и прочими премудростями? В женской ветке отвечать - это вам не код писать... :-P