![]() |
![]() |
![]() |
|
СКД в Excel с готовыми формулами | ☑ | ||
---|---|---|---|---|
0
programmistochka
04.08.10
✎
17:32
|
I need help, товарисчи... Задача такая - получить список номенклатуры с ценой и выгрузить в эксель - для передачи файла покупателю. Покупатель в свою очередь проставляет в экселевском файле количество товара, а сумма должна автоматически посчитаться - т.е. ячейка Сумма должна содержать формулу (= введенное количество*цену товара).
Как 1с экспортирует отчет в Эксель, полученный с помощью СКД - устраивает, дабы чтоб упростить себе работу и не выгружать "ручками" весь отчет я заполняю колонку "СУММА" в СКД формулой, полученной из VB (ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"). Пример запроса для СКД: ВЫБРАТЬ спрНоменклатура.Родитель КАК Группа, спрНоменклатура.Артикул КАК Артикул, спрНоменклатура.Ссылка КАК Номенклатура, 0 КАК ЗаказШт, ЦеныНоменклатурыСрезПоследних.Цена КАК БазоваяЦенаРуб, "=RC[-2]*RC[-1]" КАК Сумма ИЗ Справочник.Номенклатура КАК спрНоменклатура ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних ПО спрНоменклатура.Ссылка = ЦеныНоменклатурыСрезПоследних.Номенклатура.Ссылка И (ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦены) ГДЕ спрНоменклатура.ПометкаУдаления = ЛОЖЬ И спрНоменклатура.ЭтоГруппа = ЛОЖЬ Результат: формула передается как символы, но если в ячейке сумма нажать энтр))) - то считает %)))) Есть ли нормальный способ передать формулу? |
|||
1
Лефмихалыч
04.08.10
✎
17:37
|
во-первых, на кой куй вам скд?
|
|||
2
Новенький_2009
04.08.10
✎
17:46
|
а откуда ексель то узнает, что ты в ячейку ему формулу то пишешь? А не строковое? Алё чтоль? =)
|
|||
3
Новенький_2009
04.08.10
✎
17:48
|
2 варианта:
1. оставить все как есть, открывать файл екселя и приводить значения нужных колонок к нужному формату. 2. писать напрямую по кому в ексель и там уже форматировать колонки как тебе нужно. |
|||
4
Zeldan
04.08.10
✎
18:40
|
без фотки не взлетит..
|
|||
5
programmistochka
05.08.10
✎
09:21
|
СКД - красивый отчет делает - цветастенький)) все как бухгалтерия хочет
|
|||
6
programmistochka
05.08.10
✎
09:23
|
Спасибо, меня тоже мой вариант смущает
|
|||
7
Cube
05.08.10
✎
09:32
|
(4) +1 А фотки в профиле-то нет... :)
|
|||
8
programmistochka
05.08.10
✎
14:40
|
нет))) а зачем?
|
|||
9
Zeldan
05.08.10
✎
14:58
|
(8)без фотки не помогут...
|
|||
10
programmistochka
05.08.10
✎
15:05
|
мужики блин, программисты)))
|
|||
11
GedKo
05.08.10
✎
15:05
|
(8) это аналог бус у местных папуасов
|
|||
12
programmistochka
05.08.10
✎
15:21
|
а как ПРОГРАММНО вызвать: меню 1с - Файл - сохранить копию (формат *.xls)?:-[
|
|||
13
programmistochka
05.08.10
✎
15:22
|
это для того, чтоб обработать сохраненный средствами 1С файл эксель
|
|||
14
Лефмихалыч
05.08.10
✎
15:26
|
(12) ДиалогВыбораФайла
|
|||
15
mythos
05.08.10
✎
15:27
|
Метод Записать у табличного документа в который выводится отчет, это чтобы в эксель сохранить.
ТабличныйДокумент (SpreadsheetDocument) Записать (Write) Синтаксис: Записать(<Имя файла>, <Тип файла таблицы>) |
|||
16
mythos
05.08.10
✎
15:29
|
После сохранения его можно открыть средствами COM, и там проставить одной ячейке формулу, а потом программно "растянуть" эту формулу на колонку.
|
|||
17
mythos
05.08.10
✎
15:34
|
Excel = Новый COMОбъект("Excel.Application");
Excel.Workbooks.Open(ИмяФайлаОбработки); Excel.Range("AD" + КоличествоСтрокВЭкселе).Select(); Excel.Application.ActiveCell.FormulaR1C1 = "=RC[-2]*RC[-1]"; Excel.Application.Selection.AutoFill(Excel.Range("AD" + ПерваяСтрока + ":AD" + КоличествоСтрокВЭкселе), 0); Здесь AD - буквенный номер столбца с формулой |
|||
18
mythos
05.08.10
✎
15:35
|
Количество строк в экселе можно получить так:
КоличествоСтрокВЭкселе = Excel.Cells.SpecialCells(11).Row; |
|||
19
programmistochka
05.08.10
✎
15:57
|
не получается....
в форму - в "Результат" - выводится результат СКД, ниже поле выбора файла для сохранения: Процедура ФайлНачалоВыбора(Элемент, СтандартнаяОбработка) // Выделим имя каталога из имени файла ИмяКаталога = Файл; ДлинаСтроки = СтрДлина( Файл ); Для Пц = 1 По ДлинаСтроки Цикл Симв = сред(Файл, ДлинаСтроки - Пц + 1, 1); Если Симв = "\" Тогда ИмяКаталога = Лев(Файл, ДлинаСтроки - Пц); Прервать; КонецЕсли; КонецЦикла; Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение); Диалог.Каталог = ИмяКаталога; Режим = РежимДиалогаВыбораФайла.Сохранение; ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(Режим); ДиалогСохраненияФайла.ПолноеИмяФайла = ""; Фильтр = "Лист Excel97(*.xls)|*.xls"; ДиалогСохраненияФайла.Фильтр = Фильтр; Если ДиалогСохраненияФайла.Выбрать() = Истина Тогда Файл = ДиалогСохраненияФайла.ВыбранныеФайлы.Получить(0); КонецЕсли; ЭлементыФормы.Результат.Записать(Файл ); КонецПроцедуры Файл эксель - абракадабра получается, а если большой список в отчете (без отборов - весь справочник Номенклатура), то эксель ругается что файл загружен не полностью: Это сообщение может появиться, если: Попытка открыть файл, содержащий более 65 536 строк или 256 столбцов. Чтобы устранить это затруднение, откройте исходный файл в текстовом редакторе, например Microsoft Word. Сохраните исходный файл, разделив его на несколько меньших файлов, удовлетворяющих ограничениям на число строк и столбцов, а затем откройте эти меньшие файлы в приложении Excel. Если не удается открыть исходный файл в текстовом редакторе, попробуйте импортировать данные в Microsoft Access, а затем экспортировать подмножества данных из Access в Excel. Попытка вставить данные, разделенные знаком табуляции, в слишком маленькую область. Чтобы устранить это затруднение, выделите в таблице область, в которой могут поместиться все элементы с разделением. Примечания.> Настройка приложения Excel на превышение предела в 65 536 строк и 256 столбцов не предусмотрена. По умолчанию книга Excel состоит из трех листов. Каждый лист может содержать до 65 536 строк и 256 столбцов данных, книги могут состоять из более чем трех листов; при этом у компьютера должен быть достаточный объем оперативной памяти для работы с дополнительными данными. |
|||
20
programmistochka
05.08.10
✎
15:58
|
а если ручками сохранять - файл - сохранить копию - *.exl - то прекрасно сохраняется все - с группировками и цветастенько
|
|||
21
programmistochka
05.08.10
✎
16:06
|
ТабличныйДокумент (SpreadsheetDocument)
Записать (Write) Синтаксис: Записать(<Имя файла>, <Тип файла таблицы>) Записывает табличный документ в файл. Примечание: При работе на сервере или через com-соединение использует только файлы форматов mxl и txt. |
|||
22
mythos
05.08.10
✎
16:19
|
Здесь:
ЭлементыФормы.Результат.Записать(Файл ); Надо указывать тип файла ТипФайлаТабличногоДокумента (SpreadsheetDocumentFileType) Значения HTML (HTML) HTML3 (HTML3) HTML4 (HTML4) MXL (MXL) MXL7 (MXL7) TXT (TXT) XLS (XLS) XLS95 (XLS95) XLS97 (XLS97) |
|||
23
mythos
05.08.10
✎
16:19
|
ЭлементыФормы.Результат.Записать(Файл, ТипФайлаТабличногоДокумента.XLS97);
|
|||
24
programmistochka
05.08.10
✎
16:24
|
урраааа)))) работает))) тра-ля-пам-пам))))) Спасибо, mythos ;*
|
|||
25
mythos
05.08.10
✎
16:28
|
а как же формулы? сохранить-то полдела....
|
|||
26
Zeldan
05.08.10
✎
17:10
|
(25)я же говорил фото решает....
|
|||
27
programmistochka
06.08.10
✎
10:16
|
Сохранять - самое важное было)) формулы работают
|
|||
28
programmistochka
06.08.10
✎
10:17
|
Zeldan, ты бы лучше помогал, а не фото разглядывал)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |