Четверг, 09.05.2024, 23:05
Главная Регистрация RSS
Приветствую Вас, Гость
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Основной » Прочее » Загрузка Таблицы в параметр в консоли запроса.
Загрузка Таблицы в параметр в консоли запроса.
SimolДата: Суббота, 27.04.2013, 17:37 | Сообщение # 1
Полковник
Группа: Проверенные
Сообщений: 237
Репутация: 27
Статус: Оффлайн
см. добавленное 27.04.2013

Дошел до этого.

В одной из версий была добавлена возможность загрузки в параметр запроса типа ТаблицаЗначений внешний файл. Есть пожелания по этому инструменту (если не указано другое, то речь про форму "ТаблицаЗначений", обработки "ирПлатформа"):

1. При смене типа колонок сделать сделать более интеллектуальное преобразование значений ячеек из строки. Сейчас строка "01.12.2012" в дату не преобразуется. Например, если текущий вариант вернул пустое значение, то попробовать конвертнуть функциями, аналогичными ИТС-ой обработки "Загрузка данных из табличного документа" - мПривестиКЧислу, мПривестиКДате.
2. Заголовки колонок делать на выбор пользователя либо как сейчас Колонка1, Колонка2, ... либо из первой строки таблицы. В случае первой строки таблицы эту строку в таблицу не грузить, а заголовки вида "Дата начала" преобразовывать в "ДатаНачала".
3. Доступна загрузка mxl. Просьба добавить xls (на данный момент таблица из екселя копирую в табличный документ. сохраняю и после этого могу загрузить в консоль запроса).
4. При выборе строки в таблице с описанием колонок находясь в колонке тип открывается окно настройки типа в не редактируемом режиме. Было бы удобно. чтобы был сразу редактируемый режим.
5. Прошу добавить возможность, когда загрузил таблицу, настроил колонки и нужно перечитать таблицу. Настройки колонок при этом сохраняются и загрузка идет в них же.
Сейчас как бы это работает, но добавляются новые пустые колонки.

6. Создать конструктор, который по выбранному параметру типа Таблица значений создавал запрос для загрузки Таблицы во временную таблицу. Чтобы руками не набирать имена колонок параметра типа Таблица Значений. То есть:

Цитата
ВЫБРАТЬ
ТаблицаПараметр.Колонка1 КАК Колонка1,
ТаблицаПараметр.Колонка2 КАК Колонка2,
<....>
ПОМЕСТИТЬ ТаблицаПараметр
ИЗ
&ТаблицаПараметр КАК ТаблицаПараметр


7. При изменении типа колонок сохранять их очередность. Сейчас сортирует по типу

Добавлено (27.04.2013, 17:37)
---------------------------------------------
Реанимирую тему немного ее уменьшив.

Проблема следующая.
Обработка ирПлатформа, форма ТаблицаЗначений.

Задача следующая:
1) В консоли запроса параметр ТЗ, куда я загружаю внешнюю таблицу.
2) Выполняю необходимый запрос
3) По результату запроса создаю необходимые дкоументы
4) В параметр загружаю следующую внешнюю таблицу и повтор с п.2

Важно то. что я после первой загрузки я настраиваю типы колонок  и необходимо, чтобы следующий внешний файл загрузился в те же колонки и типы сохранились.
Но при первой загрузке внешней таблицы создаются колонки Колонка1, Колонка2,....КолонкаN. При повторной загрузке Создается еще один комплект колонок с суффиксом "1", но данные загружаются в первоначальные колонки.

Я начал смотреть функцию МакетВТаблицуЗначений. в ней создаются колонки, при этом вызывается функция СформироватьИмяКолонки внутри которой есть сравнение
Цитата
Если ОтфильтрованныеСтроки.Получить(0) <> ИДТекСтроки Тогда
Где элемент массива сравнивается с уникальным идентификатором. Не пойму замысел этого сравнения, ведь оно всегда будет выполняться

Я хочу описанные в первом посту "хотелки" реализовать и прислать на ревизию, но застрял на создании колонок. Зачем там уникальный идентификатор?


Сообщение отредактировал Simol - Суббота, 27.04.2013, 17:38
 
tormozitДата: Суббота, 04.05.2013, 10:25 | Сообщение # 2
Генералиссимус
Группа: Администраторы
Сообщений: 6195
Репутация: 159
Статус: Оффлайн
По поводу строки
Код
Если ОтфильтрованныеСтроки.Получить(0) <> ИДТекСтроки Тогда
Она содержится в заимствованном фрагменте кода. Попытался разобраться и тоже пришел к выводу, что условие это будет всегда выполняться. Похоже когда то ранее работу с уникальным идентификатором просто забыли убрать. Можно смело убрать эту проверку.
 
SimolДата: Вторник, 03.09.2013, 17:01 | Сообщение # 3
Полковник
Группа: Проверенные
Сообщений: 237
Репутация: 27
Статус: Оффлайн
Сделал свои "хотел" файл

Основное использование механизма - загрузка файла ексель по временную таблицу запроса для последующей обработки в консоли запроса.

Изменена форма ТаблицаЗначений.

1) Добавлена загрузка из ексель
2) Добавлено определение типов (не удобно, что тип строка неграниченой длины, она не тянется во временную таблицу)
3) Добавлено чтение заголовков из первой строки
4) Добавлено формирование текста запроса, для загрузки таблицы значений во временную таблицу запроса
5) Переработана загрузка макета в таблицу значений (комментарий в модуле)

п.4 правильнее сделать в консоли запросов на закладке параметров типа "Установить текст запроса по таблице запросов", но не рискнул ковырять консоль запросов.

Комментарии в тексте

При загрузке макета в таблицу значений и при определении типов сделал следующие умышленные урезания:
1) Данные в ячейки загружаются с обрезанием крайних пробелов
2) Колонки с составным типом преобразуются в колонки с одним типом Строка
 
tormozitДата: Вторник, 03.09.2013, 17:11 | Сообщение # 4
Генералиссимус
Группа: Администраторы
Сообщений: 6195
Репутация: 159
Статус: Оффлайн
Решить задачу "загрузка файла ексель по временную таблицу запроса для последующей обработки в консоли запроса" можно и другим путем. Использовать ADO тип запроса и результат поместить во временную таблицу кнопкой, добавленной в версии 2.91. Кстати, такой способ будет заметно быстрее (при использовании GameWithFire) на больших объемах.

Но думаю загрузка в таблицу значений из файла  EXCEL действительно будет выигрывать в ряде случаев. Какие ее плюсы ты бы выделил?
 
SimolДата: Вторник, 03.09.2013, 23:04 | Сообщение # 5
Полковник
Группа: Проверенные
Сообщений: 237
Репутация: 27
Статус: Оффлайн
Поправил файлик (ошибка была в формируемом тексте запроса): Ссылка наобработку

ADO тип запроса не пробовал еще.

Просто старая задача возникающая периодически: есть ексель, по нему нужно что-то сделать в  1С (создать документы, что-то изменить, что-то сопоставить)

Мы в ранних версиях уговорили сделать в обработке ирПлатформа в форме  ТаблицаЗначений возможность загрузки с внешнего фала и она в одной из версий появилась. Вот я этот механизм и доделал, до того, как думал его использовать.

В моем предложении порядок действий такой:
1) Параметрах добавляем параметр типа таблицаЗначений
2) Нажимаем 3 точки
3) Нажимаем Очистить
4) Нажимаем Загрузить Из ексаль
5) Если в первой строке заголовки, то нажимаем соответствующую кнопку
6) Если в п.5 нажали, то после ухода первой строки возможно некоторые колонки удастся определить как число, дата, булево потмоу нажимаем определить типы. Можно вставить в кнопку в п.5
7) Формируем текст запроса загрузки во временную тбалицу с нужными заголовками и типами

ADO попробую и отпишу есть ли у меня плюсы по сравнению с той загрузкой

Добавлено (03.09.2013, 17:36)
---------------------------------------------
ADO действительно кушает ексель.

Пока непонятно:
1) Не найден ZLIB1.dll
2) Все загружено с типом строка, ищу как распознать числовые колонки
3) Ищу как загрузить по временную таблицу

Добавлено (03.09.2013, 17:38)
---------------------------------------------
Во временную загрузил.
4) Ищу как сделать запрос SQL с использованием полученной временной таблицей

Добавлено (03.09.2013, 23:04)
---------------------------------------------
Придумал еще одно применение.
При отладке можно через ис() исследовать ТаблицуЗначений и загрузить в нее внешний файл

Сообщение отредактировал Simol - Вторник, 03.09.2013, 17:41
 
tormozitДата: Среда, 04.09.2013, 08:21 | Сообщение # 6
Генералиссимус
Группа: Администраторы
Сообщений: 6195
Репутация: 159
Статус: Оффлайн
Цитата
Во временную загрузил.

В какую? Можно загружать во временную таблицу внешней СУБД, а можно во временную таблицу 1С.

Цитата
 Ищу как сделать запрос SQL с использованием полученной временной таблицей

В чем тут сложность?
 
SimolДата: Среда, 04.09.2013, 11:20 | Сообщение # 7
Полковник
Группа: Проверенные
Сообщений: 237
Репутация: 27
Статус: Оффлайн
Пробую сделать что нужно, видно что запросы ADO мощнейшая штуки, но не могу сделать следующее:

Нужно из Excel-файла загрузить во временную таблицу и сделать из нее выборку.

Делаю так:

1) Создаю новый файл в консоли запросов
2) В дерево запросов добавляю новый запрос ADO
3) Настраиваю закладку ADO: Картика с настрjйками ADO
4) Вызываю конструктор запроса и создаю запрос:
Цитата
ВЫБРАТЬ
    *
ПОМЕСТИТЬ ВременнаяТаблица
ИЗ
    [Лист1$] КАК Лист1_
;
////////////////////////////////////////
ВЫБРАТЬ
    *
ИЗ
    ВременнаяТаблица КАК ВременнаяТаблица
5) Запускаю

получаю ошибку:
Цитата
Ошибка ADO: Произошла исключительная ситуация (Microsoft JET Database Engine): Invalid SQL statement; expected 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT', or 'UPDATE'.


Сообщение отредактировал Simol - Среда, 04.09.2013, 13:12
 
tormozitДата: Пятница, 06.09.2013, 23:43 | Сообщение # 8
Генералиссимус
Группа: Администраторы
Сообщений: 6195
Репутация: 159
Статус: Оффлайн
Вопросы вызывает пункт 4.
Здесь ты сообщаешь, что якобы конструктор запроса для ADO сгенерировал текст на русском языке. Так программа не должна себя вести. Либо ты не точно описал последовательность действий, либо в программе есть ошибка, которую я не могу воспроизвести.

Также из построенного запроса я сделал вывод, что ты недостаточно глубоко вчитался в мое высказывание
Цитата
Можно загружать во временную таблицу внешней СУБД, а можно во временную таблицу 1С
Во временную таблицу 1С помещать напрямую из запроса ADO нельзя. Для этого служат новые команды над результатом запроса и в дереве запросов.
 
tormozitДата: Пятница, 06.09.2013, 23:48 | Сообщение # 9
Генералиссимус
Группа: Администраторы
Сообщений: 6195
Репутация: 159
Статус: Оффлайн
Также интересует, что за проблема была с ZLIB1.dll ?
 
SimolДата: Суббота, 07.09.2013, 18:46 | Сообщение # 10
Полковник
Группа: Проверенные
Сообщений: 237
Репутация: 27
Статус: Оффлайн
Запрос сделал вот так Видео

Скорее я схитрил. С начала я оставил в формате MS Jet и создание временной таблицы приводило к созданию новой закладки в файле Excel.

По  ZLIB1.dll была так, что я на терминальнике был не админ и не мог зарегистрировать компоненты.


Сообщение отредактировал Simol - Суббота, 07.09.2013, 18:46
 
tormozitДата: Понедельник, 09.09.2013, 10:07 | Сообщение # 11
Генералиссимус
Группа: Администраторы
Сообщений: 6195
Репутация: 159
Статус: Оффлайн
Сделал видеоролик, решающий описанную задачу
http://www.youtube.com/watch?v=BKMiVMjER1E
 
SimolДата: Понедельник, 09.09.2013, 13:58 | Сообщение # 12
Полковник
Группа: Проверенные
Сообщений: 237
Репутация: 27
Статус: Оффлайн
Спасибо за ролик!
Но при попытке повторить во втором запросе открывается стандартный конструктор запроса: Видео
 
tormozitДата: Понедельник, 09.09.2013, 14:09 | Сообщение # 13
Генералиссимус
Группа: Администраторы
Сообщений: 6195
Репутация: 159
Статус: Оффлайн
Перечитай описание
http://devtool1c.ucoz.ru/index/konstruktor_zaprosa/0-38
http://devtool1c.ucoz.ru/news/2_90/2013-08-26-93

Думаю не трудно догадаться, что ставить новый конструктор запросов по умолчанию для запросов 1С довольно опасно, т.к. он не полностью покрывает штатный (расширения построителя и компоновки). Поэтому его использование явно включается, чтобы пользователь точно знал как вернуть штатный, если что.
 
SimolДата: Вторник, 10.09.2013, 00:57 | Сообщение # 14
Полковник
Группа: Проверенные
Сообщений: 237
Репутация: 27
Статус: Оффлайн
Цитата (tormozit)
Перечитай описание
Мне стыдно  cry

Тогда моя доработка не нужна для моей задачи. Действительно АДО с головой ее решает. Завтра разве, что проверю типы как он переносит, интересует дата и числа.,

Доработка разве, что пригодится, если
1) если по ИС() будут исследовать ТЗ и захотят ее изменить данными из екселя. Таким образом при отладке можно подменить таблицу значений.
2)Очень натянуто:  если типы из екселя не тянутся (интересует числа и дата, которые написаны неподвластно стандартному приведению типов Строка->число или дата)
 
alsoДата: Четверг, 12.09.2013, 12:48 | Сообщение # 15
Сержант
Группа: Проверенные
Сообщений: 31
Репутация: 0
Статус: Оффлайн
Сергей, все равно очень хочется иметь загрузку из тд в таблицу значений и быструю установку текста запроса во временную таблицу. У меня в подсистеме тоже доработано. Прикручен аналог типовой обработки "загрузка из тд". Стоит ли ждать в каком-нить релизе. Можно просто в форме тз обработки ирПлатформа сделать кнопочку типа "Расширенная загрузка из тд". Мешать не будет, а многим будет полезна. Спасибо.
 
ЗЫ Если надо могу приложить свою реализацию.

Добавлено (12.09.2013, 10:49)
---------------------------------------------
Simol, скачал посмотрел твое решение. У меня более глобально реализовано, в отдельной форме. Можно ссылочные типы определять. Если интересно, посмотри. Я повесил прямо на кнопку загрузки из тд в форме таблицы значений. Прикладываю cf своей подсистемы.

Добавлено (12.09.2013, 10:53)
---------------------------------------------
Что-то файл не прикрепился https://dl.dropboxusercontent.com/u/31756230/1_1Cv8.rar

Добавлено (12.09.2013, 12:48)
---------------------------------------------
Сергей, а можешь добавить генерацию текста запроса по параметрам ТЗ в подменю "Установить текст". Я у себя добавил. Можно просто скопировать отсюда

 
Форум » Основной » Прочее » Загрузка Таблицы в параметр в консоли запроса.
  • Страница 1 из 1
  • 1
Поиск: