|
v7: 1С 7.7 простейший прямой запрос ОстаткиТМЦ ТиС | ☑ | ||
---|---|---|---|---|
0
Zoeh
24.01.22
✎
04:47
|
1С 7.7 простейший прямой запрос ОстаткиТМЦ ТиС
ТекстЗапроса = " |DECLARE @Тов varchar(8) |SET @Тов = ? |SELECT | sum(Ост.ОстатокТовараОстаток) Остаток |FROM $РегистрОстатки.ОстаткиТМЦ AS Ост |WHERE | Ост.Номенклатура = @Тов |"; РекордСет.ДобПараметр(1, 14, 8, 0); РекордСет.Подготовить(ТекстЗапроса); // ВыбСкл=""; РекордСет.УстПараметр(1, Ном.ТекущийЭлемент()); //RS.УстПараметр(2, ВыбСкл); Рез = РекордСет.ВыполнитьСкалярный(); РекордСет.Закрыть(); Конец = _GetPerformanceCounter() ; Сообщить(Конец-Старт); Сообщить(Рез); Сообщить(ТипЗначенияСтр(Рез)); КонецПроцедуры Выводит: 1 0 Число хотя остаток там есть, уже голову сломал |
|||
1
ADirks
24.01.22
✎
06:47
|
патамушта char(9)
прежде чем запросы писать почитай тут: http://www.script-coding.com/v77tables.html |
|||
2
Zoeh
24.01.22
✎
06:50
|
ТекстЗапроса = "
|SELECT | Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], | Рег.КоличествоОстаток as Количество |FROM | $РегистрОстатки.ОстаткиТМЦ(,,Номенклатура IN (SELECT Val FROM #ТНоменклатура),(Номенклатура),Количество) as Рег"; //| $РегистрОстатки.МенеджерыПокупатели("+?(ВремИтогиАктуальны=0,":ВыбДата~","")+",,Договор IN (SELECT Val FROM #ВЗПДоговор) AND Менеджер IN (SELECT Val FROM #ВЗПМенеджер),(КредДокумент,Договор,Менеджер),СуммаРуб) as Рег"; СН = СоздатьОбъект("СписокЗначений"); СН.ДобавитьЗначение(Ном.ТекущийЭлемент()); РекордСет.УложитьСписокОбъектов(СН, "#ТНоменклатура", "Номенклатура"); //Если ВремИтогиАктуальны = 0 Тогда // RS.УстановитьТекстовыйПараметр("ВыбДата", СформироватьПозициюДокумента(ТекущийДокумент(), -1)); //КонецЕсли; //RS.Отладка(1); ТЗДолгов = РекордСет.ВыполнитьИнструкцию(ТекстЗапроса); Internal error: и по скорости медленнее |
|||
3
Андрей_Андреич
naïve
24.01.22
✎
07:30
|
ТекстЗапроса = "
|SELECT | Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], | Рег.КоличествоОстаток as Количество |FROM | $РегистрОстатки.ОстаткиТМЦ(,,Номенклатура = ?,(Номенклатура),Количество) as Рег"; РекордСет.Подготовить(ТекстЗапроса) РекордСет.ПостроитьПараметры(); ТЗДолгов = РекордСет.ВыполнитьИнструкцию(ТекстЗапроса); |
|||
4
Андрей_Андреич
naïve
24.01.22
✎
07:31
|
Параметрический запрос у тебя зачем? ты его в цикле хочешь выполнять?
|
|||
5
Андрей_Андреич
naïve
24.01.22
✎
07:31
|
+(3) еще установить параметр впихнуть
|
|||
6
Ёпрст
24.01.22
✎
08:00
|
(4) очевидно, хочет засунуть его в форму списка или подбора таким извоащенным способом
|
|||
7
Ёпрст
24.01.22
✎
08:01
|
В формулу текстовой колонки поди пихает свой запрос для показа останка.
|
|||
8
АгентБезопасной Нацио
24.01.22
✎
08:13
|
(7) есть же класс для этого...
|
|||
9
Ёпрст
24.01.22
✎
12:09
|
Ну и надо ВыполнитьСкалярный всё же
|
|||
10
Zoeh
24.01.22
✎
13:24
|
ТекстЗапроса = "
|SELECT | Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], | Рег.КоличествоОстаток as Количество |FROM | $РегистрОстатки.ОстаткиТМЦ(,,Номенклатура = ?,(Номенклатура),Количество) as Рег"; РекордСет.ДобПараметр(1, 14, 9, 0); РекордСет.Подготовить(ТекстЗапроса); РекордСет.УстПараметр(1, Ном.ТекущийЭлемент()); ТЗДолгов = РекордСет.ВыполнитьСкалярный(ТекстЗапроса); Конец = _GetPerformanceCounter() ; Сообщить(Конец-Старт); Сообщить(ТЗДолгов); Сообщить(ТипЗначенияСтр(ТЗДолгов)); результат 0 0 Число |
|||
11
Zoeh
24.01.22
✎
13:25
|
(4)+(6)
да все верно в подборе в цикле |
|||
12
Ёпрст
24.01.22
✎
13:30
|
(10) да уж.. блин, ну нельзя же применять советуемые методы не ознакомившись с докумментацией.
|
|||
13
Ёпрст
24.01.22
✎
13:31
|
||||
14
Ёпрст
24.01.22
✎
13:35
|
|
|||
15
Ёпрст
24.01.22
✎
13:37
|
Но.. метод порочный, быстрее посчитать останки для всей номенклатуры и закешировать это в ИТЗ, и затем поиск в ИТЗ.
ИЛИ, открывать табличное поле с поставщиком прямого запроса. там уже будет как ннадо и быстро. |
|||
16
Zoeh
24.01.22
✎
13:40
|
кэш долго будет при открытии думать,
(14) возвращает остаток = 0 хотя там есть остаток в разрезе фирм и складов |
|||
17
Zoeh
24.01.22
✎
13:41
|
сводныйостаток тоже возвращает не ноль
|
|||
18
Ёпрст
24.01.22
✎
13:41
|
(16) схрена ? твои остатки, что штатно с ВыгрузитьИтоги, что через прямой запрос для всей номенлатуры.. это милисекунды.
|
|||
19
Zoeh
24.01.22
✎
13:42
|
(18) нужно динамическое обновление остатка
|
|||
20
Ёпрст
24.01.22
✎
13:43
|
(19) в подборе ? Ну и обновляй свою ИТЗ по таймеру.
|
|||
21
Ёпрст
24.01.22
✎
13:44
|
Хотя на практике, это нах никому не впёрлось.
|
|||
22
Zoeh
24.01.22
✎
13:45
|
(14)
проблема в фильтре? ему не нравится справочник.Номенклатура? нужно что то типа ИДОбъекта ? |
|||
23
Ёпрст
24.01.22
✎
13:45
|
У тебя в любом случае, даже если оператор подобрал нечто, он может док проводить не сразу, а потом и остатка- тю-тю уже не будет в момент проведения.
Вся эта хрень с побором остатков - только как доп информация при выборе, какой из однотипных товаров выбрать. У вас же не штучный товар в подборе ? |
|||
24
Ёпрст
24.01.22
✎
13:48
|
(22) выведи так, для начала и посмотри, че там..
ТекстЗапроса = " |SELECT | Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], | Рег.КоличествоОстаток as Количество |FROM | $РегистрОстатки.ОстаткиТМЦ(,,,(Номенклатура),Количество) as Рег"; ТЗДолгов = РекордСет.ВыполнитьИнструкцию(ТекстЗапроса); ТЗДолгов.ВыбратьСтроку() и сымотри, чего там есть |
|||
25
Zoeh
24.01.22
✎
14:04
|
(24)
пусто((( даже таблица не создалась |
|||
26
Zoeh
24.01.22
✎
14:05
|
ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"1cpp.dll");
БазаДанных = СоздатьОбъект("ODBCDataBase"); БазаДанных.Соединение(" |DRIVER=Microsoft Visual FoxPro Driver; |Deleted=No; |Null=No; |Collate=RUSSIAN; |BackgroundFetch=No; |Exclusive=No; |SourceType=DBF; |SourceDB=" + КаталогИБ()); РекордСет=СоздатьОбъект("ODBCRecordset"); РекордСет.УстБД(БазаДанных); |
|||
27
Zoeh
24.01.22
✎
14:25
|
ИБ=СоздатьОбъект("ODBCDataBase");
ИБ.ПрисоединитьИБ("\\server\КаталогИБ\"); рс=СоздатьОбъект("ODBCRecordset"); рс.УстБД(ИБ); Результат=рс.ВыполнитьИнструкцию(ТекстЗапроса); как по статье то не соединяет вовсе Ошибка соединения: State IM001, native 0, message [Microsoft][Диспетчер драйверов ODBC] Драйвер не поддерживает данную функцию |
|||
28
Ёпрст
24.01.22
✎
14:50
|
(26) У тя дбф что ле ???? )))))))))))))
|
|||
29
Ёпрст
24.01.22
✎
14:51
|
уй ё... как всё запущено.
|
|||
30
Масянька
24.01.22
✎
15:11
|
(16) Слушай Ё!
Остатки при открытии, в таблицу, на форму доп. колонку (поле). По опыту могу сказать: такой способ работает в разу быстрее, чем демонический (тьфу, динамический). |
|||
31
Масянька
24.01.22
✎
15:14
|
(21) Иногда надо. И (в тот самый момент) помогает.
|
|||
32
Zoeh
24.01.22
✎
16:30
|
(31) а есть?
я че та не могу к базе через Microsoft Visual FoxPro Driver подключицца проверил на справочнике пусто |
|||
33
Андрей_Андреич
naïve
24.01.22
✎
17:37
|
(23) У меня, например, оператор может час с клиентом подбирать товар. Так что построчное проведение при подборе и динамические остатки. Может человеку такое же надо
|
|||
34
Ёпрст
24.01.22
✎
17:43
|
(32) Формат базы какой ? SQl или дбф, для начала ?
|
|||
35
Pit0n_08
24.01.22
✎
19:16
|
(33) Другая реализация через движение справочника "Резервы" при выборе ТМЦ в форме подбора прямым запросом и доп колонка в той же форме.
|
|||
36
Злопчинский
24.01.22
✎
22:07
|
(33) ну, если заказ на пару лямов - почему бы и нет. А когда заказ из 50 позиций на 20тыс... - назер таких операторов на тлф.
|
|||
37
Zoeh
25.01.22
✎
07:28
|
Не могу только теперь добавить фильтр по номенклатуре
|SELECT //| $Рег.Склад as [Склад $Справочник.Склады], | $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], | $Рег.Количество as Количество |FROM | $Регистр.ОстаткиТМЦ as Рег |WHERE | $Рег.Номенклатура = ?"; Запрос.ДобПараметр (1, 14, 9, 0); Запрос.УстановитьПараметр(1, Ном.ТекущийЭлемент()); Отсутствует значение для одного или нескольких требуемых параметров. |
|||
38
Zoeh
25.01.22
✎
07:31
|
|SELECT
//| $Рег.Склад as [Склад $Справочник.Склады], | $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], | $Рег.Количество as Количество |FROM | $Регистр.ОстаткиТМЦ as Рег |WHERE | $Рег.Номенклатура = ВыбНом"; Запрос.УложитьСписокОбъектов(Ном.ТекущийЭлемент(), "#ВыбНом", "Номенклатура"); Column 'ВЫБНОМ' is not found. |
|||
39
Zoeh
25.01.22
✎
07:37
|
ВОТ ПОЛНОСТЬЮ РАБОЧИЙ КОД
по скорости всего в 2 раза быстрее чем СводныйОстаток, хотелось бы быстрее Процедура ПриОткрытии() ЗагрузитьВнешнююКомпоненту(КаталогИБ()+"1cpp.dll"); ОлеДБ = СоздатьОбъект("OLEDBData"); Соединение = "Provider=VFPOLEDB.1;Data Source=" + КаталогИБ() + ";Mode=ReadWrite;Collating Sequence=MACHINE"; Рез = ОлеДБ.Соединение(Соединение); Запрос = ОлеДБ.СоздатьКоманду(); Запрос.Выполнить("EXECSCRIPT('SET ANSI OFF')"); Запрос.Выполнить("EXECSCRIPT('SET REPROCESS TO 60 SECONDS')"); Запрос.Выполнить("EXECSCRIPT('SET REFRESH TO 0,-1')"); Запрос.Выполнить("Exec('SET TABLEVALIDATE TO 0')"); КонецПроцедуры //******************************************* Процедура Сформировать() Старт = _GetPerformanceCounter(); ; ВрТаблГрупп=""; Запрос.УложитьСписокОбъектов(Ном.ТекущийЭлемент(), ВрТаблГрупп, "Номенклатура"); ТекстЗапроса = " |SELECT //| $Рег.Склад as [Склад $Справочник.Склады], | $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура], | $Рег.Количество as Количество |FROM | $Регистр.ОстаткиТМЦ as Рег |WHERE | $Рег.Номенклатура IN (SELECT Val FROM " + ВрТаблГрупп + ")"; ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); Конец = _GetPerformanceCounter() ; Сообщить(Конец-Старт); Сообщить(ТЗ); Сообщить(типЗначенияСтр(ТЗ)); КонецПроцедуры |
|||
40
Zoeh
25.01.22
✎
08:00
|
Думаю дело в фильтре, можно как то добавить 1 объект? Без УложитьСписокОбъектов?
|
|||
41
АгентБезопасной Нацио
25.01.22
✎
09:24
|
(40) если один - то что мешает использовать параметр? зачем IN?
|
|||
42
АгентБезопасной Нацио
25.01.22
✎
09:25
|
И вообще, какова цель?
|
|||
43
АгентБезопасной Нацио
25.01.22
✎
09:30
|
а, цель понял...
ну тогда тебе проще кэшировать в ТЗ/ИТЗ. |
|||
44
FN
25.01.22
✎
09:42
|
(40)
$Рег.Номенклатура = :ВыбТовар и Запрос.УстановитьТекстовыйПараметр("ВыбТовар",Ном.ТекущийЭлемент()) И добавь условие по периоду Например (если периодичность регистров месяц) - Запрос.УстановитьТекстовыйПараметр("Период",НачМесяца(ПолучитьДатуТА())) Рег.Period = :Период |
|||
45
Ёпрст
25.01.22
✎
10:06
|
(40)
на вот, развлекайся ТекстЗапроса=" |select | $Итоги.Количество КонОст | FROM | $РегистрИтоги.ОстаткиТМЦ Итоги | WHERE | DTOS(Итоги.period)+$Итоги.Номенклатура | LIKE (DTOS(:ПредПериод~~)+:Номенклатура) |"; мд = СоздатьОбъект("MetaDataWork"); НачПериод = мд.ПолучитьНачПериода(ПолучитьДатуТА()); Запрос.УстановитьТекстовыйПараметр("ПредПериод",ПредПериод); Запрос.УстановитьТекстовыйПараметр("Номенклатура",Номенклатура); ТЗ = Запрос.ВыполнитьИнструкцию(ТекстЗапроса); ТЗ.ВыбратьСтроку(); Это запрос останка н дату ТА. На произвольную дату запрос другой. |
|||
46
Zoeh
27.01.22
✎
04:50
|
(45) самое главное низкий поклон тебе низкий человек, помог лентяю решить проблему. кошельки у тебя актуальны в личке?
|
|||
47
Zoeh
27.01.22
✎
04:50
|
(46) Опечатка! Низкий поклон умному человеку!
|
|||
48
Zoeh
27.01.22
✎
12:42
|
еще можно так:
ТекстЗапроса=" |select | $Итоги.Количество КонОст | FROM | $РегистрИтоги.ОстаткиТМЦ Итоги | WHERE | DTOS(Итоги.period)+$Итоги.Номенклатура + $Итоги.Склад | LIKE (DTOS(:ПредПериод~~)+:Номенклатура + :Склад) |"; мд = СоздатьОбъект("MetaDataWork"); НачПериод = мд.ПолучитьНачПериода(ПолучитьДатуТА()); Запрос.УстановитьТекстовыйПараметр("ПредПериод",НачПериод); Запрос.УстановитьТекстовыйПараметр("Номенклатура",Ном); Запрос.УстановитьТекстовыйПараметр("Склад",ВыбСклады); |
|||
49
Ёпрст
27.01.22
✎
12:59
|
(48) нужно смотреть индексное выражение, хотя бы в словарике, и значения измерений указывать в нужном порядке, чтоб был задействован нужный индекс.
|
|||
50
Zoeh
27.01.22
✎
13:02
|
(49)
яндекс кошельки корректные в профиле? |
|||
51
Ёпрст
27.01.22
✎
13:07
|
яндекс, вроде да
|
|||
52
Zoeh
27.01.22
✎
13:09
|
(52)проверяй должно придти!
|
|||
53
Zoeh
27.01.22
✎
13:11
|
(51) упало?
|
|||
54
Ёпрст
27.01.22
✎
13:35
|
(53) да, спсб.
|
|||
55
Zoeh
27.01.22
✎
13:44
|
(54) Тебе огромное пасибо)
|
|||
56
Злопчинский
27.01.22
✎
20:52
|
на ИС есть типовой Тис.Отчеты.ОстаткиТМЦ переделанный на прямой запрос
|
|||
57
victuan1
28.01.22
✎
05:28
|
(56) А ссылку можно на него?
|
|||
58
Андрей_Андреич
naïve
28.01.22
✎
05:36
|
(56) А можно сам отчет? Юзать не буду (типовых у меня нет) - просто для самообучения.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |