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

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

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

Выгрузка в Excel Плохой тип переменной

maestro_voln
читатель
офлайн
Дата регистрации: 04.03.2009
Сообщений: 289
Пост №21
 
13.03.2009 09:36

"У меня шапка формируется, и номенклатура выгружается с кодами и с артикулами, только вот с ценами немогу разобраться<br>Вот процедура выгрузки, тут правда много лишнего, потомучто лепил сам из обычной процедуры вгрузки в таблицу<br><br>Процедура Выгрузить()<br> Перем СписокПозиций, СписокТоваров, ТекСтрока;<br> <br> ТекСтрока = 2; <br> <br> СписокТоваров = СоздатьОбъект("СписокЗначений"); <br> СписокПозиций = СоздатьОбъект("СписокЗначений");<br> <br> НаложенФильтрПоТоварам=0;<br> <br> // накладываем множественный фильтр по товарам<br> Если МФНоменклатура.РазмерСписка()<>0 Тогда<br> <br> Для Индекс=1 По МФНоменклатура.РазмерСписка() Цикл<br> Позиция = МФНоменклатура.ПолучитьЗначение(Индекс);<br> <br> НоменкВложенаВДругую=0;<br> Для Индекс2=1 По МФНоменклатура.РазмерСписка() Цикл<br> Если Индекс2<>Индекс Тогда       <br> Позиция2 = МФНоменклатура.ПолучитьЗначение(Индекс2);<br> Если Позиция2.ЭтоГруппа()>0 Тогда<br> Если Позиция.ПринадлежитГруппе(Позиция2)>0 Тогда<br> НоменкВложенаВДругую=1;<br> Прервать;<br> КонецЕсли; <br> КонецЕсли; <br> КонецЕсли; <br> КонецЦикла; <br> <br> Если НоменкВложенаВДругую=1 Тогда<br> Продолжить;<br> КонецЕсли; <br> <br> Если Позиция.ЭтоГруппа()>0 Тогда<br> СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника);<br> СпрПозиций.ИспользоватьРодителя(Позиция.ТекущийЭлемент());<br> СпрПозиций.ВыбратьЭлементы(1);<br> Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл<br> Если СпрПозиций.ЭтоГруппа()=0 Тогда <br> СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());<br> Если Нрег(ВидСправочника) = "прайс_лист" Тогда<br> СписокТоваров.ДобавитьЗначение(СпрПозиций.Товар.ТекущийЭлемент());<br> Иначе<br> СписокТоваров.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());<br> КонецЕсли;                                                 <br> КонецЕсли;<br> КонецЦикла; <br> Иначе<br> СписокПозиций.ДобавитьЗначение(Позиция.ТекущийЭлемент());<br> Если Нрег(ВидСправочника) = "прайс_лист" Тогда<br> СписокТоваров.ДобавитьЗначение(Позиция.Товар.ТекущийЭлемент());<br> Иначе<br> СписокТоваров.ДобавитьЗначение(Позиция.ТекущийЭлемент());<br> КонецЕсли; <br> КонецЕсли;                                                       <br> <br> КонецЦикла; <br> <br> Если СписокПозиций.РазмерСписка()=0 Тогда<br> Предупреждение("Список позиций пуст");<br> Возврат;<br> КонецЕсли; <br> <br> НаложенФильтрПоТоварам=1;<br> КонецЕсли; <br> <br> <br> // не включать отсутствующие<br> Если ТолькоПрисутствующие<>0 Тогда<br> <br> ВремРегистры=СоздатьОбъект("Регистры");<br> Рег=ВремРегистры.ОстаткиТоваров;<br> Если РабочаяДата()<ПолучитьДатуТА() Тогда<br> Рег.ВременныйРасчет();                         <br> Если НаложенФильтрПоТоварам=1 Тогда<br> Рег.УстановитьЗначениеФильтра("Товар",СписокТоваров,2);<br> КонецЕсли; <br> Рег.УстановитьЗначениеФильтра("Фирма",глПустаяФирма);<br> ВремРегистры.РассчитатьРегистрыПО(РабочаяДата());<br> КонецЕсли;<br> <br> Если НаложенФильтрПоТоварам=1 Тогда<br> <br> ЧислоТов = СписокПозиций.РазмерСписка();<br> Для Индекс = 1 По ЧислоТов Цикл<br> <br> НеУдовлетвФильтру=0;<br> Номенк = СписокТоваров.ПолучитьЗначение(ЧислоТов+1-Индекс);<br> <br> // накладываем фильтр по присутствию/отсутствию <br> Если Номенк.ВидТовара<>Перечисление.ВидыТоваров.Товар Тогда<br> НеУдовлетвФильтру=1;<br> Иначе<br> Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(глПустаяФирма,Номенк,,"ОстатокТовара");<br> Если Кол<=0 Тогда<br> НеУдовлетвФильтру=1;<br> КонецЕсли;<br> КонецЕсли;        <br>             <br> Если НеУдовлетвФильтру=1 Тогда                   <br> СписокПозиций.УдалитьЗначение(ЧислоТов+1-Индекс);<br> КонецЕсли;<br> КонецЦикла;<br> <br> Иначе <br> <br> СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника);<br> СпрПозиций.ВыбратьЭлементы();<br> Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл<br> Если СпрПозиций.ЭтоГруппа()=0 Тогда <br> Если Нрег(ВидСправочника) = "прайс_лист" Тогда<br> Номенк = СпрПозиций.Товар.ТекущийЭлемент();<br> Иначе<br> Номенк = СпрПозиций.ТекущийЭлемент();<br> КонецЕсли; <br> <br> Если Номенк.ВидТовара=Перечисление.ВидыТоваров.Товар Тогда<br> Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(глПустаяФирма,Номенк.ТекущийЭлемент(),,"ОстатокТовара");<br> Если Кол>0 Тогда<br>        СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());<br> КонецЕсли; <br> КонецЕсли; <br> КонецЕсли;<br> КонецЦикла; <br> <br> КонецЕсли;<br> <br> Если СписокПозиций.РазмерСписка()=0 Тогда<br> Предупреждение("Список позиций пуст");<br> Возврат;<br> КонецЕсли; <br> <br> НаложенФильтрПоТоварам=1;<br><br> КонецЕсли; <br> <br> Если МФКатНоменклатуры.РазмерСписка() > 0 Тогда<br> <br> ТекстЗапроса = "                   <br> |Обрабатывать НеПомеченныеНаУдаление;<br> |КатегорияПозиции = Справочник.КатегорииТоваров.ТекущийЭлемент;<br> |Товар = Справочник.КатегорииТоваров.Владелец;<br> |КатегорияТов = Справочник.КатегорииТоваров.Категория;             <br> |Группировка Товар Без Групп;<br> |Группировка КатегорияТов Без Групп;<br> |Условие (КатегорияТов В МФКатНоменклатуры);<br> |Условие (Товар В СписокТоваров);";<br> <br> // выполняем запрос<br> Запрос = СоздатьОбъект("Запрос");<br> Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда<br> Возврат;<br> КонецЕсли;<br>              <br> СписокТоваров.УдалитьВсе();<br> ЧислоКатегорийВСписке = МФКатНоменклатуры.РазмерСписка();<br> <br> // выгружаем все отобранные товары в список<br> Запрос.ВНачалоВыборки();<br> Пока Запрос.Группировка("Товар") = 1 Цикл<br> Если Запрос.Товар.Выбран() = 1 Тогда                               <br> Если ТипМФКатНоменклатуры.ТекущаяСтрока() = 2 Тогда<br> // одновременно все категории должны быть в списке МФКатегории<br> <br> ПозицияСправочника = Запрос.Товар.ТекущийЭлемент();<br> <br> // ячитаем число категорий <br> ЧислоКатегорий = 0;<br> Пока Запрос.Группировка("КатегорияТов") = 1 Цикл<br> Если Запрос.КатегорияТов.Выбран() = 1 Тогда                               <br> ЧислоКатегорий = ЧислоКатегорий + 1;<br> КонецЕсли;<br> КонецЦикла;<br> <br> // все категории будут тогда и только тогда, когда число отобранных <br> // категорий будет не меньше размера списка МФКатегории<br> Если ЧислоКатегорий >= ЧислоКатегорийВСписке Тогда<br> СписокТоваров.ДобавитьЗначение(ПозицияСправочника.ТекущийЭлемент());<br> КонецЕсли; <br> Иначе<br> СписокТоваров.ДобавитьЗначение(Запрос.Товар.ТекущийЭлемент());<br> КонецЕсли; <br> КонецЕсли;<br> КонецЦикла;<br> <br> Если НаложенФильтрПоТоварам = 1 Тогда<br> <br> РазмерСпискаПозиций = СписокПозиций.РазмерСписка();<br> Для Индекс = 1 по РазмерСпискаПозиций Цикл<br> Если СписокТоваров.Принадлежит(?(НРег(ВидСправочника) = "прайс_лист",<br> СписокПозиций.ПолучитьЗначение(РазмерСпискаПозиций - Индекс + 1).Товар,<br> СписокПозиций.ПолучитьЗначение(РазмерСпискаПозиций - Индекс + 1))) = 0 Тогда<br> СписокПозиций.УдалитьЗначение(РазмерСпискаПозиций - Индекс + 1);<br> КонецЕсли;<br> КонецЦикла;<br> <br> Иначе<br> <br> СпрПозиций = СоздатьОбъект("Справочник." + ВидСправочника);<br> СпрПозиций.ВыбратьЭлементы();<br> Пока СпрПозиций.ПолучитьЭлемент() = 1 Цикл<br> Если СпрПозиций.ЭтоГруппа() = 0 Тогда <br> Если СписокТоваров.Принадлежит(?(НРег(ВидСправочника) = "прайс_лист",<br> СпрПозиций.ТекущийЭлемент().Товар,<br> СпрПозиций.ТекущийЭлемент())) = 1 Тогда<br> СписокПозиций.ДобавитьЗначение(?(НРег(ВидСправочника) = "прайс_лист", СпрПозиций.ТекущийЭлемент(), СпрПозиций.Товар.ТекущийЭлемент()));<br> КонецЕсли;<br> КонецЕсли;<br> КонецЦикла; <br> <br> КонецЕсли;<br> <br> Если СписокПозиций.РазмерСписка() = 0 Тогда<br> Предупреждение("Список позиций пуст");<br> Возврат;<br> КонецЕсли; <br> <br> КонецЕсли;<br> <br> // теперь отбираем позиции справочника<br> Если Нрег(ВидСправочника) = "прайс_лист" Тогда<br> ТекстЗапроса = "                   <br> |Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"';<br> |Позиция = Справочник.Прайс_лист.ТекущийЭлемент; <br> |Товар = Справочник.Прайс_лист.Товар;<br> |Группировка Позиция Упорядочить По Позиция.Товар.Наименование; <br> |Условие (Позиция В СписокПозиций);<br> |";<br> ИначеЕсли Нрег(ВидСправочника) = "номенклатура" Тогда<br> ТекстЗапроса = "                   <br> |Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"';<br> |Позиция = Справочник.Номенклатура.ТекущийЭлемент; <br> |Товар = Справочник.Номенклатура.ТекущийЭлемент;<br> |Группировка Позиция Упорядочить По Позиция.Наименование; <br> |Условие (Позиция В СписокПозиций);<br> |";<br> КонецЕсли;<br> <br> // выполняем запрос<br> Запрос = СоздатьОбъект("Запрос");<br> Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда<br> Возврат;<br> КонецЕсли;<br>             <br> // Создание Таблицы для выходного отчета<br> //Таб=СоздатьОбъект("Таблица");<br> <br> Ном=0;<br> <br> Если (ЕдиницаПечати.ТекущаяСтрока()<>1)И(ЕдиницаПечати.ТекущаяСтрока()<>2) Тогда<br> ПечатьВФиксЕдиницах = 0;<br> Иначе<br> ПечатьВФиксЕдиницах = 1;<br> КонецЕсли;        <br> <br> Если ВалютаПечати.Выбран()=0 Тогда<br> ПечатьВФиксВалюте = 0;<br> Заг="""";<br> Иначе                    <br> ПечатьВФиксВалюте = 1;<br> Валюта = ВалютаПечати;<br> Заг="Цены указаны в "+СокрЛП(Валюта.Кратко);<br> КонецЕсли; <br> <br> //Таб.ВывестиСекцию("Отчет");<br> //Таб.ВывестиСекцию("Шапка|НазваниеПозиции");<br> Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл<br> ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс);<br> //Таб.ПрисоединитьСекцию("Шапка|Цена");<br> КонецЦикла; <br>        <br> СписокГрупп = СоздатьОбъект("СписокЗначений");<br> <br> Цена = СоздатьОбъект("Справочник.Цены");<br> Цена.ИспользоватьДату(РабочаяДата());<br> <br> Пока Запрос.Группировка("Позиция")>0 Цикл<br> Если Запрос.Позиция.Выбран()=0 Тогда<br> Продолжить;<br> КонецЕсли; <br> <br> глОживить(1);<br> <br> Если Запрос.Позиция.ЭтоГруппа()=1 тогда<br> СписокГрупп.ДобавитьЗначение(Запрос.Позиция.ТекущийЭлемент()); <br> Продолжить;<br> КонецЕсли; <br> <br> Цена.ИспользоватьВладельца(Запрос.Товар.ТекущийЭлемент());<br> <br> Если Нрег(ВидСправочника) = "прайс_лист" Тогда<br> НашлиНенулевуюЦену=0;<br> <br> Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл <br> ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент();<br> Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда<br> Продолжить;<br> КонецЕсли; <br> Если Цена.Цена=0 Тогда<br> Продолжить;<br> КонецЕсли;       <br> НашлиНенулевуюЦену=1;<br> Прервать;<br> КонецЦикла; <br> <br> Если НашлиНенулевуюЦену=0 Тогда<br> Продолжить;<br> КонецЕсли; <br> КонецЕсли; <br> <br> Пока СписокГрупп.РазмерСписка()>0 Цикл<br> Гр = СписокГрупп.ПолучитьЗначение(1);<br> Если Запрос.Позиция.ПринадлежитГруппе(Гр)>0 Тогда<br><br> Страница.Cells(ТекСтрока, 1).Value = "Г";<br> Страница.Cells(ТекСтрока, 2).Value = Гр.Наименование;<br> ТекСтрока = ТекСтрока + 1;<br> <br> КонецЕсли; <br> СписокГрупп.УдалитьЗначение(1);<br> КонецЦикла;<br>                    <br> Если ПечатьВФиксЕдиницах=1 Тогда<br> Если ЕдиницаПечати.ТекущаяСтрока()=1 Тогда <br> Единица = Запрос.Товар.ЕдиницаПоУмолчанию;<br> ИначеЕсли ЕдиницаПечати.ТекущаяСтрока()=2 Тогда <br> Единица = глВернутьБазовуюЕдиницуТовара(Запрос.Товар.ТекущийЭлемент());<br> КонецЕсли; <br> КонецЕсли;<br> <br> Ном=Ном+1; <br> КолРек=МФКатЦены.РазмерСписка();<br> Для Номм=1 По КолРек Цикл<br> Страница.Cells(1,Номм+4).Value=МФКатЦены.ПолучитьЗначение(Номм).Наименование;<br> КонецЦикла;<br> <br> <br> <br> <br> <br> Страница.Cells(ТекСтрока, 1).Value = "Э";                         <br> Страница.Cells(ТекСтрока, 2).Value = СокрЛП(Запрос.Товар.Код);<br> Страница.Cells(ТекСтрока, 4).Value = СокрЛП(Запрос.Товар.ПолнНаименование);<br> Страница.Cells(ТекСтрока, 3).Value = СокрЛП(Запрос.Товар.Артикул);<br> <br> ТекСтрока = ТекСтрока + 1;<br> <br> <br> Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл <br> ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент();<br> Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда<br> // ПечЦена = """"; <br> <br> Иначе<br> <br> Если ПечатьВФиксВалюте=0 Тогда<br> Валюта = Цена.Валюта;<br> КонецЕсли;<br> <br> Если ПечатьВФиксЕдиницах=0 Тогда<br> Единица = Цена.Единица;<br> КонецЕсли; <br> <br> ЧЦена = Цена.Цена;<br> Если Единица<>Цена.Единица Тогда<br> ЧЦена = ?(Цена.Единица.Коэффициент = 0,ЧЦена * Единица.Коэффициент / 1,ЧЦена * Единица.Коэффициент / Цена.Единица.Коэффициент); <br> КонецЕсли; <br> ЧЦена = глПересчет(ЧЦена,Цена.Валюта,РабочаяДата(),Валюта,РабочаяДата());<br> <br> <br> <br>        <br> Для Инд = 1 По МФКатЦены.РазмерСписка() Цикл                   <br> ТипЦены = МФКатЦены.ПолучитьЗначение(Инд).ТекущийЭлемент();<br> Страница.Cells(ТекСтрока-1, Инд+4).Value =?????????????????;<br> КонецЦикла; <br> КонецЕсли; <br> <br>        <br> <br> // Для Номмер=1 По МФКатЦены.РазмерСписка() Цикл<br> <br> // Таб.ПрисоединитьСекцию("Товар|Цена");<br> <br> КонецЦикла; <br> <br> КонецЦикла; <br> <br> <br>// Excel.Workbooks.Close();<br> Excel = 0;<br> <br>КонецПроцедуры<br><br>Процедура ПриОткрытии() <br> <br> ExcelApp = СоздатьОбъект("Excel.Application"); <br> НовыеРабочиеКниги=ExcelApp.WorkBooks; <br> РабочаяКнига =НовыеРабочиеКниги.Add();<br> Страница=РабочаяКнига.Worksheets(1); <br> Страница.Name = "Прайс";       <br> ExcelApp.Visible=1; <br> <br> Страница.Range("A1").Value="№";<br><br> Страница.Range("B1").Value="Карточка";<br><br> Страница.Range("C1").Value="Артикул";<br><br> Страница.Range("D1").Value="Наименование Товара";<br>КонецПроцедуры<br> "

Елена Р.
читатель
офлайн
Дата регистрации: 06.05.2008
Сообщений: 898
Пост №22
 
13.03.2009 10:13

" Для Инд = 1 По МФКатЦены.РазмерСписка() Цикл                   <br> ТипЦены = МФКатЦены.ПолучитьЗначение(Инд).ТекущийЭлемент();<br> Страница.Cells(ТекСтрока-1, Инд+4).Value =?????????????????;<br> КонецЦикла; <br><br>Заменить на<br>Страница.Cells(ТекСтрока-1, Индекс + 4).Value = ЧЦена;<br><br>Вы и так уже находитесь в цикле по МФКатЦены, зачем еще раз в цикле обращаться к типам цен?????<br>"

maestro_voln
читатель
офлайн
Дата регистрации: 04.03.2009
Сообщений: 289
Пост №23
 
13.03.2009 12:54

Спасибо все работает))))<br>Осталось только подточить немножко

maestro_voln
читатель
офлайн
Дата регистрации: 04.03.2009
Сообщений: 289
Пост №24
 
15.03.2009 10:07

Еще вопрос по ходу<br>как мне объеденить диапазон ячеек при выгрузке в ексель?

Елена Р.
читатель
офлайн
Дата регистрации: 06.05.2008
Сообщений: 898
Пост №25
 
17.03.2009 06:48

Можно воспользоваться справкой в Excel по Visual Basic for Application<br>Или проще<br>В Excele есть возможность "записать макрос", нажимаете начать запись, делаете все что хотите. Останавливаете запись. Заходите в получившийся макрос и смотрите все необходимые вам команды<br>

maestro_voln
читатель
офлайн
Дата регистрации: 04.03.2009
Сообщений: 289
Пост №26
 
19.03.2009 17:03

когда в ексель выгружается артикул например 14.1701240 , то получается 14,1701240, т.е точка заменяется запятой<br>как исправить?

BelikovS
читатель
офлайн
Дата регистрации: 05.03.2007
Сообщений: 1701
Пост №27
 
19.03.2009 18:19

Использовать Формат.

maestro_voln
читатель
офлайн
Дата регистрации: 04.03.2009
Сообщений: 289
Пост №28
 
20.03.2009 10:14

интересно какой

BelikovS
читатель
офлайн
Дата регистрации: 05.03.2007
Сообщений: 1701
Пост №29
 
20.03.2009 10:25

Например 1С-ный (все-равно строку загоняете в Excel):<br>Формат(<Значение>, <Форматная строка>) <br><br>В обысном случае если число конвертится в строку, то ставиться запятая (может берется из настроек системы, а может еще где прописано)

aily
читатель
офлайн
Дата регистрации: 07.04.2009
Сообщений: 10
Пост №30
 
07.04.2009 08:52

"Exc.Cells(1, Ном).Value=Число(МФКатЦены.ПолучитьЗначение(Ном)); - Для чисел<br>Exc.Cells(1, Ном).Value=СокрЛП(МФКатЦены.ПолучитьЗначение(Ном)); - Для строк<br><br>Просто ЭКСЕЛЮ нужно явное преобразование типов."

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

Читают тему:

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