Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[Прочее]

Выгрузка в Excel

Alizar
читатель
офлайн
Дата регистрации: 23.08.2007
Сообщений: 311
Пост №1
 
25.05.2008 19:30

"Проблема в следующем: пытабсь написать обработку для выгрузки табличной части документа ВыплатаЗаработнойПлаты в Excel. В результате выполнения процедуры Сформировать() книга все же открывается, но данные, которые предварительно выгружаются в виртуальную таблицу, не попадают в книгу. Похожую процедуру втавлял в модуль самого документа и там она работала (различие только втом, что в последнем случае выгружалась непосредственно табличная часть документ, а в данной обработке табличные части нескольих документов предварительно выгружаются в одну общую виртульную таблицуа).Вот процедура:<br><br>Процедура Сформировать() <br>ТСотрудников = СоздатьОбъект("ТаблицаЗначений"); <br>ВеменнаяТаблица = СоздатьОбъект("ТаблицаЗначений"); <br>ВыбратьСтроки(); <br>Пока ПолучитьСтроку() = 1 Цикл <br> Ведомость.ВыгрузитьТабличнуюЧасть(ВременнаяТаблица); <br> Если ТСотрудников.КоличествоКолонок() = 0 тогда                   <br> ВременнаяТаблица.Выгрузить(ТСотрудников); <br> Иначе <br> глПереписатьИзТаблицыВТаблицу(ВременнаяТаблица, ТСотрудников); <br> КонецЕсли; <br>КонецЦикла; <br><br>Excel=СоздатьОбъект("Excel.Application"); <br>NewExcel=Excel.Workbooks.Open("c:\реестр.xls"); <br>NewList=NewExcel.Worksheets("Зачисления"); <br><br>СписокСтолбцов=СоздатьОбъект("СписокЗначений"); <br>СписокСтолбцов.ДобавитьЗначение("Номер"); <br>СписокСтолбцов.ДобавитьЗначение("Сумма"); <br>СписокСтолбцов.ДобавитьЗначение("Сотрудник");       <br><br>ЧислоСтрок=ТСотрудников.КоличествоСтрок(); <br>ЧислоВыгруженныхСтрок=Строка(4+ЧислоСтрок); <br>АдресСтроки="R"+ЧислоВыгруженныхСтрок; <br>NewRows=NewList.Range("R5",АдресСтроки).EntireRow.Insert; <br>НомерСтроки="R6"; <br><br>ТСотрудников.ВыбратьСтроки(); <br>Пока ТСотрудников.ПолучитьСтроку()=1 Цикл <br> Сотрудник=ТСотрудников.Сотрудник.Наименование; <br> Сумма=ТСотрудников.Сумма; <br> Для Ст=1 По СписокСтолбцов.РазмерСписка() Цикл <br> Ячейка=NewList.Cells(НомерСтроки+4,Ст);            <br> Если Ст=2 Тогда             <br> Ячейка.Value=Сумма; <br> ИначеЕсли Ст=3 Тогда             <br> Ячейка.Value=Строка(Сотрудник); <br> КонецЕсли; <br> КонецЦикла; <br>КонецЦикла;             <br><br>Well=NewList.Range("R4").EntireRow.Delete; <br>Excel.Visible=1; <br>Excel=0; <br><br>КонецПроцедуры;<br><br>Что не так?"

Thorvardr
читатель
офлайн
Дата регистрации: 25.02.2005
Сообщений: 3082
Пост №2
 
25.05.2008 21:26

"ВеменнаяТаблица = СоздатьОбъект("ТаблицаЗначений");<br>поменять надо на:<br>ВременнаяТаблица = СоздатьОбъект("ТаблицаЗначений"); <br><br>но, это мелочи, я думаю, что просто случайная ошибка, а по делу вот:<br><br>Во первых, понимаю так, что выполнение функции идет в модуле какого то документа, в котором есть реквизит табличной части Ведомость, в типовой конфигурации такого документа нет, ну да ладно, получается, что вы его сделали сами. Поскольку мы работаем в модуле документа, мы не должны использовать предикат НомерСтроки в качестве собственной переменной, так как это имя реквизита, которое является предопределенным и в любом документе с табличной частью при переборе строк в нем мы имеем номер строки, в которой спозиционирован контекст. Итак, рецепт 1: меняем везде в этой процедуре НомерСтроки на НомерСтрочки. И заводим себе правило, никогда не делать переменную с именем НомерСтроки (я вот привык всегда НомерСтрочки использовать). Рецепт 2: видим, что в вашем алгоритме есть строка НомерСтроки="R6", думаем и понимаем, что это совсем неправильно, так как "R6" это вообще адресация ячейки в рабочем листе, но не номер строки. Смотря ниже по алгоритму видим, что переменная используется в конструкции НомерСтроки+4, интересно, что будет результатом сложения "R6"+4? :)) Непонятно что будет. Отсюда делаем вывод, что ваша строчка НомерСтроки="R6" должна на самом деле выглядеть например так: НомерСтрочки=6; Рецепт 3: видим, что перед исполнением цикла идет вставка NewRows=NewList.Range("R5",АдресСтроки).EntireRow.Insert;, видимо для того, чтобы в освободившееся место вставлять сведения. Но! Внутри цикла вы никак не изменяете переменную НомерСтроки, следовательно, все ваши сведения станут писаться исправно в одну и ту же первую строчку вставленной области. Делаем приращение счетчика внутри цикла, то есть НомерСтрочки=НомерСтрочки+1; и вставляем это в <br>Пока ТСотрудников.ПолучитьСтроку()=1 Цикл<br>...<br>Для Ст=1 По СписокСтолбцов.РазмерСписка() Цикл<br>...<br>КонецЦикла;<br>НомерСтрочки=НомерСтрочки+1;<br>КонецЦикла;<br><br>P.S. Пользуйтесь отладчиком, он вам спасет много времени."

Alizar
читатель
офлайн
Дата регистрации: 23.08.2007
Сообщений: 311
Пост №3
 
26.05.2008 19:09

Огромное спасибо!!! Все сраслось.

Ольга_плюс
читатель
офлайн
Дата регистрации: 23.01.2009
Сообщений: 21
Пост №4
 
16.10.2009 11:26

"Доброго времени суток!<br>А мне наоборот надо из Excel загрузить в 1С проводки. Не пойму, где ошибка? В 1С после выбора загружаемого фала выходят только сообщения: "Загрузка проводок" и "Загрузка завершена".<br><br>Перем Каталог, ИмяКат;<br>//******************************************* <br>Процедура ПриНачалеВыбораЗначения(ИдентЭлемДиалога,ФЛ)<br> Если ИдентЭлемДиалога = "ИмяКаталога" Тогда<br> ФЛ = 0;<br> ФС.ВыбратьФайл(0,ИмяКат,,"Выберите загружаемый файл",".xls",".xls");<br> ИмяКаталога = СокрЛП(ФС.ТекКаталог())+"\"+СокрЛП(ИмяКат);<br> КонецЕсли;<br>КонецПроцедуры <br><br>Процедура ПриВводеИмениКаталога()<br> Каталог = СокрЛП(ИмяКаталога);<br>КонецПроцедуры <br><br>Процедура ПриОткрытии()<br> Каталог = ИмяКаталога; <br>КонецПроцедуры<br><br>//*******************************************<br>Процедура Сформировать() <br> Фирмы = СоздатьОбъект("Справочник.Фирмы");<br> Операц = СоздатьОбъект("Операция");<br> Счетик = СоздатьОбъект("Счет");<br> СпрОГС = СоздатьОбъект("Справочник.ОГС");<br> СписФКР = СоздатьОбъект("СписокЗначений");<br> СписФКР.УдалитьВсе();<br> СпрФКР = СоздатьОбъект("Справочник.ФКРУчреждения");<br> спрФКР.ИспользоватьВладельца(Константа.ОсновнаяФирма);<br> СпрФКР.ВыбратьЭлементы();<br> Пока СпрФКР.ПолучитьЭлемент() = 1 Цикл<br> СписФКР.ДобавитьЗначение(СпрФКР.ФКР.ТекущийЭлемент(),СокрЛП(СпрФКР.ФКР.ДляКодаСчета));<br> КонецЦикла;<br> СпрКонтр = СоздатьОбъект("Справочник.Контрагенты");<br> Если СпрКонтр.НайтиПоКоду("0000001122") = 1 Тогда<br> ТекКонтр = СпрКонтр.ТекущийЭлемент();<br> КонецЕсли;<br> СпрЦС = СоздатьОбъект("Справочник.ВидыЦелевыхСредств");<br> Если СпрЦС.НайтиПоКоду("6") = 1 Тогда<br> ТекВидЦС = СпрЦС.ТекущийЭлемент();<br> КонецЕсли;<br> СпрЛС = СоздатьОбъект("Справочник.ЛицевыеСчета");<br> Если СпрЛС.НайтиПоНаименованию("Единый казначейский счет") = 1 Тогда<br> ТекЛС = СпрЛС.ТекущийЭлемент();<br> КонецЕсли;<br> <br> БазаОсн = СоздатьОбъект("Excel.Application"); <br> БазаОсн.Visible = 0;<br> Если ФС.СуществуетФайл(ИмяКаталога) = 0 Тогда<br> Сообщить("Файл "+ИмяКаталога+" не найден");<br> Возврат;<br> КонецЕсли;<br> Книга = БазаОсн.Workbooks.Open(СокрЛП(ИмяКаталога));<br> Лист = Книга.Worksheets(1);//<br> Состояние("Загрузка проводок");<br> Операц.Новая();<br> Операц.Документ.ВыбраннаяФирма = Константа.ОсновнаяФирма; <br> Операц.Содержание = "Ввод проводок по доходам";<br> КолПров = 0;<br> НомерСтроки = 1;<br> ТекБюджет = """";<br> Пока НомерСтроки < 10000 Цикл<br> Если Лев(Лист.cells(НомерСтроки,1).value,1) = "ИТОГО" Тогда<br> Прервать;<br> КонецЕсли;<br> КБК = Лев(СтрЗаменить(Лист.cells(НомерСтроки,17).value,".",""""),17);<br> Если Лев(КБК,3) = "182" Тогда<br> ТекФКР = СписФКР.Получить(КБК);<br> Если ПустоеЗначение(ТекФКР) = 1 Тогда<br> Сообщить("Не найден код КБК "+КБК);<br> НомерСтроки = НомерСтроки + 1;<br> Продолжить;<br> КонецЕсли;<br> КодСчетаД = Сред(СтрЗаменить(Лист.cells(НомерСтроки,17).value,".",""""),19,5);<br> КодСчетаК = Сред(СтрЗаменить(Лист.cells(НомерСтроки,19).value,".",""""),19,5);<br> Если Счетик.НайтиПоКоду(Лев(КодСчетаД,3)+"."+Прав(КодСчетаД,2)+".1") = 0 Тогда<br> Сообщить("Не найден счет "+Лев(КодСчетаД,3)+"."+Прав(КодСчетаД,2)+".1");<br> НомерСтроки = НомерСтроки + 1;<br> Продолжить;<br> КонецЕсли;<br> СчетДебета = Счетик.ТекущийСчет();<br> Если Начисление = 0 Тогда<br> Если Лев(СчетДебета.Код,3) = "205" Тогда<br> НомерСтроки = НомерСтроки + 1;<br> Продолжить;<br> КонецЕсли;<br> Иначе<br> Если Лев(СчетДебета.Код,3) <> "205" Тогда<br> НомерСтроки = НомерСтроки + 1;<br> Продолжить;<br> КонецЕсли;<br> КонецЕсли;<br> Если Счетик.НайтиПоКоду(Лев(КодСчетаК,3)+"."+Прав(КодСчетаК,2)+".1") = 0 Тогда<br> Сообщить("Не найден счет "+Лев(КодСчетаК,3)+"."+Прав(КодСчетаК,2)+".1");<br> НомерСтроки = НомерСтроки + 1;<br> Продолжить;<br> КонецЕсли;<br> СчетКредита = Счетик.ТекущийСчет();<br> ОГСД = Прав(СтрЗаменить(Лист.cells(НомерСтроки,17).value,".",""""),3);<br> ОГСК = Прав(СтрЗаменить(Лист.cells(НомерСтроки,19).value,".",""""),3);<br> Если СпрОГС.НайтиПоКоду(ОГСД) = 0 Тогда<br> Сообщить("Не найден код ОГС "+ОГСД);<br> НомерСтроки = НомерСтроки + 1;<br> Продолжить;<br> КонецЕсли;<br> ОГСДебета = СпрОГС.ТекущийЭлемент();<br> Если СпрОГС.НайтиПоКоду(ОГСК) = 0 Тогда<br> Сообщить("Не найден код ОГС "+ОГСК);<br> НомерСтроки = НомерСтроки + 1;<br> Продолжить;<br> КонецЕсли;<br> ОГСКредита = СпрОГС.ТекущийЭлемент();<br> Сумма = Число(Лист.cells(НомерСтроки,21).value);<br> Если КолПров > 99 Тогда<br> Операц.Записать();<br> Сообщить("Создана операция "+Операц.Документ.НомерДок);<br> Операц.Новая();<br> Операц.Документ.ВыбраннаяФирма = Константа.ОсновнаяФирма; <br> Операц.Содержание = "Ввод проводок по доходам";<br> КолПров = 0;<br> КонецЕсли; <br> Операц.НоваяПроводка(); <br> Операц.Дебет.Счет = СчетДебета;<br> Операц.Дебет.Субконто(1,ТекФКР);<br> Операц.Дебет.Субконто(2,ОГСДебета);<br> Если СчетДебета.КоличествоСубконто() > 2 Тогда<br> Если СчетДебета.ВидСубконто(3) = ВидыСубконто.ЛицевыеСчета Тогда<br> Операц.Дебет.Субконто(3,ТекЛС);<br> КонецЕсли;<br> Если СчетДебета.ВидСубконто(3) = ВидыСубконто.ВидыЦелевыхСредств Тогда<br> Операц.Дебет.Субконто(3,ТекВидЦС);<br> КонецЕсли;<br> Если СчетДебета.ВидСубконто(3) = ВидыСубконто.Контрагенты Тогда<br> Операц.Дебет.Субконто(3,ТекКонтр);<br> КонецЕсли;<br> КонецЕсли;<br> Операц.Кредит.Счет = СчетКредита;<br> Операц.Кредит.Субконто(1,ТекФКР);<br> Операц.Кредит.Субконто(2,ОГСКредита);<br> Если СчетКредита.КоличествоСубконто() > 2 Тогда<br> Если СчетКредита.ВидСубконто(3) = ВидыСубконто.ЛицевыеСчета Тогда<br> Операц.Кредит.Субконто(3,ТекЛС);<br> КонецЕсли;<br> Если СчетКредита.ВидСубконто(3) = ВидыСубконто.ВидыЦелевыхСредств Тогда<br> Операц.Кредит.Субконто(3,ТекВидЦС);<br> КонецЕсли;<br> Если СчетКредита.ВидСубконто(3) = ВидыСубконто.Контрагенты Тогда<br> Операц.Кредит.Субконто(3,ТекКонтр);<br> КонецЕсли;<br> КонецЕсли;<br> Операц.Сумма = Сумма;<br> Операц.НомерЖурнала = глНомерЖурнала(СчетДебета,СчетКредита); <br> Операц.Учреждение = Константа.ОсновнаяФирма;<br> КолПров = КолПров + 1;<br> КонецЕсли;<br> НомерСтроки = НомерСтроки + 1;<br> КонецЦикла;<br> Если Операц.КоличествоПроводок() > 0 Тогда<br> Операц.Записать();<br> Сообщить("Создана операция "+Операц.Документ.НомерДок);<br> КонецЕсли;<br> <br> Книга = БазаОсн.Workbooks.Close();<br> <br> Сообщить("Загрузка завершена");<br>КонецПроцедуры<br><br>P.S.<br>Таблица выглядит в общем:<br>наименование операций:номер документа:дата:номер счета по дебету:номер счета по кредиту:сумма<br><br>Заранее благодарю.<br> <br><br>"

Показывать по 10 20 40 сообщений

Читают тему:

1 гостей
Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация