|
v7: Сформировать программно отчет и сохранить его в excel | ☑ | ||
---|---|---|---|---|
0
Akasyra
14.12.14
✎
18:19
|
Добрый вечер, уважаемые форумчане. Может у кого-то есть пример как программно сформировать отчет(продажи по контрагенту) и сохранить в формате *.xls на диск.
Вообще цель такая: из сильно переписанной торговли и склада выгрузить контрагентов со справочником доп реквизитов в упп 1.3, а также прихватить вышеуказанные отчеты в виде прикрепленных файлов. Решение представляю себе так: 1) выгрузка контрагента, получение запросом данных из справочника с доп реквизитами, и заполнение остальных реквизитов в карточке контрагента, программное формирование запроса и вывод егов файл на диске, передача адреса файла в структуре, при загрузке прикрепление файла к карточке контрагента. Я не программировала в 1с 77, но придется осваивать, видимо. Может у кого-то етсь опыт подобных операций, а может и реализованный код (с надеждой...), поделитесь, а?) |
|||
1
tixis
14.12.14
✎
18:35
|
Открываешь отчет
ОткрытьФорму("Отчет", "Пользователь", КаталогИБ() + "ExtForms\ТвойОтчет.ert"); Сохраняешь Таб.Запсать(); |
|||
2
tixis
14.12.14
✎
18:36
|
(1) не "пользователь", а конеткст
|
|||
3
tixis
14.12.14
✎
18:37
|
Вот для встроенного отчета
ОткрытьФорму(<?>,) Синтаксис: ОткрытьФорму(<ОписательОбъекта>,<КонтекстФормы>) Назначение: Открывает визуальную форму отчета. Возвращает: 1 - если действие выполнено, 0 - иначе. Параметры: <ОписательОбъекта> - строковое выражение. ''Отчет.ХХХХХ'' , где ХХХХХ - вид отчета; <КонтекстФормы> - имя переменной, куда можно задать значение любого типа для передачи в открываемую форму. Данное значение будет доступно в открытой форме как атрибут Форма.Параметр. После исполнения данного метода система вернет в данную переменную контекст открытой формы (необязателен). Замечание: Пока форма открыта, тип значения параметра <КонтекстФормы> равен 100, когда закрыта - 0. |
|||
4
Akasyra
14.12.14
✎
18:38
|
Там все будет при выгрузке данных выполняться, как форму-то открывать? хмм.. То есть мне на до в контекст передавать 0?
|
|||
5
Akasyra
14.12.14
✎
18:41
|
А как на диск сохранить в формате *.xls?
|
|||
6
фобка
14.12.14
✎
18:41
|
Записать()
|
|||
7
Garykom
гуру
14.12.14
✎
18:41
|
(0) нанять специалиста?
задача разовая (судя по "программно" нет) или нет? если постоянно нужно данные перегружать то ole в помощь, или даже если нужно "очень быстро" прямые запросы |
|||
8
mehfk
14.12.14
✎
18:48
|
(0) Вариант для программиста, который не хочет писать код:
1. Справочник контрагентов перенести с помощью обработок печать справочника.ert и загрузка данных из табличного документа.epf 2. Отчеты переносятся руками с помощью пользователей. Как только пользователю понадобился такой отчет, а его еще нет - он заходит в 7-ку, формирует. Потом в 8-ке прикрепляет. |
|||
9
Akasyra
14.12.14
✎
18:56
|
(8)Пользователи фрустрируют, им надо около 2к контрагентов перенести за неделю с отчетами. Перегрузить контрагентов было просто и через кд, но надо выдернуть из справочника с доп реквизитам дополнительные сведения, а также им нужны события с эти контрагентом связанные.
(7) Я специалист, просто интересуюсь возможно у кого-то есть готовый вариант, переделать готовое часто проще чем написать заново. Задача разовая поэтому КД. |
|||
10
Garykom
гуру
14.12.14
✎
19:06
|
(9) перенести все и потом (после пометки пользователями на удаление ненужных контрагентов) удалить ненужное?
|
|||
11
Akasyra
14.12.14
✎
19:48
|
(10) Вопрос не в том что переносить что оставлять а в том есть у кого обработка которая формирует в 1с 77 отчет программно и сохраняет на диск в xls или нет.
|
|||
12
Chameleon1980
14.12.14
✎
19:53
|
что обработка формировать должна?
|
|||
13
Chameleon1980
14.12.14
✎
19:53
|
а то я до конца мысль не могу уловить.
смешались люди, кони. |
|||
14
Chameleon1980
14.12.14
✎
19:56
|
я вот счас еще раз топик прочитаал и еще больше не понял.
ниже же пишущие люди по-ходу тоже ничего не поняли и начали предлагать все - кто как понял чуть-чуть. Какую конкретно инфу вам в отчете из 7.7 нужно видеть? Давайте конкретно по столбцам чтоль? |
|||
15
ДенисЧ
14.12.14
✎
19:57
|
(9) "Я специалист"
Черепашка... А не специалист |
|||
16
Akasyra
14.12.14
✎
20:08
|
(14) Группировка Покупатель \ Дата\ Номенклатура. Столбец количество\ дата. Что было отгружено данному покупателю в такую-то дату.
|
|||
17
Akasyra
14.12.14
✎
20:09
|
(15) Чего обзываешься? Научи как стать птицей?
|
|||
18
Garykom
гуру
14.12.14
✎
20:13
|
(11)(16) такую обработку по выгрузке и сохранению в эксель писать быстрее чем потратили на поиск, примерно 20 минут нужно
(17) наверно надо спрашивать как сделать/написать/запрограммировать такое, а не "где взять обработку" - и тогда можно научиться летать самому вместо обстругивания чужих крыльев |
|||
19
Chameleon1980
14.12.14
✎
20:20
|
А теперь внимание!!!
А какая конфигурация? |
|||
20
Garykom
гуру
14.12.14
✎
20:21
|
(19) тут же телепаты сплошные на форуме? разве не догадался что "сильно переписанной торговли и склада"
|
|||
21
Chameleon1980
14.12.14
✎
20:23
|
т.е. покупатели у нас повторяются
раз по датам расписывать ? Правильно понимаю? А еще они по номенклатуре, а не только по датам |
|||
22
Akasyra
14.12.14
✎
20:28
|
(20) Торговля+Склад, редакция 9.2 сильно переписанная
(18) На семерке не писала. Не знаю как. (21) Выгрузка контрагента: выгружаются данные, потом отрабатывает алгоритм, который формирует программно отчет (группировка:Дата, номенклатура, столбец количество) сохраняется в эксель и возвращает в структуру исходящих параметров адрес файла. |
|||
23
Chameleon1980
14.12.14
✎
20:29
|
(20) не ну я не задумываясь про то, что тс не упомянул конфу сначала,почему-то тоже про ТиС подумал. А потом стоп, думаю, а вдруг не
|
|||
24
Akasyra
14.12.14
✎
20:29
|
Извиняюсь за не последовательность изложения задачи.
|
|||
25
Chameleon1980
14.12.14
✎
20:30
|
а это где в 7.7
и возвращает в структуру исходящих параметров адрес файла |
|||
26
Garykom
гуру
14.12.14
✎
20:32
|
Дык моя бы сделать кнопочку в УПП, по нажатию на которую открывается формочке где списочек контрагентов (и дата или еще что там нуна) из ТиС, при тыке на контрагента видна номенклатура и прочее, можно поставить галочки у контрагентов и есть кнопочка "Загрузить", по нажатию на которую происходит загрузка данных в УПП
|
|||
27
Chameleon1980
14.12.14
✎
20:33
|
в ТиС есть регистр "Продажи" в котором вся нужная инфа есть
в тис есть конструктор запроса и конструктор макета. правда я его (конструктор макета и никогда не использовал, но для решения вами вашей задачи вам быстрее будет с ним). пробуйте, а там конкретно спрашивайте что не получается |
|||
28
Akasyra
14.12.14
✎
20:33
|
(26) Базу со старыми контрагентами сокро должны будут стереть со старого сервака. УПП не дописанная и дописывать нельзя.
|
|||
29
Garykom
гуру
14.12.14
✎
20:33
|
(26)+ а каким образом происходит выгрузка из ТиС неважно
и нафига тут вообще нужен Ёксель не понял... |
|||
30
Akasyra
14.12.14
✎
20:34
|
лан буду пробовать... *Пошла учиться программировать в 1с 77
|
|||
31
Garykom
гуру
14.12.14
✎
20:34
|
(28) точно не крашеная? про внешние отчеты и обработки не в курсе?
|
|||
32
Akasyra
14.12.14
✎
20:37
|
(31) Не поняла вопрос: внешние отчеты и обработки знаю, но если нет базы источника (смотри 28) как можно получить какие-то данные?
|
|||
33
Garykom
гуру
14.12.14
✎
20:41
|
(32) моя тоже не понимать, если нет базы источника то откуда мы выгружаем?
ЗЫ типа из базы перенести в файлики екселя, потому что базу скоро грохнут это конечно гениально |
|||
34
Chameleon1980
14.12.14
✎
20:42
|
А стандартные отчеты если покрутить не катят?
Например отчет по продажам покупатель, товар, дата, количество - все там видим |
|||
35
Chameleon1980
14.12.14
✎
20:46
|
Процедура Продажи()
Перем Запрос, ТекстЗапроса; ДатаНачала='01.01.2001'; ДатаКонца=ПолучитьДатуТА(); //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Продажи) |Период с ДатаНачала по ДатаКонца; |Покупатель = Регистр.Продажи.Покупатель; |Номенклатура = Регистр.Продажи.Номенклатура; |Количество = Регистр.Продажи.Количество; |Функция КоличествоСумма = Сумма(Количество); |Группировка Покупатель; |Группировка День; |Группировка Номенклатура упорядочить по Номенклатура.Наименование; |"//}}ЗАПРОС ; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ТЗ=СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТЗ); ТЗ.ВыбратьСтроку(); Возврат; // Подготовка к заполнению выходных форм данными запроса // Заполнение полей "Заголовок" Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Покупатель Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей День Пока Запрос.Группировка(3) = 1 Цикл // Заполнение полей Номенклатура КонецЦикла; КонецЦикла; КонецЦикла; // Заполнение полей "Итого" // Вывод заполненной формы КонецПроцедуры |
|||
36
Akasyra
14.12.14
✎
20:49
|
(34) стандартные отчеты и хотим покрутить.
(33) в той базе другая организация была но менеджерам мегаважно сохранить наработанную инфу, при внедрении руководство сказало что ничего переносить не будем. Сейчас половина той базы уже перекочевала в новую, но в старой базе инн не вели и присоединить инфу нереально. Попросили на тестовую УПП 1.3 перенести контрагентов, события, а также прикрепленные файлы с отчетами по продажам. Есть идеи как реализовать по-другому, поделитесь. |
|||
37
Akasyra
14.12.14
✎
20:52
|
(35) О! Благодарю)
|
|||
38
Garykom
гуру
14.12.14
✎
20:53
|
(36) проблема забить инн? или другим образом сопоставить контрагентов?
ЗЫ но насчет "в старой базе инн не вели" реально не понял... а как тогда доки на реализацию печатали? они же без данных контрагентов недействительны |
|||
39
Akasyra
14.12.14
✎
20:56
|
Да фиг их знает. Говорят что эта база была чисто для сиэрэма, ведения склада и заказов на производство. КАК они так жили я без понятия...
|
|||
40
Chameleon1980
14.12.14
✎
21:03
|
(37) ну само собой это только запрос
таблицу то осилите нарисовать и даты на форму вынести? у вас вообще с 77 никак? |
|||
41
Akasyra
14.12.14
✎
21:07
|
(40) Вообще с 77 никак. таблицы осилю. формы не будет будет алгоритм из правил обмена данными вызываться. но это тоже, наверн, осилю. А как таб док сформированный в эксель сохранить?
|
|||
42
Chameleon1980
14.12.14
✎
21:41
|
метод?
|
|||
43
Chameleon1980
14.12.14
✎
21:42
|
Записать(<?>,);
Синтаксис: Записать(<ИмяФайла>,<ТипФайла>) Назначение: Записать таблицу в файл. Параметры: <ИмяФайла> - имя файла. <ТипФайла> - необязательный параметр. Числовое или строковое выражение, определяющее тип файла: · отсутствует, 0 или ''MXL'' - формат 1C; · 1 или ''XLS'' - формат Ms Excel; · 2 или ''HTM'' или ''HTML'' - формат HTML; · 3 или ''TXT'' - формат TXT. Замечание: Метод может использоваться при работе с таблицей в режиме ввода данных. |
|||
44
Akasyra
14.12.14
✎
21:52
|
(43) Благодарю за выдержки из сп(я так поняла))) Буду пробовать)
|
|||
45
lavalit
15.12.14
✎
13:10
|
Еще есть замечательная технология OLE при помощи которой можно и ёксель нарисовать и ворд и еще кучу всякого разного.
Кстати вариант в (43) хорош конечно , прост. но таки иногда формат "ломает". через ОЛЮ - долго нудно..местами противно..громоздко...и если не важен факт скорости создания подобного документа... но надежнее и более корректно в смысле оформления документа... да и еще можно плюс "фенечки" типа формул каких нибудь там понапихать в компаниии с макросами.... чего "клюшки" напрямки не умеют делать |
|||
46
Масянька
15.12.14
✎
13:17
|
Извините, что вмешиваюсь, а зачем грохать старую базу?
|
|||
47
lavalit
15.12.14
✎
13:21
|
А где тут предложение грохнуть базу?
|
|||
48
Chameleon1980
15.12.14
✎
13:24
|
да в ексель вообще много можно чем писать, а если через олю то вообще сразу в какой нить подходящий регистр сведений писать в упп.
|
|||
49
Масянька
15.12.14
✎
13:25
|
(47) См. (28)
|
|||
50
aka AMIGO
15.12.14
✎
13:43
|
А создать обычный отчет (mxl) и сохраните его как xls - предлагали?
Это гораздо проще, однако, если первый желательный шаг к цели - файл.. а вообще-то ОЛЕ/СОМ достаточно для первого раза описание в книгах по языку 1С.. ЗЫ. раз в поддержке/администрировании 1С - то стОит изучить метод.. |
|||
51
Chameleon1980
15.12.14
✎
13:48
|
||||
52
Chameleon1980
15.12.14
✎
13:50
|
(50) да я тож так думал (чё бы просто не сохранять. Может тс думает, что 7.7 в ексель не умеет), но потом подумал, что для начала именно отчет и нужен. Предложил в типовой поискать - даже похожее на их требования нашел.
|
|||
53
Akasyra
15.12.14
✎
14:28
|
(50) Так и хочу сформировать отчет и сохранить в xls...
|
|||
54
Akasyra
15.12.14
✎
14:29
|
(51) с оле пока подожду.. сейчас через кд сделаю...
|
|||
55
aka AMIGO
15.12.14
✎
14:32
|
(53) есть 2 способа:
1. простой, как я предложил в (50) 2.1. сложный, через обЭксел = СоздатьОбъект("Excel.Application"); //создаем объект 2.2 сложный, через scr = СоздатьОбъект("MSScriptControl.ScriptControl"); scr.language = "javascript"; scr.eval("MyArray=new Array()"); |
|||
56
aka AMIGO
15.12.14
✎
14:36
|
||||
57
Akasyra
15.12.14
✎
14:46
|
(55) не хочу сложный) Хочу просо сформировать отчет по продажам с отбором по контрагенту программно и уже сформированный табличный документ(mxl) сохранить в xls Ну или не сохранять а при выгрузке передать в исходящее свойство и при загрузке создать файл и прикрепить к создаваемому Объекту (контрагенту).
|
|||
58
Akasyra
15.12.14
✎
14:47
|
Обмен будет через выгрузку \ загрузку xml идти...
|
|||
59
Garykom
гуру
15.12.14
✎
14:55
|
(57)(58) тут почти полсотни постов пытаются объяснить разными словами что, то что придумали, намного сложнее и хуже чем прямая загрузка из базы в базу, без всяких промежуточных ёкселей
|
|||
60
Chameleon1980
15.12.14
✎
15:02
|
(57) я вчера тебе текст запроса давал.
Добавь отбор и выводи в таблицу |
|||
61
Chameleon1980
15.12.14
✎
15:04
|
пля нужно брать да делать а не лясы точить на форуме.
что неполучается спрашивать. или хотим, чтобы до конца дописали. как обычно Кнопка - "сделать все" |
|||
62
Akasyra
15.12.14
✎
17:10
|
Ничего в запросе не меня оставила как есть (точнее меняла, но успеха это не возымело).
Процедура Продажи() Перем Запрос, ТекстЗапроса, Таб, ДатаНачала, ДатаКонца; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ДатаНачала = Дата(2011,01,01); ДатаКонца = Дата(2014,01,01); ТекстЗапроса = "//{{ЗАПРОС(Продажи) |Период с ДатаНачала по ДатаКонца; |Покупатель = Регистр.Продажи.Покупатель; |Номенклатура = Регистр.Продажи.Номенклатура; |Количество = Регистр.Продажи.Количество; |Стоимость = Регистр.Продажи.ПродСтоимость; |Функция КоличествоСумма = Сумма(Количество); |Функция КоличествоСуммаСтоимость = Сумма(Стоимость); |Группировка Покупатель; |Группировка День; |Группировка Номенклатура; |Условие(Покупатель = ВыбКонтрагент); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Продажи"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); Пока Запрос.Группировка(1) = 1 Цикл // Заполнение полей Покупатель Таб.ВывестиСекцию("Покупатель"); Пока Запрос.Группировка(2) = 1 Цикл // Заполнение полей День Таб.ВывестиСекцию("День"); Пока Запрос.Группировка(3) = 1 Цикл // Заполнение полей Номенклатура Таб.ВывестиСекцию("Номенклатура"); КонецЦикла; КонецЦикла; КонецЦикла; // Заполнение полей "Итого" Таб.ВывестиСекцию("Итого"); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Продажи", ""); КонецПроцедуры А проблема следующая, вместо просто строки с номенклатурой у меня вываливается 3 строки 1 строка родитель верхнего уровня, 2 строка вложенный родитель, 3 строка сама номенклаура, когда уровень вложенности другой то и количество строк другое.. как бороться? |
|||
63
Garykom
гуру
15.12.14
✎
17:23
|
(62) решение см. в (61) делаешь кнопку на форме с именем "СделатьФсе" и надписью "Сделать все"
далее просишь подкинуть код чтобы туда вставить... |
|||
64
Chameleon1980
15.12.14
✎
17:39
|
(62) А где что-то типа
ПечДень=Запрос.День ПечКонтрагент=Запрос.Покупатель и т.д. перед выводами соотв. секций? и это.... Макет-то нарисовали? |
|||
65
Chameleon1980
15.12.14
✎
17:42
|
ДатаНачала, ДатаКонца на форму.
Ооо. Я смотрю хоть условие воткнули. ВыбКонтрагент на форме есть? Вы по каждому отдельно будете формировать? если нет - условие выкидываем - т.к. в запросе по контрам и так шагает. я как понял задачу - так и хочу помочь. но если честно полностью в цель не въехал. |
|||
66
Mihenius
15.12.14
✎
17:58
|
Йоксель еще никто не предлагал?
|
|||
67
Ёпрст
15.12.14
✎
18:04
|
(62) воткни "Без Групп" в группировки в текст запроса.
|
|||
68
Ёпрст
15.12.14
✎
18:05
|
Ну и заместо Таб.Показать пиши Таб.Записать() и наслаждайся вопросом из (0)
|
|||
69
Ёпрст
15.12.14
✎
18:05
|
т.е формой своей в экселе
|
|||
70
Akasyra
15.12.14
✎
23:50
|
Ой, благодарю (67).
(64) Дык, конструктором на последней странице предложение делается о формировании макета, на макете все параметры прописаны в виде (Запрос.количество) я подумала что и переписывать ничего не надо, хорошо то как =). А в эксель не буду грузить сразу в справочник прикрепленных файлов.. Там ещё события надо в текстовый файл сформировать и контактные данные вытащить, помимо категорий и свойств... |
|||
71
Akasyra
15.12.14
✎
23:51
|
ЗЫ. В эксель не буду грузить, сразу в справочник прикрепленных файлов.
|
|||
72
Akasyra
16.12.14
✎
08:55
|
В общем, надо делать через Оле...
|
|||
73
KrivosheevE V163rus
16.12.14
✎
09:08
|
Клёво. Я как раз попкорном запасся.
|
|||
74
Akasyra
16.12.14
✎
09:10
|
(73) =)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |