Excel+1C

Новая тема
"Здравствуйте! Написал обработку по загрузке док-ов из XLS в 1С. но есть некоторые трудности.Код:
Код
<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. За раннее благодарен!






"
"// 3е субконто
ЗС1=СокрЛП(ОкноExcel.Cells(Ном,11).Value);
С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();

Исправьте: ТЗ.СчетДт.ВидСубконто(1) на ТЗ.СчетДт.ВидСубконто(3) в процедуре Загрузить()

"
Исправил,не помогает!
Вобщем-то все просто - нужно смотреть в отладчике и сразу станет все понятно. Прогнать код  в отладчике никто кроме Вас не сможет.
Прогонял уже несколько раз,просто обработка не берет данные по СубконтоДт1 и берет данные из док-та и начинает по порядку вносить с СубконтоДт2!
"Все таки СубконтоДт1 или  СубконтоДт3?
Ставите брекпоинт на строку либо в 1 либо в 3 субконто:
С1=ТЗ.СчетДт.ВидСубконто(1).Идентификатор();

Чему равно ЗС1?
"
"// 1е субконто
ЗС1=СокрЛП(ОкноExcel.Cells(Ном,9).Value);
ЗС1= пустая строка!"
Если ставлю брекпоинт на 3-е СубконтоДт3
то ЗС1="Расходы на оргтехнику",а должны быть другие данные,как в таблице екселя!
Так все проблему с Субконто решил,теперь хочу исправить еще одну проблему также значения СубконтоДт3 должен получать ЮрЛицо,которое выбирается из справчоника СвоиЮрЛица! в обработке все указано,но не получается,не судите строго,я новичок и только познаю азы 1С
Читают тему
(гостей: 1)

Быстрый переход