![]() |
![]() |
![]() |
|
Выгрузка в Excel из Таблицы | ☑ | ||
---|---|---|---|---|
0
Alak92
28.07.16
✎
10:01
|
Добрый день, хотелось бы узнать где не так делаю. Прописал чтобы у меня выводилась таблица с номенклатурой, теперь не могу понять как ее выгрузить.
//Заполнение Таблицы Значений &НаКлиенте Процедура ЗаполнениеФормы(Команда) ЗаполнениеФормыНаСервере (); КонецПроцедуры &НаСервере Процедура ЗаполнениеФормыНаСервере() //Задаем запрос Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИ, | ЦеныНоменклатурыСрезПоследних.Номенклатура.ВидНоменклатуры КАК ВидН, | ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК Код, | ВЫБОР | КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка.Ссылка ЕСТЬ NULL | ТОГДА ЦеныНоменклатурыСрезПоследних.Цена | ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * ЦеныНоменклатурыСрезПоследних.Упаковка.Числитель / ЦеныНоменклатурыСрезПоследних.Упаковка.Знаменатель | КОНЕЦ КАК Цена, | ЦеныНоменклатурыСрезПоследних.Номенклатура.ВидНоменклатуры.ЭтоГруппа КАК ГруппаН, | ТоварыНаСкладах.Номенклатура.Ссылка КАК Номенклатура, | ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС.Ссылка КАК СтавкаНДС, | ЦеныНоменклатурыСрезПоследних.Номенклатура.ТипНоменклатуры.Ссылка КАК ТипН |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних | ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах | ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = ТоварыНаСкладах.Номенклатура.Ссылка |ГДЕ | ЦеныНоменклатурыСрезПоследних.Регистратор.Дата МЕЖДУ &ДатаСКакого И &ДатаПоКакое | И ТоварыНаСкладах.Склад.Ссылка = &Склад"; //Установка параметров для задаемого нами запроса Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("ДатаСКакого", ДатаСКакого); Запрос.УстановитьПараметр("ДатаПоКакое", ДатаПоКакое); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); //Программно создаем таблицу ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номенклатура"); ТЗ.Колонки.Добавить("ЕдиницаИзмерения"); ТЗ.Колонки.Добавить("ВидНоменклатуры"); ТЗ.Колонки.Добавить("Код"); ТЗ.Колонки.Добавить("Цена"); ТЗ.Колонки.Добавить("СтавкаНДС"); ТЗ.Колонки.Добавить("ТипНоменклатуры"); //Задаем таблице значения по запросу Пока Выборка.Следующий() Цикл НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.ЕдиницаИзмерения = Выборка.ЕдиницаИ; НоваяСтрока.Номенклатура = Выборка.Номенклатура; НоваяСтрока.ВидНоменклатуры = Выборка.ВидН; НоваяСтрока.Код = Выборка.Код; НоваяСтрока.Цена = Выборка.Цена; НоваяСтрока.СтавкаНДС = Выборка.СтавкаНДС; НоваяСтрока.ТипНоменклатуры = Выборка.ТипН; КонецЦикла; ТаблицаЗначений.Загрузить(ТЗ); КонецПроцедуры // Выгрузка в Exсel &НаКлиенте Процедура ВыгрузкаВЕксель (Команда) ВыгрузкаФормыВЕксель(ТаблицаЗначений); КонецПроцедуры &НаСервере Процедура ВыгрузкаФормыВЕксель(ТаблицаЗначений) ТЗ = ТаблицаЗначений; Попытка Эксель = Новый COMОбъект ("Excel.Application"); Исключение Сообщить (ОписаниеОшибки()); Возврат; КонецПопытки; Книга = Эксель.WorkBooks.Add(); Лист = Книга.WorkSheets (1); i = 1; Для Каждого Стр из ТЗ Цикл Лист.Cells (i,1).Value = Стр.Номенклатура; Лист.Cells (i,2).Value = Стр.Код; Лист.Cells (i,4).Value = Стр.ВидНоменклатуры; Лист.Cells (i,7).Value = Стр.ЕдиницаИзмерения; Лист.Cells (i,16).Value = Стр.ТипНоменклатуры; Лист.Cells (i,17).Value = Стр.Цена; Лист.Cells (i,18).Value = Стр.СтавкаНДС; КонецЦикла; Попытка Книга.SaveAs ("C:\Номенклатура.xls"); Исключение Сообщить (ОписаниеОшибки()+"Файл не сохранён!"); КонецПопытки; Эксель.Application.Quit(); КонецПроцедуры |
|||
1
Alak92
28.07.16
✎
10:30
|
Все это делалось в 1с УТ 11.2 там управляемые формы.
|
|||
2
Ёпрст
гуру
28.07.16
✎
10:34
|
проще было бы табличный документ записать в xls, чем пользовать Excel.Application
|
|||
3
b_ru
28.07.16
✎
10:36
|
Она у тебя и выгружается. На диск C: как ты и хотел.
|
|||
4
Alak92
28.07.16
✎
10:38
|
Да, выгружается. только пустой файл выгружается
|
|||
5
lodger
28.07.16
✎
10:39
|
голосую за (2). сделайте табдок, набейте данными и выполняйте записать("имяфайла", ТипФайлаТабличногоДокумента.XLSX)
|
|||
6
b_ru
28.07.16
✎
10:40
|
(4) i = i + 1;
не забыл часом? |
|||
7
Alak92
28.07.16
✎
10:48
|
&НаКлиенте
Процедура ВыгрузкаВЭксель (Команда) ВыгрузкаФормыВЭксель(ТаблицаЗначений); КонецПроцедуры &НаСервере Процедура ВыгрузкаФормыВЭксель(ТаблицаЗначений) ТД = Новый ТабличныйДокумент; КолонокВсего = ТаблицаЗначений.Колонки.Количество(); Для Колонка = 1 По КолонокВсего Цикл ТД.Область(1, Колонка).Текст = ТаблицаЗначений.Колонки[Колонка - 1].Заголовок; КонецЦикла; Строка = 1; Для Каждого ТаблицаСтрока Из ТаблицаЗначений Цикл Строка = Строка + 1; Для Колонка = 1 По КолонокВсего Цикл ТД.Область(Строка, Колонка).Текст = ТаблицаСтрока.Получить(Колонка - 1); КонецЦикла; КонецЦикла; ТД.Записать("Номенклатура", ТипФайлаТабличногоДокумента.XLS); КонецПроцедуры Так должно быть в ТД. (6) точно про него и забыл. |
|||
8
Alak92
28.07.16
✎
10:50
|
Просто не опытный, впервые вообще сталкиваюсь с понятием написать свой код и сделать обработку.
|
|||
9
Nuobu
28.07.16
✎
10:50
|
(7) Смотри, как за шесть постов гуглить научился!
|
|||
10
b_ru
28.07.16
✎
10:55
|
(7) А зачем тебе промежуточная таблица значений? Обычно сразу же в табличный документ данные сгружают
И для табличного документа можно использовать макет. Погугли как вообще в 1С делают отчеты (без СКД в твоем случае думаю будет проще). Например знаменитый 1Совский курс "введение в конфигурирование" |
|||
11
Alak92
28.07.16
✎
10:55
|
Гугл за меня код не напишет и результата не даст. К сожалению через ТД не выходит, ошибку выдает "Поле объекта не обнаружено (Колонки)"
|
|||
12
Nuobu
28.07.16
✎
10:57
|
(11) Код-то ты с гугла скопировал? А?
Где ты взял переменную "ТаблицаЗначений" из &НаКлиенте Процедура ВыгрузкаВЕксель (Команда) ВыгрузкаФормыВЕксель(ТаблицаЗначений); КонецПроцедуры ?? Она на сервере хранится? |
|||
13
Alak92
28.07.16
✎
10:58
|
Напрямую это конечно проще и быстрее, но надо чтобы была промежуточная таблица.
Код частично из Гугла. Переменная Находится выше. и Конец процедуры есть, просто не скопировался. |
|||
14
Alak92
28.07.16
✎
10:59
|
//Заполнение Таблицы Значений
&НаКлиенте Процедура ЗаполнениеФормы(Команда) ЗаполнениеФормыНаСервере (); КонецПроцедуры &НаСервере Процедура ЗаполнениеФормыНаСервере() //Задаем запрос Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЦеныНоменклатурыСрезПоследних.Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИ, | ЦеныНоменклатурыСрезПоследних.Номенклатура.ВидНоменклатуры КАК ВидН, | ЦеныНоменклатурыСрезПоследних.Номенклатура.Код КАК Код, | ВЫБОР | КОГДА ЦеныНоменклатурыСрезПоследних.Упаковка.Ссылка ЕСТЬ NULL | ТОГДА ЦеныНоменклатурыСрезПоследних.Цена | ИНАЧЕ ЦеныНоменклатурыСрезПоследних.Цена * ЦеныНоменклатурыСрезПоследних.Упаковка.Числитель / ЦеныНоменклатурыСрезПоследних.Упаковка.Знаменатель | КОНЕЦ КАК Цена, | ЦеныНоменклатурыСрезПоследних.Номенклатура.ВидНоменклатуры.ЭтоГруппа КАК ГруппаН, | ТоварыНаСкладах.Номенклатура.Ссылка КАК Номенклатура, | ЦеныНоменклатурыСрезПоследних.Номенклатура.СтавкаНДС.Ссылка КАК СтавкаНДС, | ЦеныНоменклатурыСрезПоследних.Номенклатура.ТипНоменклатуры.Ссылка КАК ТипН |ИЗ | РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних | ПОЛНОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах | ПО ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка = ТоварыНаСкладах.Номенклатура.Ссылка |ГДЕ | ЦеныНоменклатурыСрезПоследних.Регистратор.Дата МЕЖДУ &ДатаСКакого И &ДатаПоКакое | И ТоварыНаСкладах.Склад.Ссылка = &Склад"; //Установка параметров для задаемого нами запроса Запрос.УстановитьПараметр("Склад", Склад); Запрос.УстановитьПараметр("ДатаСКакого", ДатаСКакого); Запрос.УстановитьПараметр("ДатаПоКакое", ДатаПоКакое); РезультатЗапроса = Запрос.Выполнить(); Выборка = РезультатЗапроса.Выбрать(); //Программно создаем таблицу ТЗ = Новый ТаблицаЗначений; ТЗ.Колонки.Добавить("Номенклатура"); ТЗ.Колонки.Добавить("ЕдиницаИзмерения"); ТЗ.Колонки.Добавить("ВидНоменклатуры"); ТЗ.Колонки.Добавить("Код"); ТЗ.Колонки.Добавить("Цена"); ТЗ.Колонки.Добавить("СтавкаНДС"); ТЗ.Колонки.Добавить("ТипНоменклатуры"); //Задаем таблице значения по запросу Пока Выборка.Следующий() Цикл НоваяСтрока = ТЗ.Добавить(); НоваяСтрока.ЕдиницаИзмерения = Выборка.ЕдиницаИ; НоваяСтрока.Номенклатура = Выборка.Номенклатура; НоваяСтрока.ВидНоменклатуры = Выборка.ВидН; НоваяСтрока.Код = Выборка.Код; НоваяСтрока.Цена = Выборка.Цена; НоваяСтрока.СтавкаНДС = Выборка.СтавкаНДС; НоваяСтрока.ТипНоменклатуры = Выборка.ТипН; КонецЦикла; ТаблицаЗначений.Загрузить(ТЗ); КонецПроцедуры // Выгрузка в Exсel &НаКлиенте Процедура ВыгрузкаВЭксель (Команда) ВыгрузкаФормыВЭксель(ТаблицаЗначений); КонецПроцедуры &НаСервере Процедура ВыгрузкаФормыВЭксель(ТаблицаЗначений) ТД = Новый ТабличныйДокумент; КолонокВсего = ТаблицаЗначений.Колонки.Количество(); Для Колонка = 1 По КолонокВсего Цикл ТД.Область(1, Колонка).Текст = ТаблицаЗначений.Колонки[Колонка - 1].Заголовок; КонецЦикла; Строка = 1; Для Каждого ТаблицаСтрока Из ТаблицаЗначений Цикл Строка = Строка + 1; Для Колонка = 1 По КолонокВсего Цикл ТД.Область(Строка, Колонка).Текст = ТаблицаСтрока.Получить(Колонка - 1); КонецЦикла; КонецЦикла; ТД.Записать("Номенклатура", ТипФайлаТабличногоДокумента.XLS); КонецПроцедуры |
|||
15
Nuobu
28.07.16
✎
11:00
|
(14) Покажи строчку, где эта переменная появляется в первый раз в программе. Скорее всего строчка будет такой:
&НаСервере Перем ТаблицаЗначений; Вот покажи, пожалуйста, эту строчку. |
|||
16
Alak92
28.07.16
✎
11:05
|
(15) Такой строки нету. У меня и возникли с ошибками в коде. Как мне обратиться к созданной таблице с данными ? Подскажите пожалуйста. Прощу прощения за не грамотность моего написания кода.
|
|||
17
Nuobu
28.07.16
✎
11:21
|
(16) Тогда покажи, откуда в функции
&НаКлиенте Процедура ВыгрузкаВЕксель (Команда) ВыгрузкаФормыВЕксель(ТаблицаЗначений); КонецПроцедуры взялась "ТаблицаЗначений"? |
|||
18
Alak92
28.07.16
✎
11:25
|
(17) Хотел таким образом из предыдущей Процедуры, якобы вытащить данные по Таблице которую создал.
|
|||
19
Nuobu
28.07.16
✎
11:34
|
(18) Её нужно где-то хранить. Она хранится на форме?
|
|||
20
Alak92
28.07.16
✎
11:35
|
(19) Да хранится в форме как реквизит под одноименным типом
|
|||
21
Nuobu
28.07.16
✎
11:38
|
(20) Тогда должно работать. Какую ошибку выдаёт?
|
|||
22
b_ru
28.07.16
✎
11:48
|
В реквизит формы нельзя упихать таблицу значений.
А табличный документ можно |
|||
23
Alak92
28.07.16
✎
11:52
|
(21) КолонокВсего = ТаблицаЗначений.Колонки.Количество(); ссылается на это. То что колонок нету. Он их не может вытянуть из прошлой процедуры. Как мне вытянуть ?
|
|||
24
Alak92
28.07.16
✎
11:57
|
(22) то есть ? можно по конкретнее
|
|||
25
Alak92
28.07.16
✎
12:38
|
Тема все еще актуально
|
|||
26
Alak92
28.07.16
✎
12:39
|
Блин, 7 день в коде этом и уже окончания начал писать иначе )
|
|||
27
VladZ
28.07.16
✎
12:46
|
(0) А ты вообще кто? Прог? Админ? Или "мимо проходил, попросили помочь"?
|
|||
28
Alak92
28.07.16
✎
13:01
|
(27) Вообще для себя
|
|||
29
Alak92
29.07.16
✎
07:11
|
Нашел проблему. Дело в том что переменная не вызывалась, так как находилась в процедуре. Весь код из процедуры скопировал в функцию и сделал возврат переменной. Все заработало. Спасибо всем.
|
|||
30
Горогуля
29.07.16
✎
07:13
|
а что такое вызов переменной?
|
|||
31
Alak92
29.07.16
✎
07:17
|
(30) Из процедуры "ЗаполнениеФормыНаСервере" не мог вызвать уже переменную с значениями, переменная была "ТаблицаЗначений". Не мог вызвать ее так как Процедура закрытая команда, в отличие от функции.
|
|||
32
Горогуля
29.07.16
✎
07:19
|
вот опять какие-то переменные вызываются. это как вообще?
|
|||
33
Горогуля
29.07.16
✎
07:20
|
и что такое закрытая команда? мы сейчас по-русским разговариваем?
|
|||
34
Alak92
29.07.16
✎
07:26
|
(33) По русски. По крайне мере в моем понимании о том как всю картину вижу. В переменную сохраняются значения, и эти значения мне нужно было выгрузить в Excel.
|
|||
35
Alak92
29.07.16
✎
07:29
|
(32) И к чему эти сарказмические вопросы ? Если видишь что не верно сказал или растолковал не верно, скажи об этом, а не выуживай.
|
|||
36
Горогуля
29.07.16
✎
07:30
|
(35) скучно, развлекаюсь как могу. а выуживать прекращу, как только узнаю, что это такое. что это такое?
|
|||
37
Alak92
29.07.16
✎
07:33
|
(36) Купи Слона
|
|||
38
Мимохожий Однако
29.07.16
✎
07:51
|
ОФФ: "Новенькие такие обидчивые"©
|
|||
39
Горогуля
29.07.16
✎
07:54
|
>сарказмические
тут одно из двух. или саркастические или саркосмические |
|||
40
Alak92
29.07.16
✎
08:00
|
(38) (39) Обижаться не на что, то что вы чешите своё самолюбие от меня не убудет.
|
|||
41
Горогуля
29.07.16
✎
08:02
|
тешим, а не чешем
|
|||
42
Alak92
29.07.16
✎
08:03
|
(41) нет, именно чешите. Не буду говорить именно где
|
|||
43
Горогуля
29.07.16
✎
08:05
|
однако, придётся повториться
— Легкоступов,… ты знаешь, какая у тебя фамилия? Легкоступов, то есть, лёгкий, можно сказать, воздушный… Ты чё написал?! Тельняшка через букву «и», шинель через букву «е», ботинки вообще!.. Ты чего, Легкоступов?! Ты слушай меня, Легкоступов. В русском языке есть слова, их там много. Когда их составляешь вместе, получается предложение, где есть сказуемое, подлежащее и прочая светотень. И всё это – великий русский язык, Легкоступов. Ты меня понял?! — Так точно, товарищ командир! — Так вот, у нас великий русский язык! В нём переставь местоимение, сказуемое и подлежащее, и появится интонация!: «Наша Маша горько плачет.», или «Плачет наша Маша горько». Ты понимаешь?!, это ж поэзия!, это ж былины, мамкина норка!!.. А есть вообще предложения в одно слово: «Моросит», «Вечереет», «Смеркается»… Ты чувствуешь? — Так точно, товарищ командир! — Ни хрена ты не чувствуешь! Когда я читаю, что ты написал, я чешусь в самых нескромных местах! Тут же член можно сломать пока до конца абзаца доберёшься ! Кто тебя учил? — В школе. — Покажи мне, и я разорву его, как тузик грелку. — Я же говорю – в школе. — А я что, за границей, что ли учился, Легкоступов?! — Если б мне в школе так!.. доходчиво!.. Я б… — Вольно… (с) 72 метра |
|||
44
Alak92
29.07.16
✎
08:14
|
(43) О, да. Люблю таких людей. Вас хлебом не корми, чтобы попытаться показать себя умнее, чем любой другой человек на форуме. Вам стоит время тратить более продуктивно, и да знаю что Вы уже скажите про мое время. Удачи
|
|||
45
hhhh
29.07.16
✎
08:23
|
(44) ну то есть ты хочешь сказать, что если ты выложил полнейший бред, за который руки надо обрубать по самые локти, то тебя за это надо здесь сильно уважать? И не малейшего сарказма?
|
|||
46
Alak92
29.07.16
✎
08:32
|
(45) а я просил об этом ? Если почитать выше, было написано что, - "Впервые пишу, неделю за кодом и мало что понимаю, прощу помощи". Сначала прочтите все пожалуйста, потом делайте выводы.
|
|||
47
Горогуля
29.07.16
✎
08:33
|
ладно, непрограммист взялся за чужую работу. но хотя б по-русски при этом можно разговаривать?
|
|||
48
Alak92
29.07.16
✎
08:35
|
(47) это не чужая работа. Всего лишь учусь, все писалось благодаря интернету.
|
|||
49
Горогуля
29.07.16
✎
08:36
|
(48) это чужая работа, ты не программист
|
|||
50
Alak92
29.07.16
✎
08:37
|
(49) За меня это никто не писал. Так или иначе.
|
|||
51
Alak92
29.07.16
✎
08:53
|
(45) По крайней мере, буду знать что криво написано. Буду учиться и уделять время этому больше. Критика, она всегда нужна. Спасибо. И тебе Горогуля, русский действительно надо лучше знать, прощу прощения.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |