#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда
#Область ОбработчикиСобытий
Процедура ОбработкаЗаполнения(ДанныеЗаполнения, СтандартнаяОбработка) Экспорт
Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка.ЧекККМ") Тогда
ЗаполнитьПоЧекуККМ(ДанныеЗаполнения, ДанныеЗаполнения);
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") И ДанныеЗаполнения.Свойство("Товары") Тогда
ЗаполнитьПоЧекуККМ(ДанныеЗаполнения.ЧекККМ, ДанныеЗаполнения.ЧекККМ);
Если ДанныеЗаполнения.Свойство("Кассир") и ЗначениеЗаполнено(ДанныеЗаполнения.Кассир) Тогда
Кассир = ДанныеЗаполнения.Кассир;
КонецЕсли;
Товары.Очистить();
ВозвращаемыеТовары = ПолучитьИзВременногоХранилища(ДанныеЗаполнения.Товары);
Для Каждого СтрокаТЧ Из ВозвращаемыеТовары Цикл
НоваяСтрока = Товары.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТЧ);
КонецЦикла;
ИначеЕсли ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
Если Не ДанныеЗаполнения.Свойство("ЧтениеКомандФормы") Тогда
ЗаполнитьДокументПоОтбору(ДанныеЗаполнения);
КонецЕсли;
Иначе
КассаККМ = Справочники.КассыККМ.КассаККМФискальныйРегистраторДляРМК();
Если ЗначениеЗаполнено(КассаККМ) Тогда
ЗаполнитьДокументПоКассеККМ(КассаККМ);
Иначе
ВызватьИсключение НСтр("ru = 'Для текущего рабочего места не настроено подключаемое оборудование: Фискальное устройство'");
КонецЕсли;
КонецЕсли;
ИнициализироватьДокумент(ДанныеЗаполнения);
БонусныеБаллыСервер.ЗаполнитьБонусныеБаллыЧекККМВозврат(ЭтотОбъект);
ЧекККМВозвратЛокализация.ОбработкаЗаполнения(ЭтотОбъект, ДанныеЗаполнения, СтандартнаяОбработка);
КонецПроцедуры
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);
ПроведениеДокументов.ПередЗаписьюДокумента(ЭтотОбъект, РежимЗаписи, РежимПроведения);
Если Статус = Перечисления.СтатусыЧековККМ.Пробит И РежимЗаписи = РежимЗаписиДокумента.ОтменаПроведения Тогда
Отказ = Истина;
ТекстОшибки = НСтр("ru='Чек ККМ на возврат пробит. Отмена проведения невозможна.'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ЭтотОбъект);
Возврат;
КонецЕсли;
НоменклатураСервер.ОкруглитьКоличествоШтучныхТоваров(ЭтотОбъект, РежимЗаписи);
СуммаДокумента = ЦенообразованиеКлиентСервер.ПолучитьСуммуДокумента(Товары, ЦенаВключаетНДС);
НоменклатураСервер.ОчиститьНеиспользуемыеСерии(ЭтотОбъект,НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЧекККМВозврат));
БонусныеБаллыСервер.ЗаполнитьБонусныеБаллыЧекККМВозврат(ЭтотОбъект);
ЧекККМВозвратЛокализация.ПередЗаписью(ЭтотОбъект, Отказ, РежимЗаписи, РежимПроведения);
КонецПроцедуры
Процедура ПриЗаписи(Отказ)
Если ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
ПроведениеДокументов.ПриЗаписиДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
ПроведениеДокументов.ОбработкаПроведенияДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ОбработкаУдаленияПроведения(Отказ)
ПроведениеДокументов.ОбработкаУдаленияПроведенияДокумента(ЭтотОбъект, Отказ);
КонецПроцедуры
Процедура ПриКопировании(ОбъектКопирования)
ВызватьИсключение НСтр("ru = 'Чек на возврат вводится только на основании чека ККМ.'");
КонецПроцедуры
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияКоличества();
Если ЗначениеЗаполнено(ЧекККМ) Тогда
ПараметрыПроверки.ИмяТЧ = "Объект";
Для Каждого СтрокаТаблицыТовары Из Товары Цикл
Если СтрокаТаблицыТовары.КоличествоУпаковок <> 0 Тогда
ПроверяемыеРеквизиты.Добавить("Количество");
ПроверяемыеРеквизиты.Добавить("КоличествоУпаковок");
НоменклатураСервер.ПроверитьЗаполнениеКоличества(СтрокаТаблицыТовары, ПроверяемыеРеквизиты, Отказ, ПараметрыПроверки);
КонецЕсли;
КонецЦикла;
ИмяРеквизитаТоварыКоличество = "Товары.Количество";
ИмяРеквизитаТоварыКоличествоУпаковок = "Товары.КоличествоУпаковок";
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти(ИмяРеквизитаТоварыКоличество));
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти(ИмяРеквизитаТоварыКоличествоУпаковок));
Иначе
ПараметрыПроверки = НоменклатураСервер.ПараметрыПроверкиЗаполненияКоличества();
ПараметрыПроверки.ИмяТЧ = "Товары";
НоменклатураСервер.ПроверитьЗаполнениеКоличества(ЭтотОбъект, ПроверяемыеРеквизиты, Отказ, ПараметрыПроверки);
КонецЕсли;
ИмяРеквизитаТоварыСумма = "Товары.Сумма";
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти(ИмяРеквизитаТоварыСумма));
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| ЧекККМ.КассоваяСмена КАК КассоваяСмена,
| ЧекККМ.Дата КАК Дата,
| ЧекККМ.Проведен КАК Проведен,
| ЧекККМ.Статус КАК Статус
|ИЗ
| Документ.ЧекККМ КАК ЧекККМ
|ГДЕ
| ЧекККМ.Ссылка = &ЧекККМ
|;
|
|
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Количество КАК Количество
|ПОМЕСТИТЬ ТЧТовары
|ИЗ
| &ТЗТовары КАК Товары
|;
|
|
|ВЫБРАТЬ
| Товары.Количество КАК КоличествоВЧеке,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| Товары.Количество КАК Количество
|ПОМЕСТИТЬ врТовары
|ИЗ
| Документ.ЧекККМ.Товары КАК Товары
|ГДЕ
| Товары.Ссылка = &ЧекККМ
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0 КАК КоличествоВЧеке,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| -Товары.Количество КАК Количество
|ИЗ
| Документ.ЧекККМВозврат.Товары КАК Товары
|ГДЕ
| Товары.Ссылка.ЧекККМ = &ЧекККМ
| И Товары.Ссылка <> &ЧекККМВозврат
| И Товары.Ссылка.Проведен
| И Товары.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Пробит)
| И Товары.КоличествоУпаковок <> 0
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 0 КАК КоличествоВЧеке,
| Товары.Номенклатура КАК Номенклатура,
| Товары.Характеристика КАК Характеристика,
| -Товары.Количество КАК Количество
|ИЗ
| ТЧТовары КАК Товары
|
|;
|
|
|ВЫБРАТЬ
| Товары.Номенклатура КАК Номенклатура,
| Товары.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Товары.Характеристика КАК Характеристика,
| СУММА(Товары.Количество) КАК Количество,
| СУММА(Товары.КоличествоВЧеке) КАК КоличествоВЧеке
|ИЗ
| врТовары КАК Товары
|СГРУППИРОВАТЬ ПО
| Товары.Номенклатура,
| Товары.Характеристика
|ИМЕЮЩИЕ
| СУММА(Товары.Количество) < 0
|";
Запрос.Текст = ТекстЗапроса;
Запрос.УстановитьПараметр("ЧекККМ", ЧекККМ);
Запрос.УстановитьПараметр("ЧекККМВозврат", Ссылка);
Запрос.УстановитьПараметр("ТЗТовары", Товары.Выгрузить(,"Номенклатура, Характеристика, Количество"));
Результат = Запрос.ВыполнитьПакет();
Выборка = Результат[0].Выбрать();
Если Выборка.Следующий() Тогда
Если Не Выборка.Проведен Тогда
ТекстОшибки = НСтр("ru='Чек ККМ не проведен'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, "ЧекККМ",, Отказ);
КонецЕсли;
Если Выборка.Статус <> Перечисления.СтатусыЧековККМ.Пробит Тогда
ТекстОшибки = НСтр("ru='Чек ККМ продажи не пробит'");
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, "ЧекККМ",, Отказ);
КонецЕсли;
ТекстОшибки = "";
Если Не РозничныеПродажи.СменаОткрыта(КассоваяСмена, Дата, ТекстОшибки) Тогда
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, ЭтотОбъект, "КассоваяСмена",, Отказ);
КонецЕсли;
ВыборкаПоТоварам = Результат[3].Выбрать();
Если Статус <> Перечисления.СтатусыЧековККМ.Пробит Тогда
Пока ВыборкаПоТоварам.Следующий() Цикл
Остаток = -ВыборкаПоТоварам.Количество;
ТоварПрисутствуетВИсходномЧеке = ВыборкаПоТоварам.КоличествоВЧеке > 0;
МассивСтрок = Товары.НайтиСтроки(Новый Структура("Номенклатура, Характеристика", ВыборкаПоТоварам.Номенклатура, ВыборкаПоТоварам.Характеристика));
НайденныеСтроки = Новый Массив;
Для Каждого Строка Из МассивСтрок Цикл
НайденныеСтроки.Вставить(0,Строка);
КонецЦикла;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
Количество = ?(НайденнаяСтрока.Количество >= Остаток, Остаток, НайденнаяСтрока.Количество);
Остаток = Остаток - Количество;
Если ТоварПрисутствуетВИсходномЧеке Тогда
ТекстОшибки = НСтр("ru='Количество возвращаемого товара превышает количество проданного на %1% %2%'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1%", Количество * (НайденнаяСтрока.КоличествоУпаковок / НайденнаяСтрока.Количество));
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%2%", ?(ЗначениеЗаполнено(НайденнаяСтрока.Упаковка), НайденнаяСтрока.Упаковка, НайденнаяСтрока.Номенклатура.ЕдиницаИзмерения));
АдресОшибки = НСтр("ru='в строке %НомерСтроки% списка ""Товары""'");
АдресОшибки = СтрЗаменить(АдресОшибки, "%НомерСтроки%", НайденнаяСтрока.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки + " " + АдресОшибки,
ЭтотОбъект,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", НайденнаяСтрока.НомерСтроки, "КоличествоУпаковок"),
,
Отказ);
Иначе
ТекстОшибки = НСтр("ru='Номенклатура %1% не продавалась по чеку %2%. Удалите номенклатурную позицию'");
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%1%", НайденнаяСтрока.Номенклатура);
ТекстОшибки = СтрЗаменить(ТекстОшибки, "%2%", ЧекККМ);
АдресОшибки = НСтр("ru='в строке %НомерСтроки% списка ""Товары""'");
АдресОшибки = СтрЗаменить(АдресОшибки, "%НомерСтроки%", НайденнаяСтрока.НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(
ТекстОшибки + " " + АдресОшибки,
ЭтотОбъект,
ОбщегоНазначенияКлиентСервер.ПутьКТабличнойЧасти("Товары", НайденнаяСтрока.НомерСтроки, "Номенклатура"),
,
Отказ);
КонецЕсли;
Если Остаток <= 0 Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЕсли;
МассивНепроверяемыхРеквизитов = Новый Массив;
Если Не СкладыСервер.ИспользоватьСкладскиеПомещения(Склад, Дата) Тогда
ИмяРеквизитаТоварыПомещение = "Товары.Помещение";
МассивНепроверяемыхРеквизитов.Добавить(ИмяРеквизитаТоварыПомещение);
КонецЕсли;
НоменклатураСервер.ПроверитьЗаполнениеХарактеристик(ЭтотОбъект,МассивНепроверяемыхРеквизитов,Отказ);
НоменклатураСервер.ПроверитьЗаполнениеСерий(ЭтотОбъект,
НоменклатураСервер.ПараметрыУказанияСерий(ЭтотОбъект, Документы.ЧекККМВозврат),
Отказ,
МассивНепроверяемыхРеквизитов);
РозничныеПродажи.ПроверитьЗаполнениеОплатыПлатежнымиКартами(ЭтотОбъект, Отказ);
ЧекККМВозвратЛокализация.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты);
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты,МассивНепроверяемыхРеквизитов);
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ИнициализацияИЗаполнение
Процедура ЗаполнитьПоЧекуККМ(Знач ДокументОснование, ДанныеЗаполнения)
Если Документы.ЧекККМКоррекции.ЕстьКоррекцияПоЧекуККМ(ДокументОснование, Истина) Тогда
ВызватьИсключение НСтр("ru = 'По Чеку ККМ введен Чек ККМ коррекции. Ввод нового Чека ККМ возврат запрещен!'");
КонецЕсли;
Если Документы.ВозвратТоваровОтКлиента.ЕстьВозвратТоваровОтКлиентаПоЧекуККМ(ДокументОснование) Тогда
ВызватьИсключение НСтр("ru = 'По Чеку ККМ введен Возврат товаров от клиента. Ввод нового Чека ККМ возврат запрещен!'");
КонецЕсли;
ПредставлениеОтложенногоЧека = "";
Если ЗначениеЗаполнено(Документы.ЧекККМВозврат.НайтиОтложенныйЧекККМВозвратПоЧекуККМ(ДокументОснование, ПредставлениеОтложенногоЧека)) Тогда
ТекстСообщения = НСтр("ru = 'По Чеку ККМ есть отложенный %1. Ввод нового Чека ККМ возврат запрещен!'");
ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстСообщения, ПредставлениеОтложенногоЧека);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
ОсновнойТекстЗапроса =
"ВЫБРАТЬ
| ЧекККМ.Валюта КАК Валюта,
| ЧекККМ.Ссылка КАК ЧекККМ,
| ЧекККМ.ВидЦены КАК ВидЦены,
| ЧекККМ.Организация КАК Организация,
| ЧекККМ.КассаККМ КАК КассаККМ,
| ЧекККМ.Склад КАК Склад,
| ЧекККМ.ЦенаВключаетНДС КАК ЦенаВключаетНДС,
| ЧекККМ.НалогообложениеНДС КАК НалогообложениеНДС,
| ЧекККМ.Статус КАК Статус,
| ЧекККМ.Проведен КАК Проведен,
| ЧекККМ.Партнер КАК Партнер,
| ЧекККМ.КартаЛояльности КАК КартаЛояльности,
| ЧекККМ.КассоваяСмена КАК КассоваяСменаДокументаОснования
|ИЗ
| Документ.ЧекККМ КАК ЧекККМ
|ГДЕ
| ЧекККМ.Ссылка = &Ссылка
|;
|
|
|ВЫБРАТЬ
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика,
| Серии.Серия КАК Серия,
| Серии.Помещение КАК Помещение,
| Серии.Количество КАК Количество
|ПОМЕСТИТЬ врСерии
|ИЗ
| Документ.ЧекККМ.Серии КАК Серии
|ГДЕ
| Серии.Ссылка = &Ссылка
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Серии.Номенклатура,
| Серии.Характеристика,
| Серии.Серия,
| Серии.Помещение,
| -Серии.Количество
|ИЗ
| Документ.ЧекККМВозврат.Серии КАК Серии
|ГДЕ
| Серии.Ссылка.ЧекККМ = &Ссылка
| И Серии.Ссылка.Проведен
| И Серии.Ссылка.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЧековККМ.Пробит)
|;
|
|ВЫБРАТЬ
| Серии.Номенклатура КАК Номенклатура,
| Серии.Характеристика КАК Характеристика,
| Серии.Серия КАК Серия,
| Серии.Помещение КАК Помещение,
| СУММА(Серии.Количество) КАК Количество
|ИЗ
| врСерии КАК Серии
|СГРУППИРОВАТЬ ПО
| Серии.Номенклатура,
| Серии.Характеристика,
| Серии.Серия,
| Серии.Помещение
|ИМЕЮЩИЕ
| СУММА(Серии.Количество) > 0
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура,
| Характеристика,
| Серия,
| Помещение
|";
МассивТекстовЗапросов = Новый Массив;
МассивТекстовЗапросов.Добавить(ОсновнойТекстЗапроса);
МассивТекстовЗапросов.Добавить(Документы.ЧекККМ.ТекстЗапросаДляПолученияНеотмененныхОплатПоЧекуККМ(Истина, Истина));
МассивВидовОплат = Новый Массив;
МассивВидовОплат.Добавить(Перечисления.ТипыПлатежнойСистемыККТ.ПлатежнаяКарта);
Запрос = Новый Запрос;
Запрос.Текст = СтрСоединить(МассивТекстовЗапросов, Символы.ПС+";");
Запрос.УстановитьПараметр("Ссылка", ДокументОснование);
Запрос.УстановитьПараметр("ВидыОплат", МассивВидовОплат);
РезультатЗапроса = Запрос.ВыполнитьПакет();
Выборка = РезультатЗапроса[0].Выбрать();
Выборка.Следующий();
ЗаполнитьЗначенияСвойств(ЭтотОбъект, Выборка, ,"Статус, Проведен");
Если Не Выборка.Проведен Тогда
ТекстОшибки = НСтр("ru='Чек ККМ не проведен. Ввод на основании невозможен.'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если Выборка.Статус <> Перечисления.СтатусыЧековККМ.Пробит Тогда
ТекстОшибки = НСтр("ru='Чек ККМ не пробит. Ввод на основании невозможен.'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
КассаККМПоУмолчанию = Справочники.КассыККМ.КассаККМФискальныйРегистраторПоОрганизацииДляРМКПоУмолчанию(Выборка.Организация, Выборка.КассаККМ);
Если Не ЗначениеЗаполнено(КассаККМПоУмолчанию) Тогда
ТекстСообщения = НСтр("ru = 'Для текущего рабочего места не настроена касса ККМ по организации: %Организация%.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "%Организация%", Выборка.Организация);
ВызватьИсключение ТекстСообщения;
КонецЕсли;
КассаККМ = КассаККМПоУмолчанию;
ПараметрыКассыККМ = Справочники.КассыККМ.ПараметрыКассыККМ(КассаККМ);
СтруктураСостояниеКассовойСмены = РозничныеПродажи.ПолучитьСостояниеКассовойСмены(КассаККМ);
КассоваяСмена = СтруктураСостояниеКассовойСмены.КассоваяСмена;
ПараметрыОтбора = Документы.ЧекККМ.ПараметрыДляПолученияНевозвращенныхПозицийПоЧекуККМ();
ПараметрыОтбора.КассаККМИспользуетсяБезПодключенияОборудования = ПараметрыКассыККМ.ИспользоватьБезПодключенияОборудования;
ПараметрыОтбора.КассоваяСмена = КассоваяСмена;
ПараметрыОтбора.ЧекККМ = ДокументОснование;
Если Не ЗначениеЗаполнено(ДокументОснование) Тогда
ПараметрыОтбора.Организация = Организация;
КонецЕсли;
Если ЗначениеЗаполнено(КассоваяСмена) Тогда
ПараметрыОтбора.ИспользуетсяККТФЗ54 = РозничныеПродажиВызовСервера.ИспользуетсяККТФЗ54(КассоваяСмена);
КонецЕсли;
ТаблицаНевозвращенныхТоваров = Документы.ЧекККМ.ТаблицаНевозвращенныхПозицийПоЧекуККМ(ПараметрыОтбора);
Если ТаблицаНевозвращенныхТоваров.Количество() = 0 Тогда
ТекстОшибки = НСтр("ru='По данному чеку ККМ все товары уже возвращены.'");
ВызватьИсключение ТекстОшибки;
КонецЕсли;
Если Не КассоваяСмена = Выборка.КассоваяСменаДокументаОснования
И Не РасчетСебестоимостиПовтИсп.ПартионныйУчетВерсии22(ТекущаяДатаСеанса())
И Не ПолучитьФункциональнуюОпцию("БазоваяВерсия") Тогда
ВызватьИсключение НСтр("ru='Для ввода нового Чека ККМ возврат вне смены продажи необходимо перейти на партионный учет версии 2.2.
|Чтобы оформить возврат вне смены по чеку продажи при использовании партионного учета версии 2.1 воспользуйтесь документом Возврат товаров от клиента.'");
КонецЕсли;
Товары.Загрузить(ТаблицаНевозвращенныхТоваров);
Серии.Загрузить(РезультатЗапроса[2].Выгрузить());
ОплатаПлатежнымиКартами.Загрузить(РезультатЗапроса[РезультатЗапроса.ВГраница()].Выгрузить());
СуммаДокумента = ЦенообразованиеКлиентСервер.ПолучитьСуммуДокумента(Товары, ЦенаВключаетНДС);
КонецПроцедуры
Процедура ИнициализироватьДокумент(ДанныеЗаполнения = Неопределено)
Склад = ЗначениеНастроекПовтИсп.ПолучитьСкладПоУмолчанию(Склад);
Организация = ЗначениеНастроекПовтИсп.ПолучитьОрганизациюПоУмолчанию(Организация);
Если Не ЗначениеЗаполнено(Валюта) Тогда
Валюта = ЗначениеНастроекПовтИсп.ВалютаРегламентированногоУчетаОрганизации(Организация);
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Кассир) Тогда
Кассир = Пользователи.ТекущийПользователь();
КонецЕсли;
КонецПроцедуры
Процедура ЗаполнитьДокументПоКассеККМ(КассаККМ)
СостояниеКассовойСмены = РозничныеПродажи.ПолучитьСостояниеКассовойСмены(КассаККМ);
ЗаполнитьЗначенияСвойств(ЭтотОбъект, СостояниеКассовойСмены,,"Кассир");
КонецПроцедуры
Процедура ЗаполнитьДокументПоОтбору(ДанныеЗаполнения)
Если ДанныеЗаполнения.Свойство("КассаККМ") Тогда
ЗаполнитьДокументПоКассеККМ(ДанныеЗаполнения.КассаККМ);
ИначеЕсли ДанныеЗаполнения.Свойство("КассоваяСмена") И ТипЗнч(ДанныеЗаполнения.КассоваяСмена) = Тип("ДокументСсылка.КассоваяСмена") Тогда
КассаККМДляЗаполнения = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ДанныеЗаполнения.КассоваяСмена, "КассаККМ");
Если Не КассаККМДляЗаполнения = Неопределено Тогда
ЗаполнитьДокументПоКассеККМ(КассаККМДляЗаполнения);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область Прочее
#КонецОбласти
#КонецОбласти
#КонецЕсли