|
Передача параметров в запрос по COMconnector | ☑ | ||
---|---|---|---|---|
0
TygarinZmei
19.12.16
✎
13:37
|
Добрый день.
Столкнулся с такой ситуацией и не знаю как ее обойти. Может кто, подскажет? Спасиабо. Ситуация следующая. Подключаюсь из одной базы в другую. ПутьБазы1С = "D:\1CBases\БАЗА"; Пользователь1С = "1234"; Пароль1С = "1234"; V82 = Новый COMОбъект("V82.COMConnector"); КомСтрока = "Путь " + ПутьБазы1С + " Пользователь " + Пользователь1С + " Пароль *****"; Попытка //Сообщить(КомСтрока); Connection = V82.Connect("File=""" + ПутьБазы1С + """;Usr=""" + Пользователь1С + """;Pwd=""" + Пароль1С + """;"); Далее необходимо вытащить информацию. Есть запрос: ВЫБРАТЬ | НАЧАЛОПЕРИОДА(втЗаказПокупателя.Ссылка.Дата, МЕСЯЦ) КАК Период, | СУММА(ВЫБОР | КОГДА втЗаказПокупателя.Номенклатура.Наименование ПОДОБНО &Номенклатура | ТОГДА | ВЫБОР КОГДА втЗаказПокупателя.Ссылка.Дата > ДАТАВРЕМЯ(2016, 2, 15, 0, 0, 0) | ТОГДА втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 45 / 100 | Иначе | | ВЫБОР | КОГДА втЗаказПокупателя.Ссылка.Дата < ДАТАВРЕМЯ(2015, 5, 18, 0, 0, 0) | ТОГДА втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 46 / 100 | ИНАЧЕ втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 47 / 100 | КОНЕЦ Конец | ИНАЧЕ 0 | КОНЕЦ + ВЫБОР | КОГДА НЕ втЗаказПокупателя.Номенклатура.Наименование ПОДОБНО &Номенклатура | ТОГДА втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 15 / 100 | ИНАЧЕ 0 | КОНЕЦ) КАК СуммаВсегоИзделийАксес |ПОМЕСТИТЬ втСебест |ИЗ | Документ.втЗаказПокупателя.Товары КАК втЗаказПокупателя |ГДЕ | втЗаказПокупателя.Ссылка.Проведен = ИСТИНА | И втЗаказПокупателя.Ссылка.Контрагент.ИНН <> ""4632166738"" | И втЗаказПокупателя.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо И втЗаказПокупателя.Ссылка.ДоговорКонтрагента.Филиал.Подразделение.Наименование В (&Подразделение) "; | |СГРУППИРОВАТЬ ПО | НАЧАЛОПЕРИОДА(втЗаказПокупателя.Ссылка.Дата, МЕСЯЦ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ХозрасчетныйОбороты.Период, | СУММА(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаВыручки |ПОМЕСТИТЬ втВыручка |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты( | &ДатаС, | &ДатаПо, | Месяц, | Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателями) | ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), | , | Организация = &Организация, | КорСчет В (&СписокСчетов), | ) КАК ХозрасчетныйОбороты ГДЕ ХозрасчетныйОбороты.Субконто1.ИНН <> ""4632166738"" " + УсловиеВыручка + " | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОбороты.Период |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(втВыручка.Период, втСебест.Период) КАК Период, | ЕстьNull(втВыручка.СуммаВыручки, 0) КАК СуммаВыручки, | ЕстьNull(втСебест.СуммаВсегоИзделийАксес, 0) КАК СуммаВсегоИзделийАксес |ИЗ | втВыручка КАК втВыручка | ПОЛНОЕ СОЕДИНЕНИЕ втСебест КАК втСебест | ПО втВыручка.Период = втСебест.Период"; Запрос.УстановитьПараметр("ДатаС", НачПериода); Запрос.УстановитьПараметр("ДатаПо", КонецДня(КонПериода)); Запрос.УстановитьПараметр("Номенклатура", "%Изделие%"); Запрос.УстановитьПараметр("Организация", УпрОрганизация); Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов); Запрос.УстановитьПараметр("Подразделение", СписокПодразделений); В форме отчета есть ПолеСпискаПодразделений в котором можно выбрать по какому подразделению построить отчет. В оригинале отчета все работает. Переношу его в другую бзу и ругается на неверные параметры при сравнении с подразделением. выбор подразделения реализован так: Для Каждого Стр из ПолеСпискаПодразделений Цикл Если Стр.Пометка = Истина Тогда СписокПодразделений.Добавить(Стр.Значение); КонецЕсли; КонецЦикла; Я понимаю что запрос это сом объект и что параметры должны быть соответствующие. Но как обеспечить выбор никак не могу разобраться. |
|||
1
Альбатрос
19.12.16
✎
13:41
|
Запрос выполняется на стороне СОМ-объекта? Вот и подразделения нужно заполнять из этого СОМ-объекта.
|
|||
2
TygarinZmei
19.12.16
✎
13:47
|
(1) Я это понимаю. Но нужно как то это связать с выставлением галочек поле списка. Уже всю головы сломал(
|
|||
3
shuhard
19.12.16
✎
13:48
|
(2) [Уже всю головы сломал(]
у подразделения есть код и есть название |
|||
4
Альбатрос
19.12.16
✎
13:50
|
(2) Что тут ломать? У твоих подразделений в обоих базах есть что-нибудь общее? Например, если это код, то:
Для Каждого Стр из ПолеСпискаПодразделений Цикл Если Стр.Пометка = Истина Тогда СписокПодразделений.Добавить(ТвойСом.Справочники.Подразделения.НайтиПоКоду(Стр.Значение.Код); КонецЕсли; КонецЦикла; |
|||
5
TygarinZmei
19.12.16
✎
13:52
|
(4) Пробовал так. все равно пишет что не корректные параметры. Только писал так
Для Каждого Стр из ПолеСпискаПодразделений Цикл Если Стр.Пометка = Истина Тогда Если Стр.Значение = "Волокно" Тогда Код = "000000004" КонецЕсли; СписокПодразделений.Добавить(Connection1C.Справочники.ПодразделенияОрганизаций.НайтиПоКоду(Код)); СписокПодразделений.Добавить(Стр.Значение); КонецЕсли; КонецЦикла; |
|||
6
h-sp
19.12.16
✎
13:53
|
(5) не забудь для начала
СписокПодразделений = Connection.NewObject("СписокЗначений"); |
|||
7
Альбатрос
19.12.16
✎
13:54
|
Учти (6) и нахрена ты в массив добавляешь подразделение из обоих баз?
|
|||
8
TygarinZmei
19.12.16
✎
13:57
|
(7) Вторая трока косяк в теле программы она закоментирована. (6) Да ранее это добавлено.
СписокПодразделений = Connection1C.NewObject("СписокЗначений"); Для Каждого Стр из ПолеСпискаПодразделений Цикл Если Стр.Пометка = Истина Тогда Если Стр.Значение = "Волокно" Тогда Код = "000000004" КонецЕсли; СписокПодразделений.Добавить(Connection1C.Справочники.ПодразделенияОрганизаций.НайтиПоКоду("000000004")); КонецЕсли; КонецЦикла; |
|||
9
TygarinZmei
19.12.16
✎
13:57
|
и продолжает ругаться(
|
|||
10
Альбатрос
19.12.16
✎
13:58
|
Дословно напиши ошибку
|
|||
11
Fish
19.12.16
✎
13:58
|
() А если значение, отличное от "Волокно" - тогда чему будет равен код?
|
|||
12
TygarinZmei
19.12.16
✎
13:59
|
{Отчет.гоФинансовыйОтчетГО.Форма.ФормаОтчета.Форма(218)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить(); по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.19.130): {(27, 138)}: Неверные параметры И втЗаказПокупателя.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо И втЗаказПокупателя.Ссылка.ДоговорКонтрагента.Филиал.Подразделение.Наименование <<?>>В (&Подразделение) |
|||
13
TygarinZmei
19.12.16
✎
13:59
|
(11) Пока ни чему. При отладке выбираю Волокно. Если заработает потом допишу.)))
|
|||
14
Радим1987
19.12.16
✎
14:05
|
А что если получить все данные без отбора (подразделений), потом делать отбор. если конечно данных не много
|
|||
15
shuhard
19.12.16
✎
14:09
|
(12)[ И втЗаказПокупателя.Ссылка.ДоговорКонтрагента.Филиал.Подразделение.Наименование <<?>>В (&Подразделение)]
наименование то зачем ? |
|||
16
TygarinZmei
19.12.16
✎
14:11
|
(15) Первоначальный код писал не я. В таком виде в родной базе запрос работает.
|
|||
17
shuhard
19.12.16
✎
14:12
|
(16) ни о чем
|
|||
18
TygarinZmei
19.12.16
✎
14:14
|
(17) Без наименования такая же ошибка.
|
|||
19
Радим1987
19.12.16
✎
14:21
|
приведи полный код запроса
|
|||
20
TygarinZmei
19.12.16
✎
14:23
|
(19) так в первом сообщении он весь
|
|||
21
Радим1987
19.12.16
✎
14:24
|
втЗаказПокупателя.Ссылка.ДоговорКонтрагента.Филиал.Подразде
ление.Наименование В (&Подразделение) "; --ЧТО ЭТО" | |СГРУППИРОВАТЬ ПО | НАЧАЛОПЕРИОДА(втЗаказПокупателя.Ссылка.Дата, МЕСЯЦ) |
|||
22
Радим1987
19.12.16
✎
14:25
|
для чего там ";"
|
|||
23
TygarinZmei
19.12.16
✎
14:29
|
(22) Ее там не должно быть
В запросе есть условие я просто перенес не так. Считайте что их там нет (";) |
|||
24
Галахад
гуру
19.12.16
✎
14:35
|
В списке ссылки, а в запросе сравнение по строке.
|
|||
25
Радим1987
19.12.16
✎
14:41
|
приведи полный код
|
|||
26
TygarinZmei
19.12.16
✎
14:43
|
(25) Запрос = Connection1C.NewObject("Запрос");
Если ЗначениеЗаполнено(СписокПодразделений) Тогда ТекстУсловия = " И втЗаказПокупателя.Ссылка.ДоговорКонтрагента.Филиал.Подразделение.Наименование В (&Подразделение) "; УсловиеВыручка = " И ХозрасчетныйОбороты.Субконто2.Филиал.Подразделение.Наименование В (&Подразделение)"; Запрос.УстановитьПараметр("Подразделение", СписокПодразделений); Иначе ТекстУсловия = ""; УсловиеВыручка = ""; КонецЕсли; ТекстЗапроса = "ВЫБРАТЬ | НАЧАЛОПЕРИОДА(втЗаказПокупателя.Ссылка.Дата, МЕСЯЦ) КАК Период, | СУММА(ВЫБОР | КОГДА втЗаказПокупателя.Номенклатура.Наименование ПОДОБНО &Номенклатура | ТОГДА | ВЫБОР КОГДА втЗаказПокупателя.Ссылка.Дата > ДАТАВРЕМЯ(2016, 2, 15, 0, 0, 0) | ТОГДА втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 45 / 100 | Иначе | | ВЫБОР | КОГДА втЗаказПокупателя.Ссылка.Дата < ДАТАВРЕМЯ(2015, 5, 18, 0, 0, 0) | ТОГДА втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 46 / 100 | ИНАЧЕ втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 47 / 100 | КОНЕЦ Конец | ИНАЧЕ 0 | КОНЕЦ + ВЫБОР | КОГДА НЕ втЗаказПокупателя.Номенклатура.Наименование ПОДОБНО &Номенклатура | ТОГДА втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество - втЗаказПокупателя.ЦенаБезСкидки * втЗаказПокупателя.Количество * 15 / 100 | ИНАЧЕ 0 | КОНЕЦ) КАК СуммаВсегоИзделийАксес |ПОМЕСТИТЬ втСебест |ИЗ | Документ.втЗаказПокупателя.Товары КАК втЗаказПокупателя |ГДЕ | втЗаказПокупателя.Ссылка.Проведен = ИСТИНА | И втЗаказПокупателя.Ссылка.Контрагент.ИНН <> ""4632166738"" | И втЗаказПокупателя.Ссылка.Дата МЕЖДУ &ДатаС И &ДатаПо " + ТекстУсловия + " | |СГРУППИРОВАТЬ ПО | НАЧАЛОПЕРИОДА(втЗаказПокупателя.Ссылка.Дата, МЕСЯЦ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ХозрасчетныйОбороты.Период, | СУММА(ХозрасчетныйОбороты.СуммаОборотКт - ХозрасчетныйОбороты.СуммаОборотДт) КАК СуммаВыручки |ПОМЕСТИТЬ втВыручка |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты( | &ДатаС, | &ДатаПо, | Месяц, | Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыСПокупателями) | ИЛИ Счет = ЗНАЧЕНИЕ(ПланСчетов.Хозрасчетный.РасчетыПоАвансамПолученным), | , | Организация = &Организация, | КорСчет В (&СписокСчетов), | ) КАК ХозрасчетныйОбороты ГДЕ ХозрасчетныйОбороты.Субконто1.ИНН <> ""4632166738"" " + УсловиеВыручка + " | |СГРУППИРОВАТЬ ПО | ХозрасчетныйОбороты.Период |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(втВыручка.Период, втСебест.Период) КАК Период, | ЕстьNull(втВыручка.СуммаВыручки, 0) КАК СуммаВыручки, | ЕстьNull(втСебест.СуммаВсегоИзделийАксес, 0) КАК СуммаВсегоИзделийАксес |ИЗ | втВыручка КАК втВыручка | ПОЛНОЕ СОЕДИНЕНИЕ втСебест КАК втСебест | ПО втВыручка.Период = втСебест.Период"; Запрос.УстановитьПараметр("ДатаС", НачПериода); Запрос.УстановитьПараметр("ДатаПо", КонецДня(КонПериода)); Запрос.УстановитьПараметр("Номенклатура", "%Изделие%"); Запрос.УстановитьПараметр("Организация", УпрОрганизация); Запрос.УстановитьПараметр("СписокСчетов", СписокСчетов); //Запрос.УстановитьПараметр("Подразделение", СписокПодразделений); Запрос.Текст = ТекстЗапроса; Результат = Запрос.Выполнить(); ТЗ = Результат.Выгрузить(); |
|||
27
Галахад
гуру
19.12.16
✎
14:46
|
Код повыешеной секретности. :-)
|
|||
28
Радим1987
19.12.16
✎
14:48
|
Результат = Запрос.Выполнить();
Результат зарезервированное слово |
|||
29
TygarinZmei
19.12.16
✎
14:50
|
(28) Смотрите, если я делаю отчет без указания подразделений(по всему предприятию), то проблем не возникает. Только если выбираю подразделение по кот орому сформировать.
|
|||
30
Радим1987
19.12.16
✎
14:52
|
ТекстУсловия = " И втЗаказПокупателя.Ссылка.ДоговорКонтрагента.Филиал.Подразделение.Наименование В (&Подразделение) ";
сделаем ТекстУсловия = " И втЗаказПокупателя.Ссылка.ДоговорКонтрагента.Филиал.Подразделение.Наименование подобно (&Подразделение) "; Запрос.УстановитьПараметр("Подразделение", "ТвоеНаименование"); |
|||
31
TygarinZmei
19.12.16
✎
15:03
|
(30) {Отчет.гоФинансовыйОтчетГО.Форма.ФормаОтчета.Форма(218)}: Ошибка при вызове метода контекста (Выполнить)
Результат = Запрос.Выполнить(); по причине: Произошла исключительная ситуация (1C:Enterprise 8.2.19.130): {(27, 57)}: Неверные параметры "ПОДОБНО" И втЗаказПокупателя.Ссылка.Филиал.Наименование ПОДОБНО <<?>>&Подразделение |
|||
32
Галахад
гуру
19.12.16
✎
15:04
|
Опять строку с списком сравнивают.
|
|||
33
TygarinZmei
19.12.16
✎
15:05
|
(32) Будьте добры, подскажите, что не так. Как сделать? Спасибо.
|
|||
34
Галахад
гуру
19.12.16
✎
15:07
|
Посмотреть, что такое "ПолеСпискаПодразделений" и как оно заполняется.
|
|||
35
TygarinZmei
19.12.16
✎
15:13
|
(34) Что ж вы все так любите загадками писать. Я не волшебник я ток учусь)))
ПолеСпискаПодразделений.ЗагрузитьЗначения(Массив); В массиве хранятся строки. По сути это список значений. Так же как и СписокПодразделений. |
|||
36
Галахад
гуру
19.12.16
✎
15:21
|
(35) А откуда строки приходят? Из другой базы?
|
|||
37
TygarinZmei
19.12.16
✎
15:25
|
(36) Да.
Запрос = Connection1C.NewObject("Запрос"); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ПодразделенияОрганизаций.Наименование |ИЗ | Справочник.ПодразделенияОрганизаций КАК ПодразделенияОрганизаций |ГДЕ | ПодразделенияОрганизаций.НеИспользуется = ЛОЖЬ"; Выборка = Запрос.Выполнить().Выбрать(); Массив = Новый Массив; Пока Выборка.Следующий() Цикл Массив.Добавить(Выборка.Наименование); КонецЦикла; ПолеСпискаПодразделений.ЗагрузитьЗначения(Массив); |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |