Имя: Пароль:
1C
1C 7.7
v7: Выгрузка документов в excel
0 tedien
 
24.11.09
15:42
Возможно ли такое без запросов?
Если нет, то как обойти в запросе поля с неограниченной длиной (естественно программно :))
Спасибо за внимание! =^_^=
1 ДенисЧ
 
24.11.09
15:43
а зачем для выгрузки запросы? О_о
2 tedien
 
24.11.09
15:45
ну по - другому не получается :-[
3 birkoFFFF
 
24.11.09
15:45
(2) ню-ню )))
4 tedien
 
24.11.09
15:46
скажем так.. названия полей я получаю, а вот их содержимое - нет :'(
5 ДенисЧ
 
24.11.09
15:48
(4) Как жаль, что ты осьминог...
6 tedien
 
24.11.09
15:55
эммм... пардон, что ввязываюсь в вашу беседу, но может вы научите неразумную девушку выгружать документы в excelку? ;)
7 birkoFFFF
 
24.11.09
15:57
что конкретно вам нужно выгрузить ? и в каком виде ?
8 tedien
 
24.11.09
16:03
вид примерно такой в экселе
____________________________________________
НомерДок | Поставщик | Товар | Колво | Сумма|
--------------------------------------------
1        | Вини Пух  | Горшок| 20    | 500  |
--------------------------------------------
2        | Вини Пух  | Шарик | 50    | 10   |
--------------------------------------------
т.е. все содержимое(общие реквизиты, реквизиты шапки и реквизиты табличные) документов.
Это все счастие пишется во внешней обработке. Содержимое реквизитов могу получить только через запрос (но это очень долго, особенно если полей около 30).
До других вариантов пока не додумалась :(
9 tedien
 
24.11.09
16:12
забыла сказать что все енто в 1с 7.7
10 zdas
 
24.11.09
16:13
назови обработку "Наруто ^_^"
все из-за этого
11 filh
 
24.11.09
16:16
Что за база?
12 tedien
 
24.11.09
16:19
мм.. никакой базы. документы из 1с, а эксель - любой документ :)
З.Ы. Сорри Наруто не смотрела, обзывать не буду =^_^=
13 birkoFFFF
 
24.11.09
16:21
все очень грустно...
14 zdas
 
24.11.09
16:22
(12) а пол мужской.. странно все это:) 1с-анимешники странный народ
поля неограниченой длины пробуй привести к строке через СокрЛП() перед выводом.
15 zdas
 
24.11.09
16:24
+14 хотя документы не из базы, а из 1С выгрузить в любой документ Excel это круто:)
16 tedien
 
24.11.09
16:29
о_О у меня мужской пол?
СокрЛП насколько мне не изменяет память лишь пробелы отсекает... а проблема в том что у реквизита галочка на неогр. стоит...как это просечь не понимаю.. не хочется же каждый просматривать :)
17 zdas
 
24.11.09
16:34
(16) теперь женский:)
значит фотку:)
18 zdas
 
24.11.09
16:36
(16) что такое поле неограниченной длины?
19 tedien
 
24.11.09
16:38
фотку попозже..
а поле неограниченной длины появляется когда в свойствах реквизита ставишь галочку напротив Неогр.
20 zdas
 
24.11.09
16:39
(19) мда уж
21 TrTrTr
 
24.11.09
16:40
Чтот вроде этого:
Excel.Cells(3,2).Value = СокрЛП(Поле неограниченой длинны);
22 Жеглофф
 
24.11.09
16:41
(21)
Бред! Поле же неограниченной длины! ))))
23 zdas
 
24.11.09
16:42
(21) предполагаю что можно даже не через ОЛЕ, а простым отчетом.
24 tedien
 
24.11.09
16:43
мрррр.. можно и простым отчетом. не в этом суть.. а суть в том чтобы поймать это поле
25 Mnemonic1C
 
24.11.09
16:43
26 zdas
 
24.11.09
16:44
(25) тебе в (16) сказали что СокрЛП() не катит. там галочка ведь проставляется
27 Mnemonic1C
 
24.11.09
16:44
(24) Что то я не пойму вашей проблемы с полями:)
28 birkoFFFF
 
24.11.09
16:45
(27) да тут никто не понимает )))
29 Pasha
 
24.11.09
16:45
(24) Прежде всего надо отказаться от этой терминологии... Поймать, просечь...
Надо четко, как в школе:
Дано:
Задача:
30 AeDen
 
24.11.09
16:45
(24) Приезжайте, помурчите мне на ушко, я Вас такому в 1С научу...:)
31 birkoFFFF
 
24.11.09
16:46
и кстати тут excel вообще не причем ;-))))
32 Mnemonic1C
 
24.11.09
16:46
И желательно фрагмент кода в студию...
33 zdas
 
24.11.09
16:47
сначала фотку
34 Попытка1С
 
24.11.09
16:47
Так а что именно не получается у автора?
Как-то не видно стараний..
35 Жеглофф
 
24.11.09
16:47
Пойду ка за пивом )))
36 Mnemonic1C
 
24.11.09
16:49
Смотри тут для начала http://infostart.ru/public/57210/
37 birkoFFFF
 
24.11.09
16:50
(36) вы забудьте про excel, не это ей нужно совершенно, она словами выразить просто нормально не может )))
38 zdas
 
24.11.09
16:52
СокрЛП(автор, давай фотку)
39 tedien
 
24.11.09
16:53
так! 1) 1с 7!
2) Дано: документ, пустой файл .xls
Требуется: занести ВСЕ  поля документа 1с в файлик эксель. Что непонятного?
З.Ы. сдалась вам фотка.... 2 руки, 2 ноги, голова.. все вроде на месте ))
40 Попытка1С
 
24.11.09
16:54
(39) Ясно 1сники, приступайте, что не понятного... =)))
41 birkoFFFF
 
24.11.09
16:54
(39) Господи, как-же здесь все плохо...
42 zdas
 
24.11.09
16:55
(39) одного не хватает)))))
43 zdas
 
24.11.09
16:56
попробую расшифровать. есть документ, табличную часть и шапку которого надо вывести в эксель (эксель обязателен или можно вывести в таблицу, которую можно сохранить в эксель?)
44 Mnemonic1C
 
24.11.09
16:57
(39) Используй функции с http://infostart.ru/public/57210/, напиши обработку
45 zdas
 
24.11.09
16:57
вот только как вяжется запрос и 39?
46 birkoFFFF
 
24.11.09
16:57
(43) мои телепатические способности подсказали то-же самое )))
47 birkoFFFF
 
24.11.09
16:58
(44) сказали-же, забудь по excel,  он тут ни при чем...
48 tedien
 
24.11.09
16:58
ща дам код... не мчитесь, люди!
49 Mnemonic1C
 
24.11.09
16:58
(47) Хорошо, больше не буду:)
50 zdas
 
24.11.09
16:58
(48) да мы вообще никуда не торопимся, следим за развитием событий:)
51 Mnemonic1C
 
24.11.09
16:59
Тогда остается вариант (43)
52 Smitt
 
24.11.09
17:00
(39)
Как обращаться с документами в 1С 7.7
http://www.mista.ru/tutor_1c/docs.htm

Как обращаться с таблицами:
http://www.mista.ru/tutor_1c/reports.htm

Как сохранить таблицу в ексель:
Записать(<ИмяФайла>,<ТипФайла>)
Назначение:
Записать таблицу в файл.
Параметры:
<ИмяФайла> - имя файла.
<ТипФайла> - необязательный параметр. Числовое или строковое выражение, определяющее тип файла:
· отсутствует, 0 или ''MXL'' - формат 1C;
· 1 или ''XLS'' - формат Ms Excel;
· 2 или ''HTM'' или ''HTML'' - формат HTML;
· 3 или ''TXT'' - формат TXT.
53 tedien
 
24.11.09
17:00
Процедура Сформировать()
   Перем Запрос, ТекстЗапроса, Таб;  
   ExcelDoc = СоздатьОбъект("Excel.Application");
ТабЗн = СоздатьОбъект(“СписокЗначений”);
   ExcelDoc.Visible = 1;
   BookDoc = ExcelDoc.WorkBooks.Add();
   ListDoc = BookDoc.Worksheets.Add();
   
//Получаем идентификаторы общих реквизитов
   Для nn = 1 По Метаданные.ОбщийРеквизитДокумента() Цикл  
ТабЗн.ДобавитьЗначение(Метаданные.ОбщийРеквизитДокумента(nn).Идентификатор);
Сообщить(Метаданные. ОбщийРеквизитДокумента(nn).Идентификатор);
   КонецЦикла;

   //Получаем идентификаторы реквизитов шапки
   Для nn = 1 По Метаданные.Документ("ПриходнаяНакладная").РеквизитШапки() Цикл
     ТабЗн.ДобавитьЗначение(Метаданные.Документ("ПриходнаяНакладная").РеквизитШапки(nn).Идентификатор);
        Сообщить(Метаданные.Документ("ПриходнаяНакладная").РеквизитШапки(nn).Идентификатор);
   КонецЦикла;
   
   //Получаем идентификаторы реквизитов табличной части
    Для nn = 1 По Метаданные.Документ("ПриходнаяНакладная").РеквизитТабличнойЧасти() Цикл
         ТабЗн.ДобавитьЗначение(Метаданные.Документ("ПриходнаяНакладная").РеквизитТабличнойЧасти(nn).Идентификатор);
Сообщить(Метаданные.Документ("ПриходнаяНакладная").РеквизитТабличнойЧасти(nn).Идентификатор);
   КонецЦикла;

   //Создание объекта типа Запрос
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса =
   "//{{ЗАПРОС(Сформировать)
   |Период с ВыбНачПериода по ВыбКонПериода;
   |ОбрабатыватьДокументы все;
   |Поставщик = Документ.ПриходнаяНакладная.Поставщик.Наименование;
   |Склад = Документ.ПриходнаяНакладная.Склад.Наименование;
   |Товар = Документ.ПриходнаяНакладная.Товар.Наименование;
   |Кол = Документ.ПриходнаяНакладная.Кол;
   |ЦенаБНДС = Документ.ПриходнаяНакладная.ЦенаБНДС;
   |ЦенаСНДС = Документ.ПриходнаяНакладная.ЦенаСНДС;
   |СуммаБНДС = Документ.ПриходнаяНакладная.СуммаБНДС;
   |СуммаНДС = Документ.ПриходнаяНакладная.СуммаНДС;
   |СуммаСНДС = Документ.ПриходнаяНакладная.СуммаСНДС;
   |Фирма = Документ.ПриходнаяНакладная.ФирмаДокумента.Наименование;
   |Валюта = Документ.ПриходнаяНакладная.Валюта.Наименование;
   |ДатаКурса = Документ.ПриходнаяНакладная.ДатаКурса;
   |Курс = Документ.ПриходнаяНакладная.Курс;
   |Автор = Документ.ПриходнаяНакладная.АвторДокумента;
   |ДатаДок = Документ.ПриходнаяНакладная.ДатаДок;
   |НомерДок = Документ.ПриходнаяНакладная.НомерДок;
   |Группировка НомерДок все;
   |Группировка Товар все;
   //|Условие(ДатаКон > 0)
   |"//}}ЗАПРОС
   ;
   Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
       Возврат;
   КонецЕсли;

   //формирование шапки в excel
   стр = "";
   Для i=1 По ТабЗн.РазмерСписка() Цикл
       ExcelDoc.Cells(1,i).Value = ТабЗн.ПолучитьЗначение(i, стр);
   КонецЦикла;    
   
    //авто подбор ширины
    ListDoc.Cells.EntireColumn.AutoFit();
    //закрепление области
    ListDoc.Range("A2").Select();
    ExcelDoc.ActiveWindow.FreezePanes=1;
    ExcelDoc.Visible=1;
 
row = 2;
   Пока Запрос.Группировка(1) = 1 Цикл
       Пока Запрос.Группировка(2) = 1 Цикл
            ExcelDoc.Cells(row,1).Value = Запрос.НомерДок;
            ExcelDoc.Cells(row,2).Value = Запрос.ДатаДок;
            ExcelDoc.Cells(row,3).Value = "Приходная накладная";
            ExcelDoc.Cells(row,4).Value = Запрос.Автор;
            ExcelDoc.Cells(row,5).Value = Запрос.Поставщик;
            ExcelDoc.Cells(row,6).Value = Запрос.Склад;
            ExcelDoc.Cells(row,7).Value = Запрос.Валюта;
            ExcelDoc.Cells(row,8).Value = Запрос.Курс;
            ExcelDoc.Cells(row,9).Value = Запрос.ДатаКурса;
            ExcelDoc.Cells(row,10).Value = Запрос.Товар;
            ExcelDoc.Cells(row,11).Value = Запрос.Кол;
            ExcelDoc.Cells(row,12).Value = Запрос.ЦенаБНДС;
            ExcelDoc.Cells(row,13).Value = Запрос.ЦенаСНДС;
            ExcelDoc.Cells(row,14).Value = Запрос.СуммаБНДС;
            ExcelDoc.Cells(row,15).Value = Запрос.СуммаСНДС;
            ExcelDoc.Cells(row,16).Value = Запрос.СуммаНДС;
            row = row +1;
       КонецЦикла;
   КонецЦикла;        
// BookDoc.SaveAs("d:\Документы.xls");
ExcelDoc.Quit();              
   
КонецПроцедуры
54 birkoFFFF
 
24.11.09
17:00
(48)короче, ищи на ИТС обработку Docprint.ert
55 Mikeware
 
24.11.09
17:00
(48) Я уже заранее боюсь...
56 birkoFFFF
 
24.11.09
17:01
(53) держите меня семеро...
57 zdas
 
24.11.09
17:01
(53) а в магазин тоже не танке ездишь?
58 birkoFFFF
 
24.11.09
17:01
(53) Docprint.ert смотрела ?
59 vde69
 
24.11.09
17:02
// Обработка выводит в копию файла шаблона ТЗ
// Файл шаблона должен иметь название СокрЛП(ИмяШаблона) + ".xls"
// и лежать в каталоге  КаталогИБ() + "ExtForms\PrnForms\"
//
// Параметры запуска должен быть списком значения:
// "Идентификатор"                    - Обязательный
// "КаталогДляСохранения"              - Обязательный
// "ИмяФайла"                          - Не обязательный (если пусто, то используеться имя шаблона)
// "ТаблицаЗначений"                - Не обязательный (Таблица значений, связь по имени колонок, см ниже)
// "СписокПеременных"               - Не обязательный (Список значений, связь по представлению, см ниже)
//  
//*****************************************************************************************************
//  
//              Настройка шаблона EXCEL
//                                                  
// В шаблоне должно содержаться 2 листа, название листов и положение может быть произвольным
// в ячейки 1:1 одного листа должно стоять слово "ИдентификаторШаблона" в 1:2 имя шаблона,
// тогда этот лист будет восприниматься как лист настроек (этот лист желательно скрыть от пользователей)
// другой лист будет восприниматься как лист шаблона.
//  
// Лист настроек должен в первой колонке содержать следующие идентификаторы (порядок не важен), а в колонке 2 значения
// ИдентификаторПеременной    - пример "_перем_", если в ячейки встретится текст "_перем_Имя1", то оно будет заменено
//                              на значение переменной "Имя1", при этом такая переменная автоматически создается для табличной части
//                              из переданой таблицы по имени колонки.
//                              или из "СписокПеременных" по представению.
// СтрокаШаблонТЧ           - эта строка будет копироваться для каждой строки "ТаблицаЗначений", переменные беруться из колонок


Перем СписокПараметров;  
Перем ИмяШаблона, КаталогДляСохранения, ИмяФайла, ТЗ;
 

//*******************************************
// функция возвращает строку индикатор длиной 100 символов
Функция Обмен_Индикатор(значение, максимум=100)
   Если максимум > 0 Тогда
       Длина=50;            
       
       Если значение<=0 тогда
           стр="";
           Для е = 1 по Длина Цикл
               стр=стр+".";
           КонецЦикла;    
   
           Возврат "[" + стр + "]";
       КонецЕсли;
       
       е1="";            
       Для е = 1 По Длина Цикл
           Если е<=((значение*Длина)/максимум) Тогда
               е1=е1+"|";
           Иначе
               е1=е1+".";
           КонецЕсли;        
       КонецЦикла;
       Возврат "[" + е1 + "]";
   Иначе
       Возврат "";
   КонецЕсли;
КонецФункции    


// функция устанавливает связь с EXCEL
// в качестве параметра требуется имя открываемого файла
// в случае удачи возвращает соответствие из обьектов ОЛЕ, в случае не удачи - 0
Функция   EXCEL_УстановитьСвязь (ПолноеИмяФайла)Экспорт
   
   Результат = 0;
   Состояние("Идет установка связи, ждите.....");
   
   Попытка
       Результат = СоздатьОбъект("СписокЗначений");
       Результат.УдалитьВсе();
       
       BaseOLE = СоздатьОбъект("Excel.Application");
       Результат.Установить("EXCEL", BaseOLE);
                 
       ExcelФайл = BaseOLE.WorkBooks.Open (ПолноеИмяФайла);
       Результат.Установить("ExcelФайл", ExcelФайл);
                               
       МассивЛистов =  СоздатьОбъект("СписокЗначений");
       МассивЛистов.УдалитьВсе();
       
       КоличествоЛистов = BaseOLE.Sheets.Count;                  // *!!!*
       Для е = 1 по КоличествоЛистов Цикл
           МассивЛистов.ДобавитьЗначение(BaseOLE.Sheets(е));    // *!!!*        
       КонецЦикла;
       
       Результат.Установить("Листы", МассивЛистов);

   Исключение
       Результат = 0;
       Сообщить("Ошибка создания обьекта Microsoft Excel" + ОписаниеОшибки());
   КонецПопытки;
   
   Возврат Результат;
КонецФункции

// функция разрывает связь с EXCEL
// в качестве параметра требуеться структура созданая при установке соединения
Процедура EXCEL_РазорватьСвязь (СписокОбьектов) Экспорт
   Попытка
       СписокОбьектов.Получить("EXCEL").DisplayAlerts = 0;
//        СписокОбьектов.Получить("ExcelФайл").Close();         // *!!!*
       СписокОбьектов.Получить("EXCEL").Quit();
       СписокОбьектов.Получить("EXCEL").DisplayAlerts = 1;
       СписокОбьектов.Установить("EXCEL", 0);
       СписокОбьектов.УдалитьВсе();
   Исключение
       Сообщить(ОписаниеОшибки());
   КонецПопытки;                  
КонецПроцедуры


// функция получает данные ячейки и возвращаеть структуру соответствий, или 0 в случае неудачи
//
// В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам
//
Функция EXCEL_ПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки, ПолучатьТекстФормулы = 0, ПолучатьОформление = 0)
   Результат = СоздатьОбъект("СписокЗначений");
   Результат.УдалитьВсе();
   
   Попытка
       ТекущееЗначениеФормулы = ExcelЛист.Cells(НомерСтроки, НомерКолонки).Formula;
       Если ТекущееЗначениеФормулы <> "" Тогда
           Если Лев(ТекущееЗначениеФормулы, 1) <> "=" Тогда
               Результат.Установить("ЭтоФормула", 0);
               Результат.Установить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
           Иначе
               Результат.Установить("ЭтоФормула", 1);
               Если Лев(СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).text),1) = "#" Тогда
                   Результат.Установить("ЗначениеЯчейки", "Неопределено");
               Иначе
                   Результат.Установить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
               КонецЕсли;

               Если ПолучатьТекстФормулы = 1 Тогда  
                   Результат.Установить("ТекстФормулы", СокрЛП(ТекущееЗначениеФормулы));
               КонецЕсли;
           КонецЕсли;
       Иначе
           Результат.Установить("ЭтоФормула", 0);
           Результат.Установить("ЗначениеЯчейки", ExcelЛист.Cells(НомерСтроки, НомерКолонки).value);
       КонецЕсли;    
       
       Если ПолучатьОформление = 1 Тогда
           Результат.Установить("ЦветЯчейки", СокрЛП(ExcelЛист.Cells(НомерСтроки, НомерКолонки).Interior.ColorIndex));
           // здесь можно добавить и другие....
       КонецЕсли;
       
   Исключение
       Результат = 0;
   КонецПопытки;
   
   Возврат Результат;
КонецФункции

// функция получает данные ячейки и значение
//
// В любом случае возвращаем соостветствие "Значение" и "ЭтоФормула", остальное по флагам
//
Функция EXCEL_ПолучитьЗначениеЯчейки2 (ExcelЛист, НомерСтроки, НомерКолонки)
   Результат = EXCEL_ПолучитьЗначениеЯчейки (ExcelЛист, НомерСтроки, НомерКолонки);
   
   Если Результат = 0 Тогда
       Возврат "";
   КонецЕсли;
   
   Возврат Результат.Получить("ЗначениеЯчейки");
КонецФункции

Процедура ЗакрытьОбработку (ТекстСообщения = "", СписокЗагрузки = 0)

   Если ТипЗначенияСтр(СписокЗагрузки) = "СписокЗначений" Тогда
       EXCEL_РазорватьСвязь (СписокЗагрузки);
   КонецЕсли;

   Если СокрЛП(ТекстСообщения) <> "" Тогда
       Сообщить(ТекстСообщения);
   КонецЕсли;                                                    

   СтатусВозврата(0);      
   Форма.Закрыть(0);
   
КонецПроцедуры


Процедура Сохранить()
   
   Если    (СокрЛП(КаталогДляСохранения) = "")
       или (ФС.СуществуетФайл(СокрЛП(КаталогДляСохранения)) = 0) Тогда
       ЗакрытьОбработку ("Не верный каталог для сохранения");
       Возврат;
   КонецЕсли;
             
   // подработка имени каталога
   Если Прав(СокрЛП(КаталогДляСохранения),1) <> "\" Тогда
       КаталогДляСохранения = СокрЛП(КаталогДляСохранения) + "\";
   КонецЕсли;
   
   // подработка имени файла
   Если Найти(СокрЛП(ИмяФайла),".") > 0 Тогда
       ИмяФайла = Лев(СокрЛП(ИмяФайла), Найти(СокрЛП(ИмяФайла),".") - 1);
   КонецЕсли;        
     
   
   Если (КаталогИБ() + "ExtForms\PrnForms\"+ СокрЛП(ИмяШаблона) + ".xls")=(СокрЛП(КаталогДляСохранения) + СокрЛП(ИмяФайла) + ".xls") Тогда
       Сообщить("Нельзя перезаписывать шаблон");        
       Возврат;
   КонецЕсли;        
   
   
   // будем подключаться
   СписокЗагрузки = EXCEL_УстановитьСвязь (КаталогИБ() + "ExtForms\PrnForms\"+ СокрЛП(ИмяШаблона) + ".xls");
           
   Если СписокЗагрузки = 0 тогда  
       ЗакрытьОбработку ("Ошибка подключения к шаблону");
       Возврат;
   КонецЕсли;      
       
   Листы = СписокЗагрузки.Получить("Листы");
   Если ПустоеЗначение(Листы) = 1 Тогда  
       ЗакрытьОбработку ("Шаблон пуст", СписокЗагрузки);
       Возврат;
   КонецЕсли;

   Если Листы.РазмерСписка() <> 2 Тогда  
       ЗакрытьОбработку ("В шаблоне должно быть 2 листа", СписокЗагрузки);
       Возврат;
   КонецЕсли;
   
   ШаблонНайден = 0;
   Для е = 1 по Листы.РазмерСписка() Цикл  
       ТекЛист = Листы.ПолучитьЗначение(е);
       Если  (СокрЛП(EXCEL_ПолучитьЗначениеЯчейки2 (ТекЛист, 1, 1)) = "ИдентификаторШаблона")
           И (ВРЕГ(СокрЛП(EXCEL_ПолучитьЗначениеЯчейки2 (ТекЛист, 1, 2))) = ВРЕГ(СокрЛП(ИмяШаблона)))  Тогда
           
           // это лист настроек
           СписокЗагрузки.Установить("ЛистНастроек", ТекЛист) ;
           ШаблонНайден = 1;
       Иначе                                    
           // лист шаблона
           СписокЗагрузки.Установить("ЛистШаблона", ТекЛист) ;
       КонецЕсли;
   КонецЦикла;
   
   Если ШаблонНайден = 0 Тогда
       ЗакрытьОбработку ("В Шаблоне не верный идентификатор", СписокЗагрузки);
       Возврат;
   КонецЕсли;  
                                                   
   //
   // все проверки закончили, теперь запишем под новым именем
   //
     
   
   Попытка
       СписокЗагрузки.Получить("EXCEL").DisplayAlerts = 0;
       СписокЗагрузки.Получить("ЛистШаблона").SaveAs(СокрЛП(КаталогДляСохранения) + СокрЛП(ИмяФайла) + ".xls");
       СписокЗагрузки.Получить("EXCEL").DisplayAlerts = 1;
   Исключение
       ЗакрытьОбработку ("Неудачное копирование шаблона, " + ОписаниеОшибки(), СписокЗагрузки);
       Возврат;
   КонецПопытки;                  

   // теперь можно и формировать      
   // инициализируем

   ЧислоСтрок = СписокЗагрузки.Получить("ЛистНастроек").UsedRange.Rows.Count;
   СписокПараметровФайла = СоздатьОбъект("СписокЗначений");
   СписокПараметровФайла.УдалитьВсе();
   
   Для е1 = 2 по ЧислоСтрок Цикл  
       ИмяПараметра        = EXCEL_ПолучитьЗначениеЯчейки2 (СписокЗагрузки.Получить("ЛистНастроек"), е1, 1);
       ЗначениеПараметра    = EXCEL_ПолучитьЗначениеЯчейки2 (СписокЗагрузки.Получить("ЛистНастроек"), е1, 2);
       
       Если  (ПустоеЗначение(ИмяПараметра) = 1)
           И (ПустоеЗначение(ЗначениеПараметра) = 1) Тогда
               
           Продолжить;
       КонецЕсли;
                       
       СписокПараметровФайла.ДобавитьЗначение(ЗначениеПараметра, ИмяПараметра);    
   КонецЦикла;
                                                                       
   // коректируем правильность параметров
   Попытка
       СписокПараметровФайла.Установить("СтрокаШаблонТЧ", Число(СписокПараметровФайла.Получить("СтрокаШаблонТЧ")));
   Исключение        
       СписокПараметровФайла.Установить("СтрокаШаблонТЧ", 0);
   КонецПопытки;  
   
   СписокПараметровФайла.Установить("ИдентификаторПеременной", СокрЛП(СписокПараметровФайла.Получить("ИдентификаторПеременной")));
   Если СписокПараметровФайла.Получить("ИдентификаторПеременной") = "" Тогда
       ЗакрытьОбработку ("Незаполнен обязательный параметр 'ИдентификаторПеременной'", СписокЗагрузки);
       Возврат;
   КонецЕсли;
   
                                         
   //*********************************************************************
   //
   //
   // для начала пройдем весь лист и запишем переменные
   //
                                                                                       
   // кешируем обяз. параметры
   ИдентификаторПеременной = СписокПараметровФайла.Получить("ИдентификаторПеременной");
   
   // определим диапазон
   ЧислоСтрок = СписокЗагрузки.Получить("ЛистШаблона").UsedRange.Rows.Count;
   ЧислоКолонок = СписокЗагрузки.Получить("ЛистШаблона").UsedRange.Columns.Count;  
   
   // вперед
   Для е1 = 1 по ЧислоСтрок Цикл  
       
       Состояние("Заполнение шапки " + Обмен_Индикатор(е1, ЧислоСтрок));
       
       Если е1 = СписокПараметровФайла.Получить("СтрокаШаблонТЧ") Тогда
           Продолжить;
       КонецЕсли;
       
       Для е2 = 1 по ЧислоКолонок Цикл    
           
           Результат = EXCEL_ПолучитьЗначениеЯчейки (СписокЗагрузки.Получить("ЛистШаблона"), е1, е2);
           
           Если Результат = 0 Тогда
               Продолжить;
           КонецЕсли;
           
           Если Результат.Получить("ЭтоФормула") = 1 Тогда
               Продолжить;
           КонецЕсли;
           
           ЗначениеЯчейки = СокрЛП(Результат.Получить("ЗначениеЯчейки"));  
           
           Если Лев(ЗначениеЯчейки, СтрДлина(ИдентификаторПеременной)) = ИдентификаторПеременной тогда
               // это переменная надо заполнить
               _зн =  СписокПараметров.Получить(Сред(ЗначениеЯчейки, СтрДлина(ИдентификаторПеременной)+1));
               // теперь надо установить в екселе это значение  
               СписокЗагрузки.Получить("ЛистШаблона").Cells(е1, е2).value = _зн;                
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   //
   // теперь надо формировать табличную часть
   //
   
   //
   Смещение = СписокПараметровФайла.Получить("СтрокаШаблонТЧ");
   СписокЗагрузки.Получить("ЛистШаблона").Select();    
   Если ТЗ.КоличествоСтрок() = 0 Тогда
       Д = СписокЗагрузки.Получить("ЛистШаблона").Rows("" + Смещение + ":" + Смещение);
       Д.Select();
       Д.Delete();
   Иначе
       Для е1 = 2 по ТЗ.КоличествоСтрок() Цикл  
           Д = СписокЗагрузки.Получить("ЛистШаблона").Rows("" + Смещение + ":" + Смещение);
           Д.Select();
           Д.Copy();
           Д.Insert();
       КонецЦикла;
   КонецЕсли;
                                                                                               
   Смещение = Смещение - 1;    
   // вперед
   Для е1 = 1 по ТЗ.КоличествоСтрок() Цикл  
       Состояние("Создание табличной части " + Обмен_Индикатор(е1, ТЗ.КоличествоСтрок()));

       Для е2 = 1 по ЧислоКолонок Цикл    
           
           Результат = EXCEL_ПолучитьЗначениеЯчейки (СписокЗагрузки.Получить("ЛистШаблона"), е1 + Смещение, е2);
           
           Если Результат = 0 Тогда
               Продолжить;
           КонецЕсли;
           
           Если Результат.Получить("ЭтоФормула") = 1 Тогда
               Продолжить;
           КонецЕсли;
           
           ЗначениеЯчейки = СокрЛП(Результат.Получить("ЗначениеЯчейки"));  
           
           Если Лев(ЗначениеЯчейки, СтрДлина(ИдентификаторПеременной)) = ИдентификаторПеременной тогда
               // это переменная надо заполнить
               Попытка
                   _зн =  ТЗ.ПолучитьЗначение(е1, Сред(ЗначениеЯчейки, СтрДлина(ИдентификаторПеременной)+1));
               Исключение
                   _зн = "";                    
               КонецПопытки;
               
               // теперь надо установить в екселе это значение  
               СписокЗагрузки.Получить("ЛистШаблона").Cells(е1 + Смещение, е2).value = _зн;                
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   
   // все теперь запишем
   Попытка
       СписокЗагрузки.Получить("EXCEL").DisplayAlerts = 0;
       СписокЗагрузки.Получить("ЛистШаблона").SaveAs(СокрЛП(КаталогДляСохранения) + СокрЛП(ИмяФайла) + ".xls");  // *!!!*
       СписокЗагрузки.Получить("EXCEL").DisplayAlerts = 1;
   Исключение
       ЗакрытьОбработку ("Неудачное сохранение шаблона", СписокЗагрузки);
       Возврат;
   КонецПопытки;                  
   
   // усе, можно выходить
   ЗакрытьОбработку ("Файл удачно сохранен", СписокЗагрузки);

КонецПроцедуры


Процедура ПриОткрытии()

   ТекСписокПараметров = Форма.Параметр;
   
   Если ТипЗначенияСтр(ТекСписокПараметров) = "СписокЗначений" Тогда
       // загрузим параметры
       Попытка

           ИмяШаблона                = СокрЛП(ТекСписокПараметров.Получить("Идентификатор"));
           КаталогДляСохранения    = СокрЛП(ТекСписокПараметров.Получить("КаталогДляСохранения"));
           ИмяФайла                = СокрЛП(ТекСписокПараметров.Получить("ИмяФайла"));
           ТЗ                        = ТекСписокПараметров.Получить("ТаблицаЗначений");
           СписокПараметров        = ТекСписокПараметров.Получить("СписокПеременных");

           Если СокрЛП(ИмяФайла) = "" Тогда
               ИмяФайла = ИмяШаблона;
           КонецЕсли;
           
           Если ТипЗначенияСтр(СписокПараметров) <> "СписокЗначений" Тогда
               СписокПараметров = СоздатьОбъект("СписокЗначений");
               СписокПараметров.УдалитьВсе();
           КонецЕсли;

           Если ТипЗначенияСтр(ТЗ) <> "ТаблицаЗначений" Тогда
               ТЗ = СоздатьОбъект("ТаблицаЗначений");
               ТЗ.Очистить();
           КонецЕсли;
           
       Исключение
           ЗакрытьОбработку ("Ошибка параметров");
           Возврат;
       КонецПопытки;                              
       
       // авто выполнение
       Сохранить();
       Форма.Закрыть(0);
   КонецЕсли;
   
КонецПроцедуры
                             



ТЗ = СоздатьОбъект("ТаблицаЗначений");
ТЗ.Очистить();

СписокПараметров = СоздатьОбъект("СписокЗначений");
СписокПараметров.УдалитьВсе();

Описание = "Обработка выводит в копию файла шаблона ТЗ
|Файл шаблона должен иметь название СокрЛП(ИмяШаблона) + "".xls""
|и лежать в каталоге  КаталогИБ() + ""ExtForms\PrnForms\""
|
|Параметры запуска должен быть списком значения:
|""Идентификатор""                    - Обязательный
|""КаталогДляСохранения""              - Обязательный
//|""Тест""                            - Не обязательный, если равен 1 то файл не сохраняеться а выводиться отчет
//|                                      по соответствию имен    
|""ИмяФайла""                          - Не обязательный (если пусто, то используеться имя шаблона)
|""ТаблицаЗначений""                - Не обязательный (Таблица значений, связь по имени колонок, см ниже)
|""СписокПеременных""               - Не обязательный (Список значений, связь по представлению, см ниже)
|
|"
60 zdas
 
24.11.09
17:03
ппц
61 birkoFFFF
 
24.11.09
17:03
(59) и ты туда-же ?
62 vde69
 
24.11.09
17:04
(59) все написано самолично и работает на 100%
63 Smitt
 
24.11.09
17:04
в свете (53)
как обращаться с запросами
http://www.mista.ru/tutor_1c/zapros.htm

А вашу задачу лучше порешайте пока без запроса, используя обычную выборку документов и перебор строк.
64 zdas
 
24.11.09
17:05
(62) без обид, код может и работает, только автору надо попроще, намного проще.
65 birkoFFFF
 
24.11.09
17:08
АВТОРУ НУЖНО ВОТ ЭТО:
http://img689.imageshack.us/img689/9895/21384461.jpg
66 vde69
 
24.11.09
17:09
(64) а чего проще, есть описание, нужно сформировать ТЗ с параметрами, сделать шаблоне екселе (можно использовать цвета и формулы) и запустить обработку...
67 zdas
 
24.11.09
17:10
(66) какая ТЗ, автора уже ввело в тупик поле неограниченной длины.
68 AeDen
 
24.11.09
17:12
(65) Не подсказывай:)
69 birkoFFFF
 
24.11.09
17:13
(68) да жалко уже, сейчас совсем запутают, убежит в диком ужасе )))
70 Попытка1С
 
24.11.09
17:15
(69) Ну выложи ей обработку, у нее может ИТС нет.
71 tedien
 
24.11.09
17:17
АВТОРУ НУЖНО ВОТ ЭТО:
http://img689.imageshack.us/img689/9895/21384461.jpg

вот это более похоже на правду.. что-то типа этого :)
З.Ы. не волнуйтесь не убегу от ужаса :) убегу по окончании работы.. через полчасика эдак
72 birkoFFFF
 
24.11.09
17:18
73 tedien
 
24.11.09
17:18
скромный вопросик... а что за циферки в скобочках? и как их ставить? :-[
74 birkoFFFF
 
24.11.09
17:19
(73) это ссылка к посту, в скобках номер поста к которому ответ пишешь, а пишется прямо вот так "(73)" ))))
75 tedien
 
24.11.09
17:20
хм.. а как распознать какому посту это пишется? не считать же вручную
76 zdas
 
24.11.09
17:20
(75) нажав на эти циферки можно перейти к посту на который отвечает.
77 zdas
 
24.11.09
17:21
+76 отвечает = отвечают
78 tedien
 
24.11.09
17:22
(78)понятно.. пасиб за помощь :) буду разбираться с посылочкой ))
ах да.. осталась еще фотка...;)
79 tedien
 
24.11.09
17:22
ой.. сама с собой О_О
80 AeDen
 
24.11.09
17:45
(70)(72)
3. Не публикуйте материалы, нарушающие авторские права, а также ссылки на них.
81 AeDen
 
24.11.09
17:46
И не надо говорить, что это тут не причем! Права принадлежат фирме 1С!
82 Mnemonic1C
 
24.11.09
17:59
А дэвушка то красивая:)
83 zdas
 
24.11.09
18:00
Белорусь)))) симпотичная, я и не ожидал другого))))
84 birkoFFFF
 
24.11.09
18:54
(80) где тут что нарушает ? Она в свободном доступе...
85 Злопчинский
 
24.11.09
19:31
полученную печатную форму сохранить в эксель не штатным методом, а через Йоксель - и будет вам всякое щастье.. и с длинными строками и с объединенными ячейками и со скоростью сохранения, и со вставленными картинками и прочее всякое мечтательное щасте.
86 Злопчинский
 
24.11.09
19:32
да! и это фсе можно без самого экселя на машине...
87 tedien
 
25.11.09
13:18
Прям всю засмущали :-[
88 tedien
 
26.11.09
16:13
так-так-так... И снова вопрос блондинки :)
Как засунуть в запрос поле  неограниченной длины? :)) Или как-нить это поле ограничить?
89 Ёпрст
 
гуру
26.11.09
16:24
(88) лучше перекраситься.
90 AeDen
 
26.11.09
16:33
(84) Где в свободном?
91 AeDen
 
26.11.09
16:34
(88) зачем запрос, и почему возникает проблема, если поле - строка неограниченной длинны? Я почему-то проблем вообще не вижу...
92 tedien
 
27.11.09
13:56
(89) натурцвет!
93 AeDen
 
27.11.09
15:25
(92) привет:) Грозилась сегодня постучаться в аську...
94 Alise85
 
27.11.09
15:30
(0) радость то какая!!! Землячка!!!! Привет!!!!
95 tedien
 
27.11.09
15:48
(93) стучусь...
(94) Привет :)
96 AeDen
 
27.11.09
15:49
Не вижу:)
97 tedien
 
27.11.09
15:51
(96)ладно.. пойдем так 422-980-217
AdBlock убивает бесплатный контент. 1Сергей