Доброе утро, товарищи!
Конфигурация - самописная, управляемые формы, версия 8.3.13.
Имеется общая форма "Касса меню". На форме имеется табличная часть, кнопки с функционалом.
Логика работы такова: покупатель может оплатить сразу, так сделать заказ "черновик".
Есть кнопка "Очистить чик", на ней кассир оформляет заказ, и сохраняет его как не проведенный документ.
Затем есть кнопка "Документы", открывается форма выбора с непроведенными документами, кассир выбирает непроведенный документ, и заполняется табличная часть и производится оплата, тем самым в системе создается новый проведенный документ.
Но в системе висит все еще висит тот черновой документ.
Подскажите как разобраться в такой проблеме?
Всем заранее спасибо.
---
Немного неправильно, но идея верная.

Нужно сохранять не номер документа-черновика, а ссылку на него. Именно ту ссылку, которую Вы используете для заполнения:

```1c
    &НаКлиенте
    Процедура ДобавитьЗавершение(Результат,ДополнительныеПараметры) ЭКСПОРТ
    ...
    //Сообщить("Выбрана ссылка " + Результат);
    ЗаполнениеТЧ(Результат);
    СсылкаНаДок = Результат;

    КонецЕсли;
    КонецПроцедуры
```

Соответственно при проведении документа необходимо использовать сохраненную ссылку, а не устанавливать номер:

```1c
    &НаСервере
    Функция СоздатьДокНаСервере(ОплатаСумма)
    НовДок = СсылкаНаДок.ПолучитьОбъект();
    ....
    КонецФункции
```

Ну и как я полагаю, пользователь может использовать как сохраненный ранее черновик, так и создать новый документ. Так что в этом месте скорее всего будет уместна такая проверка или что-то вроде:

```1c
    &НаСервере
    Функция СоздатьДокНаСервере(ОплатаСумма)
    Если Не ЗначениеЗаполнено(СсылкаНаДок) Тогда
    НовДок = Документы.РеализацияПродукции.СоздатьДокумент(); // это новый чек
    Иначе
    НовДок = СсылкаНаДок.ПолучитьОбъект(); // это черновик
    КонецЕсли;
    ....
    КонецФункции
```
---
А почему бы не продолжить работу непосредственно с черновым документом и проводить именного его, а не создавать новый?
---
А как это сделать? Ведь кассир не будет ждать клиента, а сохраняет док, и принимает следующего клиента:)
---
Возможно я не до конца понял задачу. Кассир ведь выбирает сохраненный ранее черновик. Так почему рабочее место "Касса меню" использует выбранную ссылку только для получения данных, но не для записи? Речь исключительно о технической реализации общей формы.
---
Запись уже идет по другой "кнопке" формы)
---
Извините, кажется я действительно что-то не понимаю в Вашей задаче. :)
Почему бы не хранить выбранную ссылку в реквизитах формы? И при записи использовать ее?
---
Допустим я сохранил? и что мне это даст?)
---
По команде "Записать" будет проведен именно этот документ, а не создан новый.
---
То есть мне программно создать движение по регистру накопления?
---
Полагаю, нужно действовать также, как и при работе с новым документом.
---
Верю. Покажите, пожалуйста, код.
---
```1c
    &НаКлиенте
    Процедура Документы(Команда)
    Оповещение=Новый ОписаниеОповещения("ДобавитьЗавершение",ЭтаФорма);
    Форма = ОткрытьФорму("Документ.РеализацияПродукции.ФормаВыбора",,ЭтаФорма,,,,Оповещение);
    КонецПроцедуры

    &НаКлиенте
    Процедура ДобавитьЗавершение(Результат,ДополнительныеПараметры) ЭКСПОРТ
    Если Результат = Неопределено Тогда
    Сообщить("Ничего не выбрано.");
    Иначе
    //Сообщить("Выбрана ссылка " + Результат);
    ЗаполнениеТЧ(Результат);
    СсылкаНаДок = Сред(Результат,21,10);

    КонецЕсли;
    КонецПроцедуры

    &НаСервере
    Функция ЗаполнениеТЧ(Ссылка)
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | РеализацияПродукцииПрайсЛист.Номенклатура КАК Номенклатура,
    | РеализацияПродукцииПрайсЛист.Количество КАК Количество,
    | РеализацияПродукцииПрайсЛист.Цена КАК Цена,
    | РеализацияПродукцииПрайсЛист.Сумма КАК Сумма,
    | РеализацияПродукцииПрайсЛист.ТипОплаты КАК ТипОплаты,
    | РеализацияПродукцииПрайсЛист.НомерСтроки КАК НомерСтроки
    |ИЗ
    | Документ.РеализацияПродукции.ПрайсЛист КАК РеализацияПродукцииПрайсЛист
    | ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияПродукции КАК РеализацияПродукции
    | ПО РеализацияПродукцииПрайсЛист.Ссылка = РеализацияПродукции.Ссылка
    |ГДЕ
    | РеализацияПродукции.Проведен = &Проведен
    | И РеализацияПродукции.Ссылка = &Ссылка";

    Запрос.УстановитьПараметр("Ссылка",Ссылка);
    Запрос.УстановитьПараметр("Проведен",Ложь);
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    ПрайсЛист.Загрузить(РезультатЗапроса);

    РезультатЗапроса2 = Запрос.Выполнить();
    Выборка = РезультатЗапроса2.Выбрать();
    ИтогСумма = 0;ИтогКол = 0;
    Пока Выборка.Следующий() Цикл
    ИтогКол = ИтогКол + Выборка.Количество; ИтоговоеКоличество = ИтогКол;
    ИтогСумма = Выборка.Сумма + ИтогСумма; ИтоговаяСумма = ИтогСумма;
    СтавкаНДС = ИтоговаяСумма*0.2;
    СуммаСНДС = ИтоговаяСумма + СтавкаНДС;
    КонецЦикла;
    КонецФункции

    &НаСервере
    Функция СоздатьДокНаСервереЧерновик()
    НовДок = Документы.РеализацияПродукции.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    НовДок.Ответственный = ОбщегоНазначения.ТекущийПользователь();
    НовДок.МестоРеализации = ОбщегоНазначения.ТекущийСклад();
    НовДок.КурсДоллара = ОбщегоНазначения.ПолучитьКурсВалют();
    Для Каждого ТекСтрока Из ПрайсЛист Цикл
    НовСтр = НовДок.ПрайсЛист.Добавить();
    НовСтр.Номенклатура = ТекСтрока.Номенклатура;
    НовСтр.Количество = ТекСтрока.Количество;
    НовСтр.Цена = ТекСтрока.Цена;
    НовСтр.Сумма = ТекСтрока.Сумма;
    НовСтр.ТипОплаты = ТекСтрока.ТипОплаты;
    КонецЦикла;
    НовДок.Записать(РежимЗаписиДокумента.Запись);
    КонецФункции

    &НаСервере
    Функция СоздатьДокНаСервере(ОплатаСумма)
    НовДок = Документы.РеализацияПродукции.СоздатьДокумент();
    НовДок.Дата = ТекущаяДата();
    НовДок.Ответственный = ОбщегоНазначения.ТекущийПользователь();
    НовДок.МестоРеализации = ОбщегоНазначения.ТекущийСклад();
    НовДок.КурсДоллара = ОбщегоНазначения.ПолучитьКурсВалют();
    НовДок.СуммаВзноса = ОплатаСумма;
    НовДок.Номер = СокрЛП(СсылкаНаДок);
    Для Каждого ТекСтрока Из ПрайсЛист Цикл
    НовСтр = НовДок.ПрайсЛист.Добавить();
    НовСтр.Номенклатура = ТекСтрока.Номенклатура;
    НовСтр.Количество = ТекСтрока.Количество;
    НовСтр.Цена = ТекСтрока.Цена;
    НовСтр.Сумма = ТекСтрока.Сумма;
    НовСтр.ТипОплаты = ТекСтрока.ТипОплаты;
    КонецЦикла;
    НовДок.Записать(РежимЗаписиДокумента.Проведение);

    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ОтображатьСетку = Ложь;
    ТабДок.ПолеСлева = 0;
    ТабДок.ПолеСправа = 0;
    ТабДок.ПолеСверху = 0;
    ТабДок.АвтоМасштаб=Истина;
    Макет = ПолучитьОбщийМакет("ЧекКасса");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    СтрокаДанных = Макет.ПолучитьОбласть("СтрокаДанных");
    Подвал = Макет.ПолучитьОбласть("Подвал");

    Шапка.Параметры.Номер = НовДок.Номер;
    Шапка.Параметры.Дата = Формат(ТекущаяДата(),"ДФ=dd.MM.yyyy");
    ТабДок.Вывести(Шапка);

    ИтоговаяСуммаБезНДС = 0;
    Для каждого ТекСтрока Из ПрайсЛист Цикл
    СтрокаДанных.Параметры.НомерСтроки = ТекСтрока.НомерСтроки;
    СтрокаДанных.Параметры.Номенклатура = ТекСтрока.Номенклатура;
    СтрокаДанных.Параметры.Количество = ТекСтрока.Количество;
    СтрокаДанных.Параметры.Цена = ТекСтрока.Цена;
    СтрокаДанных.Параметры.Сумма = ТекСтрока.Сумма;
    СтрокаДанных.Параметры.ТипОплаты = ТекСтрока.ТипОплаты;
    ИтоговаяСуммаБезНДС = ИтоговаяСуммаБезНДС + ТекСтрока.Сумма;
    СтавкаСуммаНДС = ИтоговаяСуммаБезНДС * 0.2;
    ИтоговаяСуммаНДС = ИтоговаяСуммаБезНДС + СтавкаСуммаНДС;
    ТабДок.Вывести(СтрокаДанных);
    КонецЦикла;

    Подвал.Параметры.ИтогСумма = ИтоговаяСуммаБезНДС;
    Подвал.Параметры.НДСумма = СтавкаСуммаНДС;
    Подвал.Параметры.ИтогСуммаНДС = ИтоговаяСуммаНДС;
    ВнешняяКомпонента = РаботаСТорговымОборудованием.ПодключитьВнешнююКомпонентуПечатиШтрихкода();
    Подвал.Рисунки.ШтрихКод.Картинка = РаботаСТорговымОборудованием.ПолучитьКартинкуШтрихкода(ВнешняяКомпонента,НовДок.Номер, 49, 35); // ОбщегоНазначения.СформироватьБарКодEAN13()
    Подвал.Параметры.Сдача = ОплатаСумма - ИтоговаяСуммаНДС;
    Подвал.Параметры.ВремяЧека = Формат(ТекущаяДата(),"ДЛФ=В");
    ТабДок.Вывести(Подвал);

    Возврат ТабДок;
    КонецФункции
```
---
Немного неправильно, но идея верная.

Нужно сохранять не номер документа-черновика, а ссылку на него. Именно ту ссылку, которую Вы используете для заполнения:

```1c
    &НаКлиенте
    Процедура ДобавитьЗавершение(Результат,ДополнительныеПараметры) ЭКСПОРТ
    ...
    //Сообщить("Выбрана ссылка " + Результат);
    ЗаполнениеТЧ(Результат);
    СсылкаНаДок = Результат;

    КонецЕсли;
    КонецПроцедуры
```

Соответственно при проведении документа необходимо использовать сохраненную ссылку, а не устанавливать номер:

```1c
    &НаСервере
    Функция СоздатьДокНаСервере(ОплатаСумма)
    НовДок = СсылкаНаДок.ПолучитьОбъект();
    ....
    КонецФункции
```

Ну и как я полагаю, пользователь может использовать как сохраненный ранее черновик, так и создать новый документ. Так что в этом месте скорее всего будет уместна такая проверка или что-то вроде:

```1c
    &НаСервере
    Функция СоздатьДокНаСервере(ОплатаСумма)
    Если Не ЗначениеЗаполнено(СсылкаНаДок) Тогда
    НовДок = Документы.РеализацияПродукции.СоздатьДокумент(); // это новый чек
    Иначе
    НовДок = СсылкаНаДок.ПолучитьОбъект(); // это черновик
    КонецЕсли;
    ....
    КонецФункции
```
---
А как мне получить ссылку на док в функции "СоздатьДокНаСервере"?
---
Извините, не понял вопрос. У Вас же есть реквизит "СсылкаНаДок". Он и должен быть ссылкой.
---
Сорри, мысли вслух.
Вопрос в этом коде

```1c
    &НаСервере
    Функция СоздатьДокНаСервере(ОплатаСумма)
    Если Не ЗначениеЗаполнено(СсылкаНаДок) Тогда
    НовДок = Документы.РеализацияПродукции.СоздатьДокумент(); // это новый чек
    Иначе
    НовДок = СсылкаНаДок.ПолучитьОбъект(); // это черновик
    КонецЕсли;
    ....
    КонецФункции
```

Я не совсем понял условие...
---
Ура, получилось, сделал) Спасибо)
---
из общей формы, без модуля проведения?
---
как вариант, сохранять данные во временный файл.
---
это походу самый крайний вариант)