|   |   | 
| 
 | Запрос в 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 | 
        я в отладчике вижу     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |