![]() |
![]() |
![]() |
|
обработка групповой загрузки XML файлов в УТ 10.3 | ☑ | ||
---|---|---|---|---|
0
1c1c
26.06.17
✎
16:01
|
Добрый день! Нужна помощь знающих и просветленных
Есть обработка групповой загрузки XML файлов в УТ 10.3. Работает корректно, загружает и создает документы "Поступление товаров и услуг", вот только есть проблема... Если один документ загружать несколько раз, то программа создаст столько же документов поступления. Как сделать так чтобы не было дублирования документов?? Код обработки: Процедура КнопкаВыполнитьНажатие(Кнопка) ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Для Каждого ИмяФайла Из МассивФайлов1 Цикл // ВыбФайл = Новый Файл(ИмяФайла); Сообщить(ИмяФайла); /////////////////////////////////////////////////////////////////////////////////////////////////// фф = 0; ыы = 0; вв = "20010101"; аа = 0; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// ///// Вставить содержимое обработчика. ЧтениеXML = Новый ЧтениеXML; ЧтениеXML.ОткрытьФайл(ИмяФайла); Имя = ЧтениеXML.Имя; //Массив = Новый Структура(Имя); Пока ЧтениеXML.Прочитать() Цикл ПолучитьXMLТип(ЧтениеXML); Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда Имя = ЧтениеXML.Имя; //Сообщить(ЧтениеXML.Имя); Пока ЧтениеXML.ПрочитатьАтрибут() Цикл Атрибут = ЧтениеXML.Значение; Если ЧтениеXML.Имя = "НомерСчФ" Тогда аа = ЧтениеXML.Значение КонецЕсли; Если ЧтениеXML.Имя = "ДатаСчФ" Тогда вы = ЧтениеXML.Значение КонецЕсли; Если ЧтениеXML.Имя = "СтТовУчНал" Тогда фф = ЧтениеXML.Значение КонецЕсли; Если ЧтениеXML.Имя = "СтТовБезНДСВсего" Тогда зы = ЧтениеXML.Значение КонецЕсли; //Сообщить("начало:" + ЧтениеXML.Имя + "=" + ЧтениеXML.Значение); КонецЦикла; КонецЕсли; КонецЦикла; ыы = фф - зы; вв = Сред(вы, 7,4) + Сред(вы, 4,2) + Сред(вы, 1,2); //Сообщить(вы); ДокОбъект = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); ДокОбъект.Дата = Дата(вв); ДокОбъект.Контрагент = Справочники.Контрагенты.НайтиПоКоду("УT0000063"); ДокОбъект.СкладОрдер = Справочники.Склады.НайтиПоКоду("000000004"); ДокОбъект.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоКоду("УT0000893"); ДокОбъект.ДатаВходящегоДокумента = Дата(вв); ДокОбъект.НомерВходящегоДокумента = аа; ДокОбъект.УчитыватьНДС = Истина; ДокОбъект.СуммаВключаетНДС = Истина; ДокОбъект.ОтражатьВБухгалтерскомУчете = Истина; ДокОбъект.ОтражатьВНалоговомУчете = Истина; ДокОбъект.ОтражатьВУправленческомУчете = Истина; ДокОбъект.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643"); ДокОбъект.БанковскийСчетКонтрагента = Справочники.БанковскиеСчета.НайтиПоКоду("УТ0000780"); ДокОбъект.ВидПоступления = Перечисления.ВидыПоступленияТоваров.НаСклад; ДокОбъект.Организация = Справочники.Организации.НайтиПоКоду("000000001"); ДокОбъект.КратностьВзаиморасчетов = 1; ДокОбъект.КурсВзаиморасчетов = 1; стрУслуги = ДокОбъект.Услуги.Добавить(); стрУслуги.Номенклатура = Справочники.Номенклатура.НайтиПоКоду("УT000000531"); стрУслуги.Содержание = "Валютный контроль"; стрУслуги.Количество = 1; стрУслуги.Цена = фф; стрУслуги.Сумма = фф; стрУслуги.СтавкаНДС = Перечисления.СтавкиНДС.НДС18; стрУслуги.СуммаНДС = ыы; стрУслуги.Подразделение = Справочники.Подразделения.НайтиПоКоду("000000002"); стрУслуги.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("000000010"); ДокОбъект.Записать(РежимЗаписиДокумента.Проведение); Форма = ДокОбъект.ПолучитьФорму(); ОбъектСчетаФактуры = Документы.СчетФактураПолученный.ПолучитьФормуНовогоДокумента( , Форма, Строка(ДокОбъект)); ОбъектСчетаФактуры.ДокументыОснования.Очистить(); ОбъектСчетаФактуры.ДополнительныеСвойства.Вставить("НеЗаполнятьСчетФактуруНаАванс"); ОбъектСчетаФактуры.Заполнить(ДокОбъект.Ссылка); //Если ОбъектСчетаФактуры.мДокументЗаполнен Тогда ОбъектСчетаФактуры.ДатаВходящегоДокумента = Дата(вв); ОбъектСчетаФактуры.НомерВходящегоДокумента = аа; //ОбъектСчетаФактуры.Открыть(); ОбъектСчетаФактуры.Записать(РежимЗаписиДокумента.Проведение); //Форма = СфОбъект.ПолучитьФорму(); //Форма.Открыть(); КонецЦикла; КонецПроцедуры Загружаемые доки отличаются номером счет-фактуры (НомерСчф) - это наша переменная "аа". Т.е нужна проверка есть ли в базе документ Поступление товаров с таким входящим номером. Мне кажется можно сделать с помощью функции "НайтиПокоду", но как это сделать и в какую часть обработки вставить код не знаю..... |
|||
1
pessok
26.06.17
✎
16:14
|
можно
|
|||
2
pessok
26.06.17
✎
16:14
|
только не по коду, а по реквизиту
|
|||
3
pessok
26.06.17
✎
16:15
|
ну а лучше сделать запросом и проверить, что он пустой. притом сделать это ДО загрузки, чтобы не городить запрос в цикле. т.е. обойти заголовки, посмотреть, каких документов нет в базе, а их уже грузить
|
|||
4
1c1c
26.06.17
✎
16:22
|
А если не запросом? как будет выглядеть код поиска по реквизиту, а именно по "номеру входящего документа" который считывается из файла XML и записывается в документ Поступления и с таким же номером создается счет-фактура. Как именно сделать сравнение реквизитов??
|
|||
5
pessok
26.06.17
✎
16:24
|
в СП искать по НайтиПоРеквизиту
|
|||
6
1c1c
26.06.17
✎
17:43
|
если не затруднит напишите код, именно как сделать поиск и сравнить нет ли в базе такого номера. Я не понимаю в этом, сижу целый день, а толку ноль..
|
|||
7
pessok
26.06.17
✎
19:45
|
хоспаде
Док = Документы.ПоступлениеТоваровУслуг.НайтиПоРеквизиту("НомерВходящегоДокумента", aa); Если Не Док.Пустая() Тогда Продолжить; КонецЕсли; как вы дальше работать собираетесь, если не секрет? |
|||
8
1c1c
27.06.17
✎
08:41
|
Спасибо, 1с это не мои обязанности, пока другой сотрудник в отпуске надо сделать эту задачу. Я пока только начинаю, первое место работы
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |