Excel+1C
01.10.2008
12:11
#1
"Здравствуйте! Написал обработку по загрузке док-ов из XLS в 1С. но есть некоторые трудности.Код:
Трудность заключается в том,что в док-те 1С не выводятся данные по СубконтоДт3. За раннее благодарен!
"
| Код |
|---|
<br>Перем Лист, Путь, Excel, Файл;<br>//---------------------------------------<br>Процедура ВыборФайла()<br> Каталог = """";<br> Если ФС.ВыбратьФайл(0,ИмяФайла ,Каталог,"Выберите файл","*.xls|*.xls",,) = 1 Тогда<br> ИмяФайла = Каталог + ИмяФайла;<br> КонецЕсли;<br>КонецПроцедуры<br>//-----------------------------------<br>Функция ПроверитьНаДату(ВыбДата)<br> Если ПустоеЗначение(выбДата)=1 Тогда<br> Возврат 1;<br> КонецЕсли;<br> Если ПустоеЗначение(НачДата)=1 Тогда<br> Возврат 1;<br> КонецЕсли;<br> Если ПустоеЗначение(КонДата)=1 Тогда<br> Возврат 1;<br> КонецЕсли;<br> Если чкПериод=0 Тогда<br> Возврат 1;<br> Иначе<br> Если (ВыбДата>=НачДата) И (ВыбДата<=КонДата) Тогда<br> Возврат 1;<br> Иначе<br> Возврат 0;<br> КонецЕсли;<br> КонецЕсли;<br>КонецФункции<br>//------------------------------------<br>Процедура ПриСменечкПериод()<br> Форма.НачДата.Доступность(чкПериод);<br> Форма.КонДата.Доступность(чкПериод);<br> Форма.ВыбПериода.Доступность(чкПериод);<br>КонецПроцедуры<br>//-------------------------<br><br>Процедура Открыть()<br> Если ФС.СуществуетФайл(ИмяФайла)=1 Тогда<br> ЗапуститьПриложение(ИмяФайла);<br> Иначе<br> Предупреждение("Указанный файл " +ИмяФайла+ " не существует!");<br> <br> КонецЕсли;<br>КонецПроцедуры<br>//----------------------------------------------------<br>Процедура Загрузить()<br> Если ТЗ.КоличествоСтрок()>0 Тогда<br> Если Вопрос("Таблица не пуста. Очистить ?",4)=6 Тогда<br> ТЗ.УдалитьСтроки();<br> КонецЕсли;<br> КонецЕсли;<br> Если ФС.СуществуетФайл(ИмяФайла)=1 Тогда<br> ОкноExcel = СоздатьОбъект("Excel.Application");<br> ОкноExcel.Workbooks.Add(ИмяФайла);<br> КолвоОшибок=0;<br> Для Ном=1 По 10000 Цикл<br> Состояние("Обрабатываем строку "+Ном);<br> ВидДок=СокрЛП(ОкноExcel.Cells(Ном,1).Value);<br> Если ПустаяСтрока(ВидДок)=1 Тогда<br> КолвоОшибок=КолвоОшибок+1;<br> Если КолвоОшибок=10 Тогда<br> Прервать;<br> КонецЕсли;<br> Продолжить;<br> Иначе<br> КолвоОшибок=0;<br> КонецЕсли;<br> Если ВидДок<>"Бухсправка" Тогда<br> Продолжить;<br> КонецЕсли;<br> ДДата = Дата(СокрЛП(ОкноExcel.Cells(Ном,3).Value));<br> Если ПроверитьНаДату(ДДата)=0 Тогда<br> Продолжить;<br> КонецЕсли;<br> ТЗ.НоваяСтрока();<br> ТЗ.ФлагВкл=2;<br> ТЗ.ВидДок=ВидДок;<br> ТЗ.Номер=СокрЛП(ОкноExcel.Cells(Ном,2).Value);<br> ТЗ.ДатаДок=ДДата;<br> ТЗ.Содержание=СокрЛП(ОкноExcel.Cells(Ном,4).Value);<br> ТЗ.Основание=СокрЛП(ОкноExcel.Cells(Ном,5).Value);<br> ТЗ.Сумма=Число(СокрЛП(ОкноExcel.Cells(Ном,6).Value));<br> ТЗ.Количество=Число(СокрЛП(ОкноExcel.Cells(Ном,7).Value));<br> //------------------------------------------------------- счет дебета<br> КорСчет = СокрЛП(ОкноExcel.Cells(Ном,8).Value);<br> Если ПустоеЗначение(КорСчет)=0 Тогда<br> Спр=СоздатьОбъект("Счет");<br> Если Спр.НайтиПоКоду(КорСчет)=1 Тогда<br> ТЗ.СчетДт=Спр.ТекущийСчет();<br> // 1е субконто<br> ЗС1=СокрЛП(ОкноExcel.Cells(Ном,9).Value);<br> С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();<br> Если (СокрЛП(С1)<>"""") И (ЗС1<>"""") Тогда<br> Спр=СоздатьОбъект("Справочник."+С1);<br> Если Спр.НайтиПоНаименованию(ЗС1,0,1)=1 Тогда<br> ТЗ.СубконтоДт1=Спр.ТекущийЭлемент();<br> Иначе<br> Сообщить("Не найдено Субконто1 по наименованию "+ЗС1, "!");<br> КонецЕсли;<br> КонецЕсли;<br> // 2е субконто<br> ЗС1=СокрЛП(ОкноExcel.Cells(Ном,10).Value);<br> С1=ТЗ.СчетДт.ВидСубконто(2).Идентификатор();<br> Если (СокрЛП(С1)<>"""") И (ЗС1<>"""") Тогда <br> Спр=СоздатьОбъект("Справочник."+С1);<br> Если Спр.НайтиПоНаименованию(ЗС1,0,1)=1 Тогда<br> ТЗ.СубконтоДт2=Спр.ТекущийЭлемент();<br> Иначе<br> Сообщить("Не найдено Субконто2 по наименованию "+ЗС1, "!");<br> КонецЕсли;<br> КонецЕсли;<br> // 3е субконто<br> ЗС1=СокрЛП(ОкноExcel.Cells(Ном,11).Value);<br> С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();<br> Если (СокрЛП(С1)<>"""") И (ЗС1<>"""") Тогда<br> Если Спр.НайтиПоНаименованию(ЗС1,0,1)=1 Тогда<br> ТЗ.СубконтоДт3=Спр.ТекущийЭлемент(); <br> Иначе<br> Сообщить("Не найдено Субконто3 по наименованию "+ЗС1, "!");<br> КонецЕсли;<br> КонецЕсли;<br> Иначе<br> Сообщить("Не найден счет "+КорСчет, "!");<br> КонецЕсли;<br> //------------------------------------------------------- КРЕДИТ<br> КорСчет = СокрЛП(ОкноExcel.Cells(Ном,12).Value);<br> Если ПустоеЗначение(КорСчет)=0 Тогда<br> Спр=СоздатьОбъект("Счет");<br> Если Спр.НайтиПоКоду(КорСчет)=1 Тогда<br> ТЗ.СчетКт=Спр.ТекущийСчет();<br> // 1е субконто<br> ЗС1=СокрЛП(ОкноExcel.Cells(Ном,13).Value);<br> С1=ТЗ.СчетКт.ВидСубконто(1).Идентификатор();<br> Если (СокрЛП(С1)<>"""") И (ЗС1<>"""") Тогда<br> Спр=СоздатьОбъект("Справочник."+С1);<br> Если Спр.НайтиПоНаименованию(ЗС1,0,1)=1 Тогда<br> ТЗ.СубконтоКт1=Спр.ТекущийЭлемент();<br> Иначе<br> Сообщить("Не найдено Субконто1 по наименованию "+ЗС1, "!");<br> КонецЕсли;<br> КонецЕсли;<br> // 2е субконто<br> ЗС1=СокрЛП(ОкноExcel.Cells(Ном,14).Value);<br> С1=ТЗ.СчетКт.ВидСубконто(2).Идентификатор();<br> Если (СокрЛП(С1)<>"""") И (ЗС1<>"""") Тогда<br> Спр=СоздатьОбъект("Справочник."+С1);<br> Если Спр.НайтиПоНаименованию(ЗС1,0,1)=1 Тогда<br> ТЗ.СубконтоКт2=Спр.ТекущийЭлемент();<br> Иначе<br> Сообщить("Не найдено Субконто2 по наименованию "+ЗС1, "!");<br> КонецЕсли;<br> КонецЕсли;<br> // 3е субконто<br> ЗС1=СокрЛП(ОкноExcel.Cells(Ном,15).Value);<br> С1=ТЗ.СчетКт.ВидСубконто(1).Идентификатор();<br> Если (СокрЛП(С1)<>"""") И (ЗС1<>"""") Тогда <br> Спр=СоздатьОбъект("Справочник."+С1);<br> Если Спр.НайтиПоНаименованию(ЗС1,0,1)=1 Тогда<br> ТЗ.СубконтоКт3=Спр.ТекущийЭлемент();<br> Иначе<br> Сообщить("Не найдено Субконто3 по наименованию "+ЗС1, "!");<br> КонецЕсли;<br> КонецЕсли;<br> Иначе<br> Сообщить("Не найден счет "+КорСчет, "!");<br> КонецЕсли; <br> КонецЕсли;<br> КонецЕсли;<br>КонецЦикла; <br> КонецЕсли;<br> ОкноExcel.Workbooks.Close();<br> ОкноExcel.DisplayAlerts = 0;<br> ОкноExcel.Quit();<br> Предупреждение("Загрузка из файла закончена !" ,10);<br>КонецПроцедуры // СформироватьСправку<br>//-----------------------------------------------<br>Процедура ПриОткрытии()<br> ТЗ.НоваяКолонка("ВидДок","Строка",,,"Вид",5,);<br> ТЗ.НоваяКолонка("ФлагВкл","Число",1,,"""",3,);<br> ТЗ.НоваяКолонка("Номер","Строка",10,,,10,);<br> ТЗ.НоваяКолонка("ДатаДок","Дата",,,"Дата",9,);<br> ТЗ.НоваяКолонка("Сумма","Число",15,2,"Сумма",9,);<br> ТЗ.НоваяКолонка("Количество","Число",10,3,"Кол-во",8,);<br> ТЗ.НоваяКолонка("Основание","Строка",50,,"Осн.",10,);<br> ТЗ.НоваяКолонка("Содержание","Строка",50,,"Сод.проводки",10,);<br> ТЗ.НоваяКолонка("СчетДт",,,,,,);<br> ТЗ.НоваяКолонка("СубконтоДт1",,,,,,);<br> ТЗ.НоваяКолонка("СубконтоДт2",,,,,,);<br> ТЗ.НоваяКолонка("СубконтоДт3",,,,,,);<br> ТЗ.НоваяКолонка("СчетКт",,,,,,);<br> ТЗ.НоваяКолонка("СубконтоКт1",,,,,,);<br> ТЗ.НоваяКолонка("СубконтоКт2",,,,,,);<br> ТЗ.НоваяКолонка("СубконтоКт3",,,,,,);<br> ТЗ.ВыводитьПиктограммы("ФлагВкл");<br> ВидДокумента.ДобавитьЗначение(1,"Бухгалтерская справка");<br> Конфа.ДобавитьЗначение(1, "Бухгалтерия");<br>КонецПРоцедуры<br>//-------------------------------------<br>Процедура КлиКНаТЗ()<br> Если ТЗ.ТекущаяСтрока()>0 Тогда<br> Если ТЗ.ФлагВкл=1 Тогда<br> ТЗ.ФлагВкл=2;<br> Иначе<br> ТЗ.ФлагВкл=1;<br> КонецЕсли;<br> КонецЕсли;<br>КонецПроцедуры //КлиКНаТЗ<br>//-------------------------------------------------------<br>Процедура Создать()<br> Док = СоздатьОбъект("Документ.БухгалтерскаяСправка");<br> Док.Новый(); <br> ТЗ.ВыбратьСтроки(); <br> Пока Тз.ПолучитьСтроку()=1 Цикл<br> Док.НоваяСтрока();<br> Док.Сумма=ТЗ.Сумма;<br> Док.Количество=ТЗ.Количество;<br> Док.Основание=ТЗ.Основание;<br> Док.Содержание=ТЗ.Содержание;<br> Док.СчетДт=ТЗ.СчетДт; <br> Док.СчетКт=ТЗ.СчетКт;<br> Для КК=1 по 3 Цикл<br> Док.НазначитьТип("СубконтоДт"+КК,ТЗ.СчетДт.ВидСубконто(КК)); <br> Док.НазначитьТип("СубконтоКт"+КК,ТЗ.СчетКт.ВидСубконто(КК));<br> КонецЦикла;<br> Док.ЮрЛицо=ТЗ.СубконтоДТ3;<br> Док.СубконтоДт1=ТЗ.СубконтоДТ1;<br> Док.СубконтоДт2=Тз.СубконтоДт2;<br> Док.СубконтоДт3=ТЗ.СубконтоДт3;<br> Док.СубконтоКт1=ТЗ.СубконтоКт1;<br> Док.СубконтоКт2=ТЗ.СубконтоКт2;<br> Док.СубконтоКт3=ТЗ.СубконтоКт3;<br> Док.Записать();<br> КонецЦикла;<br>КонецПроцедуры<br> |
Трудность заключается в том,что в док-те 1С не выводятся данные по СубконтоДт3. За раннее благодарен!
"
01.10.2008
15:38
#2
"// 3е субконто
ЗС1=СокрЛП(ОкноExcel.Cells(Ном,11).Value);
С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();
Исправьте: ТЗ.СчетДт.ВидСубконто(1) на ТЗ.СчетДт.ВидСубконто(3) в процедуре Загрузить()
"
ЗС1=СокрЛП(ОкноExcel.Cells(Ном,11).Value);
С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();
Исправьте: ТЗ.СчетДт.ВидСубконто(1) на ТЗ.СчетДт.ВидСубконто(3) в процедуре Загрузить()
"
02.10.2008
10:52
#4
Вобщем-то все просто - нужно смотреть в отладчике и сразу станет все понятно. Прогнать код в отладчике никто кроме Вас не сможет.
02.10.2008
10:56
#5
Прогонял уже несколько раз,просто обработка не берет данные по СубконтоДт1 и берет данные из док-та и начинает по порядку вносить с СубконтоДт2!
02.10.2008
11:17
#6
"Все таки СубконтоДт1 или СубконтоДт3?
Ставите брекпоинт на строку либо в 1 либо в 3 субконто:
С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();
Чему равно ЗС1?
"
Ставите брекпоинт на строку либо в 1 либо в 3 субконто:
С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();
Чему равно ЗС1?
"
Читают тему
(гостей: 1)