Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
загрузка из txt в 1с 8
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! При написании обработки загрузки текстового файла формата txt в 1с 8.2 возникает следующая ошибка : Ошибка при вызове метода контекста (Записать) док.Записать(); по причине: Значение поля "Дата" не может быть пустой датой. В чём причина не могу понять. Нужно загрузить данные в документ ПоступлениеТоваровУслуг. Сам код следующий: Функция ПарсерСтроки(стр) Разд = Символ(183); Струк = новый Структура; п=0; поз = найти(стр,Разд); пока поз>0 цикл п = п+1; Данные = Лев(стр,поз-1); Струк.Вставить("п"+строка(п),Данные); стр = Сред(стр,поз+1,стрдлина(стр)); поз = найти(стр,Разд); КонецЦикла; Если п=0 и ПустаяСтрока(стр) тогда Возврат Неопределено; конецЕсли; п = п + 1; Струк.Вставить("п"+строка(п),стр); Возврат струк; КонецФункции Процедура КнопкаВыполнитьНажатие(Кнопка) тт = новый ТекстовыйДокумент; тт.Прочитать(ПутьКФайлам+"\prihod.txt"); для нс=1 по тт.КоличествоСтрок() цикл попытка стр = тт.ПолучитьСтроку(нс); исключение прервать; КонецПопытки; Если стр="[SC]" или стр="НАКЛ_ПР" тогда продолжить; конецЕсли; Если стр = "" Тогда прервать; КонецЕсли; дан = ПарсерСтроки(стр); Номер = дан.п1; нс = нс+1; стр = тт.ПолучитьСтроку(нс); дан = ПарсерСтроки(стр); тд = дан.п1; ДатаДок = сред(тд,7,4)+сред(тд,4,2)+сред(тд,1,2)+"0000"; Если дан<>Неопределено тогда ДокИск = Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру(дан.п1,ТекущаяДата()); Если ДокИск = Документы.ПоступлениеТоваровУслуг.ПустаяСсылка() тогда Док = Документы.ПоступлениеТоваровУслуг.СоздатьДокумент(); Иначе док = ДокИск.ПолучитьОбъект(); КонецЕсли; док.Товары.очистить(); ЗаполнениеДокументов.ЗаполнитьШапкуДокумента(док, глЗначениеПеременной("глТекущийПользователь"), Константы.ВалютаРегламентированногоУчета.Получить(), "Покупка"); док.Дата = ДатаДок; нс = нс+1; стр = тт.ПолучитьСтроку(нс); дан = ПарсерСтроки(стр); стр = сред(стр,6,стрдлина(стр)); док.Комментарий = дан.п1; нс = нс+1; стр = тт.ПолучитьСтроку(нс); стр = сред(стр,5,стрдлина(стр)); дан = ПарсерСтроки(стр); док.СуммаДокумента = дан.п1; нс = нс + 1; стр = тт.ПолучитьСтроку(нс); дан = ПарсерСтроки(стр); док.СуммаВключаетНДС = ложь; док.ВидОперации = Перечисления.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия; док.УчитыватьНДС = Истина; док.Товары.Очистить(); Пока стр<>"/[AA]" цикл Если дан=Неопределено тогда Сообщить("Ошибка разбора строки "+нс); Продолжить; КонецЕсли; док.СкладОрдер = Справочники.Склады.НайтиПоКоду("000000001"); новстр = док.Товары.Добавить(); новстр.Склад = док.СкладОрдер; новстр.Количество = сред(дан.п14,2,стрдлина(дан.п14)); Номен = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул",дан.п1); Если номен = Справочники.Номенклатура.ПустаяСсылка() тогда Сообщить("Добавляю номенклатуру "+дан.п3); НовСпр = Справочники.Номенклатура.СоздатьЭлемент(); НовСпр.Наименование = дан.п3; НовСпр.Артикул = дан.п1; НовСпр.ВидНоменклатуры = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товар"); новспр.СтавкаНДС = Перечисления.СтавкиНДС.НДС20; новспр.БазоваяЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоНаименованию("шт"); новспр.Записать(); ед = Справочники.ЕдиницыИзмерения.СоздатьЭлемент(); ед.ЕдиницаПоКлассификатору = новспр.БазоваяЕдиницаИзмерения; ед.Коэффициент = 1; ед.Наименование = дан.п5; ед.Владелец = НовСпр.Ссылка; ед.Записать(); новспр.ЕдиницаДляОтчетов = ед.Ссылка; новспр.ЕдиницаХраненияОстатков = ед.Ссылка; новспр.Записать(); номен = новспр.Ссылка; КонецЕсли; новстр.Номенклатура = номен; новстр.Цена = дан.п16; новстр.ЕдиницаИзмерения = номен.ЕдиницаДляОтчетов; новстр.Сумма = новстр.Количество * новстр.цена; новстр.СтавкаНДС = номен.СтавкаНДС; новстр.СуммаНДС = ?(новстр.СтавкаНДС=Перечисления.СтавкиНДС.НДС20,новстр.Сумма/5,0); ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(новстр, док); ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(новстр, док); док.ЗаполнитьСчетаУчетаВСтрокеТабЧасти(новстр, "Товары", истина, истина); нс = нс + 1; стр = тт.ПолучитьСтроку(нс); дан = ПарсерСтроки(стр); КонецЦикла; нс = нс + 1; стр = тт.ПолучитьСтроку(нс); дан = ПарсерСтроки(стр); Контр = Справочники.Контрагенты.НайтиПоРеквизиту("КодПоЕДРПОУ",дан.п7); нс = нс + 1; Если контр = Справочники.Контрагенты.ПустаяСсылка() тогда Сообщить("Создаю Контрагента "+дан.п2); НовКонтр = Справочники.Контрагенты.СоздатьЭлемент(); НовКонтр.Наименование = дан.п2; НовКонтр.Покупатель = истина; НовКонтр.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо; НовКонтр.КодПоЕДРПОУ = дан.п7; НовКонтр.Записать(); Дог = Справочники.ДоговорыКонтрагентов.СоздатьЭлемент(); дог.Организация = док.Организация; Дог.ВалютаВзаиморасчетов = док.ВалютаДокумента; Дог.ВидДоговора = Перечисления.ВидыДоговоровКонтрагентов.СПокупателем; дог.Владелец = НовКонтр.Ссылка; дог.ВедениеВзаиморасчетов = Перечисления.ВедениеВзаиморасчетовПоДоговорам.ПоДоговоруВЦелом; дог.СхемаНалоговогоУчета = Справочники.СхемыНалоговогоУчетаПоДоговорамКонтрагентов.ПоПервомуСобытию; дог.СхемаНалоговогоУчетаПоТаре = Справочники.СхемыНалоговогоУчетаПоДоговорамКонтрагентов.ПоПервомуСобытию; дог.Наименование = "Новый авто договор"; дог.Записать(); новконтр.ОсновнойДоговорКонтрагента = дог.Ссылка; НовКонтр.Записать(); Контр = НовКонтр.Ссылка; КонецЕсли; Док.Контрагент = Контр; док.ДоговорКонтрагента = Контр.ОсновнойДоговорКонтрагента; //Заполним счета взаиморасчетов и т.д. Док.ЗаполнитьСчетаУчетаВТабЧасти(док.Товары , "Товары" , Истина, истина); СчетаУчета = УправлениеВзаиморасчетами.ПолучитьСчетаРасчетовСКонтрагентом(док.Организация, док.Контрагент, док.ДоговорКонтрагента); док.СчетУчетаРасчетовСКонтрагентом = СчетаУчета.СчетРасчетовПокупателя; док.СчетУчетаРасчетовПоАвансам = СчетаУчета.СчетАвансовПокупателя; док.СчетУчетаРасчетовПоТаре = СчетаУчета.СчетУчетаТарыПокупателя; док.СчетУчетаРасчетовПоТареПоАвансам = СчетаУчета.СчетАвансовПоТареПокупателя; док.СчетУчетаНДС = СчетаУчета.СчетУчетаНДСПродаж; док.СчетУчетаНДСПодтвержденный = СчетаУчета.СчетУчетаНДСПродажПодтвержденный; док.Записать(); Сообщить(док); Иначе прервать; КонецЕсли; КонецЦикла; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 10:45 |
|
||
|
загрузка из txt в 1с 8
|
|||
|---|---|---|---|
|
#18+
Сергей1981, Проверьте значение переменной ДатаДок на момент возникновения ошибки, видимо у неё неверное значение или формат. Проверьте корректно ли парсер работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.08.2011, 11:25 |
|
||
|
|

start [/forum/topic.php?fid=28&tid=1521096]: |
0ms |
get settings: |
5ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
19ms |
get tp. blocked users: |
1ms |
| others: | 203ms |
| total: | 276ms |

| 0 / 0 |
