![]() |
|
1c 8.2 БП + SAP | ☑ | ||
---|---|---|---|---|
0
antistaks
20.06.13
✎
14:01
|
http://s017.radikal.ru/i443/1306/ff/c03bed616de6.jpg
Процедура ЗагрузкаСчетовФактур(Кнопка) //XML НомерОшибки = 0; //Перечень кодов ошибок //1-Контрагент по ИНН не найден //2-В справочнике номенклатуры 1С не найдена ст.затрат 1С, соответствующая счету SAP //Таблица для логистических счетов-фактур------------------------------------ ТаблицаЗначенийRE = Новый ТаблицаЗначений; ТаблицаЗначенийRE.Колонки.Добавить("BELNR"); ТаблицаЗначенийRE.Колонки.Добавить("BLDAT"); ТаблицаЗначенийRE.Колонки.Добавить("BUDAT"); ТаблицаЗначенийRE.Колонки.Добавить("XBLNR"); ТаблицаЗначенийRE.Колонки.Добавить("BUKRS"); ТаблицаЗначенийRE.Колонки.Добавить("BUKRS_TEXT"); ТаблицаЗначенийRE.Колонки.Добавить("LIFNR_INN"); ТаблицаЗначенийRE.Колонки.Добавить("MWSKZ_I"); ТаблицаЗначенийRE.Колонки.Добавить("ZUONR"); ТаблицаЗначенийRE.Колонки.Добавить("EBELN"); ТаблицаЗначенийRE.Колонки.Добавить("EBELP"); ТаблицаЗначенийRE.Колонки.Добавить("MATNR"); ТаблицаЗначенийRE.Колонки.Добавить("SUMMA_BEZ_NDS"); ТаблицаЗначенийRE.Колонки.Добавить("MENGE"); ТаблицаЗначенийRE.Колонки.Добавить("SZ_1C"); ТаблицаЗначенийRE.Колонки.Добавить("AUFPL"); ТаблицаЗначенийRE.Колонки.Добавить("APLZL"); ТаблицаЗначенийRE.Колонки.Добавить("OS_1C"); //Таблица для бухгалтерских счетов-фактур------------------------------------- ТаблицаЗначенийKR = Новый ТаблицаЗначений; ТаблицаЗначенийKR.Колонки.Добавить("BELNR"); ТаблицаЗначенийKR.Колонки.Добавить("BUDAT"); ТаблицаЗначенийKR.Колонки.Добавить("BUKRS"); ТаблицаЗначенийKR.Колонки.Добавить("BUKRS_TEXT"); ТаблицаЗначенийKR.Колонки.Добавить("LIFNR_INN"); ТаблицаЗначенийKR.Колонки.Добавить("NALOG_1C"); ТаблицаЗначенийKR.Колонки.Добавить("SUMMA_BEZ_NDS"); ТаблицаЗначенийKR.Колонки.Добавить("SGTXT"); ТаблицаЗначенийKR.Колонки.Добавить("ZUONR"); ТаблицаЗначенийKR.Колонки.Добавить("SZ_1C"); Файл = Новый ЧтениеXML; СписокФайлов = НайтиФайлы("C:\1C\", "*.xml"); Если СписокФайлов.Количество() = 0 Тогда Предупреждение("Файлов для загрузки не обнаружено!"); Возврат; КонецЕсли; Для Индекс = 0 По СписокФайлов.ВГраница() Цикл ИмяФайла = СписокФайлов[Индекс]; Файл.ОткрытьФайл(ИмяФайла.ПолноеИмя); НомерОшибки = 0; ТаблицаЗначенийRE.Очистить(); ТаблицаЗначенийKR.Очистить(); РежимОбработки = ""; //Прочитать фрагменты файла Пока Файл.Прочитать() Цикл Если Файл.Имя = "ZST_RE_EXPORT_XML" Тогда РежимОбработки = "LO"; ИначеЕсли Файл.Имя = "ZST_KR_EXPORT_XML" Тогда РежимОбработки = "FI"; КонецЕсли; //Блок заполнения таблицы значений с/ф LO--------------------------------------------------- Если РежимОбработки = "LO" Тогда //После чтения проверить тип узла Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента И Файл.Имя = "ZST_RE_EXPORT_XML" Тогда ТекущаяКолонка = 1; НоваяСтрокаRE = ТаблицаЗначенийRE.Добавить(); КонецЕсли; Если ТекущаяКолонка <> 0 И Файл.ТипУзла = ТипУзлаXML.Текст Тогда Если ТекущаяКолонка = 1 Тогда НоваяСтрокаRE.BELNR = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 2 Тогда НоваяСтрокаRE.BLDAT = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 3 Тогда НоваяСтрокаRE.BUDAT = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 4 Тогда НоваяСтрокаRE.XBLNR = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 5 Тогда НоваяСтрокаRE.BUKRS = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 6 Тогда НоваяСтрокаRE.BUKRS_TEXT = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 7 Тогда НоваяСтрокаRE.LIFNR_INN = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 8 Тогда НоваяСтрокаRE.MWSKZ_I = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 9 Тогда НоваяСтрокаRE.ZUONR = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 10 Тогда НоваяСтрокаRE.EBELN = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 11 Тогда НоваяСтрокаRE.EBELP = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 12 Тогда НоваяСтрокаRE.MATNR = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 13 Тогда НоваяСтрокаRE.SUMMA_BEZ_NDS = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 14 Тогда НоваяСтрокаRE.MENGE = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 15 Тогда НоваяСтрокаRE.SZ_1C = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 16 Тогда НоваяСтрокаRE.AUFPL = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 17 Тогда НоваяСтрокаRE.APLZL = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 18 Тогда НоваяСтрокаRE.OS_1C = СокрЛП(Файл.Значение); КонецЕсли; КонецЕсли; Если ТекущаяКолонка <> 0 И Файл.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда ТекущаяКолонка = ТекущаяКолонка + 1; КонецЕсли; Если Файл.ТипУзла = ТипУзлаXML.КонецЭлемента И Файл.Имя = "ZST_RE_EXPORT_XML" Тогда ТекущаяКолонка = 0; КонецЕсли; //Блок заполнения таблицы значений с/ф FI--------------------------------------------------- ИначеЕсли РежимОбработки = "FI" Тогда //Начало строки Если Файл.ТипУзла = ТипУзлаXML.НачалоЭлемента И Файл.Имя = "ZST_KR_EXPORT_XML" Тогда ТекущаяКолонка = 1; НоваяСтрокаKR = ТаблицаЗначенийKR.Добавить(); КонецЕсли; Если ТекущаяКолонка <> 0 И Файл.ТипУзла = ТипУзлаXML.Текст Тогда Если ТекущаяКолонка = 1 Тогда НоваяСтрокаKR.BELNR = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 2 Тогда НоваяСтрокаKR.BUDAT = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 3 Тогда НоваяСтрокаKR.BUKRS = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 4 Тогда НоваяСтрокаKR.BUKRS_TEXT = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 5 Тогда НоваяСтрокаKR.LIFNR_INN = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 6 Тогда НоваяСтрокаKR.NALOG_1C = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 7 Тогда НоваяСтрокаKR.SUMMA_BEZ_NDS = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 8 Тогда НоваяСтрокаKR.SGTXT = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 9 Тогда НоваяСтрокаKR.ZUONR = СокрЛП(Файл.Значение); ИначеЕсли ТекущаяКолонка = 10 Тогда НоваяСтрокаKR.SZ_1C = СокрЛП(Файл.Значение); КонецЕсли; КонецЕсли; Если ТекущаяКолонка <> 0 И Файл.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда ТекущаяКолонка = ТекущаяКолонка + 1; КонецЕсли; Если Файл.ТипУзла = ТипУзлаXML.КонецЭлемента И Файл.Имя = "ZST_KR_EXPORT_XML" Тогда ТекущаяКолонка = 0; КонецЕсли; КонецЕсли; КонецЦикла; Файл.Закрыть(); //Создание документа на базе счет-фактуры LO---------------------------------------------- Если РежимОбработки = "LO" Тогда Для Каждого ТекущаяСтрокаRE Из ТаблицаЗначенийRE Цикл НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); //Заполнение шапки документа/////////////////////////////////////////////////////////// ДатаTMP = СокрЛП(СтрЗаменить(ТекущаяСтрокаRE.BUDAT,"-","")); НовыйДокумент.Дата = Дата(ДатаTMP); //Константы НовыйДокумент.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");//Рубль НовыйДокумент.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002"); НовыйДокумент.СпособЗачетаАвансов = ПолучитьСсылкуНаЗначениеПеречисления ("СпособыЗачетаАвансов", "Автоматически"); НовыйДокумент.Склад = Справочники.Склады.НайтиПоКоду("000000001"); //Проверка наличия организации (БЕ SAP) в справочнике организаций------------------------------------- //и добавление ее в справочник в случае отсутствия НайденнаяОрганизация = Справочники.Организации.НайтиПоНаименованию(ТекущаяСтрокаRE.BUKRS_TEXT); Если НайденнаяОрганизация = Справочники.Организации.ПустаяСсылка() Тогда //Добавляем БЕ в справочник НоваяОрганизация = Справочники.Организации.СоздатьЭлемент(); НоваяОрганизация.Наименование = ТекущаяСтрокаRE.BUKRS_TEXT; НоваяОрганизация.ЮрФизЛицо = ПолучитьСсылкуНаЗначениеПеречисления("ЮрФизЛицо", "ЮрЛицо"); НоваяОрганизация.Записать(); КонецЕсли; НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(ТекущаяСтрокаRE.BUKRS_TEXT); НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТекущаяСтрокаRE.LIFNR_INN); НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТекущаяСтрокаRE.LIFNR_INN); Если НайденныйКонтрагент = Справочники.Контрагенты.ПустаяСсылка() Тогда НомерОшибки = 1; КонецЕсли; //Реквизит "Договор контрагента" - смотрим по номеру присвоения SAP наличие договора с таким //наименование, в случае-отсутствия - добавляем НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ТекущаяСтрокаRE.ZUONR); Если НайденныйДоговор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка() И НомерОшибки = 0 Тогда НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); НовыйДоговор.Наименование = ТекущаяСтрокаRE.ZUONR; НовыйДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком; НовыйДоговор.Организация = НовыйДокумент.Организация; НовыйДоговор.Владелец = НовыйДокумент.Контрагент; НовыйДоговор.ВалютаВзаиморасчетов = НовыйДокумент.ВалютаДокумента; НовыйДоговор.Записать(); КонецЕсли; НовыйДокумент.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ТекущаяСтрокаRE.ZUONR); НовыйДокумент.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01"); НовыйДокумент.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.02"); // Данные первичного документа НовыйДокумент.ПредъявленСчетФактура = Истина; НовыйДокумент.НомерВходящегоСчетаФактуры = ТекущаяСтрокаRE.XBLNR; ДатаTMP = СокрЛП(СтрЗаменить(ТекущаяСтрокаRE.BLDAT,"-","")); НовыйДокумент.ДатаВходящегоСчетаФактуры = Дата(ДатаTMP); // Дополнительные данные НовыйДокумент.НомерСчетаФактурыСАП = ТекущаяСтрокаRE.BELNR; НовыйДокумент.НомерЗаказаСАП = ТекущаяСтрокаRE.EBELN; //Заполнение табличной части/////////////////////////////////// Если ТекущаяСтрокаRE.MATNR = Неопределено Тогда //Объекты строительства НовыйДокумент.ВидОперации = ПолучитьСсылкуНаЗначениеПеречисления ("ВидыОперацийПоступлениеТоваровУслуг", "ОбъектыСтроительства"); НоваяСтрокаОС = НовыйДокумент.ОбъектыСтроительства.Добавить(); НоваяСтрокаОС.ОбъектСтроительства = Справочники.ОбъектыСтроительства.НайтиПоКоду(ТекущаяСтрокаRE.OS_1C); НоваяСтрокаОС.СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду(ТекущаяСтрокаRE.SZ_1C); НоваяСтрокаОС.СчетУчета = ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы; НоваяСтрокаОС.Сумма = ТекущаяСтрокаRE.SUMMA_BEZ_NDS; Иначе //Товары НоваяСтрокаТовары = НовыйДокумент.Товары.Добавить(); КонецЕсли; // Записать документ Попытка Если НомерОшибки = 0 Тогда НовыйДокумент.Записать(); КонецЕсли; ОтправитьРезультатЗагрузкиСФ(ТекущаяСтрокаRE.BELNR, ТекущаяСтрокаRE.BUDAT, ТекущаяСтрокаRE.BUKRS, НомерОшибки, НовыйДокумент.Номер); Исключение //Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; //Создание документа на базе счет-фактуры FI---------------------------------------------- ИначеЕсли РежимОбработки = "FI" Тогда Для Каждого ТекущаяСтрокаKR Из ТаблицаЗначенийKR Цикл НовыйДокумент = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); НовыйДокумент.ВидОперации = ПолучитьСсылкуНаЗначениеПеречисления ("ВидыОперацийПоступлениеТоваровУслуг", "ПокупкаКомиссия"); НовыйДокумент.УчитыватьНДС = Истина; // Иначе не отображаются колонки с НДС НовыйДокумент.НДСВключенВСтоимость = Истина; //Заполнение шапки документа/////////////////////////////////////////////////////////// ДатаTMP = СокрЛП(СтрЗаменить(ТекущаяСтрокаKR.BUDAT,"-","")); НовыйДокумент.Дата = Дата(ДатаTMP); //Константы НовыйДокумент.ВалютаДокумента = Справочники.Валюты.НайтиПоКоду("643");//Рубль НовыйДокумент.ТипЦен = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000002"); НовыйДокумент.СпособЗачетаАвансов = ПолучитьСсылкуНаЗначениеПеречисления ("СпособыЗачетаАвансов", "Автоматически"); НовыйДокумент.Склад = Справочники.Склады.НайтиПоКоду("000000001"); //Проверка наличия организации (БЕ SAP) в справочнике организаций------------------------------------- //и добавление ее в справочник в случае отсутствия НайденнаяОрганизация = Справочники.Организации.НайтиПоНаименованию(ТекущаяСтрокаKR.BUKRS_TEXT); Если НайденнаяОрганизация = Справочники.Организации.ПустаяСсылка() Тогда //Добавляем БЕ в справочник НоваяОрганизация = Справочники.Организации.СоздатьЭлемент(); НоваяОрганизация.Наименование = ТекущаяСтрокаKR.BUKRS_TEXT; НоваяОрганизация.ЮрФизЛицо = ПолучитьСсылкуНаЗначениеПеречисления("ЮрФизЛицо", "ЮрЛицо"); НоваяОрганизация.Записать(); КонецЕсли; НовыйДокумент.Организация = Справочники.Организации.НайтиПоНаименованию(ТекущаяСтрокаKR.BUKRS_TEXT); НовыйДокумент.Контрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТекущаяСтрокаKR.LIFNR_INN); НайденныйКонтрагент = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ТекущаяСтрокаKR.LIFNR_INN); Если НайденныйКонтрагент = Справочники.Контрагенты.ПустаяСсылка() Тогда НомерОшибки = 1; КонецЕсли; //Реквизит "Договор контрагента" - смотрим по номеру присвоения SAP наличие договора с таким //наименование, в случае-отсутствия - добавляем НайденныйДоговор = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ТекущаяСтрокаKR.ZUONR); Если НайденныйДоговор = Справочники.ДоговорыКонтрагентов.ПустаяСсылка() И НомерОшибки = 0 Тогда НовыйДоговор = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); НовыйДоговор.Наименование = ТекущаяСтрокаKR.ZUONR; НовыйДоговор.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПоставщиком; НовыйДоговор.Организация = НовыйДокумент.Организация; НовыйДоговор.Владелец = НовыйДокумент.Контрагент; НовыйДоговор.ВалютаВзаиморасчетов = НовыйДокумент.ВалютаДокумента; НовыйДоговор.Записать(); КонецЕсли; НовыйДокумент.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.НайтиПоНаименованию(ТекущаяСтрокаKR.ZUONR); НовыйДокумент.СчетУчетаРасчетовСКонтрагентом = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.01"); НовыйДокумент.СчетУчетаРасчетовПоАвансам = ПланыСчетов.Хозрасчетный.НайтиПоКоду("60.02"); // Дополнительные данные НовыйДокумент.НомерСчетаФактурыСАП = ТекущаяСтрокаKR.BELNR; //Заполнение табличной части/////////////////////////////////// НоваяСтрокаОС = НовыйДокумент.Услуги.Добавить(); СтатьяЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду(ТекущаяСтрокаKR.SZ_1C); НоваяСтрокаОС.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(СтатьяЗатрат.Наименование); Если НоваяСтрокаОС.Номенклатура = Справочники.Номенклатура.ПустаяСсылка() Тогда НомерОшибки = 2; КонецЕсли; НоваяСтрокаОС.Содержание = ТекущаяСтрокаKR.SGTXT; НоваяСтрокаОС.Количество = "1"; НоваяСтрокаОС.Сумма = ТекущаяСтрокаKR.SUMMA_BEZ_NDS; НоваяСтрокаОС.Цена = ТекущаяСтрокаKR.SUMMA_BEZ_NDS; НоваяСтрокаОС.СчетЗатрат = ПланыСчетов.Хозрасчетный.НайтиПоКоду("26"); НоваяСтрокаОС.Субконто1 = СтатьяЗатрат; НоваяСтрокаОС.СтавкаНДС = Вычислить("Перечисления.СтавкиНДС." + ТекущаяСтрокаKR.NALOG_1C); ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(НоваяСтрокаОС, НовыйДокумент); Если НоваяСтрокаОС.СтавкаНДС = 0 Тогда НоваяСтрокаОС.ОтражениеВУСН = Перечисления.ОтражениеВУСН.НеПринимаются; Иначе НоваяСтрокаОС.ОтражениеВУСН = Перечисления.ОтражениеВУСН.Принимаются; КонецЕсли; // Записать документ Попытка Если НомерОшибки = 0 Тогда НовыйДокумент.Записать(); КонецЕсли; ОтправитьРезультатЗагрузкиСФ(ТекущаяСтрокаKR.BELNR, ТекущаяСтрокаKR.BUDAT, ТекущаяСтрокаKR.BUKRS, НомерОшибки, НовыйДокумент.Номер); Исключение //Сообщить(ОписаниеОшибки()); КонецПопытки; КонецЦикла; КонецЕсли; КонецЦикла; КонецПроцедуры |
|||
1
antistaks
20.06.13
✎
14:01
|
||||
2
Dionis Sergeevich
20.06.13
✎
14:14
|
(1) Подробно - Конфигуратор чего показывает?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |