Имя: Пароль:
1C
1C 7.7
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) =)
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс