Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Вывод из Excel цен

Здравствуйте! Возник такой вопрос: как можно вывести из xls-файла (Excel 97-2003) данные из разных столбцов в табличную часть, при этом чтобы они не перебивались (например, в отчёте одного вида нужно вывести данные из столбца 29 в "Цены для физ.лиц" и "Цены для юр.лиц", а в другой - из 61 и 59 соответственно, но это должно выполняться всё в одном документе):

Код:
Процедура ДействияФормыГрузимЦены(Кнопка)
Если ЗначениеЗаполнено(файл) тогда
сообщить(файл);
док=получитьComобъект(файл);
номстр=1;
ии=0;
нн=0;
Сообщить(сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value));
пока сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value)<>"zzzzzz" цикл//смотрим код!!!
ии=ии+1;
Зкод=сокрлп(""+док.SHeets("Лист").Cells(номстр,1).value);
сообщить(Зкод);//код
Знаим=сокрлп(""+док.SHeets("Лист").Cells(номстр,2).value);//наименование
спр=справочники.Прейскурант.НайтиПоКоду(СокрЛП(Зкод));
Если спр.Ссылка<>справочники.Прейскурант.ПустаяСсылка() Тогда
стро=Работы.Добавить();
стро.ПунктПрейскуранта=спр.Ссылка;
стро.код=Зкод;
стро.ценанас=сокрлп(""+док.SHeets("Лист").Cells(номстр,61).value);
стро.ценаюл=сокрлп(""+док.SHeets("Лист").Cells(номстр,59).value);
Иначе
  сообщить("не найден код="+Зкод);
КонецЕсли; 
номстр=номстр+1;
КонецЦикла;
  Конецесли;
КонецПроцедуры
В общем, должно быть так:
в отчёте "Прейскурант-1" должны выводиться цены из столбца 29 в столбцы табличной части под названиями "Цены для физ.лиц" и "Цены для юр.лиц" (два одинаковых значения из "29"), а в отчёте "Прейскурант-2" - из столбцов 61 для физ.лиц и 59 - для юр.лиц (для них в табличной части предусмотрены столбцы "Цены для физ.лиц" и "Цены для юр.лиц".
Ответ:
Так понимаю, вас не смущает тот факт, что количество строк в листах Excel немного так разное и вы работаете с каким-то одним листом, на котором есть нужные вам значения либо в 29 колонке, либо в 59/61?

вообще без разницы, как будут называться листы в разных книгах, главное - выбирать нужный лист.

Открыть второй файл и работать с ним.
Вопрос: Загрузка папок (групп) из Excel в справочник "Номенклатура"

Добрый день. Не подскажите, есть ли такая обработка, которая бы делала загрузку папок (групп) из Excel в справочник "Номенклатура"?
Ответ:
Есть примерный набросок эксел.документа ,информацию из которого нужно загурзить в справочник "Номенклатура " конфигурации УПП. Нужно ,чтоб при переносе создавались группы(родители) элементов.. Подскажите,как можно довести до ума существующую обработку ЗагрузкаДанныхИзТабличногоДокумента.epf.

Вложения:

  • Размер файла:
    171 КБ
    Просмотров:
    147
Вопрос: УТ 11.3 Загрузка данных из Excel на стороне сервера

Добрый день!
Хочу с помощью внешней обработки под УТ 11.3 считывать данных из Excel на стороне сервера построчно, и обрабатывать. Но работа с эксель вроде как возможно только на клиенте.
Как решается такая задача? Очень хочу использовать именно xls, а не csv
Ответ:
С экселем вроде разобрался - он читается на сервере. Просто...пришлось перераспределить написанный код по процедурам сильно их переосмыслив....
Вопрос: Выпадающий список в ячейке excel

Добрый день. Ситуация такая, из 1с программно формируется файл excel. В этой таблице необходимо сделать выпадающий список, чтобы пользователь мог выбрать значение из этого списка. Как программно в 1С создать такой список? Нашел в интернете вот такое, но не пойму как это написать в 1С
Код:
Range("A2").Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="Максим, Иван, Николай"
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
Может есть у кого пример?
Ответ:
Нашел сам, вот так можно написать в 1С:
Код:
Лист.Cells(1,1).Validation.Add(3,1,1,("0;10;18"));
    Лист.Cells(1,1).Validation.IgnoreBlank=1;
    Лист.Cells(1,1).Validation.InCellDropdown=1;
    Лист.Cells(1,1).Validation.ShowInput=0;
    Лист.Cells(1,1).Validation.ShowError=1;
Вопрос: Active Document Сохранение в Excel

Платформа 8.3.5.1248. Макет Active Document (Excel). При выводе документа excel открывается, показывает документ и сразу закрывается. "Windows(1).Visible" не помогает(. До перехода на 8.3 на платформе 8.2 работало (Word-ий документ остается открытым).
СОМОбъектExcel.Application.Visible = Истина;
СОМОбъектExcel.Windows(1).Visible = Истина;
Может кто-то сталкивался?
Ответ: trew,

Excel 2013. У меня две копии базы - старая и новая. В старой этот кусочек работает, документ открывается и остается открытым. В новой - Excel закрывается.

Ваше предложение - не помогло(
Вопрос: РЕШЕННО загрузка файла Excel в 1С через Microsoft.ACE.OLEDB.

Не работает
Код:
СтрокаПодключения="Provider=Microsoft.ACE.OLEDB.16.0;Data Source=G:\11\Кадорр, Б.Арнаутская 26-30.xlsx;Extended Properties=Excel 16.0;";
    // создание соединения
        Connection=Новый ComObject("ADODB.Connection");
    // Подключение
    Попытка
        Connection.Open(СтрокаПодключения);
    Исключение
       // Возврат

        Сообщить("Ошибка подключения к EXCEL");
        Возврат;
    КонецПопытки;
    сообщить("УСПЕШНО EXCEL");   
кто знает почему?
Excel 2016, 1c 8.3.9.2033
Ответ:
нет, я просто скачала AccessDatabaseEngine_X64 и инсталлировала отдельно, а в
Код:
СтрокаПодключения="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=G:\11\Кадорр, Б.Арнаутская 26-30.xlsx;Extended Properties=Excel 12.0;";
заменила 16 на 12
Вопрос: Перенос данных из Excel в 1С

Прохожу практику, попал на фирму занимающуюся разработкой приложений для 1С.
Мне шеф поставил задачу создать перенос данных из Excel в 1С.
На данном этапе от меня только то и требуется найти способ получения данных их определенной ячейки табличного документа (SpreadSheet). Данные в табличный документ переносятся при помощи копирования из Экселя (такое условие).
1. Пытаюсь выгрузить их в таблицу значений для дальнейшей обработки (Сортировки). Кто подскажет, является ли мой подход для выполнения задачи правильным?
2. Как узнать количество Строк и Столбцов табличного документа включая пустые ячейки (иногда в заголовке, иногда в первом столбце)
Ответ:
Спасибо за ответ, получилость загрузить данные из таблицы EXCEL в таблицу значений, получилось прочитать метаданные из базы данных и загрузить их во вторую таблицу значений.
Создал таблицу настроек, в которой значениям из Excel противопоставляются значения из базы данных. Но вот если программа сама не сделала правильного сопоставления, требуется ручной выбор.
Прикрепляю скриншот для более точного понимания моей проблемки. Мне надо кликнуть на поле и получить возможность выбрать (возможно из выпадающего списка) соответствующее значение из базы даных (оно уже находится в списке значений).
Благодарен за любую идею

Вложения:

  • Размер файла:
    20,9 КБ
    Просмотров:
    9
Вопрос: Загрузка прайс-листа из excel

Всем привет. Ребят, есть ли в УТ 11.3 стандартная возможность загружать прайс-листы excel?

Перечитал все книги, весь инет. Ответ только один

В прайс-листе сделать так

но это только при условии, что прайс предварительно был выгружен в этом же прайсе одноименной командой?
Ответ:
Этот механизм, я так понимаю, создаст номенклатуру поставщиков?
Короче. Есть прайс листы от поставщиков. В формате excel. Структура у всех разная. Причем очень. Нужно грузить это в программу. Потом осуществляют продажу этих номенклатурных позиций уже по розничным ценам.
Вопрос: Чтение ИЗ Excel в Таблицу значений

Всем доброго дня.

Есть ЗУП КОРП 2.5 - обычные формы. Делаю загрузку из екселя. В файле больше 1000 строк.

Проблемы возникли на стадии чтения из файла:

1. Некоторые ячейки не читаются, тип в екселе - дата (если открыть файл или просто перетащить в 1С, то все ок и ячейки заполнены, но при чтении они пустые).
2. Постоянные вылеты, нужно перезагружать 1С, закрывать ексель из диспетчера.
3. Не читается *.xlsx (*.xls с абсолютно такой же начинкой читается).

Функция, которой я перекачиваю ексель в ТаблицаЗначений (нашел, эта хоть как-то работает в отличие от остальных):

Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
Функция ПолучитьТЗИзEXCEL(ПутьКФайлу, ИмяНомерСтраницы, Заголовок = Истина, ПерваяСтрока = 0) Экспорт
 
    ТЗ  = Новый ТаблицаЗначений;
 
    #Если Клиент Тогда
        Состояние("Подключение к файлу Excel...");
    #КонецЕсли
    //
    Попытка
        Эксель = Новый COMОбъект("Excel.Application");
        Версия = СтрПолучитьСтроку(СтрЗаменить(Эксель.Version, ".", Символы.ПС), 1);
    Исключение
        Сообщить("Ошибка подключения к "+ПутьКФайлу+" : "+ОписаниеОшибки(),СтатусСообщения.Важное);
        Возврат ТЗ;
    КонецПопытки;
    //
    Книга = Эксель.WorkBooks.Open(ПутьКФайлу);
    // Выбираем данные запросом из таблицы файла по имени страницы
    Если ТипЗнч(ИмяНомерСтраницы) = Тип("Число")  Тогда
        Лист        = Книга.WorkSheets(ИмяНомерСтраницы);
        ИмяСтраницы = Лист.Name;
    Иначе
        ИмяСтраницы = ИмяНомерСтраницы;
    КонецЕсли;
    //
    // Определим диапазон данных Excel
    ПослЯчейка = СтрЗаменить(Книга.WorkSheets(ИмяСтраницы).Cells(1,1).SpecialCells(11).Address, "$", "");
    //
    Эксель.Application.Quit();
    //
    Эксель  = неопределено;
    Книга   = неопределено;
    Лист    = неопределено;
 
    // Подлючаемся
 
    Connection          = Новый COMОбъект("ADODB.Connection");
    Если Версия = "12" ИЛИ Версия = "14" Тогда
        СтрокаПодключения   ="Provider =Microsoft.ACE.OLEDB.12.0;Data Source="+ПутьКФайлу+";Extended Properties=""Excel 12.0 Xml;HDR="+?(Заголовок,"YES","NO")+";IMEX=1""";
    Иначе
        СтрокаПодключения   ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+ПутьКФайлу+";Extended Properties=""Excel 8.0;HDR="+?(Заголовок,"YES","NO")+";IMEX=1""";
    КонецЕсли;
 
    Попытка
        Connection.Open(СтрокаПодключения);
    Исключение
        Сообщить("Ошибка подключения!"+ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
        Возврат ТЗ;
    КонецПопытки;
 
    Command=Новый COMОбъект("ADODB.Command");
    Command.ActiveConnection=Connection;
    Command.CommandText = ?(ПерваяСтрока = 0, "Select * From [" + ИмяСтраницы + "$]", "Select * From [" + ИмяСтраницы + "$A" + ПерваяСтрока + ":" + ПослЯчейка + "]");
 
    Попытка
        Записи=Command.Execute();
    Исключение
        Сообщить("Ошибка при выполнении запроса!"+ОписаниеОшибки(),СтатусСообщения.ОченьВажное);
        Возврат ТЗ;
    КонецПопытки;
 
    Для НомерПоля = 0 По Записи.Fields.Count-1 Цикл
        СтрКолонка = Строка(Записи.Fields.Item(НомерПоля).Name);
        СтрКолонка = СтрЗаменить(СтрКолонка,"№","Num");
        НедопустимыеСимволы = " ~`!@""#№$;%^:&?*()-+=/\|.,";
        Для i = 1 По СтрДлина(НедопустимыеСимволы) Цикл
            СтрКолонка = СтрЗаменить(СтрКолонка, Mid(НедопустимыеСимволы, i, 1), "_")
        КонецЦикла;
        ИмяКолонки = СокрЛП(СтрКолонка);
        ТЗ.Колонки.Добавить(ИмяКолонки, , СтрКолонка);
    КонецЦикла;
 
    Пока НЕ Записи.EOF() Цикл
        НоваяСтрока = ТЗ.Добавить();
        Для НомерПоля = 0 По Записи.Fields.Count-1 Цикл
            НоваяСтрока[НомерПоля] = Записи.Fields(Записи.Fields.Item(НомерПоля).Name).Value;
        КонецЦикла;
        Записи.MoveNext();
    КонецЦикла;
 
    Command = Неопределено;
    Записи  = Неопределено;
 
    Возврат ТЗ;
 
КонецФункции
Подскажите хороший проверенный механизм чтения.
Ответ:
Код 1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
// Функция получает данные из файла Excel
//
// Параметры:
//   пФайл     - Имя файла
//   пЛист     - Имя листа с данными
//   СтруктураКолонок - Структура вида "ИмяКолонки" - "НомерКолонки"
//                      если не задано, созадутся колонки вида "К1", "К2"
//   XLSОбъект - COM объект типа "Excel.Application"
//
// Возвращаемое значение:
//   ТаблицаЗначений
//
Функция Excel_ПолучитьДанные_COMArray(пФайл, пЛист, СтруктураКолонок = Неопределено, Знач НачСтрока = 0, Знач КонСтрока = 0, XLSОбъект = Неопределено) Экспорт
 
    #Если Клиент Тогда
    Состояние("Открытие Excel");
    #КонецЕсли
 
    Если XLSОбъект = Неопределено Тогда
        XLSОбъект = Новый COMОбъект("Excel.Application");
        XLSОбъект.Visible       = Ложь;
        XLSОбъект.DisplayAlerts = Ложь;
    КонецЕсли;
 
    Попытка
        Book = XLSОбъект.Workbooks.Open(пФайл, , Истина);
    Исключение
        Сообщить ("Проблемы с подключением к Excel" );
        Возврат Неопределено;
    КонецПопытки;
 
    Лист = Book.Sheets(1);
    КолвоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
    КолвоСтрок   = Лист.Cells(1,1).SpecialCells(11).Row;
 
    Таблица = Новый ТаблицаЗначений;
 
    Если СтруктураКолонок = Неопределено Тогда
 
        Для Счетчик = 1 По КолвоКолонок Цикл
            Колонка = Таблица.Колонки.Добавить("К" + Счетчик);
        КонецЦикла;
 
    Иначе
 
        МаксимальныйНомерКолонки = 0;
        Для каждого КлючИЗначение Из СтруктураКолонок Цикл
            Колонка = Таблица.Колонки.Добавить(КлючИЗначение.Ключ);
            МаксимальныйНомерКолонки = Макс(МаксимальныйНомерКолонки, КлючИЗначение.Значение);
        КонецЦикла;
 
        КолвоКолонок = Мин(КолвоКолонок, МаксимальныйНомерКолонки);
 
    КонецЕсли;
 
    НачСтрока = ?(НачСтрока = 0, 1, НачСтрока);
    КонСтрока = ?(КонСтрока = 0, КолвоСтрок, КонСтрока);
    КонСтрока = Мин(КонСтрока, КолвоСтрок);
 
    // Массив типа COMSafeArray
    Массив = Лист.Range(Лист.Cells(НачСтрока, 1), Лист.Cells(КонСтрока, КолвоКолонок)).Value;
    КолвоСтрок   = Массив.GetUpperBound(1);
 
    Для НомерСтроки = 1 По КолвоСтрок Цикл
 
        #Если Клиент Тогда
        Состояние("Чтение файла: " + Формат(НомерСтроки) + " из " + Формат(КолвоСтрок));
        ОбработкаПрерыванияПользователя();
        #КонецЕсли
 
        НоваяСтрока = Таблица.Добавить();
 
        Если СтруктураКолонок = Неопределено Тогда
 
            Для НомерКолонки = 1 По КолвоКолонок Цикл
 
                НоваяСтрока["К" + Формат(НомерКолонки, "ЧГ=0")] = Массив.GetValue(НомерКолонки, НомерСтроки);
 
            КонецЦикла;
 
        Иначе
 
            Для каждого КлючИЗначение Из СтруктураКолонок Цикл
 
                НоваяСтрока[КлючИЗначение.Ключ] = Массив.GetValue(КлючИЗначение.Значение, НомерСтроки);
 
            КонецЦикла;
 
        КонецЕсли;
 
    КонецЦикла;
 
    XLSОбъект.Application.Quit();
    Возврат Таблица;
 
КонецФункции
Так работает лучше, хоть и приходится передавать туда имя листа и структуру колонок и начальная строка не работает. Времени переделать нету...
Вопрос: Глюк с чтением Excel на 8.3.13.1644

Глюк в том, что при чтении xslx-файла отображаются кракозябры. Как в старые добрые времена войн кодировок.
Повторить глюк можно так:
1. Создаём в режиме предприятия новый табличный документ.
2. Пишем что-нибудь на кириллице
3. Копируем это в буфер обмена
4. Создаём новый Excel-документ (использовался Excel 13)
5. Вставляем скопированный текст и сохраняем файл (как xlsx)
6. Открываем этот файл в 1с и видим позор и унижение программистов 1с-платформы.
Как же так? На дворе конец 18 года. Те же грабли, что и 10 лет назад.

Если в excel-файле поменять шрифт на что-либо, то всё ok. А вот со шрифтом по умолчанию (у меня - Arial) - беда.
Или это и есть санкции как где-то писали: “Российским чиновникам запретили печатать документы популярными шрифтами из-за санкций”. Блин, но мы тут совсем не чиновники!
Ответ: () У вас это программисты конфы косячат. Им можно, у них зарплаты в разы меньше. Системщикам такие баги непозволительны :-)