Последний тюнинг известной обработки 1CQA (консоль прямых запросов 1С++) для 1С:Предприятие-77.













Авторы исходной версии:  Дмитрий Ощепков (dmitro-75@mail.ru),
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)      Другие улучшения (их множество, смотрите подробности в описании в самой обработке). Вот  некоторые из них:

  1. При клике по пустой таблице параметров запроса выводится диалог с информацией о работе с параметрами запроса (Рис.5);
  2. Выбор типа объекта производится в удобном красивом диалоге в виде дерева (Рис.6);
  3. При клике по таблице результатов запроса, если значение в ячейке ссылочного типа, выводится меню действий с объектом (Рис.11). Меню позволяет:

    открыть объект для просмотра-редактирования;

    открыть объект в списке (журнале);

    пометить его на удаление;

    снять пометку;

    удалить непосредственно;

    открыть объект для редактирования в обработке ‘Редактор Реквизитов’ (автор Цылёв Владислав vet7777@mail.ru);

  4. Для документов доступны дополнительные действия:

    провести;

    отменить проведение; 

    изменить дату-время (для этого действия требуется обработка ИзменениеВремениДокумента);

  5.  Кроме этого для документа можно вывести отчет о движениях или сформировать структуру подчинености. Соответствующие отчеты интегрированы в консоль (чтобы не зависеть от используемой конфигурации): 

Отчет о движениях — в полном вариате (по регистрам, проводкам, записям ЖР и истории реквизитов).

При формировании структуры подчиненности для выборки подчиненых документов используются прямые запросы к базе. 

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» Cool.

Основные направления для использования:

1)      Для разработчиков: проверка запросов, изучение вопроса о том где, как и какие данные хранятся в базе данных.

2)      Администрирование данных: исправление ошибок в ИБ в дополнение к процедуре тестирования-исправления. В больших рабочих базах тестирование-исправление выполнить нереально. У меня оно длилось, например, больше двух суток. Поэтому тестирование запускается на копии базы в пакетном режиме с записью лога. Затем по информации из лога в 1CQA запросом SELECT вытаскиваем некорректные записи из базы. После анализа этих записей принимается решение: 

  • исправляем запросом UPDATE ,
  • удаляем запросом DELETE,
  • помечаем на удаление, чтобы потом удалить с контролем ссылочной целостности (пометить можно тоже в 1CQA запросом  UPDATE).

3)      Реорганизация данных при обновлениях: установка новых реквизитов, ресурсов и измерений в таблицах объектов метаданных, например регистров.  В архиве Samples.rar  из файлов поставки в файле Sample_TransforRegister_SQL.qry находится пример реально использованного скрипта для довольно сложной установки новых измерений и реквизитов регистра. Фактически скрипт заменяет перепроведение по регистру (выборочно, без пересчета итогов).  Итоги также можно пересчитать прямыми запросами с помощью обработок (только базы SQL):

 ПересчетИтоговРегистров.ert или 1CУстановкаТА.ert.

 

Благодарности:

Кроме авторов обработки хотелось бы также поблагодарить всех разработчиков 1CPP и FormEx. Без  их самоотверженного труда 1С-ка была тормозна, скучна, безлика и беспросветна!

98 Comments

  1. yuraos

    Авторы исходной версии: Дмитрий Ощепков (dmitro-75@mail.ru),

    Ivan T Berezdetsky (berezdetsky@yahoo.com). В предлагаемой версии:

    1) Добавлена возможность выбирать тип провайдера данных ODBC или OLEDB (только базы DBF);

    2) Добавлена возможность редактировать текст запроса в диалоге конструктора запросов, предоставляемого объектом «AddIn.qryConsole» ВК qryConsole.dll (только базы SQL);

    3) Расширен список типов объектов, которые могут принимать параметры запроса;

    4)Добавлена возможность через параметры запроса укладывать списки ссылок объектов во временные таблицы (в том числе с иерархическим включением). Эти таблицы можно использовать в тексте запроса по имени ‘#<ИмяПараметра>’;

    5) Добавлена возможность открывать обработку в режиме подбора (или имитации подбора) из других форм для подбора произвольных выборок данных из базы;

    6) Сделано множество других улучшений (интерфейсных и пр.);

    Перейти к публикации

    Reply
  2. yuraos

    О сколько нам консолей чудных готовит просвещенья дух… 😀

    Reply
  3. yuraos

    … или счастья много не бывает! ;)))))

    yuraos пишет:

    О сколько нам консолей чудных готовит просвещенья дух…

    Reply
  4. yuraos

    Народ!!!

    Если обработка скажет что-то странное насчет ваших прав — значит вы себя обидели! ;))))

    Поскольку обработка не для шаловливых ручек,

    при открытии там сразу написано:

    ПравоЕсть=1;

    ПравоЕсть=ПравоЕсть

    *ПравоДоступа(«УдалениеПомеченныхОбъектов»)

    *ПравоДоступа(«ПоискСсылокНаОбъекты»)

    *ПравоДоступа(«ИспользованиеЛюбыхВнешнихОтчетов»)

    *ПравоДоступа(«ГрупповоеПроведениеДокументов»)

    *ПравоДоступа(«УправлениеБухгалтерскимиИтогами»)

    *ПравоДоступа(«УправлениеОперативнымиИтогами»)

    *ПравоДоступа(«МонопольныйРежим»)

    *ПравоДоступа(«СохранениеИВыгрузкаДанных»)

    *ПравоДоступа(«АдминистративныеФункции»); // по совокупности крутых прав

    Если (ПравоЕсть=0) Тогда

    Предупреждение(«Недостаточно круты права доступа !!!»,60);

    СтатусВозврата(0);

    Возврат;

    КонецЕсли;

    Reply
  5. yuraos
    yuraos пишет:

    Народ!!!

    Если обработка скажет что-то странное насчет ваших прав — значит вы себя обидели! ;))))

    Поскольку обработка не для шаловливых ручек,

    при открытии там сразу написано:

    ПравоЕсть=1;

    ПравоЕсть=ПравоЕсть

    *ПравоДоступа(«УдалениеПомеченныхОбъектов»)

    *ПравоДоступа(«ПоискСсылокНаОбъекты»)

    *ПравоДоступа(«ИспользованиеЛюбыхВнешнихОтчетов»)

    *ПравоДоступа(«ГрупповоеПроведениеДокументов»)

    *ПравоДоступа(«УправлениеБухгалтерскимиИтогами»)

    *ПравоДоступа(«УправлениеОперативнымиИтогами»)

    *ПравоДоступа(«МонопольныйРежим»)

    *ПравоДоступа(«СохранениеИВыгрузкаДанных»)

    *ПравоДоступа(«АдминистративныеФункции»); // по совокупности крутых прав

    Если (ПравоЕсть=0) Тогда

    Предупреждение(«Недостаточно круты права доступа !!!»,60);

    СтатусВозврата(0);

    Возврат;

    КонецЕсли;

    Показать

    вдруг какой продвинутый юзвер (знаю я таких) додумается написать:

    truncate table _1sjourn

    :)))))))

    Reply
  6. CaSH_2004

    Красиво расписано, я так больше на 8-ке, неужели крупные конторы на 7-ке не думают переходить на 8-ку? Все будете допиливать 7-ку?

    Reply
  7. yuraos

    Да думают, думают… и еще раз думают!

    И чем крупней — тем дольше и трудней :)))))

    Reply
  8. dicwork

    (6) yuraos

    Просто если много наработанного кода под «семерку», его трудно сразу вот так взять и перенести на «восьмерку». Поэтому и сидим на «семерке» и пилим ее дальше под себя.

    Reply
  9. yuraos
    dicwork пишет:

    (6) yuraos

    Просто если много наработанного кода под «семерку», его трудно сразу вот так взять и перенести на «восьмерку». Поэтому и сидим на «семерке» и пилим ее дальше под себя.

    Етта точно!

    Сидим на этом суку и пилим-пилим-пилим его …. ;))))))

    Че дальше бывает по закону гравитации наверное все знают.

    Reply
  10. yuraos

    Доброго времени суток! Обновлены файлы поставки:

    Консоль1CQA_ALL.rar

    Консоль1CQA.rar

    PlugIns.rar

    Подправлен мелкий баг в консоли при «перезагрузке запроса» +

    + некритические изменения во вспомогательной обработке ИзменениеВремениДокумента.ert.

    Reply
  11. oav

    Очень хорошо ,что появилась возможность редактировать запрос.

    Reply
  12. Naked

    Кстати ИМХО на семерке как раз и остались большинство крупных организаций, и причина известна:

    большая организация => очень большие запросыхотелки узеров => очень очень много дописок, и перенос ни к чему если все работает на 7

    Reply
  13. Ёпрст

    +Для oledb строка подключения устаревшая + запросы в дбф базе сто лет в обед выполняются в монопольном режиме.

    Reply
  14. yuraos

    (12) Ёпрст,

    версии в архиве те,

    которые на сайте 1cpp указаны как «рекомендованные стабильные релизы». :)))

    Reply
  15. yuraos
    yuraos пишет:

    (12) Ёпрст,

    версии в архиве те,

    которые на сайте 1cpp указаны как «рекомендованные стабильные релизы». :)))

    а что под версией 1cpp3220 или 1cpp3227

    будет в dbf и в монопольном режиме работать

    без подмены библиотеки DBEng32.dllв каталоге BIN???

    Reply
  16. Ёпрст

    >>>»рекомендованные стабильные релизы».

    Этой «издёвке» года 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)

    Reply
  17. Ёпрст

    (15)Не будет. И можно работать либо на заплатке от hogik, либо на провайдере от ужаста, без изменения бэкенда

    Reply
  18. Ёпрст

    + А строка для оледб у тебя не верная (точнее, устаревшая)

    Reply
  19. Ёпрст пишет:

    + А строка для оледб у тебя не верная (точнее, устаревшая)

    Млин, ЁПРСТ, ты чувак умный, авторитетный!

    Не поделися с обчеством умом-размом?

    Народ с открытым ртом смотрит на тебя… ;))))))))

    Reply
  20. oav

    Хорошая вещь. Главное удобная и простая и понятная.!!!

    Reply
  21. Ёпрст
  22. yuraos
    Ёпрст пишет:

    На, дарю

    Преааааааааааааагромммммммное спасибо!

    Если такие умные люди ничего не писали бы полезного на форумах…..

    ….они бы потеряли бы всякий смысл! ;)))))))))))))))))))))))))))))))))))))))))

    Reply
  23. yuraos
    Ёпрст пишет:

    >>>»рекомендованные стабильные релизы».

    Этой «издёвке» года 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)

    —-

    Пардонс … не думал что это «для лохов».

    Учтемс что разработчики иногда шутятс :))))))))))))))))))

    Reply
  24. yuraos

    Всем доброе время суток!!!

    Обновлены файлы поставки:

    Консоль1CQA.rar, Консоль1CQA_ALL.rar, и PlugIns.rar .

    ————————————————————————————-

    1) Для устранения «навязчивого сервиса» добавлен флаг ‘ДП’ над кнопкой «Выполнить» (по умолчанию сброшен).

    Если флаг установлен — выводится меню дополнительных действий.

    Если не установлен — просто выполняется запрос.

    2) Для баз DBF добалена возможность выбирать значение параметра ‘Collate’ / ‘Collating’

    через меню действий, выводимого по кнопке «Выполнить» (Скриншот 13).

    4) В сервисной обработке ПодборUChoice.ert устранен мелкий баг.

    5) По замечаниям господина ЁПРСТ в архив FormEx1CPP.rar

    добавлены последние версии ВК 1cpp.dll.

    ————————————————————————————-

    Всем спасибо за внимание!

    Reply
  25. JohnyDeath

    Оригинально ты авторов отблагодарил — засветил их мыло для спам-ботов и прочей нечести!

    Reply
  26. CheBurator

    елы-палы.. как-то у меня консоль запросов от Ivan T Berezdetsky весьма существенно отличается от сабжевой… а консоль — достаточно свежая, еще по моей проьбе Ivan T Berezdetsky вносил/попралвл допфункционал…

    Reply
  27. yuraos

    Всем доброго времени суток!

    Обновлены файлы поставки Консоль1CQA_ALL.rar и Консоль1CQA.rar.

    Отчеты «Движения документа» и «Структура подчиненности»

    (используются при обработке выбора из меню действий с объектом в таблице результатов запроса)

    интегрированы в консоль, чтобы не зависеть от используемой конфигурации.

    Отчет о движениях — в полном вариате (по регистрам, проводкам, записям ЖР и истории реквизитов).

    При формировании структуры подчиненности для выборки подчиненых документов используются прямые запросы к базе.

    Также оптимизировано поведение консоли для баз DBF в монопольном режиме:

    При открытии обработка в блоке попытка-исключение пытается выполнить тестовый запрос:

    select count(*) from 1susers.

    Если при выполнении запроса исключения не возникает —

    — значит в монопольном режиме прямые запросы работают (пользователь подсуетился для этого).

    И поэтому ему не надо выводить никаких сообщений «о невозможности выполнить запрос».

    Reply
  28. yuraos
    CheBurator пишет:

    елы-палы.. как-то у меня консоль запросов от Ivan T Berezdetsky весьма существенно отличается от сабжевой… а консоль — достаточно свежая, еще по моей проьбе Ivan T Berezdetsky вносил/попралвл допфункционал…

    Сначала мне по наследству досталась, повидимому, первоначальная версия

    консольки от Дмитрия Ощепкова.

    Я ее довольно сильно натюнил:

    прикрутил режим подбора (нада было),

    конструктор запросов (для развлекухи, но иногда полезен),

    укладывание списков ссылок во впеменные таблицы (бывает полезно),

    ну и всяких бантиков навязал интерфейсных (вроде выбора типа параметра в дереве).

    При этом я старался сильно не «ломать» диалог и модуль.

    Но недавно мне попалась вот эта версия консоли

    http://www.1cpp.ru/forumfiles/Attachments/1CQA_001.zip

    И мне сильно захотелось имитацию исполнения пакетного запроса

    (эта фича меня щас здорово выручает, ломаю регистры перед обрезкой базы неподетски!).

    Что бы объединить функционал двух версий обработок,

    пришлось все довольно сильно все переделать (и диалоге, и в модуле).

    Так что эта консоль довольно сильно отличается от исходных.

    Но авторская информация в описании оставлена без изменений + добавлено от себя.

    Reply
  29. pupkinSana

    77 forever

    Нах мне 8ка если все инструменты для работы есть в семерке?

    77+ООП = не надо мучать попу 8кой

    Reply
  30. fishca

    (30) если уж Орефков повернулся в сторону восьмерки, то все инструменты скоро будут и в восьмерке ;).

    Reply
  31. yuraos

    (31) fishca,

    ты имеешь наверное ввиду этот проект

    http://snegopat.ru/ ???

    ну будем надеяться,

    что только расширением возможностей конфигуратора дело не закончиться

    :)))))))))))

    Эх, как я буду в 8-ке без своих любимых индексированных таблиц !!!

    Reply
  32. yuraos
    yuraos пишет:

    (31) fishca,

    ты имеешь наверное ввиду этот проект

    http://snegopat.ru/ ???

    ну будем надеяться,

    что только расширением возможностей конфигуратора дело не закончиться

    :)))))))))))

    Эх, как я буду в 8-ке без своих любимых индексированных таблиц !!!

    Кстати всем рекомендую!

    Вот здесь можно скачать бесплатную демо-версию:

    Общедоступная демо-версия на базе релиза 1.1.1.2

    Reply
  33. fishca

    (32) тебе стандартных средств работы с индексами в восьмерке не хватает?

    ТаблицаЗначений (ValueTable)

    Индекс (IndexOf)

    Синтаксис:

    Индекс(<Строка>)

    Параметры:

    <Строка> (обязательный)

    Тип: СтрокаТаблицыЗначений. Строка таблицы значений, для которой нужно определить индекс.

    Возвращаемое значение:

    Тип: Число. Индекс указанной строки в коллекции. Если не найдено, то возвращается -1.

    Описание:

    Получает индекс строки в коллекции строк таблицы значений.

    Reply
  34. yuraos
    fishca пишет:

    (32) тебе стандартных средств работы с индексами в восьмерке не хватает?

    ТаблицаЗначений (ValueTable)

    Индекс (IndexOf)

    Синтаксис:

    Индекс(<Строка>)

    Параметры:

    <Строка> (обязательный)

    Тип: СтрокаТаблицыЗначений. Строка таблицы значений, для которой нужно определить индекс.

    Возвращаемое значение:

    Тип: Число. Индекс указанной строки в коллекции. Если не найдено, то возвращается -1.

    Описание:

    Получает индекс строки в коллекции строк таблицы значений.

    Показать

    fishca, ты наверное хотел не про эти индексы ;)))

    а про вот эти (иначе — совсем не в тему попал):

    1) ТаблицаЗначений (ValueTable)
    Индексы (Indexes)
    Использование:
    
    Только чтение.
    Описание:
    
    Тип: ИндексыКоллекции.
    Содержит коллекцию индексов таблицы значений.
    
    2) ИндексыКоллекции (CollectionIndexes)
    Добавить (Add)
    Синтаксис:
    
    Добавить(<Колонки>)
    Параметры:
    
    <Колонки> (обязательный)
    
    Тип: Строка.
    Строковое описание колонок индекса в виде: «Колонка1, Колонка2…».
    Возвращаемое значение:
    
    Тип: ИндексКоллекции.
    
    Описание:
    
    Добавляет индекс в список индексов коллекции.
    

    Показать

    и с 1cpp наверняка не работал…

    … индексированная таблица там не просто таблица значений с индексами

    для ускорения перебора строк, а нечто большее, вот почитай справку он-лайн:

    http://www.1cpp.ru/docum/icpp/html/IndexedTable.html

    Reply
  35. EvgeniuXP

    Спасибо, что не забываете про 1С:Программистов 7.7, которые мучаются и деваться не куда, отличная консоль запросов! пользуюсь постоянно ей!

    Reply
  36. KrakoZyabl

    Ух, ты, Спасибо !!!!!+++

    Reply
  37. yuraos
    EvgeniuXP пишет:

    Спасибо, что не забываете про 1С:Программистов 7.7, которые мучаются и деваться не куда, отличная консоль запросов! пользуюсь постоянно ей!

    Да трудно про себя самого забыть!!!

    ;)))))))))))))

    Reply
  38. ander_

    Спасибо! И старая консоль не раз выручала, а с этой гораздо удобней.

    Reply
  39. yuraos

    Всем доброе время суток!

    Обновлены файлы поставки:

    — Консоль1CQA_ALL.rar

    — Консоль1CQA.rar

    — FormEx1CPP.rar

    Текущие изменения:

    1) Добавлена обработка спец.комментариев в тексте запроса (для установки спец.опций выполнения запроса).

    поддерживается обработка следующих спец.комментариев:

    ‘—!ExecuteTransaction’ выполнять в транзакции с фиксацией или откатом (в зависимости от ошибок);

    ‘—!ExecuteRollback’ выполнять в транзакции с последущим откатом

    (для просмотра «результатов» запроса без изменения данных в базе);

    подробности в макете «СпецКомметарииЗапроса» (можно вывести в табличный документ из диалога обработки).

    2) Добавлен вывод в табличный документ описания обработки;

    3) В меню действий с объектом по клику мышью добавлена

    команда открытия объекта для редактирования в обработке

    ‘Редактор Реквизитов’ (автор Цылёв Владислав vet7777@mail.ru);

    4) В файле FormEx1CPP.rar выложена подправленная версия класса «Общие.Форма.Привязка»

    (устранена ошибка времени выполнения, проявляющаяся в терминале,

    если установлен размер окна приложения в ‘процентах от размера рабочего стола’

    большое спасибо Pari за обсуждение проблемы);

    Reply
  40. Гость

    Спасибо, не помешает

    Reply
  41. yuraos

    Всем доброе время суток!

    Обновлены файлы поставки:

    — Консоль1CQA_ALL.rar

    — Консоль1CQA.rar

    Текущие изменения:

    1) Исправлен баг: не выводилось описание обработки (из-за неправильного указания имени макета с описанием).

    2) Исправлен баг: не формировалось дерево документов при обработке команды меню действий со значением в ячейке таблицы результатов запроса (из-за неправильного вызова процедуры рекурсивного вывода на печать подчиненных документов).

    Reply
  42. VIC_2010

    Большое спасибо! Именно с этой обработки начал применять 1С++…

    Reply
  43. yuraos

    (43) VIC_2010, пажалуста!

    только посторожней с нею …

    … а то «хорошее» — это сильнодействующий наркотик.

    К нему быстро привыкают!!!

    ;))))))))))))))))))))

    Reply
  44. Naked

    Довольно таки хорошая штука)))

    народ, подскажите, может быть есть что либо в 7.7 для прямых запросов, похожее на 8шный конструктор запросов?

    Reply
  45. yuraos
    Naked пишет:

    Довольно таки хорошая штука)))

    народ, подскажите, может быть есть что либо в 7.7 для прямых запросов, похожее на 8шный конструктор запросов?

    Есть штатный убогий инструмент, для таких же штатных убогих запросов.

    ;))))

    Есть так же примочки для запросов 1c++:

    Вот эта примочка для режима конфигуратора:

    http://infostart.ru/public/14933/?PAGEN_1=1#comm527164

    Примочка для режима 1с-преприятие описана в этой статье и использавана в использавана данной консоли.

    ЗЫ:

    правда примочки эти работают только для баз SQL

    :((((((((((

    Reply
  46. mayer

    Очень удобная вещь! Благодарствую! 🙂

    Reply
  47. wunderland

    Подскажите, а обратиться в режиме прямого запроса к БухгалтерскимИтогам возможно?

    Кажется, мне где-то попадался пример такого запроса, но через консоль не вижу как это сделать.

    Reply
  48. yuraos

    (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)!

    Успехов вам!!!

    🙂

    Reply
  49. yuraos

    (48) wunderland, к стати о птичках

    🙂

    если вы работаете в базе dbf

    вам также будет полезна справка по

    Microsoft Visual FoxPro 9.0.

    если в базе sql то справка в

    SQL Server Books Online

    В прямых запросах часто приходися использовать встроенные функции,

    в частности функции пребразования типов.

    Reply
  50. wunderland

    Спасибо, уважаемый за ответ, и за ссылки, и за парсер…

    Ну нет, так нет — будем писать вручную.

    Правда мне как-то привычнее в таком виде:

    SELECT

    СубконтоДт2 [ТМЦ $Справочник.ТМЦ]

    , Сумма

    , Количество

    FROM $БИДвиженияССубконто.Основной(:НачДата,:КонДата~,,

    (СчетДт = :СчетДт) and (СубконтоДт1 =:ВыбМестоХранения)) БИ

    хотя привычнее, это громко сказано, я только осваиваю прямые запросы,

    сам то я больше по 8-ке, а тут вот угараздило устроится на фирму где

    на 7.7 еще все крутится и на переход незнаю когда решатся.

    Reply
  51. wunderland

    Отличная вещь — чем больше юзаю, тем больше нравится… Большое спасибо!!!

    Reply
  52. alon

    (51)Поддержу.

    Очень не хватает возможности подключить класс-выполнитель аналогично qryConsole.

    Reply
  53. ппп986

    Я конечно извиняюсь, но почему мне эта обработка выдает вот это?

    ODBCDatabase:Соединение() error:

    State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данной функции

    Reply
  54. ппп986

    может что-то делаю не так 🙁

    Reply
  55. ппп986

    Может кто-нибудь даст

    Microsoft OLE DB Provider for Visual FoxPro 9.0

    Reply
  56. yuraos

    (54) ппп986, через ODBC к базе DBF почему-то подконнектиться не получается в запросах 1с++ 😉 .

    приходиться работать ч/з OLEDB…

    …и по-моему где-то в статье должно было быть написано по этому поводу, что

    для использования в базах dbf требуется установка драйвера OLEDB vfpoledb provider v9

    Reply
  57. BlueWind
    Reply
  58. yuraos

    (58) BlueWind,

    да я все время присматриваюсь к этому классу



    все думаю заточить эту консоль под 1sqlite

    и добавить подобие конструктора заготовок для запросов

    но руки не доходят (поскольку я сейчас отошел от 1с-7.7)



    но если руки дойдут — то заодно заточу ее и под этот класс.

    😉

    Reply
  59. 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 СпрДог

    LEFT JOIN SC134 as СпрКонтр

    ON СпрКонтр.sp125 = СпрДог.ID

    ON Покуп.SP2195 = СпрДог.ID

    Reply
  60. yuraos

    (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. возможно провайдеру не понравились условия соединений все скопом в конце запроса

    Reply
  61. yuraos

    (61)

    а почему запрос с внутренними именами таблиц ?

    я когда работал с прямыми запросами под 7.7,

    то уже вовсю пользовался макроименами метапарсера 1СPP.

    Reply
  62. yuraos

    (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



    куда наглядней

    Reply
  63. sss999

    (63) потмоу что делается к расным файлам дбв которые просто лежат в базе и в метаданных их нет.Не работает даже когда просто пишу CASE WHEN 1=1 THEN 0 ELSE 5 END

    Reply
  64. yuraos

    (64) sss999,

    что пишет, скриншот не выложишь???

    ra2207 — регистр Продажи ?

    Sp2201 — СуммаПродаж

    Sp2203 — СуммаСебесттоимости — или как там эти ресурсы там называются (забыл уже) ??

    дома проверю, вспомню 7.7 немного.

    Reply
  65. sss999

    пишет одно и тоже в принципе для любых ошибок Запрос >>> OLEDBCommand error:

    FAILED! ICommandText::Execute(): Command contains unrecognized phrase/keyword.

    Reply
  66. yuraos

    (66) sss999, да…подзабыл я все эти дела с foxpro.



    дело в том, что конструкция

    case when … then … else … end

    это из t-sql, а в foxpro в запросах вместо неё

    приходится использовать функцию iif(,,)

    Reply
  67. yuraos

    (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

    ***

    Reply
  68. sss999

    (69) а не знаешь по какому полю в справочнике договоры найти владельца контрагента

    Reply
  69. sss999

    (69) с этим разобрался,parentext поле,теперь не работает конструкция with rollup ,хотя в «документации» я нашел что парень ее использовал ,я грешу на dll

    Reply
  70. yuraos

    (71)(72)

    со всякими конструкциями специфичными для t-sql надо аккуратней

    скорее всего под foxpro они работать не будут.

    в частности хинты для указания режима блокировок типа (NOLOCK)

    foxpro не поддерживаются.

    Reply
  71. yuraos

    EXECSCRIPT(

    «sel ect id as Ссылка from $Справочник.Номенклатура INTO TABLE #Номенклатура)»+

    CHR(13)+

    «select Таб.Ссылка as [Ссылка$Справочник.Номенклатура] fr om #Номенклатура as Таб»)

    Reply
  72. sss999

    EXECSCRIPT(

    «sel ect id as Ссылка from $Справочник.Номенклатура INTO TABLE #Номенклатура)»+

    CHR(13)+

    «select Таб.Ссылка as [Ссылка$Справочник.Номенклатура] fr om #Номенклатура as Таб»)

    не работает у меня говорит нет dbf номенклатура

    Reply
  73. yuraos

    пришлось сделать еще один вложенный подзапрос,

    чтобы вычислить дату оплаты кредит-документа:

    NVL($КДок1.ДатаОплаты,NVL($КДок2.ДатаОплаты,NVL($КДок3.ДатаОплаты,NVL($КДок4.ДатаОплаты,NVL($КДок5.ДатаОплаты,{d’0001-01-01’}))))) as ДатаОплаты



    теперь как я понимаю твоя задача все это разломать,

    а потом правильно собрать соединив CHR(13)

    😉

    во вложении — исходник запроса для консоли

    Reply
  74. sss999

    (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’) «;

    Reply
  75. yuraos

    (178) sss999,

    в принципе я так и понял,

    что ты программно генеришь текст запроса с функцией EXECSCRIPT()

    на основе исходного.

    но с учетом замечания в (173) я подумал, что проблема связана

    с непроверенным изменением запроса для учета дат оплат возвратов.

    Reply
  76. sss999

    (180) ну вот.

    Reply
  77. sss999

    (180) что подскажешь есть идеи ? ))

    Reply
  78. yuraos

    (182) sss999,

    мутная эта вся тема с функцией EXECSCRIPT()



    то нельзя, это не поддерживается.

    одно лишь преимущество —

    — можно пакет команд выполнить за одно обращение к провайдеру данных.

    но при этом текст запроса приходится нетривиально преобразовывать.



    я бы попытался обойтись без нее

    Reply
  79. sss999

    (183) [Фирма_1c_type_Справочник_1c_dot_Фирмы] не знаешь как сделать что бы после обработки парсером псевдоним был не такой а просто «фирма» при этом что бы нормально отображался не как id?

    Reply
  80. yuraos

    (184) sss999,

    если «чтобы отображалось по нормальному» — то никак

    если не использовать 1с-ную типизацию в алиясе поля

    вместо

    СпрФир.ID as [Фирма$Справочник.Фирмы]

    писать просто

    СпрФир.ID as Фирма

    то имя поля транслироваться будет «нормально»,

    но при выгрузке результата запроса в тз

    будут отображаться сами id-ники, а не наименования

    Reply
  81. yuraos

    (187)

    ну правда можно еще выводить вместо id-ника наименование

    СпрФир.DESCR as Фирма.

    но тогда не будет ссылки на элемент справочника.

    Reply
  82. sss999

    (188) NVL(КДок1.sp1175,NVL(КДок2.sp1230,NVL(КДок3.sp539,NVL(КДок4.sp854,NVL(КДок5.sp465,{#k8SjZc9Dxk 001-01-01’}) вот из за этой конструкции не отрабатывает скрипт,когда делаю одновложенное то работает.

    Reply
  83. sss999

    (188) как то можно заменить на другой код без вложенности?

    Reply
  84. yuraos

    (190) sss999,

    это точно из-за вложенности, а не из-за длины строки???

    можно переделать через ICASE — но будет длиннее.

    Reply
  85. yuraos

    (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 ДатаОплаты

    Reply
  86. yuraos

    (192)

    к стати наверное литералы дат вроде

    {d’1900-01-01’}

    лучше заменять функцией

    DATE(1900,1,1)



    но правда год в этой функции должен быть >= 100.

    Reply
  87. sss999

    (193) {d’1900-01-01’} все заработало с изначальной ,здесь был косяк нужно было так {d’ 1900-01-01’}

    Reply
  88. yuraos

    (194) sss999,

    SQL — АГБАР! ВО ИСТИНУ — АКБАР!!!

    Reply
  89. sss999

    (196) а не подскажешь что бы из таблицы прочитать не id что нужно сделать ставить снова [_$_]?

    Reply
  90. yuraos

    (201) sss999,

    да, в самом последнем запросе (по вложенности или в пакете),

    результат которого выгружается в ТЗ,

    в алиясе полей агрегатных типов надо указывать 1с-ную

    типизацию вроде as [Фирма$Справочник.Фирмы]



    только имей ввиду,

    если каким-то образом вытащишь id-ники из чужой базы

    то результат типизации может быть непредсказуем и заведомо неправильным.

    Reply
  91. sss999

    (206) это еще с чего вдруг?

    Reply
  92. yuraos

    (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) из базы ББ

    — это уже будет искажением числовых учетных данных

    Reply
  93. yuraos

    (209)

    наименьшим злом в этой ситуации было бы

    выбирать в конечной выборки для группировки

    не id-ники а строковые представления.

    для справочников — это наименования (ну может в редком случае код)

    а для кредит-документов

    ….

    опа — тут мы с тобой и попались

    😉

    Reply
  94. sss999

    (210) отчет же есть и им пользуются и вроде как не жаловались,значит не совсем так иначе бы там все перемешивалось какая вероятность что как ты сказал idшники в двух базах будут совпадать у любого контрагента даже хоть он один всего в базах .значит базы наследники друг друга.мне вот непонятно ссылка в семерке это совокупность id и еще там чего то,а как вытащить ссылку что бы можно было и остальные поля вытаскивать из нее как в восьмерке,например descr я же не достану из id а только из самой таблицы справочника,получается ссылка это сама таблица?

    Reply
  95. yuraos

    (211) sss999,

    1. Ну дай бог, если базы связаны УРБД и все справочники заполняются в центральной базе

    и при переносе в перефирийных базах добавляются в том же порядке, что в центральной.

    🙂

    2. не путай ссылку как «объект» или значение «агрегатного типа».

    с идентификатором ссылки,

    которую часто тоже по простому обзывают «ссылкой».

    через объект через точку действительно вытаскиваются остальные атрибуты.

    ну а в запросах все атрибуты приходится тянуть из полей соответствующих таблиц

    явно или неявно (как в 8-ке при разименовывании поля Ссылка).

    Reply
  96. sss999

    (213) я имел ввиду как в восьмерке ссылка,как в семерке вытащить также поле ,что бы из него можно и другие поля вытаскивать и был как идентификатор

    Reply
  97. yuraos

    (216) sss999,

    как я понял ты имел ввиду, что

    в восьмерке можно писать запросы вроде этого:


    ВЫБРАТЬ

    РеализацияТоваровУслуг.Ссылка КАК Документ,

    РеализацияТоваровУслуг.Контрагент,

    РеализацияТоваровУслуг.Контрагент.Код,

    РеализацияТоваровУслуг.Контрагент.Наименование,

    РеализацияТоваровУслуг.Контрагент.ИНН,

    РеализацияТоваровУслуг.Контрагент.КПП

    ИЗ

    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

    ГДЕ

    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон

    Показать

    хочу отметить, что в восьмерке язык запросов — это довольно высокоуровневая штука.

    в нем имеются высокуровневые расширения.

    То что мы сейчас обсуждаем (получение подчиненных полей через точку)

    называется «разыменованием поля» — как раз является одним из таких расширений.

    при этом на более низком уровне движок запроса выполняет запрос

    несколько с другим текстом:


    ВЫБРАТЬ

    РеализацияТоваровУслуг.Ссылка КАК Документ,

    РеализацияТоваровУслуг.Контрагент,

    Контрагенты.Код КАК КонтрагентКод,

    Контрагенты.Наименование КАК КонтрагентНаименование,

    Контрагенты.ИНН КАК КонтрагентИНН,

    Контрагенты.КПП КАК КонтрагентКПП

    ИЗ

    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

    ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты

    ПО РеализацияТоваровУслуг.Контрагент = Контрагенты.Ссылка

    ГДЕ

    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНач И &ДатаКон

    Показать

    то есть получение подчиненных полей неявно сводится к использованию

    дополнительных левых соединений и подчиненные поля выбираются

    из таблиц с правой стороны этих соединений.

    Reply
  98. yuraos

    (219)

    Ну а то с чем ты связался — прямые запросы 1cpp в 1с-7.7

    да еще в dbf-ной базе

    ЭТО ЕСТЬ ТОТ САМЫЙ НАИНИЗКОУРОВНЕВЫЙ SQL-ЯЗЫК

    там даже виртуальных таблицы

    метапарсером почему-то не поддерживются

    (вернее криво парсятся),

    приходится их самому изображать

    так-что придется тебе привыкать писать запросы так,

    как они примерно на самом деле делаются

    🙂

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *