Эффективное использование MSSQL в 1С при помощи ВК 1С++ #494034


#0 by teroinc
Уважаемые господа специалисты, прошу Вас уделить внимание на такой вопрос. В данный момент я пытаюсь оптимизировать скорость работы некоторых блоков не типовой конфигурации 1С: версии 7.7 "Торговля и склад". Версия программы: редакция  - 9.2, релиз     - 7.70.934. Для этого я оптимизирую 1с запросы, посредством перевода их в прямые запросы языка sql, имеющего интеграцию с 1с кодом. В качестве базовой опоры выступает материал: сайта - по названием: Эффективное использование MSSQL в 1С при помощи ВК 1С++. Хотел бы проконсультироваться у Вас вот в чем: в данной статье приводиться несколько примеров использования в sql запросах такого ключего поля, как - период выборки данных, т.е. выборка в диапозоне дат... Вот пример запроса на sql с исходника: я пытаюсь интепритировать его и применить уже к реальному, мне нужному запросу, который без конструкции - в части - "периода", работает нормально, возвращая некий результат. Но когда появляется данная конструкция, начинают возникать ошибки... Мой вариант реального адаптированного под sql запроса: Ошибка: Meta name parser error: поле таблицы не найдено "$Рег.Period", ну или еще какие-либо ошибки... Задача максимум - сделать выборку за период, минимум - выбрать данные с полем период... Кто с этим сталкивался и что-то может сказать по этому вопросу или подсказать как корректно это сделать - помогите пожалуйста, очень Вас прошу!!! Спасибо большое за внимание и заранее за помощь...
#0 by teroinc
Уважаемые господа специалисты, прошу Вас уделить внимание на такой вопрос. В данный момент я пытаюсь оптимизировать скорость работы некоторых блоков не типовой конфигурации 1С: версии 7.7 "Торговля и склад". Версия программы: редакция  - 9.2, релиз     - 7.70.934. Для этого я оптимизирую 1с запросы, посредством перевода их в прямые запросы языка sql, имеющего интеграцию с 1с кодом. В качестве базовой опоры выступает материал: сайта - по названием: Эффективное использование MSSQL в 1С при помощи ВК 1С++. Хотел бы проконсультироваться у Вас вот в чем: в данной статье приводиться несколько примеров использования в sql запросах такого ключего поля, как - период выборки данных, т.е. выборка в диапозоне дат... Вот пример запроса на sql с исходника: я пытаюсь интепритировать его и применить уже к реальному, мне нужному запросу, который без конструкции - в части - "периода", работает нормально, возвращая некий результат. Но когда появляется данная конструкция, начинают возникать ошибки... Мой вариант реального адаптированного под sql запроса: Ошибка: Meta name parser error: поле таблицы не найдено "$Рег.Period", ну или еще какие-либо ошибки... Задача максимум - сделать выборку за период, минимум - выбрать данные с полем период... Кто с этим сталкивался и что-то может сказать по этому вопросу или подсказать как корректно это сделать - помогите пожалуйста, очень Вас прошу!!! Спасибо большое за внимание и заранее за помощь...
#0 by teroinc
Уважаемые господа специалисты, прошу Вас уделить внимание на такой вопрос. В данный момент я пытаюсь оптимизировать скорость работы некоторых блоков не типовой конфигурации 1С: версии 7.7 "Торговля и склад". Версия программы: редакция  - 9.2, релиз     - 7.70.934. Для этого я оптимизирую 1с запросы, посредством перевода их в прямые запросы языка sql, имеющего интеграцию с 1с кодом. В качестве базовой опоры выступает материал: сайта - по названием: Эффективное использование MSSQL в 1С при помощи ВК 1С++. Хотел бы проконсультироваться у Вас вот в чем: в данной статье приводиться несколько примеров использования в sql запросах такого ключего поля, как - период выборки данных, т.е. выборка в диапозоне дат... Вот пример запроса на sql с исходника: я пытаюсь интепритировать его и применить уже к реальному, мне нужному запросу, который без конструкции - в части - "периода", работает нормально, возвращая некий результат. Но когда появляется данная конструкция, начинают возникать ошибки... Мой вариант реального адаптированного под sql запроса: Ошибка: Meta name parser error: поле таблицы не найдено "$Рег.Period", ну или еще какие-либо ошибки... Задача максимум - сделать выборку за период, минимум - выбрать данные с полем период... Кто с этим сталкивался и что-то может сказать по этому вопросу или подсказать как корректно это сделать - помогите пожалуйста, очень Вас прошу!!! Спасибо большое за внимание и заранее за помощь...
#1 by Aleksey_3
У остатков нет периода, они всегда на ТА
#2 by Aleksey_3
Если нужно за период, то бери из журнала документы, за период и присоединяй уже остатки. Или галку включить надо быстрая обработка движений, как то так
#3 by teroinc
Хорошо, галка в структуре этого регистра: "ОстаткиТМЦ" - включена - (быстрая обработка движений), подскажите пожалуйста, как будет выглядить конечный код данного запроса без использования журнала, а исключительно используя данный регистр, т.е вот этот запрос, с тем условием, что выборка данных из него должна быть в рамках произвольного, но заданного периода... Запрос:  ТекстЗапроса = "        |$Рег.Номенклатура IN (SELECT Val FROM #СЗНоменклатуры)"; И если кто знает, подскажите пожалуйста, где можно скачать некую программу-консоль, отображающую структуру метаданных конфигурации с возможной интепритацией sql? Спасибо огромное заблоговременно за Вашу помощь и отклики и внимание....
#4 by ДенисЧ
я шо-то не понял, а чего автор хочет от остатков и периода? А чтобы читать "структуру метаданных конфигурации с возможной интепритацией sql" никаких гитик не надо... Достаточно нотепада, входящего в состав ОС MS Windows... (подсказываю [заметьте, бесплатно!!!] - есть такой файл 1cv7.dds, там много интересного понаписано). Зы. Если меня спросят, где этот файл взять, я повешу (сь)...
#5 by Rie
Смотри в сторону DATE_TIME_IDDOC
#6 by ДенисЧ
в остатках??
#7 by Rie
??? В движениях. Он же движения за период хочет выбрать, если я правильно понял.
#8 by ДенисЧ
но выбирает-то из остатков :-)
#9 by teroinc
1 - Да, все правильно, я выбираю движения за период, 2 - про файл с расширением DDS, я все знаю и им пользуюсь, но этот файл некорректен во многом..., запрос после него с ошибками.., поэтому хочется заглянуть в живую структуру конфигурации... Да, есть минимальное желание использовать журналы и делать соединения... если можно обойтись без этого, а напрямую указать отбор по периоду, подскажите пожалуйста как...? За все Ваши будущее рецензии большое спасибо за ранее:)
#10 by teroinc
работая исключительно со структурой и таблицей конкретного регистра - остатков... Спасибо еще раз!:)
#11 by Rie
Он в выбирает $Регистр.ОстаткиТМЦ, а не $РегистрИтоги.ОстаткиТМЦ.
#12 by Rie
DDS некорректен???
#13 by ДенисЧ
"файл некорректен во многом" - а мужики-то и не знают... И пользуются им по жизни... Может проблемы с чтнеием?
#14 by ДенисЧ
select * from $регистр.ОстаткиТМЦ where date_time_iddoc between :НачДата and :КонДата
#15 by teroinc
да, но здесь программа ругается, что Meta name parser error: не указан параметр НачДата и КонДата хотя, я объявляю его далее: и что я делаю не корректно, объясните пожалуйста? ...
#16 by Rie
Код покажи.
#17 by ДенисЧ
ты некорректно показываешь код, в котором выдаётся ошика
#18 by teroinc
#19 by teroinc
сообщение об ошибке: программа ругается, что Meta name parser error: не указан параметр ":ДатаЗапроса"
#20 by ДенисЧ
код приведён не полностью.
#21 by Rie
А после ТекстЗапроса что идёт?
#22 by ДенисЧ
Кстати, регистр букв имеет значение
#23 by teroinc
вот так, а далее, сразу после окончания запроса - идет объявление переменной - ДатаЗапроса, именно вот так:
#24 by teroinc
и что же тут не так...? ...
#25 by teroinc
почему возникает ошибка программы: Meta name parser error: не указан параметр ":ДатаЗапроса", я разве его некорректно указываю ?...
#26 by Rie
Скопируй сюда кусок кода. Полностью, а не по кусочкам.
#27 by ДенисЧ
Да кто тебя знает, что ты там указывешь... Нам отсюда не видно... А копипаст у тебя, видать, запрещён...
#28 by teroinc
#29 by Rie
Чего-то ты всё же не договариваешь... А ДатаЗапроса - случайно, не пустое значение?
#30 by teroinc
ДатаЗапроса = '05.01.10'...
#31 by Rie
Откуда это известно?
#32 by ДенисЧ
Для начала прямо скопируй слово ДатаЗапроса из текста в Установить...
#33 by teroinc
#34 by teroinc
#35 by SnarkHunter
Два WHERE подряд - это, конечно, новое слово в запросах, но работать это не будет... И что такое $Рег.ОстаткиТМЦ - тоже напонятно...
#36 by ДенисЧ
где-то так я бы писал...
#37 by orefkov
Поле period не в $Регистр.ОстаткиТМЦ, а в $РегистрИтоги.ОстаткиТМЦ. Ну и для получения итогов проще использовать виртуальную таблицу остатков, чем выписывать запрос ручками. Почитай кроме статей еще и доку, просветляет...
#38 by teroinc
Доброе утро уважаемые специалисты,а подскажите пожалуйста, как задать функцию в этом же запросе, чтобы было как блоке запроса из первоисточника? Запрос: мой запрос: "     Заранее большая Вам благодарность и спасибо большое!!! ...
#39 by AeDen
Посоветую использовать виртуальную таблицу итогов. Кроме того, есть книжка хорошая, Алекс Кригель и Борис Трухнов, "SQL Библия пользователя". Есть смысл сначала ее прочитать. а потом писать запросы.
#40 by teroinc
Я понимаю, но у меня дед дэй завтрашнее утро...
#41 by teroinc
поэтому я и прошу помочь мне, подсказать - какая конструкция функции уместна и применима к данному случаю ?...
#42 by teroinc
заранее большое спасибо!!!
#43 by AeDen
Тестовое задание на работу?
#44 by AeDen
ТекстЗапроса = "
#45 by teroinc
нет, это очень острое задание по работе...
#46 by teroinc
(Количество) - это разве тоже самое что:|Функция ОстКоличество = КонОст(Количество); ??? Спасибо большое!!! ...
#47 by AeDen
Это ресурс...
#48 by teroinc
это ресурс, не спорю, но тут же явно не задается вот это выражение: КонОст(Количество) ??? ...
#49 by AeDen
Чтобы получить остаток на некоторую дату, допустим на середину месяца, нужно объединить два запроса: Итоги на конец предыдущего месяца и Обороты с начала месяца по выбранную дату. Чтобы облегчить нам работу были придуманы, так называемые, виртуальные таблицы (не путать с представлениями VIEW), которые являются простыми макроподстановками (хотя на самом деле не такими уж и простыми. С большой вероятностью, если вы сами будете их разворачивать, то у вас получится хуже, т.к. лучше уже просто уже некуда). Существует несколько видов виртуальных таблиц Остатки, ОстаткиОбороты, Обороты. Первые 2 только для регистров остатков, 2 – для оборотного регистра. Пример: Получим остатки по складу в разрезе товаров на дату ТекстЗапроса = " |SELECT В этом примере мы получим остатки на начало ВыбДата. Если мы хотим на конец, то нужно указывать модификатор :ВыбДата~. Если вообще опустить параметр ВыбДата, то получатся остатки на ТА. Это из документации... Автор, ты хоть доку почитай того, за что взялся... больше я тебе ничего не скажу...
#50 by teroinc
Друзья, уважаемые специалисты, то что я спрашиваю и рассказываю - относится к конфигурации - "ТиС" версии 7.7, прошу не путать с 1С: 8, или я что-то в своей жизни уже успел пропустить?...
#51 by AeDen
Ты в своей жизни пропустил документацию по 1С++, вероятно. Тут тебе по восьмерке никто ни слова не сказал.
#52 by teroinc
такое выражение к сожалению у меня не работает... господи, а как хочется написать такой вариант запроса, который бы работал и не вызывал бы программных ошибок...
#53 by teroinc
не работает и возникает программная ошибка даже при таком запросе: "        |SELECT
#54 by AeDen
А все почему? Потому-что документацию никто не читает!
#55 by AeDen
целиком код покажи, и ошибку.
#56 by teroinc
Вот 1 из вариантов запроса:     А вот возникающая при исполнении ошибка: ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); {Документ.ОприходованиеТМЦ.Форма.Модуль}: State 42S22, native 207, message [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'Количество'.
#57 by AeDen
так может стоит указать, какие ты ресурсы хочешь получить?
#58 by AeDen
на склад. на фирму условия нету, какие измерения и какие ресурсы выдавать - тоже не понятно... Если с измерениями все просто - они все будут доступны, то с ресурсами такой фокус не прокатит...
#59 by teroinc
мой запрос: ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); {Документ.ОприходованиеТМЦ.Форма.Модуль}: Meta name parser error: слишком много параметров передано в "$РегистрОстатки.ОстаткиТМЦ"
#60 by teroinc
что тут не так ? ...
#61 by AeDen
ДНК:)
#62 by teroinc
я знаю, что хромосомы... но что вних именно...?:)
#63 by AeDen
"        |SELECT
#64 by teroinc
А скажи пожалуйста, если нам в запросе не нужно использовать и упоминать - ресурс:ЦенаПрод, но обязательно нужно задействовать вот такое, интепритированное выражение на языке 1с 7.7 - Функция ОстКоличество = КонОст(Количество) как в соответствии с переведенным на sql запросом, вписать это выражение в начальный мой запрос... ? т.е. сюда: |SELECT
#65 by AeDen
"        |SELECT
#66 by AeDen
а не
#67 by Любитель XML
попробуй SUM($Рег.ЦенаПродОстаток) as ЦенаПрод
#68 by AeDen
"        |SELECT       модификатор - на конец дня тебе выдаст остаток. Ну либо на конец того, что содержится в параметре "ДатаЗапроса"
#69 by AeDen
Это не надо в данном случае. Виртуальная таблица все это сама сделает.
#70 by Любитель XML
впринципе ты прав... я порходу прочсто не понял что имелось ввиду в .  :ДатаЗапроса - вернет на начало дня,:ДатаЗапроса~ на конец дня. Автору это нужно было?
#71 by AeDen
нет, автору надо маны покурить по большому счету, а не тупить на форуме. Но в данном конкретном случае ему надо именно это:)
#72 by AeDen
кстати, 30 минут вдумчивого чтения манов гораздо эффективнее обычно, чем сутки торчания на форуме для решения задач.
#73 by Любитель XML
а вообще все эти вещи с примерами хорошо расписаны на форумах itland.ru, 1cpp.ru +100
#74 by teroinc
скопировал в точности в код, вот этот запрос: "        |SELECT       а при его исполнении получил вот такую программную ошибку: ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); {Документ.ОприходованиеТМЦ.Форма.Модуль}: Meta name parser error: недопустимое значение параметра "$РегистрОстатки.ОстаткиТМЦ"
#75 by teroinc
помогите пожалуйста, что опять тут не так я написал...? ...
#76 by AeDen
хз, проверь буковки.
#77 by AeDen
а у тебя база наскуле или в дбф?
#78 by teroinc
база на sql, я попробывал уже все, что только можно и Вас очень прошу помочь, написать корректный запрос в моем случае, который нормально отработает без ошибок, пожалуйста...
#79 by AeDen
Вот с этого надо было начинать. Сколько?
#80 by AeDen
тимвьювер есть?
#81 by teroinc
что это?
#82 by AeDen
ясно. Пригласите специалиста.
#83 by teroinc
смотрите, вот этот запрос, написан корректно: "        |SELECT       осталось только разобраться, почему не воспринимается вот эта часть: $РегистрОстатки.ОстаткиТМЦ и почему вследствии возникает ошибка: ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); {Документ.ОприходованиеТМЦ.Форма.Модуль}: Meta name parser error: недопустимое значение параметра "$РегистрОстатки.ОстаткиТМЦ" ???
#84 by teroinc
что здесь следует подправить для корректности работы этого запроса ?...
#85 by teroinc
помогите пожалуйста разобраться, я очень Вам благодарен за помощь, но очень хочется довести все до логического корректного конца ! ...
#86 by SnarkHunter
>> почему не воспринимается вот эта часть:  $РегистрОстатки.ОстаткиТМЦ Не воспринимается не эта часть, а пятый по счету параметр...
#87 by teroinc
т.е. какой же?
#88 by teroinc
склад?
#89 by teroinc
почему, с ним вроде все так..
#90 by SnarkHunter
При чем тут склад...
#91 by SnarkHunter
ЦенаПрод - это измерение, nicht wahr?
#92 by teroinc
ЦенаПрод - да, это измерение, но в запросе оно мне не нужно..., поэтому я его в нем просто - опускаю...
#93 by AeDen
Мда... чукча не читатель...
#94 by ДенисЧ
убери цену из пятого параметра... Он не для того предназначен
#95 by teroinc
я могу написать вот так:
#96 by ДенисЧ
нет, не можешь, пока цену у тебя в измерениях числится
#97 by SnarkHunter
Спустись в трюм, найди там ручной тормоз, обними его - он твой папа...
Тэги: Админ
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С