Загрузка данных в документ из XML
&НаКлиенте
Процедура ОбновитьСписок(Команда)
//ЗагрузкаДанныхДляДокументаККМ.СформироватьДокументККМ();
//ЭтаФорма.ОбновитьОтображениеДанных(ЧекиККМ);
СформироватьДокументККМXML();
КонецПроцедуры
&НаСервере
Процедура СформироватьДокументККМXML()
ЗагрузитьДанные();
КонецПроцедуры
&НаСервере
Процедура ЗагрузитьДанные()
ПолноеИмяФайлаXML = "C:\pricexls1\SalesDocumentInOOO.xml";
ВыбранныйФайл = Новый Файл(ПолноеИмяФайлаXML);
Если Не ВыбранныйФайл.Существует() Тогда
Возврат
КонецЕсли;
ТекстИзXML = Новый ТекстовыйДокумент;
ТекстИзXML.Прочитать(ПолноеИмяФайлаXML, КодировкаТекста.UTF8);
ЗаполнитьДокументККМ(ТекстИзXML.ПолучитьТекст());
УдалитьФайлы(ПолноеИмяФайла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 Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
&НаСервере
Функция ПолучитьЦенуТовара(НоменклатураСсылка,ВидЦены);
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ВидЦены", ВидЦены);
Запрос.УстановитьПараметр("Номенклатура", НоменклатураСсылка);
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
|ГДЕ
| ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
| И ЦеныНоменклатурыСрезПоследних.ВидЦены = &ВидЦены";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Если ВыборкаДетальныеЗаписи.Количество() <> 0 Тогда
ВыборкаДетальныеЗаписи.Следующий();
Возврат ВыборкаДетальныеЗаписи.Цена;
Иначе
Возврат 0.01;
КонецЕсли;
КонецФункции //ПолучитьЦенуТовара(НоменклатураСсылка);
&НаСервере
Процедура ДобавитьСтрокуСТоваромВДокументе(НоменклатураСсылка,ОстатокКоличество,НовыйДокументККМ,ВидЦены,ОбщаяСуммаДокумента)
Если НЕ НоменклатураСсылка.Пустая() И НоменклатураСсылка <> НеОпределено Тогда
ЦенаПолучить = ПолучитьЦенуТовара(НоменклатураСсылка,ВидЦены);
ТЧТовары = НовыйДокументККМ.Товары.Добавить();
ТЧТовары.Количество = ОстатокКоличество;
ТЧТовары.КоличествоУпаковок = ОстатокКоличество;
ТЧТовары.Номенклатура = НоменклатураСсылка;
ТЧТовары.Упаковка = Справочники.УпаковкиНоменклатуры.НайтиПоНаименованию("шт."); //НоменклатураСсылка.ЕдиницаИзмерения;
ТЧТовары.Цена = ЦенаПолучить; //ПолучитьЦенуТовара(НоменклатураСсылка,ВидЦены);
СуммаПозиции = ЦенаПолучить * ОстатокКоличество;
ТЧТовары.Сумма = СуммаПозиции;
ТЧТовары.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
ТЧТовары.Продавец = Справочники.Пользователи.НайтиПоНаименованию("... Пётр Михайлович");
ОбщаяСуммаДокумента = ОбщаяСуммаДокумента + СуммаПозиции;
КонецЕсли;
КонецПроцедуры
Комментариев нет:
Отправить комментарий