Сначала в ответ записывалось "Калькуляция", так как должно быть и передавалось, но когда Ответ.ПолучитьТелоКакСтроку () выдавало пустую строку. Перезапустил Apache, обновил публикацию, теперь такая ошибка. Это обмен. Я должен получить то, что не записалось , в моем случае это "Калькуляция".

```1c
    Если ЗначениеЗаполнено(Изделие) И ЗначениеЗаполнено(Поставки) И ЗначениеЗаполнено(Калькуляция) Тогда
    ЧтениеJSON.Закрыть();
    Возврат Ответ;
    Иначе
    ЧтениеJSON.Закрыть();
    Ответ.УстановитьТелоИзСтроки(?(ЗначениеЗаполнено(Изделие),", "Изделие") + ?(ЗначениеЗаполнено(Поставки),", "Поставки") + ?(ЗначениеЗаполнено(Калькуляция),", "Калькуляция"));
    Ответ.КодСостояния = 304;
    Возврат Ответ;
    КонецЕсли;
```
---
Пустое тело на 304 код состояния - так и должно быть по документации Hypertext Transfer Protocol (HTTP/1.1)

https://tools.ietf.org/html/rfc7232#section-4.1
A 304 response cannot contain a message-body; it is always terminated
by the first empty line after the header fields.
---
от
---
Пока не противоречит коду. У вас ответ заполняется только если заполнена хотя бы одна переменная из 3х.
Хоть одна заполнена?
---
да
---
все две, "Калькуляция" нет
---
Сделайте так:

```1c
    СтрокаДляОтвета = ?(ЗначениеЗаполнено(Изделие),", "Изделие") + ?(ЗначениеЗаполнено(Поставки),", "Поставки") + ?(ЗначениеЗаполнено(Калькуляция),", "Калькуляция");
    Сообщить(СтрокаДляОтвета);
    Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета );
```

Что будет в СтрокаДляОтвета?
---
СтрокаДляОтвета = ?(ЗначениеЗаполнено(Изделие),"", "Изделие") + ?(ЗначениеЗаполнено(Поставки),"", "Поставки") + ?(ЗначениеЗаполнено(Калькуляция),"", "Калькуляция");
Сообщить(СтрокаДляОтвета);
Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета );
---
А в fiddler что видно? Что реально передается?
---
не тестировал там
---
Стоит попробовать - как минимум будет понятно, не отправляется ответ или он таки не разбирается при получении.
---
хорошо, буду смотреть там
---
И главное - какой код состояния ответа в базе получается?
---
304, такой я и устанавливаю при ошибке
---
Попробуйте убрать BOM из ответа.

```1c
    Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
```
---
сначала было без Кодировки и ВОМ, результат тот же
---
Тогда только fiddler
---
На багборде есть такая ошибка:

Описание:
В HTTP-сервисе после вызова метода ПолучитьТелоКакСтроку объекта HTTPСервисОтвет возвращается пустой ответ.

Способ обхода:
Повторно вызывать метод HTTPСервисОтвет.УстановитьТелоИзСтроки.

https://bugboard.v8.1c.ru/error/000010103

Но она давно исправлена, с 8.3.7.1759
---
8.3.10.2299
---
Легко проверить как оно в 8.3.10:

```1c
    Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета);
    Сообщить(Ответ.ПолучитьТелоКакСтроку());
    Сообщить(Ответ.ПолучитьТелоКакСтроку());
```
---
34
---
спс
---
В этом варианте осталась ошибка или нет?
---
да, осталась
---
Предлагаю почистить кэш, либо добавить эту базу в список баз заново и попробовать запуститься на ней.
Да, и в "Вычислить выражение" у вас всегда эта ошибка будет. Попробуйте Ответ.ПолучитьТелоКакСтроку() для того чтоб узнать что там записалось.
---
```1c
    Ответ.УстановитьТелоИзСтроки(СтрокаДляОтвета);
    Сообщить(Ответ.ПолучитьТелоКакСтроку());
```
---
сейчас попробую
---
"Калькуляция"
---
Стало быть тело ответа в порядке. Надо на стороне получателя тогда смотреть что приезжает.
---
Пустая строка
---
Попробуйте ОтправитьДляОбработки с выводом тела в файл.
---
34
---
Пример

```1c
    ЗапросPOST = Запрос;
    ЗаголовкиHTTP = Новый Соответствие;
    ЗаголовкиHTTP.Вставить("Content-Type","application/json");
    ЗапросНН = Новый HTTPЗапрос(СтруктураURI.ПутьНаСервере,ЗаголовкиHTTP);
    ЗапросНН.УстановитьТелоИзСтроки(Запрос);
    Попытка
    НТТРОтвет_ = Соединение.ОтправитьДляОбработки(ЗапросНН, Объект.ВыходнойФайл);
    Исключение
    Сообщить(ОписаниеОшибки());
    КонецПопытки;
```
---
"Ответ" что в отладчике показывает?
---
304 Not Modified ("не изменялось")
Возможно, в такой ситуации данные берутся из кэша, раз ничего не изменилось. Выдает предыдущую пустоту. Попробуйте с 200м кодом вернуть, чтобы эту гипотезу проверить.
---
Пустое тело на 304 код состояния - так и должно быть по документации Hypertext Transfer Protocol (HTTP/1.1)

https://tools.ietf.org/html/rfc7232#section-4.1
A 304 response cannot contain a message-body; it is always terminated
by the first empty line after the header fields.
---
да все верно, из-за кода состояния. 304 - если нет даты, возвращает пустое тело. Соотвественно при смене кода (400) все заработало
---
А то, что Вы попытались через Shift+F9 вычислить выражение

```1c
    Ответ.УстановитьТелоИзСтроки(?(ЗначениеЗаполнено(Изделие),", "Изделие") + ?(ЗначениеЗаполнено(Поставки),", "Поставки") + ?(ЗначениеЗаполнено(Калькуляция),", "Калькуляция"))
```

- тоже так и должно выдавать ошибку, потому что Shift+F9 предназначен для вычисления функций или получения свойств. Выполнять процедуры/методы Shift+F9 никогда не умел.