Ivan T Berezdetsky (berezdetsky@yahoo.com). В предлагаемой версии:
1) Добавлена возможность выбирать тип провайдера данных ODBC или OLEDB (только базы DBF);
2) Добавлена возможность редактировать текст запроса в диалоге конструктора запросов, предоставляемого объектом "AddIn.qryConsole" ВК qryConsole.dll (только базы SQL);
3) Расширен список типов объектов, которые могут принимать параметры запроса;
4)Добавлена возможность через параметры запроса укладывать списки ссылок объектов во временные таблицы (в том числе с иерархическим включением). Эти таблицы можно использовать в тексте запроса по имени ‘#<ИмяПараметра>’;
5) Добавлена возможность открывать обработку в режиме подбора (или имитации подбора) из других форм для подбора произвольных выборок данных из базы;
6) Сделано множество других улучшений (интерфейсных и пр.);
Свет мой, SQL, скажи, да всю правду доложи!
Я ль в инете всех шустрее, всех прикольней и умнее?
Пушкин – АС!
Благодарности авторам:
Хочется сразу сказать огромное спасибо авторам обработки, создавших для администраторов и разработчиков такой прекрасный инструмент.
Отдельная признательность Ivanu T Berezdetsky за реализацию поддержки выполнения пакетов запросов. До этого мне приходилось сначала выводить оттранслированный текст запроса в окне сообщений, а затем выполнять его в QA на сервере.
Исходные версии обработки и много другого полезного можно найти на сайте: http://www.dev.citykirov.ru/.
Обсуждение обработки и разные ее модификации смотрите на форуме: http://www.1cpp.ru/forum/YaBB.pl?num=1157967835.
Требования:
1) Обязательно — наличие предварительно загруженных (или лежащих в одном каталоге с 1CQA) внешних компонент 1СPP.dll (www.1cpp.ru) и FormEx.dll (www.dorex.pro).
2) Желательно, чтобы в конфигурации был класс определенный пользователем «Общие.Форма.Привязка» (www.dev.citykirov.ru ,автор Дмитрий Ощепков). Обсуждение класса на форуме 1СРР: http://www.1cpp.ru/forum/YaBB.pl?num=1200464076. При отсутствии класса обработка работать будет, но без привязок элементов в форме.
3) Желательно (для возможности укладывать списки объектов во временные таблицы) иметь для редактирования списков обработку под именем ПодборUChoice (улучшенная обработка УОПО). Она может быть встроена или лежать в одном каталоге с 1CQA. Без этой обработки будут не доступны специальные типы параметров запроса, через которые создаются временные таблицы.
4) При большом желании (для редактирования запроса в диалоге конструктора) требуется наличие внешней компоненты qryConsole.dll(автор Ivan T Berezdetsky). Обработка при открытии пытается ее загрузить (так же как 1CPP). Если загрузить не удается, то соответствующие элементы управления в обработке становятся недоступными.
Установочный дистрибутив и обсуждение внешней компоненты — на форуме: http://www.1cpp.ru/forum/YaBB.pl?num=1193394153. Для работы ВК qryConsole.dll обязательна установка Office web components (OWC11). Иначе обработка будет вас малоприятно ругать при открытии (беда устраняется или установкой OWC11, или удалением/переименованием файла библиотеки – чтоб вообще не грузилась).
Описание файлов поставки:
1) Консоль1CQA.rar — обработка 1CQA под именем «Консоль1CQA» (иначе не встраивается);
2) FormEx1CPP.rar – библиотеки 1CPP.dll, FormEx.dll и класс «Общие.Форма.Привязка«;
3) PlugIns.rar – вспомогательные обработки ПодборUChoice и ИзменениеВремениДокумента. Последняя обработка используется в меню действий со значением в ячейке таблицы результатов запроса по двойному клику мыши (Рис.11) для изменения даты-времени документа.
4) Samples.rar – разные примеры запросов, использованные в публикации.
5) Консоль1CQA_ALL.rar – полный набор файлов поставки (все 4 архива);
Описание установки:
1) Обеспечить загрузку 1CPP.dll и FormEx.dll (обязательно):
Библиотеки можно скачать с сайтов разработчиков или взять из каталога файла поставки ..FormEx1CPP.rarFormEx1CPPDLL:
Файл 1CPP2037.dll – библиотека 1CPP версии 2.0.3.7, рекомендуемый релиз с ядром FormEx. Для него загрузка FormEx.dll не требуется.
Файл 1CPP2507.dll – библиотека 1CPP версии 2.5.0.7, рекомендуемый релиз с раздельной загрузкой FormEx.
Файл 1CPP3220.dll – библиотека 1CPP версии 3.2.2.0 (последняя с сайта разработчиков)
Файл 1CPP32316.dll – библиотека 1CPP версии 3.2.2.8 (одна из последних тестовых версий с форума: http://www.1cpp.ru/forum/YaBB.pl?num=1288774760/all )
Файл FormEx205101.dll – библиотека FormEx версии 2.0.5.101 (самая последняя).
При копировании файлов из имени следует убрать цифры версий.
Загружать библиотеки можно стандартным способом в процедуре ПриНачалеРаботыСистемы():
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы ()+«1CPP.dll»);
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы ()+«FormEx.dll»);
Если же 1QA будет использоваться как внешняя, то достаточно скопировать файлы dll в каталог обработки. Она сама их загрузит при открытии.
2) Подключить класс «Общие.Форма.Привязка» (желательно):
Можно из каталога файла поставки ..FormEx1CPP.rarFormEx1CPP в каталог базы скопировать файлы Defcls.prm и КОП_ОбщиеФормаПривязка.ert.
А можно включить класс в конфигурацию. Для этого туда нужно добавить из одноименных внешних файлов обработки Defcls и КОП_ОбщиеФормаПривязка.
ВНИМАНИЕ! Если у вас уже используются другие классы, то придется добавить описание класса в файл Defcls.prm или обработку Defcls из соответствующих файлов.
3) Вспомогательные обработки (желательно):
Скопировать из каталога файла поставки ..PlugIns.rarPlugIns в каталог обработки 1CQA или добавить в конфигурацию под теми же именами.
4) Конструктор запросов (при большом желании):
Установить внешнюю компоненту qryConsole.dll из скаченного дистрибутива (смотри выше). И обязательно установить Office web components (OWC11)!
Описание добавлений и улучшений в предлагаемой версии:
1) Для баз DBF добавлена возможность выбирать интерфейс доступа к данным ODBC или OLEDB (Рис.2). Для использования OLEDB требуется установить OLEDB vfpoledb provider v9. В базах DBF через ODBC, честно говоря, мне не удалось заставить работать прямые запросы. Через OLEDB вроде все работает.
Для баз SQL по ряду соображений я решил оставить доступ только через ODBC (Рис.1).
2) Для баз SQL добавлена возможность редактировать текст запроса в диалоге конструктора запросов, поставляемого ВК qryConsole.dll (Рис.3 и Рис.4). Для баз DBF эта возможность, к сожалению, недоступна в текущей версии этой ВК.
3) Расширен список типов, которые могут принимать параметры запроса (Рис.6). Добавлены следующие типы: Календари, ВидыРасчетов, Бухгалтерские счета, ПланыСчетов (системное перечисление), ВидыСубконто.
4) Добавлены служебные типы параметры запроса СписокСсылок9, СписокСсылок13 и ИерархияСсылок9. Значения этих параметров представляют списки объектов определенного типа и используется для укладывания во временные таблицы ссылок на объекты (включая с иерархическим включением). Временная таблица доступна в тексте запроса под именем ‘#‘. Для редактирования списков объектов (Рис.7) используется обработка под именем ПодборUChoice (улучшенная обработка УОПО). При отсутствии обработки ПодборUChoice в конфигурации или в каталоге 1CQA эти служебные типы параметров исключаются из меню выбора типов параметра запроса.
5) Добавлена возможность открывать 1CQA в режиме подбора (имитации подбора) для возврата в другие формы произвольных выборок данных.
Имитация подбора используется в том случае, когда 1CQA — внешняя обработка. Тогда функция ОткрытьПодбор(,,) становится бесполезна. Приходится просто открывать внешнюю обработку Консоль1CQA с передачей через параметр формы контекста той формы, которая вызывает подбор.
Имитация выбора в подборе осуществляется вызовом в контексте формы владельце процедуры ОбработкаПодбора(,,,) с помощью метода ВыполнитьПроцедуру(Контекст, ИмяПроцедуры, СписокАргументов) объекта «Сервис» ВК FormEx.dll.
6) Другие улучшения (их множество, смотрите подробности в описании в самой обработке). Вот некоторые из них:
- При клике по пустой таблице параметров запроса выводится диалог с информацией о работе с параметрами запроса (Рис.5);
- Выбор типа объекта производится в удобном красивом диалоге в виде дерева (Рис.6);
- При клике по таблице результатов запроса, если значение в ячейке ссылочного типа, выводится меню действий с объектом (Рис.11). Меню позволяет:
открыть объект для просмотра-редактирования;
открыть объект в списке (журнале);
пометить его на удаление;
снять пометку;
удалить непосредственно;
открыть объект для редактирования в обработке ‘Редактор Реквизитов’ (автор Цылёв Владислав vet7777@mail.ru);
- Для документов доступны дополнительные действия:
провести;
отменить проведение;
изменить дату-время (для этого действия требуется обработка ИзменениеВремениДокумента);
- Кроме этого для документа можно вывести отчет о движениях или сформировать структуру подчинености. Соответствующие отчеты интегрированы в консоль (чтобы не зависеть от используемой конфигурации):
Отчет о движениях — в полном вариате (по регистрам, проводкам, записям ЖР и истории реквизитов).
При формировании структуры подчиненности для выборки подчиненых документов используются прямые запросы к базе.
7) Различные варианты очистки запроса (Рис.8);
8) Печать таблицы параметров запроса и таблицы его результатов (Рис.9).
9) Выбор значения параметра ‘Collate’ / ‘Collating’ в строке соединения (только базы DBF) (Рис.13).
10) Добавлена обработка спец.комментариев в тексте запроса (для установки спец.опций выполнения запроса).
поддерживается обработка следующих спец.комментариев:
‘—!ExecuteTransaction’ — выполнять все батчи запроса в единой транзакции (при ошибке хоть в одном батче транзакция откатывается);
‘—!ExecuteRollback’ — выполнять все батчи в транзакции с ее откатом независимо от результата выполнения (для просмотра «результатов» запроса без фактического изменения данных);
подробности смотрите в макете «СпецКомметарииЗапроса» обработки (можно вывести в табличный документ, Рис.5 и Рис.9).
11) Добавлен вывод описания обработки в табличный документ ( Рис.5 и Рис.9).
Применение:
Для баз SQL доступны особые режимы выполнения запроса (Рис.12): проверка синтаксиса и вывод плана выполнения запроса. План выполнения кроме таблицы результатов выводится еще в отдельном текстовом документе.
Для баз DBF использование ограничено в основном разделенным режимом. В монопольном режиме в базах DBF выполнять прямые запросы не удается без специальных ухищрений (подмены библиотеки DBEng32.dll в каталоге BIN) или использования особых провайдеров доступа к данным.
При попытке использования в монопольном режиме обработка пытается выполнить тестовый запрос: «select COUNT(*) from 1SUSERS». Если запрос выполняется без ошибок — никаких сообщений не выводится. Иначе (если тестовый запрос выдает ошибку) программа выдает пользователю предупреждение об этом печальном факте, но работать в консоли не запрещает. Если после этого запрос вдруг выполнился без ошибок, обработка запоминает эту радость и больше не тревожит пользователя об этом … до первой следующей ошибки запроса, в тексте которой есть строка «Cannot open file» .
Основные направления для использования:
1) Для разработчиков: проверка запросов, изучение вопроса о том где, как и какие данные хранятся в базе данных.
2) Администрирование данных: исправление ошибок в ИБ в дополнение к процедуре тестирования-исправления. В больших рабочих базах тестирование-исправление выполнить нереально. У меня оно длилось, например, больше двух суток. Поэтому тестирование запускается на копии базы в пакетном режиме с записью лога. Затем по информации из лога в 1CQA запросом SELECT вытаскиваем некорректные записи из базы. После анализа этих записей принимается решение:
- исправляем запросом UPDATE ,
- удаляем запросом DELETE,
- помечаем на удаление, чтобы потом удалить с контролем ссылочной целостности (пометить можно тоже в 1CQA запросом UPDATE).
3) Реорганизация данных при обновлениях: установка новых реквизитов, ресурсов и измерений в таблицах объектов метаданных, например регистров. В архиве Samples.rar из файлов поставки в файле Sample_TransforRegister_SQL.qry находится пример реально использованного скрипта для довольно сложной установки новых измерений и реквизитов регистра. Фактически скрипт заменяет перепроведение по регистру (выборочно, без пересчета итогов). Итоги также можно пересчитать прямыми запросами с помощью обработок (только базы SQL):
ПересчетИтоговРегистров.ert или 1CУстановкаТА.ert.
Благодарности:
Кроме авторов обработки хотелось бы также поблагодарить всех разработчиков 1CPP и FormEx. Без их самоотверженного труда 1С-ка была тормозна, скучна, безлика и беспросветна!
Авторы исходной версии: Дмитрий Ощепков (dmitro-75@mail.ru),
Ivan T Berezdetsky (berezdetsky@yahoo.com). В предлагаемой версии:
1) Добавлена возможность выбирать тип провайдера данных ODBC или OLEDB (только базы DBF);
2) Добавлена возможность редактировать текст запроса в диалоге конструктора запросов, предоставляемого объектом «AddIn.qryConsole» ВК qryConsole.dll (только базы SQL);
3) Расширен список типов объектов, которые могут принимать параметры запроса;
4)Добавлена возможность через параметры запроса укладывать списки ссылок объектов во временные таблицы (в том числе с иерархическим включением). Эти таблицы можно использовать в тексте запроса по имени ‘#<ИмяПараметра>’;
5) Добавлена возможность открывать обработку в режиме подбора (или имитации подбора) из других форм для подбора произвольных выборок данных из базы;
6) Сделано множество других улучшений (интерфейсных и пр.);
Перейти к публикации
О сколько нам консолей чудных готовит просвещенья дух… 😀
… или счастья много не бывает! ;)))))
О сколько нам консолей чудных готовит просвещенья дух…
Народ!!!
Если обработка скажет что-то странное насчет ваших прав — значит вы себя обидели! ;))))
Поскольку обработка не для шаловливых ручек,
при открытии там сразу написано:
ПравоЕсть=1;
ПравоЕсть=ПравоЕсть
*ПравоДоступа(«УдалениеПомеченныхОбъектов»)
*ПравоДоступа(«ПоискСсылокНаОбъекты»)
*ПравоДоступа(«ИспользованиеЛюбыхВнешнихОтчетов»)
*ПравоДоступа(«ГрупповоеПроведениеДокументов»)
*ПравоДоступа(«УправлениеБухгалтерскимиИтогами»)
*ПравоДоступа(«УправлениеОперативнымиИтогами»)
*ПравоДоступа(«МонопольныйРежим»)
*ПравоДоступа(«СохранениеИВыгрузкаДанных»)
*ПравоДоступа(«АдминистративныеФункции»); // по совокупности крутых прав
Если (ПравоЕсть=0) Тогда
Предупреждение(«Недостаточно круты права доступа !!!»,60);
СтатусВозврата(0);
Возврат;
КонецЕсли;
Народ!!!
(0) ;
Если обработка скажет что-то странное насчет ваших прав — значит вы себя обидели! ;))))
Поскольку обработка не для шаловливых ручек,
при открытии там сразу написано:
ПравоЕсть=1;
ПравоЕсть=ПравоЕсть
*ПравоДоступа(«УдалениеПомеченныхОбъектов»)
*ПравоДоступа(«ПоискСсылокНаОбъекты»)
*ПравоДоступа(«ИспользованиеЛюбыхВнешнихОтчетов»)
*ПравоДоступа(«ГрупповоеПроведениеДокументов»)
*ПравоДоступа(«УправлениеБухгалтерскимиИтогами»)
*ПравоДоступа(«УправлениеОперативнымиИтогами»)
*ПравоДоступа(«МонопольныйРежим»)
*ПравоДоступа(«СохранениеИВыгрузкаДанных»)
*ПравоДоступа(«АдминистративныеФункции»); // по совокупности крутых прав
Если (ПравоЕсть=0) Тогда
Предупреждение(«Недостаточно круты права доступа !!!»,60);
СтатусВозврата
Возврат;
КонецЕсли;
Показать
вдруг какой продвинутый юзвер (знаю я таких) додумается написать:
truncate table _1sjourn
:)))))))
Красиво расписано, я так больше на 8-ке, неужели крупные конторы на 7-ке не думают переходить на 8-ку? Все будете допиливать 7-ку?
Да думают, думают… и еще раз думают!
И чем крупней — тем дольше и трудней :)))))
(6) yuraos
Просто если много наработанного кода под «семерку», его трудно сразу вот так взять и перенести на «восьмерку». Поэтому и сидим на «семерке» и пилим ее дальше под себя.
Просто если много наработанного кода под «семерку», его трудно сразу вот так взять и перенести на «восьмерку». Поэтому и сидим на «семерке» и пилим ее дальше под себя.
Етта точно!
Сидим на этом суку и пилим-пилим-пилим его …. ;))))))
Че дальше бывает по закону гравитации наверное все знают.
Доброго времени суток! Обновлены файлы поставки:
Консоль1CQA_ALL.rar
Консоль1CQA.rar
PlugIns.rar
Подправлен мелкий баг в консоли при «перезагрузке запроса» +
+ некритические изменения во вспомогательной обработке ИзменениеВремениДокумента.ert.
Очень хорошо ,что появилась возможность редактировать запрос.
Кстати ИМХО на семерке как раз и остались большинство крупных организаций, и причина известна:
большая организация => очень большие запросыхотелки узеров => очень очень много дописок, и перенос ни к чему если все работает на 7
+Для oledb строка подключения устаревшая + запросы в дбф базе сто лет в обед выполняются в монопольном режиме.
(12) Ёпрст,
версии в архиве те,
которые на сайте 1cpp указаны как «рекомендованные стабильные релизы». :)))
версии в архиве те,
которые на сайте 1cpp указаны как «рекомендованные стабильные релизы». :)))
а что под версией 1cpp3220 или 1cpp3227
библиотеки DBEng32.dll в каталоге BIN???
будет в dbf и в монопольном режиме работать
без подмены
>>>»рекомендованные стабильные релизы».
Этой «издёвке» года 4 уже.
И читай дальше, что пишут на сайте:
icpp/3.x (рекомендуется к использованию)
В начале 2008 года проект 1C++ портирован с MSVS 6.0 на MSVS 2005(2008) / Intel Compiler (IСL) / STLPort / Boost 1.35.0
Дальнейшее развитие идет под именем icpp (версии 3.x.x.x)
(15)Не будет. И можно работать либо на заплатке от hogik, либо на провайдере от ужаста, без изменения бэкенда
+ А строка для оледб у тебя не верная (точнее, устаревшая)
+ А строка для оледб у тебя не верная (точнее, устаревшая)
Млин, ЁПРСТ, ты чувак умный, авторитетный!
Не поделися с обчеством умом-размом?
Народ с открытым ртом смотрит на тебя… ;))))))))
Хорошая вещь. Главное удобная и простая и понятная.!!!
Преааааааааааааагромммммммное спасибо!
Если такие умные люди ничего не писали бы полезного на форумах…..
….они бы потеряли бы всякий смысл! ;)))))))))))))))))))))))))))))))))))))))))
>>>»рекомендованные стабильные релизы».
Этой «издёвке» года 4 уже.
И читай дальше, что пишут на сайте:
icpp/3.x (рекомендуется к использованию)
В начале 2008 года проект 1C++ портирован с MSVS 6.0 на MSVS 2005(2008) / Intel Compiler (IСL) / STLPort / Boost 1.35.0
Дальнейшее развитие идет под именем icpp (версии 3.x.x.x)
—-
Пардонс … не думал что это «для лохов».
Учтемс что разработчики иногда шутятс :))))))))))))))))))
Всем доброе время суток!!!
Скриншот 13) .
ПодборUChoice.ert устранен мелкий баг.
Обновлены файлы поставки:
Консоль1CQA.rar, Консоль1CQA_ALL.rar, и PlugIns.rar .
————————————————————————————-
1) Для устранения «навязчивого сервиса» добавлен флаг ‘ДП’ над кнопкой «Выполнить» (по умолчанию сброшен).
Если флаг установлен — выводится меню дополнительных действий.
Если не установлен — просто выполняется запрос.
2) Для баз DBF добалена возможность выбирать значение параметра ‘Collate’ / ‘Collating’
через меню действий, выводимого по кнопке «Выполнить» (
4) В сервисной обработке
5) По замечаниям господина ЁПРСТ в архив FormEx1CPP.rar
добавлены последние версии ВК 1cpp.dll.
————————————————————————————-
Всем спасибо за внимание!
Оригинально ты авторов отблагодарил — засветил их мыло для спам-ботов и прочей нечести!
елы-палы.. как-то у меня консоль запросов от Ivan T Berezdetsky весьма существенно отличается от сабжевой… а консоль — достаточно свежая, еще по моей проьбе Ivan T Berezdetsky вносил/попралвл допфункционал…
Всем доброго времени суток!
Обновлены файлы поставки Консоль1CQA_ALL.rar и Консоль1CQA.rar.
Отчеты «Движения документа» и «Структура подчиненности»
(используются при обработке выбора из меню действий с объектом в таблице результатов запроса)
интегрированы в консоль, чтобы не зависеть от используемой конфигурации.
Отчет о движениях — в полном вариате (по регистрам, проводкам, записям ЖР и истории реквизитов).
При формировании структуры подчиненности для выборки подчиненых документов используются прямые запросы к базе.
Также оптимизировано поведение консоли для баз DBF в монопольном режиме:
При открытии обработка в блоке попытка-исключение пытается выполнить тестовый запрос:
select count(*) from 1susers.
Если при выполнении запроса исключения не возникает —
— значит в монопольном режиме прямые запросы работают (пользователь подсуетился для этого).
И поэтому ему не надо выводить никаких сообщений «о невозможности выполнить запрос».
елы-палы.. как-то у меня консоль запросов от Ivan T Berezdetsky весьма существенно отличается от сабжевой… а консоль — достаточно свежая, еще по моей проьбе Ivan T Berezdetsky вносил/попралвл допфункционал…
Сначала мне по наследству досталась, повидимому, первоначальная версия
выбора типа параметра в дереве ).
http://www.1cpp.ru/forumfiles/Attachments/1CQA_001.zip
консольки от Дмитрия Ощепкова.
Я ее довольно сильно натюнил:
прикрутил режим подбора (нада было),
конструктор запросов (для развлекухи, но иногда полезен),
укладывание списков ссылок во впеменные таблицы (бывает полезно),
ну и всяких бантиков навязал интерфейсных (вроде
При этом я старался сильно не «ломать» диалог и модуль.
Но недавно мне попалась вот эта версия консоли
И мне сильно захотелось имитацию исполнения пакетного запроса
(эта фича меня щас здорово выручает, ломаю регистры перед обрезкой базы неподетски!).
Что бы объединить функционал двух версий обработок,
пришлось все довольно сильно все переделать (и диалоге, и в модуле).
Так что эта консоль довольно сильно отличается от исходных.
Но авторская информация в описании оставлена без изменений + добавлено от себя.
77 forever
Нах мне 8ка если все инструменты для работы есть в семерке?
77+ООП = не надо мучать попу 8кой
(30) если уж Орефков повернулся в сторону восьмерки, то все инструменты скоро будут и в восьмерке ;).
(31) fishca,
http://snegopat.ru/ ???
ты имеешь наверное ввиду этот проект
ну будем надеяться,
что только расширением возможностей конфигуратора дело не закончиться
:)))))))))))
Эх, как я буду в 8-ке без своих любимых индексированных таблиц !!!
ты имеешь наверное ввиду этот проект
ну будем надеяться,
что только расширением возможностей конфигуратора дело не закончиться
:)))))))))))
Эх, как я буду в 8-ке без своих любимых индексированных таблиц !!!
Кстати всем рекомендую!
Общедоступная демо-версия на базе релиза 1.1.1.2
Вот здесь можно скачать бесплатную демо-версию:
(32) тебе стандартных средств работы с индексами в восьмерке не хватает?
ТаблицаЗначений (ValueTable)
Индекс (IndexOf)
Синтаксис:
Индекс(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: СтрокаТаблицыЗначений. Строка таблицы значений, для которой нужно определить индекс.
Возвращаемое значение:
Тип: Число. Индекс указанной строки в коллекции. Если не найдено, то возвращается -1.
Описание:
Получает индекс строки в коллекции строк таблицы значений.
ТаблицаЗначений (ValueTable)
Индекс (IndexOf)
Синтаксис:
Индекс(<Строка>)
Параметры:
<Строка> (обязательный)
Тип: СтрокаТаблицыЗначений. Строка таблицы значений, для которой нужно определить индекс.
Возвращаемое значение:
Тип: Число. Индекс указанной строки в коллекции. Если не найдено, то возвращается -1.
Описание:
Получает индекс строки в коллекции строк таблицы значений.
Показать
fishca, ты наверное хотел не про эти индексы ;)))
а про вот эти (иначе — совсем не в тему попал):
Показать
и с 1cpp наверняка не работал…
http://www.1cpp.ru/docum/icpp/html/IndexedTable.html
… индексированная таблица там не просто таблица значений с индексами
для ускорения перебора строк, а нечто большее, вот почитай справку он-лайн:
Спасибо, что не забываете про 1С:Программистов 7.7, которые мучаются и деваться не куда, отличная консоль запросов! пользуюсь постоянно ей!
Ух, ты, Спасибо !!!!!+++
Спасибо, что не забываете про 1С:Программистов 7.7, которые мучаются и деваться не куда, отличная консоль запросов! пользуюсь постоянно ей!
Да трудно про себя самого забыть!!!
;)))))))))))))
Спасибо! И старая консоль не раз выручала, а с этой гораздо удобней.
Всем доброе время суток!
‘Редактор Реквизитов’ (автор Цылёв Владислав vet7777@mail.ru) ;
Pari за обсуждение проблемы);
Обновлены файлы поставки:
— Консоль1CQA_ALL.rar
— Консоль1CQA.rar
— FormEx1CPP.rar
Текущие изменения:
1) Добавлена обработка спец.комментариев в тексте запроса (для установки спец.опций выполнения запроса).
поддерживается обработка следующих спец.комментариев:
‘—!ExecuteTransaction’ выполнять в транзакции с фиксацией или откатом (в зависимости от ошибок);
‘—!ExecuteRollback’ выполнять в транзакции с последущим откатом
(для просмотра «результатов» запроса без изменения данных в базе);
подробности в макете «СпецКомметарииЗапроса» (можно вывести в табличный документ из диалога обработки).
2) Добавлен вывод в табличный документ описания обработки;
3) В меню действий с объектом по клику мышью добавлена
команда открытия объекта для редактирования в обработке
4) В файле FormEx1CPP.rar выложена подправленная версия класса «Общие.Форма.Привязка»
(устранена ошибка времени выполнения, проявляющаяся в терминале,
если установлен размер окна приложения в ‘процентах от размера рабочего стола’
большое спасибо
Спасибо, не помешает
Всем доброе время суток!
Обновлены файлы поставки:
— Консоль1CQA_ALL.rar
— Консоль1CQA.rar
Текущие изменения:
1) Исправлен баг: не выводилось описание обработки (из-за неправильного указания имени макета с описанием).
2) Исправлен баг: не формировалось дерево документов при обработке команды меню действий со значением в ячейке таблицы результатов запроса (из-за неправильного вызова процедуры рекурсивного вывода на печать подчиненных документов).
Большое спасибо! Именно с этой обработки начал применять 1С++…
(43) VIC_2010, пажалуста!
только посторожней с нею …
… а то «хорошее» — это сильнодействующий наркотик.
К нему быстро привыкают!!!
;))))))))))))))))))))
Довольно таки хорошая штука)))
народ, подскажите, может быть есть что либо в 7.7 для прямых запросов, похожее на 8шный конструктор запросов?
Довольно таки хорошая штука)))
народ, подскажите, может быть есть что либо в 7.7 для прямых запросов, похожее на 8шный конструктор запросов?
Есть штатный убогий инструмент, для таких же штатных убогих запросов.
;))))
Есть так же примочки для запросов 1c++:
Вот эта примочка для режима конфигуратора:
http://infostart.ru/public/14933/?PAGEN_1=1#comm527164
Примочка для режима 1с-преприятие описана в этой статье и использавана в использавана данной консоли.
ЗЫ:
правда примочки эти работают только для баз SQL
:((((((((((
Очень удобная вещь! Благодарствую! 🙂
Подскажите, а обратиться в режиме прямого запроса к БухгалтерскимИтогам возможно?
Кажется, мне где-то попадался пример такого запроса, но через консоль не вижу как это сделать.
(48) wunderland, обратиться к бухитогам конечно можно ….
…. но запрос придется полностью писать самому,
используя таблицы:
1SACCS (счета)
1SBKTTLC (итоги синтетические)
1SBKTTL (итоги аналитические по субконто)
1SENTRY (бухг. проводки) в соединении с таблицей 1SJOURN
К сожалению разработчики 1с++, наверное,
не были сильно озадачены решением бухгалтерских задач и
не предусмотрели для бухитогов виртуальных таблиц.
Впрочем в dbf версии все имеющие виртульные таблицы не работают и
даже запрос к остаткам по регистру приходится писать руками.
Здесь кое-какая описаловка по структуре таблиц 1С:
http://www.script-coding.com/v77tables.html
http://oksla.narod.ru/1CTables.htm
Здесь кое-какие примеры по запросам к бухитогам:
http://www.1cpp.ru/forum/YaBB.pl?num=1151219880
http://www.1cpp.ru/forum/YaBB.pl?num=1211377364/15#15
Примеры чисто ознакомительные. Все нужно на самом деле анализировать и писать с нуля.
Во вложении — парсер файлов DD / DDS.
Наглядно показывает структуру всех таблиц базы, имена и типы полей.
Часто бывает полезен:
Я например ни за что бы не догодался, что остатки и обороты в таблицах
1SBKTTLC и 1SBKTTL (версия для dbf) хранятся в полях с типом char(15),
а в sql версии используется более «естественный» тип numeric(15.2)!
Успехов вам!!!
🙂
(48) wunderland, к стати о птичках
🙂
если вы работаете в базе dbf
вам также будет полезна справка по
Microsoft Visual FoxPro 9.0.
если в базе sql то справка в
SQL Server Books Online
В прямых запросах часто приходися использовать встроенные функции,
в частности функции пребразования типов.
Спасибо, уважаемый за ответ, и за ссылки, и за парсер…
Ну нет, так нет — будем писать вручную.
Правда мне как-то привычнее в таком виде:
SELECT
СубконтоДт2 [ТМЦ $Справочник.ТМЦ]
, Сумма
, Количество
FROM $БИДвиженияССубконто.Основной(:НачДата,:КонДата~,,
(СчетДт = :СчетДт) and (СубконтоДт1 =:ВыбМестоХранения)) БИ
хотя привычнее, это громко сказано, я только осваиваю прямые запросы,
сам то я больше по 8-ке, а тут вот угараздило устроится на фирму где
на 7.7 еще все крутится и на переход незнаю когда решатся.
Отличная вещь — чем больше юзаю, тем больше нравится… Большое спасибо!!!
(51)Поддержу.
Очень не хватает возможности подключить класс-выполнитель аналогично qryConsole.
Я конечно извиняюсь, но почему мне эта обработка выдает вот это?
ODBCDatabase:Соединение() error:
State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данной функции
может что-то делаю не так 🙁
Может кто-нибудь даст
Microsoft OLE DB Provider for Visual FoxPro 9.0
(54) ппп986, через ODBC к базе DBF почему-то подконнектиться не получается в запросах 1с++ 😉 .
OLEDB vfpoledb provider v9
приходиться работать ч/з OLEDB…
…и по-моему где-то в статье должно было быть написано по этому поводу, что
для использования в базах dbf требуется установка драйвера
(58) BlueWind,
да я все время присматриваюсь к этому классу
…
все думаю заточить эту консоль под 1sqlite
и добавить подобие конструктора заготовок для запросов
но руки не доходят (поскольку я сейчас отошел от 1с-7.7)
—
но если руки дойдут — то заодно заточу ее и под этот класс.
😉
подскажите почему не работает кейс
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
case when debkred=1 then Покуп.Sp2201 else 5 end as СуммаПрод ,
Sp2203 as СуммаСебест
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
LEFT JOIN SC134 as СпрКонтр
ON СпрКонтр.sp125 = СпрДог.ID
ON Покуп.SP2195 = СпрДог.ID
(60)
доброго времени суток, sss999,
так попробуй
***
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
case
when покуп.debkred=1 then Покуп.Sp2201
else 5
end as СуммаПрод ,
покуп.Sp2203 as СуммаСебест
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог
ON СпрКонтр.sp125 = СпрДог.ID
LEFT JOIN SC134 as СпрКонтр
ON Покуп.SP2195 = СпрДог.ID
***
1. пропущены псевдонимы таблиц в выделенных жырным местах
2. возможно провайдеру не понравились условия соединений все скопом в конце запроса
(61)
а почему запрос с внутренними именами таблиц ?
я когда работал с прямыми запросами под 7.7,
то уже вовсю пользовался макроименами метапарсера 1СPP.
(62)
сравни:
—
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
case
when Покуп.debkred=1 then $Покуп.СуммаПрод
else 5
end as СуммаПрод,
$Покуп.СуммаСебест as СуммаСебест
from
$Регистр.Продажи as Покуп
LEFT JOIN $Справочник.Договора as СпрДог
ON $СпрКонтр.ОсновнойДоговор = СпрДог.ID
LEFT JOIN $Справочник.Контрагенты as СпрКонтр
ON $Покуп.Контрагент = СпрДог.ID
—
куда наглядней
(63) потмоу что делается к расным файлам дбв которые просто лежат в базе и в метаданных их нет.Не работает даже когда просто пишу CASE WHEN 1=1 THEN 0 ELSE 5 END
(64) sss999,
что пишет, скриншот не выложишь???
ra2207 — регистр Продажи ?
Sp2201 — СуммаПродаж
Sp2203 — СуммаСебесттоимости — или как там эти ресурсы там называются (забыл уже) ??
дома проверю, вспомню 7.7 немного.
пишет одно и тоже в принципе для любых ошибок Запрос >>> OLEDBCommand error:
FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword.
(66) sss999, да…подзабыл я все эти дела с foxpro.
—
дело в том, что конструкция
case when … then … else … end
это из t-sql, а в foxpro в запросах вместо неё
приходится использовать функцию iif(,,)
(68)
ниже указанный вариант у меня в консоли
выдал не «Command contains unrecognized phrase/keyword.»
а более оптимистичное:
«File ‘ra2207.dbf’ does not exist.»
***
select distinct
СпрКонтр.Descr as Контрагент,
СпрДог.Descr as Договор,
iif(покуп.debkred=1, Покуп.Sp2201, 5) as СуммаПрод,
покуп.Sp2203 as СуммаСебест
from
ra2207 as покуп
LEFT JOIN SC92 as СпрДог ON Покуп.SP2195 = СпрДог.ID
LEFT JOIN SC134 as СпрКонтр ON СпрКонтр.sp125 = СпрДог.ID
***
(69) а не знаешь по какому полю в справочнике договоры найти владельца контрагента
(69) с этим разобрался,parentext поле,теперь не работает конструкция with rollup ,хотя в «документации» я нашел что парень ее использовал ,я грешу на dll
(71)(72)
со всякими конструкциями специфичными для t-sql надо аккуратней
скорее всего под foxpro они работать не будут.
в частности хинты для указания режима блокировок типа (NOLOCK)
foxpro не поддерживаются.
EXECSCRIPT(
«sel ect id as Ссылка from $Справочник.Номенклатура INTO TABLE #Номенклатура)»+
CHR(13)+
«select Таб.Ссылка as [Ссылка$Справочник.Номенклатура] fr om #Номенклатура as Таб»)
EXECSCRIPT(
«sel ect id as Ссылка from $Справочник.Номенклатура INTO TABLE #Номенклатура)»+
CHR(13)+
«select Таб.Ссылка as [Ссылка$Справочник.Номенклатура] fr om #Номенклатура as Таб»)
не работает у меня говорит нет dbf номенклатура
пришлось сделать еще один вложенный подзапрос,
чтобы вычислить дату оплаты кредит-документа:
NVL($КДок1.ДатаОплаты,NVL($КДок2.ДатаОплаты,NVL($КДок3.ДатаОплаты,NVL($КДок4.ДатаОплаты,NVL($КДок5.ДатаОплаты,{d’0001-01-01’}))))) as ДатаОплаты
—
теперь как я понимаю твоя задача все это разломать,
а потом правильно собрать соединив CHR(13)
😉
во вложении — исходник запроса для консоли
(177) блин я немножко другое спрашивал,вот циклы,и после них мой запрос перестает работать,через скрипт ,циклы должны быть рабочие выдернуты из другого отчета.щас проверю с твоим.
// Знак «‘» не поддерживается, поэтому заменяем на скобки
Скобка=»[«;
номпозиции=Найти(ТекстЗапроса,»‘»);
Пока номпозиции<>0 Цикл
ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
Если Скобка=»[» Тогда Скобка=»]»
Иначе Скобка=»[»
КонецЕсли;
номпозиции=Найти(ТекстЗапроса,»‘»);
КонецЦикла;
// Знак «»» не поддерживается, поэтому заменяем на скобки
Скобка=»[«;
номпозиции=Найти(ТекстЗапроса,»»»»);
Пока номпозиции<>0 Цикл
ТекстЗапроса=Лев(ТекстЗапроса,номпозиции-1)+Скобка+Сред(ТекстЗапроса,номпозиции+1);
Если Скобка=»[» Тогда Скобка=»]»
Иначе Скобка=»[»
КонецЕсли;
номпозиции=Найти(ТекстЗапроса,»»»»);
КонецЦикла;
//Разделитель строк не поддерживается поэтому убираем,
//строки больше 255 симолов не поддерживаются , поэтому удлиняем при помощи CHR(13)
ВрТекстЗапроса=»»;
;
Для Счетчик=1 По СтрКоличествоСтрок(ТекстЗапроса) Цикл
ТекСтрока=СтрПолучитьСтроку(ТекстЗапроса,Счетчик);
ТекСтрока=» «+СокрЛП(ТекСтрока)+» «;
Если Счетчик=1 Тогда
ВрТекстЗапроса=ВрТекстЗапроса+ТекСтрока;
Иначе
Если СокрЛП(ТекСтрока)<>»» Тогда
ПереносСтрокиФоксПро=»‘+»+CHR(13)+»‘»;
ВрТекстЗапроса=ВрТекстЗапроса+ПереносСтрокиФоксПро+ТекСтрока
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТекстЗапроса = ВрТекстЗапроса;
ВрТекстЗапроса = «»;
номпозиции=Найти(ТекстЗапроса,»{d»); // {d [2006-01-01]}
Пока номпозиции<>0 Цикл
Начало=Лев(ТекстЗапроса,номпозиции-1);
ДатаПар=Сред(ТекстЗапроса,номпозиции+4,10);
Конец=Сред(ТекстЗапроса,номпозиции+16);
ТекстЗапроса=Начало+»{#k8SjZc9Dxk «+ДатаПар+»}»+Конец;
номпозиции=Найти(ТекстЗапроса,»{d»);
КонецЦикла;
ТекстЗапроса = «EXECSCRIPT(‘ SEL ECT * fr om («+текстзапроса+») as WW INTO table TempTmpTable1’) «;
(178) sss999,
в принципе я так и понял,
что ты программно генеришь текст запроса с функцией EXECSCRIPT()
на основе исходного.
но с учетом замечания в (173) я подумал, что проблема связана
с непроверенным изменением запроса для учета дат оплат возвратов.
(180) ну вот.
(180) что подскажешь есть идеи ? ))
(182) sss999,
мутная эта вся тема с функцией EXECSCRIPT()
…
то нельзя, это не поддерживается.
одно лишь преимущество —
— можно пакет команд выполнить за одно обращение к провайдеру данных.
но при этом текст запроса приходится нетривиально преобразовывать.
…
я бы попытался обойтись без нее
(183) [Фирма_1c_type_Справочник_1c_dot_Фирмы] не знаешь как сделать что бы после обработки парсером псевдоним был не такой а просто «фирма» при этом что бы нормально отображался не как id?
(184) sss999,
если «чтобы отображалось по нормальному» — то никак
если не использовать 1с-ную типизацию в алиясе поля
вместо
СпрФир.ID as [Фирма$Справочник.Фирмы]
писать просто
СпрФир.ID as Фирма
то имя поля транслироваться будет «нормально»,
но при выгрузке результата запроса в тз
будут отображаться сами id-ники, а не наименования
(187)
ну правда можно еще выводить вместо id-ника наименование
СпрФир.DESCR as Фирма.
но тогда не будет ссылки на элемент справочника.
(188) NVL(КДок1.sp1175,NVL(КДок2.sp1230,NVL(КДок3.sp539,NVL(КДок4.sp854,NVL(КДок5.sp465,{#k8SjZc9Dxk 001-01-01’}) вот из за этой конструкции не отрабатывает скрипт,когда делаю одновложенное то работает.
(188) как то можно заменить на другой код без вложенности?
(190) sss999,
это точно из-за вложенности, а не из-за длины строки???
можно переделать через ICASE — но будет длиннее.
(191)
вот так через ICASE:
ICASE(NOT ISNULL($КДок1.ДатаОплаты),$КДок1.ДатаОплаты,NOT ISNULL($КДок2.ДатаОплаты),$КДок2.ДатаОплаты,NOT ISNULL($КДок3.ДатаОплаты),$КДок3.ДатаОплаты,NOT ISNULL($КДок4.ДатаОплаты),$КДок4.ДатаОплаты,NOT ISNULL($КДок5.ДатаОплаты),$КДок5.ДатаОплаты,DATE(100,1,1)) as ДатаОплаты
(192)
к стати наверное литералы дат вроде
{d’1900-01-01’}
лучше заменять функцией
DATE(1900,1,1)
…
но правда год в этой функции должен быть >= 100.
(193) {d’1900-01-01’} все заработало с изначальной ,здесь был косяк нужно было так {d’ 1900-01-01’}
(194) sss999,
SQL — АГБАР! ВО ИСТИНУ — АКБАР!!!
(196) а не подскажешь что бы из таблицы прочитать не id что нужно сделать ставить снова [_$_]?
(201) sss999,
да, в самом последнем запросе (по вложенности или в пакете),
результат которого выгружается в ТЗ,
в алиясе полей агрегатных типов надо указывать 1с-ную
типизацию вроде as [Фирма$Справочник.Фирмы]
—
только имей ввиду,
если каким-то образом вытащишь id-ники из чужой базы
то результат типизации может быть непредсказуем и заведомо неправильным.
(206) это еще с чего вдруг?
(206)(208) sss999, точнее надо было бы сказать:
результат типизации может быть непредсказуем и скорее всего неправильным.
поясняю на примере:
Есть база АА и база ББ.
И там и там есть справочник Контрагенты.
Id-ники грубо говоря это числа
уникальные в пределах одной таблицы и
возрастающие в порядке ввода элементов.
Пусть в базе АА контрагентов добавляли в следующем порядке:
К1(1), К2(2) — в скобках условно значение Id
А в базе ББ пусть в начало вклинился контрагент К3:
К3(1), К1(2), К2(3)
И так что имеем при типизации данных выдернутых из базы ББ,
но типизируемых в базе АА:
Контрагент К3(1) соотнесется с контрагентом К1(1)
К1(2) — с К2(2)
а контрагент К2(3) — не соотнесется ни с чем (скорее всего результатом типизации будет битая ссылка)
Еще более криво получится при группировке объединенных данных по id-никам:
В описанной выше ситуации
данные контрагента К1(1) из базы АА сложатся с данными контрагента К3(1) из базы ББ
— это уже будет искажением числовых учетных данных
(209)
наименьшим злом в этой ситуации было бы
выбирать в конечной выборки для группировки
не id-ники а строковые представления.
для справочников — это наименования (ну может в редком случае код)
а для кредит-документов
….
опа — тут мы с тобой и попались
😉
(210) отчет же есть и им пользуются и вроде как не жаловались,значит не совсем так иначе бы там все перемешивалось какая вероятность что как ты сказал idшники в двух базах будут совпадать у любого контрагента даже хоть он один всего в базах .значит базы наследники друг друга.мне вот непонятно ссылка в семерке это совокупность id и еще там чего то,а как вытащить ссылку что бы можно было и остальные поля вытаскивать из нее как в восьмерке,например descr я же не достану из id а только из самой таблицы справочника,получается ссылка это сама таблица?
(211) sss999,
1. Ну дай бог, если базы связаны УРБД и все справочники заполняются в центральной базе
и при переносе в перефирийных базах добавляются в том же порядке, что в центральной.
🙂
2. не путай ссылку как «объект» или значение «агрегатного типа».
с идентификатором ссылки,
которую часто тоже по простому обзывают «ссылкой».
через объект через точку действительно вытаскиваются остальные атрибуты.
ну а в запросах все атрибуты приходится тянуть из полей соответствующих таблиц
явно или неявно (как в 8-ке при разименовывании поля Ссылка).
(213) я имел ввиду как в восьмерке ссылка,как в семерке вытащить также поле ,что бы из него можно и другие поля вытаскивать и был как идентификатор
(216) sss999,
как я понял ты имел ввиду, что
в восьмерке можно писать запросы вроде этого:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Документ,
РеализацияТоваровУслуг.Контрагент,
РеализацияТоваровУслуг.Контрагент.Код,
РеализацияТоваровУслуг.Контрагент.Наименование,
РеализацияТоваровУслуг.Контрагент.ИНН,
РеализацияТоваровУслуг.Контрагент.КПП
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
Показать
хочу отметить, что в восьмерке язык запросов — это довольно высокоуровневая штука.
в нем имеются высокуровневые расширения.
То что мы сейчас обсуждаем (получение подчиненных полей через точку)
называется «разыменованием поля» — как раз является одним из таких расширений.
при этом на более низком уровне движок запроса выполняет запрос
несколько с другим текстом:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка КАК Документ,
РеализацияТоваровУслуг.Контрагент,
Контрагенты.Код КАК КонтрагентКод,
Контрагенты.Наименование КАК КонтрагентНаименование,
Контрагенты.ИНН КАК КонтрагентИНН,
Контрагенты.КПП КАК КонтрагентКПП
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
ПО РеализацияТоваровУслуг.Контрагент = Контрагенты.Ссылка
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон
Показать
то есть получение подчиненных полей неявно сводится к использованию
дополнительных левых соединений и подчиненные поля выбираются
из таблиц с правой стороны этих соединений.
(219)
Ну а то с чем ты связался — прямые запросы 1cpp в 1с-7.7
да еще в dbf-ной базе
ЭТО ЕСТЬ ТОТ САМЫЙ НАИНИЗКОУРОВНЕВЫЙ SQL-ЯЗЫК
там даже виртуальных таблицы
метапарсером почему-то не поддерживются
(вернее криво парсятся),
приходится их самому изображать
так-что придется тебе привыкать писать запросы так,
как они примерно на самом деле делаются
🙂