|
Запрос в 7 через оле | ☑ | ||
---|---|---|---|---|
0
Мисти
13.08.19
✎
15:08
|
ГрТовара = БазаОле.CreateObject("Справочник.Номенклатура");
Если ГрТовара.НайтиПоНаименованию(СокрЛП(ГруппаТов.Наименование),0,1) >0 Тогда ТекЭл = ГрТовара.ТекущийЭлемент(); Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю("не найдена гр. товара в 7 "+ГруппаТов); ТекЭл = ""; КонецЕсли; ТекстЗапроса = " Период с '"+Объект.Дата2+ "' по '"+Объект.Дата2+"'; | Товар = Регистр.ПартииТоваров.Товар; | ОстатокКол = Регистр.ПартииТоваров.ОстатокТовара; | ОстатокСум = Регистр.ПартииТоваров.Стоимость; | Группировка Товар без групп; | Функция КонКол = КонОст(ОстатокКол); | Функция КонСум = КонОст(ОстатокСум); | Условие (Товар в ГрТовара)"; Ругается на условие! Ошибка, говорит. А как? |
|||
1
Birmingem
13.08.19
✎
15:25
|
ГрТовара - это что?
Справочник в другой базе БазаОле? И ты запросом пытаешься найти в этой базе товары, которые находятся в другой базе? |
|||
2
Мисти
13.08.19
✎
15:46
|
запрос - к базе Оле и ГрТовары - в базе Оле
|
|||
3
Мисти
13.08.19
✎
15:46
|
Запрос = БазаОле.CreateObject("Запрос");
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда //Предупреждение("Запрос безутешен!"); Возврат; КонецЕсли; |
|||
4
hhhh
13.08.19
✎
15:48
|
(2) так может
| Условие (Товар в ТекЭл)"; |
|||
5
GreyK
13.08.19
✎
15:50
|
(0) Ни как. Если коды уникальные, то можешь по списку кодов отобрать.
|
|||
6
ДенисЧ
13.08.19
✎
15:52
|
(5) Почему никак? Можно в той базе создать глобальную переменную, и через неё передать...
|
|||
7
azernot
13.08.19
✎
15:52
|
Вот тут ответы на ваши вопросы:
http://my1c-archive.narod.ru/knowhow/v7_OLE.html Вкратце: в 1С 7.7 заводится экспортная переменная (масссив), в неё присваивается нужное значение через EvalExpr и уже на неё ставится условие |
|||
8
azernot
13.08.19
✎
16:01
|
ТОлько очень медленно работают запрос по OLE, рекомендую написать свою функцию в глобальном модуле 7.7, в которую передавать текст запроса, а функция будет выполнять запрос и укладывать результат в ТЗ, которую уже будет возвращать. Работает существенно быстрее.
|
|||
9
Злопчинский
13.08.19
✎
16:28
|
ГрТовара - клюшка ничего не знает про эту переменную, так как это переменная в другом контексте. Если это ТиС - то там есть штатно в ГМ куча экспортных переменных. используй их в условии
|
|||
10
Мисти
13.08.19
✎
16:37
|
Перем ГруппаТов Экспорт; - вставила в 7 в глоб. модуль. Теперь что?
Мне скорость не важна, сейчас для отладки - да, а потом одноразовая перегрузка. |
|||
11
ДенисЧ
13.08.19
✎
16:37
|
(10) Буть мужиком, присвой ей значение!
|
|||
12
Мисти
13.08.19
✎
16:42
|
Денис, ну напиши уже строчку! Когда научусь молиться - помолюсь! (это в планах на пенсию)
|
|||
13
ДенисЧ
13.08.19
✎
16:47
|
(12) Давно я не брал в руки клюшек...
Попробуй БазаОЛЕ.ИмяПеременной = ОЛЕЗначение |
|||
14
azernot
13.08.19
✎
17:03
|
Вот это вставить в глобальник 7.7
Перем СписокЗначенийЗапроса[10] Экспорт; // Мы в них запихнем"значения для запроса Функция СкорректироватьСписок( ИндексМассива, Действие, ТипОбъекта = "", ВидОбъекта = "", Параметр1 = "", Параметр2 = "", Параметр3 = "", // Ну и далее, сколько надо // ... Параметр99 = "") Экспорт ИндексМассива=Число(ИндексМассива); Если ИндексМассива = 0 Тогда Возврат -99; // Не указали индекс массива КонецЕсли; Если Действие = 1 Тогда // Очистить список значений СпЗапроса[ИндексМассива].УдалитьВсе(); Возврат 1; ИначеЕсли Действие = 2 Тогда // Добавить объект в список Если ТипОбъекта = "Документ" Тогда Если ВидОбъекта = "" Тогда Возврат -99; // Передавайте нормальный вид объекта! КонецЕсли; Попытка Док = СоздатьОбъект("Документ."+ВидОбъекта); Исключение Возврат -99; // Попытка обращения к неверному объекту КонецПопытки; Если Док.НайтиПоНомеру(Параметр1,Параметр2)=1 Тогда СпЗапроса[ИндексМассива].ДобавитьЗначение( Док.ТекущийДокумент()); Возврат 1; // Нашли документ Иначе Возврат 0; // Не нашли документ :( КонецЕсли; ИначеЕсли ТипОбъекта = "Справочник" Тогда Если ВидОбъекта = "" Тогда Возврат -99; // Передавайте нормальный вид объекта! КонецЕсли; Попытка Спр = СоздатьОбъект("Справочник."+ВидОбъекта); Исключение Возврат -99; // Попытка обращения к неверному объекту КонецПопытки; // Параметр1 – Код // Параметр2 – наименование // Параметр3 – флаг глобального поиска Если Спр.НайтиПоКоду(Параметр1,Число(Параметр3))=1 Тогда СпЗапроса[ИндексМассива].ДобавитьЗначение( Спр.ТекущийЭлемент()); Возврат 1; // Нашли элемент ИначеЕсли Спр.НайтиПоНаименованию( Параметр2, Число(Параметр3))=1 Тогда СпЗапроса[ИндексМассива].ДобавитьЗначение( Спр.ТекущийЭлемент()); Возврат 1; // Нашли элемент Иначе Возврат 0; // Не нашли элемент :( КонецЕсли; ИначеЕсли ТипОбъекта = "Счет" Тогда // Вид объекта – Идентификатор плана счетов // Параметр1 – Код счета Если ВидОбъекта<>"" Тогда ИскомыйСчет = СчетПоКоду(Параметр1, ПланСчетов.ЗначениеПоИдентификатору( ВидОбъекта)); Иначе ИскомыйСчет = СчетПоКоду( Параметр1); КонецЕсли; Если ПустоеЗначение(ИскомыйСчет) = 1 Тогда Возврат 0; // не нашли счет :( Иначе СпЗапроса[ИндексМассива].ДобавитьЗначение( ИскомыйСчет); Возврат 1; // нашли счет КонецЕсли; Иначе Возврат -99; // Неверный тип объекта КонецЕсли; ИначеЕсли Действие = 3 Тогда // Вернуть размер списка Возврат СпЗапроса[ИндексМассива].РазмерСписка(); Иначе Возврат -99; // Неверное действие КонецЕсли; Возврат -999; КонецФункции Процедура ПриНачалеРаботыСистемы() // Данная процедура уже есть в глобальном модуле, // просто надо дописать в неё несколько строк: Для к=1 По 10 Цикл СпЗапроса[к]=СоздатьОбъект("СписокЗначений"); КонецЦикла; КонецПроцедуры Вот этот код выполнить там, где пытаетесь выполнить запрос Результат = БазаОле.EvalExpr("СкорректироватьСписок(1,1)"); Результат = БазаОле.EvalExpr("СкорректироватьСписок(1,2, ""Справочник"", ""Номенклатура"",, """ + СокрЛП(ГруппаТов.Наименование) + """)"); В запросе | Условие (Товар в СписокЗначенийЗапроса[1])"; |
|||
15
Мисти
13.08.19
✎
17:17
|
Спасибо! Очень много. Мне бы всего одну переменную?
Перем ГруппаТов Экспорт; - вставила в 7 в глоб. модуль. Если ГрТовара.НайтиПоНаименованию(СокрЛП(ГруппаТов8.Наименование),0,1) >0 Тогда ТекЭл = ГрТовара.ТекущийЭлемент(); Иначе ОбщегоНазначенияКлиентСервер.СообщитьПользователю("не найдена гр. товара в 7 "+ГруппаТов8); ТекЭл = ""; КонецЕсли; БазаОЛЕ.ГруппаТов = ТекЭл; Так не понимает. |
|||
16
Мисти
13.08.19
✎
17:20
|
Поле объекта не обнаружено (ГруппаТов)
БазаОЛЕ.ГруппаТов = ТекЭл; |
|||
17
azernot
13.08.19
✎
17:30
|
(15) Пропишите в глобальнике 7.7 функцию
Функция УстановитьПеременнуюГруппаТов(Наименование = "") СпрТовары = СоздатьОбъет("Справочник.Номенклатура"); Если СпрТовары.НайтиПоНаименованию(СокрЛП(Наименование),0,1) >0 Тогда ГруппаТов = СпрТовары.ТекущийЭлемент(); Иначе Возврат 0; КонецЕсли; Возврат 1; КонецФункции Вот этот код выполнить там, где пытаетесь выполнить запрос Результат = БазаОле.EvalExpr("УстановитьПеременнуюГруппаТов("+СокрЛП(ГруппаТов.Наименование)+")"); Если Результат = 0 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю("не найдена гр. товара в 7 "+ГруппаТов); КонецЕсли; |
|||
18
Мисти
13.08.19
✎
17:48
|
Мне же надо в запрос засунуть!
Как туда-то? |
|||
19
azernot
13.08.19
✎
17:50
|
| Условие (Товар в ГруппаТов)";
|
|||
20
azernot
13.08.19
✎
17:51
|
ГруппаТов - это экспортная переменная из глобальника 7.7
|
|||
21
GreyK
13.08.19
✎
18:01
|
(6) Ну и как? Дальше будешь советовать глобальные переменные?
|
|||
22
azernot
13.08.19
✎
18:07
|
(0) Можете сделать вообще вот так:
| Условие (СокрЛП(Товар.Наименование) = СокрЛП("+ГруппаТов.Наименование+"))"; |
|||
23
azernot
13.08.19
✎
18:09
|
+(22) А не, гоню :)
|
|||
24
Мисти
13.08.19
✎
18:09
|
как же так, когда мне нужно в группе.
|
|||
25
azernot
13.08.19
✎
18:10
|
(21) Вот тут я кавычки пропустил
Результат = БазаОле.EvalExpr("УстановитьПеременнуюГруппаТов("""+СокрЛП(ГруппаТов.Наименование)+")"""); |
|||
26
Мисти
13.08.19
✎
18:35
|
нет, так с кавычками еще хуже. Наверное, лишние.
|
|||
27
ДенисЧ
13.08.19
✎
18:55
|
(21) Буду. А что такого? Пусть девочка хоть к пенсии научится что-то делать...
|
|||
28
Birmingem
13.08.19
✎
18:57
|
А может не черным запросом, а методами регистров попробовать:
РегОле=БазаOLE.CreateObject("Регистр.ОстаткиТоваров"); РегОле.ВыбратьИтоги(); Пока РегОле.ПолучитьИтог()=1 Цикл Сообщить("Остаток для " + Рег.Товар.Наименование + " на складе " + Рег.Склад.Наименование + " равен " + Рег.ОстатокТовара ); КонецЦикла; |
|||
29
azernot
14.08.19
✎
10:16
|
(26) Блин, ну вот так же
Результат = БазаОле.EvalExpr("УстановитьПеременнуюГруппаТов("""+СокрЛП(ГруппаТов.Наименование)+""")"); |
|||
30
Мисти
14.08.19
✎
13:35
|
(28) Да это не важно! Мне главное - отобрать по группе. А то для отладки - невозможно 4 часа ждать пока там что-то считается.
|
|||
31
Мисти
14.08.19
✎
13:45
|
Ошибка при вызове метода контекста (Выполнить)
Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда по причине: Произошла исключительная ситуация (1С:Предприятие): Условие (Товар в ГруппаТов <<?>> ) Запрос[8] : Ошибка в выражении 'ГруппаТов' Всё то же самое. |
|||
32
azernot
14.08.19
✎
17:07
|
ГруппаТов - точно ЭКСПОРТНАЯ переменная в глобальном модуле 7.7?
Результат = БазаОле.EvalExpr("УстановитьПеременнуюГруппаТов("""+СокрЛП(ГруппаТов.Наименование)+""")"); Сообщить("Результат присовениия группы тов = "+Результат); Что сообщит? |
|||
33
Мисти
14.08.19
✎
18:57
|
1 там
|
|||
34
Мисти
14.08.19
✎
18:57
|
я в отладчике вижу
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |