&НаКлиенте
Процедура СформироватьДокументККМXML()
ПолноеИмяФайлаXML = "C:\CheckKKM\SalesDocumentIn.xml";
ВыбранныйФайл = Новый Файл(ПолноеИмяФайлаXML);
Если Не ВыбранныйФайл.Существует() Тогда
Возврат
КонецЕсли;
//перемещаем файл с клиенат на сервер для обработки
ВыбраныйФайл = "C:\CheckKKM\SalesDocumentIn.xml"; //ДиалогОткрытияФайла.ПолноеИмяФайла;
АдресВременногоХранилища = "";
ПоместитьФайл(АдресВременногоХранилища, ВыбраныйФайл, ,Ложь, ЭтаФорма.УникальныйИдентификатор);
ЗагрузитьДанные(АдресВременногоХранилища);
// удаляем файл
/////////////////////////////////////////////////
ИмяФайлаККМ = "C:\CheckKKM\SalesDocumentIn.xml";
ПолноеИмяФайла = Новый Файл(ИмяФайлаККМ);
Если ПолноеИмяФайла.Существует() Тогда
УдалитьФайлы(ПолноеИмяФайла);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанные(АдресВременногоХранилища)
ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресВременногоХранилища);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("xml");
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ТекстИзXML = Новый ТекстовыйДокумент;
ТекстИзXML.Прочитать(ИмяВременногоФайла, КодировкаТекста.UTF8);
ЗаполнитьДокументККМ(ТекстИзXML.ПолучитьТекст());
Попытка
УдалитьФайлы(ИмяВременногоФайла);
Исключение
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДокументККМ(ТекстXML)// (ПолучитьТекст)
ОбщаяСуммаДокумента = 0;
НовыйДокументККМ = Документы.ЧекККМ.СоздатьДокумент();
ВидЦены = Справочники.ВидыЦен.НайтиПоНаименованию("РОЗНИЦА");
НовыйДокументККМ.Валюта = Справочники.Валюты.НайтиПоНаименованию("руб.");
НовыйДокументККМ.Дата = ТекущаяДата();
НовыйДокументККМ.КассаККМ = Справочники.КассыККМ.НайтиПоНаименованию("Фискальный регистратор (Склад НМ-ИП)");
НовыйДокументККМ.Кассир = Справочники.Пользователи.НайтиПоНаименованию("Иванов Иван");
НовыйДокументККМ.Склад = Справочники.Склады.НайтиПоНаименованию("Склад НМ-ИП");
НовыйДокументККМ.Статус = Перечисления.СтатусыЧековККМ.Отложен;
НовыйДокументККМ.ВидЦены = ВидЦены;
НовыйДокументККМ.НалогообложениеНДС = Перечисления.ТипыНалогообложенияНДС.ПродажаНеОблагаетсяНДС;
//ТЧ Товары в Документе Чек ККМ
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ТекстXML);
ПостроительDOM = Новый ПостроительDOM;
ДокументDOM = ПостроительDOM.Прочитать(ЧтениеXML);
GOODS = ДокументDOM.ПолучитьЭлементыПоИмени("GOODS");
НовыйДокументККМ.Товары.Очистить();
Для Позиц=0 По GOODS.Количество()-1 Цикл
ДочерниеУзлы = GOODS[Позиц].ДочерниеУзлы;
Для Каждого Узел Из ДочерниеУзлы Цикл
Если Узел.ИмяУзла = "NOMENCLATURE" Тогда
НоменклатураСсылка = Справочники.Номенклатура.НайтиПоНаименованию(Строка(Узел.ТекстовоеСодержимое));
ИначеЕсли Узел.ИмяУзла = "REMAINS" Тогда
ОстатокКоличество = Число(Узел.ТекстовоеСодержимое);
//проверить на существование товара на данном "Склад НМ-ИП" складе
Если ПроверкаНаНаличиеДаннойНоменклатуры(НоменклатураСсылка) Тогда
ДобавитьСтрокуСТоваромВДокументе(НоменклатураСсылка,ОстатокКоличество,НовыйДокументККМ,ВидЦены,ОбщаяСуммаДокумента);
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
НовыйДокументККМ.Комментарий = "Произведено формирование данного документа ККМ из внешней обработки " + Символы.ПС + "Дата :" + ТекущаяДата();
НовыйДокументККМ.СуммаДокумента = ОбщаяСуммаДокумента;
// 08122016
// Закоменчено из-за проверки Функция ВнесенаОплата()
// Процедура ПередЗакрытиемЧека(Отказ, ОписаниеОповещения = Неопределено)
// НовыйДокументККМ.ПолученоНаличными = ОбщаяСуммаДокумента;
// установить ссылку нового документа с номеров и датой
СсылкаНаОбъект = Документы.ЧекККМ.ПолучитьСсылку();
НовыйДокументККМ.УстановитьСсылкуНового(СсылкаНаОбъект);
НовыйДокументККМ.Записать(РежимЗаписиДокумента.Запись);
КонецПроцедуры
&НаСервере
Функция ПроверкаНаНаличиеДаннойНоменклатуры(НоменклатураСсылка)
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("Номенклатура", НоменклатураСсылка);
Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоНаименованию("Склад НМ-ИП"));
Запрос.Текст = "ВЫБРАТЬ
| СвободныеОстаткиОстатки.Склад,
| СвободныеОстаткиОстатки.Номенклатура,
| СвободныеОстаткиОстатки.ВНаличииОстаток,
| СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток,
| СУММА(СвободныеОстаткиОстатки.ВНаличииОстаток - СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток) КАК Остаток
|ИЗ
| РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
|ГДЕ
| СвободныеОстаткиОстатки.Склад = &Склад
| И СвободныеОстаткиОстатки.Номенклатура = &Номенклатура
|
|СГРУППИРОВАТЬ ПО
| СвободныеОстаткиОстатки.Склад,
| СвободныеОстаткиОстатки.Номенклатура,
| СвободныеОстаткиОстатки.ВНаличииОстаток,
| СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток
|
|ИМЕЮЩИЕ
| СУММА(СвободныеОстаткиОстатки.ВНаличииОстаток - СвободныеОстаткиОстатки.ВРезервеСоСкладаОстаток) > 0";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Количество() <> 0 Тогда
ВыборкаДетальныеЗаписи.Следующий();
Если ВыборкаДетальныеЗаписи.Остаток > 0 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Комментариев нет:
Отправить комментарий