Процедура ОбработкаПроведения(Отказ, РежимПроведения)
СрезНастроек = ОбщегоНазначенияВызовСервера.ВернутьНастройкиОрганизации(Организация, Дата);
Если СрезНастроек.Количество() = 0 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Не заданы настройки по организации !!!");
Отказ = Истина;
Возврат;
КонецЕсли;
ПроводкаСПроверкойЧека = ПроверкаПроводкиБезЧека();
Если ПроводкаСПроверкойЧека Тогда
НайденЧек = НайтиПоследнийЧек();
Если НЕ (НайденЧек <> Неопределено
И (НайденЧек.СтатусЧекаККТ = Перечисления.СтатусЧекаККТ.Фискализирован ИЛИ НайденЧек.СтатусЧекаККТ = Перечисления.СтатусЧекаККТ.Архивный)
И НайденЧек.ТипОперацииККТ = Перечисления.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств) Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Необходимо оформить чек");
Отказ = Истина;
Возврат;
КонецЕсли;
КонецЕсли;
// Движения по материалам
Для Каждого СтрМатериал Из Материалы Цикл
УсловиеСписания = ?(ПроводкаСПроверкойЧека, ЗначениеЗаполнено(СтрМатериал.Сумма), ЗначениеЗаполнено(СтрМатериал.Количество));
Если УсловиеСписания Тогда
ДвижениеРасход = Движения.ПартииТоваров.Добавить();
ДвижениеРасход.ВидДвижения = ВидДвиженияНакопления.Расход;
ДвижениеРасход.Период = Дата;
ДвижениеРасход.Организация = Организация;
ДвижениеРасход.МестоХранения = МестоХранения;
ДвижениеРасход.Номенклатура = СтрМатериал.Номенклатура;
ДвижениеРасход.Партия = СтрМатериал.Партия;
ДвижениеРасход.Количество = СтрМатериал.Количество;
Движения.ПартииТоваров.Записать();
ДвиженияПоПартиям = Движения.ДвиженияПоПартиям.Добавить();
ДвиженияПоПартиям.Период = Дата;
ДвиженияПоПартиям.Организация = Организация;
ДвиженияПоПартиям.МестоХранения = МестоХранения;
ДвиженияПоПартиям.Номенклатура = СтрМатериал.Номенклатура;
ДвиженияПоПартиям.ВидОперации = Перечисления.ВидОперации.Списание;
ДвиженияПоПартиям.Партия = СтрМатериал.Партия;
ДвиженияПоПартиям.Количество = СтрМатериал.Количество;
ДвиженияПоПартиям.Цена = СтрМатериал.Цена;
ДвиженияПоПартиям.Сумма = СтрМатериал.Сумма;
Движения.ДвиженияПоПартиям.Записать();
Если НЕ ПроводкаСПроверкойЧека И НЕ ЗначениеЗаполнено(СтрМатериал.Цена) Тогда
МенеджерЗаписейБесплВакцина = РегистрыСведений.БесплатнаяВакцинация.СоздатьМенеджерЗаписи();
МенеджерЗаписейБесплВакцина.Документ = Ссылка;
МенеджерЗаписейБесплВакцина.Услуга = СтрМатериал.Услуга;
МенеджерЗаписейБесплВакцина.Материал = СтрМатериал.Номенклатура;
МенеджерЗаписейБесплВакцина.Количество = СтрМатериал.Количество;
МенеджерЗаписейБесплВакцина.Записать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
// Движения по услугам
Для Каждого СтрУслуга Из Услуги Цикл
ДвижениеОказаниеУслуг = Движения.ДвижениеОказаниеУслуг.Добавить();
ДвижениеОказаниеУслуг.Период = Дата;
ДвижениеОказаниеУслуг.ДокументПрием = ?(ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.Прием"), ДокументОснование, Прием);
ДвижениеОказаниеУслуг.Услуга = СтрУслуга.Услуга;
ДвижениеОказаниеУслуг.Количество = СтрУслуга.Количество;
Движения.ДвижениеОказаниеУслуг.Записать();
КонецЦикла;
// Запись в историю посещений
МенеджерЗаписей = РегистрыСведений.ИсторияПосещений.СоздатьМенеджерЗаписи();
МенеджерЗаписей.Документ = Ссылка;
МенеджерЗаписей.Клиент = Клиент;
МенеджерЗаписей.Питомец = Питомец;
МенеджерЗаписей.Записать();
КонецПроцедуры