Здравствуйте.
У меня проблема с программной записью документа . 1С:Предприятие 8.3 (8.3.6.2014).Конфа сомописная.
Есть документ "Заказ" в котором есть команда "Отгрузить" . При нажатии происходит проверка - если реализаций по данному документу нет то создать , заполнить и провести.Далее меняется статус заказа на "Отгружен".

 Суть ошибки: ИНОГДА происходит ситуация когда заказ со статусом отгружен. НО реализации нет.

Я не могу найти ошибку в следующем коде:

```1c
    // Писк реализации по текущему заказу
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | Реализация.Ссылка
    |ИЗ
    | Документ.Реализация КАК Реализация
    |ГДЕ
    | Реализация.Заказ = &Заказ
    | И Реализация.ПометкаУдаления = ЛОЖЬ";

    Запрос.УстановитьПараметр("Заказ", ЭтотОбъект.Объект.Ссылка);

    РезультатЗапроса = Запрос.Выполнить();

    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    Результат = ВыборкаДетальныеЗаписи.Ссылка;
    КонецЦикла;

    ПараметрыЗаписи = Новый Структура("РежимЗаписи", РежимЗаписиДокумента.Проведение);

    Если НЕ ЗначениеЗаполнено(Результат) тогда
    Реализация = Документы.Реализация.СоздатьДокумент();
    Реализация.Склад = Справочники.Склады.НайтиПоНаименованию("Склад товаров");
    Реализация.Заказ = ЭтотОбъект.Объект.Ссылка;
    Реализация.Автор = ПараметрыСеанса.ТекущийПользователь;
    Реализация.Дата = ТекущаяДата();
    Для каждого стр из ЭтотОбъект.Объект.Пряники Цикл
    Если стр.Пряник.ВестиКоличественныйУчетПоСкладу тогда
    НоваяСтрока = Реализация.Пряники.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр);
    КонецЕсли;
    КонецЦикла;

    Попытка
    //Реализация.Записать(РежимЗаписиДокумента.ОтменаПроведения);
    //Реализация.Записать(РежимЗаписиДокумента.Запись);
    Реализация.Записать(РежимЗаписиДокумента.Проведение);

    Исключение
    КонецПопытки;

    Попытка
    Если Реализация.Проведен Тогда
    ЭтотОбъект.Объект.СтатусЗаказа = Перечисления.СтатусыЗаказов.Отгружен;
    ЭтотОбъект.Записать(ПараметрыЗаписи);
    КонецЕсли;

    Исключение
    КонецПопытки;
```
---
В транзакции еще делай два действия, тогда все отлично будет!
---
кмк искать надо проведенные реализации
еще мне не нравится деление процесса на две транзакции, но может это и ничего, зависит от задачи.
И отсутствие сообщений об ошибках несколько удивляет. Не сделали и ладно?
---
Наверно нужно перед проведением реализации ее записать!
Но тогда вопрос. Почему в 95% случаях все нормально работает?
---
В тех 5% при проведении ошибок не вываливается? В исключении добавить вывод описание ошибки.
---
```1c
    Если НЕ ЗначениеЗаполнено(Результат) тогда
```

При пустом запросе результат не объявлен. По идее должно выбивать.
---
1)У меня еще такой вопрос: Если реализация не провелась и возникла ошибка то как мы попали в условие где меняется статус? Т.е выходит что Реализация.Проведен = истина. Но Документ как то не записался?

2) Может еще проблема в том что пользователи пытаются отгрузить не записанный документ. но у меня явно проверяется :

```1c
    Если ЗначениеЗаполнено(ЭтотОбъект.Объект.Ссылка) тогда
```

Про отсутствие сообщений - действительно просмотрел.
---
, а где КонецЕсли для Если НЕ ЗначениеЗаполнено(Результат) тогда ?
---
Это код для случая если реализация уже создана.

```1c
    Иначе
    РеализацияОбъект = Результат.получитьОбъект();
    РеализацияОбъект.Пряники.очистить();

    РеализацияОбъект.Дата = ТекущаяДата() ;

    Для каждого стр из ЭтотОбъект.Объект.Пряники Цикл
    Если стр.Пряник.ВестиКоличественныйУчетПоСкладу тогда
    НоваяСтрока = РеализацияОбъект.Пряники.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока,Стр);
    КонецЕсли;

    КонецЦикла;

    Попытка

    РеализацияОбъект.Записать(РежимЗаписиДокумента.ОтменаПроведения);
    //РеализацияОбъект.Записать(РежимЗаписиДокумента.Запись);
    РеализацияОбъект.Записать(РежимЗаписиДокумента.Проведение);

    Исключение
    КонецПопытки;

    Попытка

    Если РеализацияОбъект.Проведен Тогда
    ЭтотОбъект.Объект.СтатусЗаказа = Перечисления.СтатусыЗаказов.Отгружен;
    ЭтотОбъект.Записать(ПараметрыЗаписи);
    КонецЕсли;
    Исключение
    КонецПопытки;

    КонецЕсли;
```
---
В транзакции еще делай два действия, тогда все отлично будет!
---
Да . Я не совсем понимаю этот момент. Объясните пожалуйста что не так?
---
какой момент. Все же объяснили.
---
Неверно понял коммент - думал это ирония.
---
Всем спасибо за советы. Сделал все действия в одной транзакции. Пока проблемные заказы не появляются.