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