![]() |
![]() |
|
помогите с поиском в ком объекте | ☑ | ||
---|---|---|---|---|
0
rchervak
31.05.11
✎
23:25
|
бп 2.0
делаю запрос на обращение к базе на сервере: Запрос = connection.NewObject("Запрос"); Запрос.Текст= "ВЫБРАТЬ | ПТУ.Количество Как Количество, | ПТУ.Номенклатура.представление Как Номенклатура |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ Таб = Запрос.Выполнить().Выгрузить(); В итоге получаю comoобъект с таблицей значений. таблица заполнилась. далее пытаюсь найти в таблице строки с определенной номенклатурой СтруктураПоиска.Вставить("Номенклатура",ТекСтрока.Номенклатура.Наименование); Поиск= таб.найтистроки(СтруктураПоиска); Получаю ошибку что метод объекта не обнаружен. Да действительно нет такого метода, но как то же можно отобрать? каким макаром прописать ? |
|||
1
rchervak
31.05.11
✎
23:31
|
может кто подскажет какие ваще есть методы работы с ком объектами?
|
|||
2
rchervak
31.05.11
✎
23:31
|
или хотябы где почитать про это?
|
|||
3
Anjo
31.05.11
✎
23:32
|
а ты структуру как создал
|
|||
4
rchervak
31.05.11
✎
23:35
|
Для Каждого ТекСтрока Из Реализация.Товары Цикл
СтруктураПоиска.Вставить("Номенклатура",ТекСтрока.Номенклатура.Наименование); |
|||
5
Anjo
31.05.11
✎
23:36
|
Не я понял, просто структуру тоже надо создавать через connection
|
|||
6
ilkoder
31.05.11
✎
23:37
|
А не проще отбор по номенклатуре прямо в запросе сделать?
|
|||
7
Anjo
31.05.11
✎
23:37
|
ОтборСотрудникаТабельЗУП = Соединение.NewObject("Структура");
ОтборСотрудникаТабельЗУП.Вставить("Сотрудник",ТекСотрудникЗУП); мас_ОтборТабельУчетаРВ = тч_ТабельУчетаРабочегоВремениОрганизации.FindRows(ОтборСотрудникаТабельЗУП); |
|||
8
rchervak
31.05.11
✎
23:38
|
дело в том что структура создается в базе 2.0 - а конектится к старой базе 1.6.
Я пытаюсь подобрать все приходы из базы 1.6 - к документу реализации из 2.0.- и вывести все это в отчет |
|||
9
rchervak
31.05.11
✎
23:43
|
если быть точным - вот весь текст
Запрос = connection.NewObject("Запрос"); Запрос.Текст= "ВЫБРАТЬ | ПТУ.Количество Как Количество, | ПТУ.Номенклатура.представление Как Номенклатура, | ПТУ.Ссылка.НомерВходящегоДокумента Как ВхНомер, | ПТУ.Ссылка.Контрагент.наименование Как Поставщик, | ПТУ.Ссылка.представление Как Ссылка, | ПТУ.Ссылка.Дата Как Дата |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ |Где ПТУ.Ссылка.Дата Между &ДатаНачала И &ДатаКонца "; Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала)); Запрос.УстановитьПараметр("ДатаКонца",КонецДня(ДатаКонца)); Таб = Запрос.Выполнить().Выгрузить(); Таб.Сортировать("Номенклатура возр,Дата Убыв"); СтруктураПоиска = Новый Структура; Для Каждого ТекСтрока Из Реализация.Товары Цикл СтруктураПоиска.Вставить("Номенклатура",ТекСтрока.Номенклатура.Наименование); Поиск= таб.найтистроки(СтруктураПоиска); КонецЦикла; |
|||
10
ilkoder
31.05.11
✎
23:45
|
Повторюсь - а не проще список товаров выгрузить в массив и передать отбором в запрос?
|
|||
11
rchervak
31.05.11
✎
23:46
|
(6) - не получается отобрать.. я так понял что нельзя сравнивать запрос из одной базы с данными из другой..
хотя может я и не прав |
|||
12
Anjo
31.05.11
✎
23:47
|
так и есть
|
|||
13
ilkoder
31.05.11
✎
23:47
|
Причем документы могут быть и не проведенные и удаленные. (11) - у тебя хоть какое-то соответствие между базами есть? Может коды одинаковые или наименования?
|
|||
14
Anjo
31.05.11
✎
23:48
|
у тебя должна быть связь по номенклатуре между двумя базами нпрмер через UUID
|
|||
15
rchervak
31.05.11
✎
23:50
|
(14) базы отличаются только версиями. в 1.6 - доки за 2010 год
в 2.0 начиная с 2011 |
|||
16
ilkoder
31.05.11
✎
23:51
|
(15) - ну так выгрузи массив с кодами номенклатуры - по ним и отбирай...
|
|||
17
rchervak
31.05.11
✎
23:52
|
(16) хм.. ща попробую.. спасибо
|
|||
18
rchervak
01.06.11
✎
00:08
|
в табличной части нет поля КОД :(
а как правильно к нему обратится? делаю вот так: СписТов = Реализация.Товары.ВыгрузитьКолонки("Номенклатура.код"); - пишет нет такой колонки (( |
|||
19
Anjo
01.06.11
✎
00:12
|
ВыгрузитьКолонку
|
|||
20
Anjo
01.06.11
✎
00:13
|
ВыгрузитьКолонки выгружает структуру колонок
|
|||
21
Anjo
01.06.11
✎
00:14
|
и не надо "Номенклатура.Код" по идее ВыгрузитьКолонку("Код")
|
|||
22
ilkoder
01.06.11
✎
00:14
|
Сделай маленький запросик с отбором кодов по документу - выгрузи его в тз и из него возьми нужную колонку.
|
|||
23
rchervak
01.06.11
✎
00:17
|
{Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (ВыгрузитьКолонку)
СписТов = Реализация.Товары.ВыгрузитьКолонку("Номенклатура.код"); по причине: Недопустимое значение параметра (параметр номер '1') (Колонка не принадлежит коллекции) |
|||
24
Anjo
01.06.11
✎
00:19
|
Ух не внимательно прочитал (18) делай через запрос
|
|||
25
rchervak
01.06.11
✎
00:19
|
понял.. не увидел ответа просто)
|
|||
26
rchervak
01.06.11
✎
00:35
|
попытался сл. образом:
запрос = новый запрос; запрос.Текст = " |ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура.Код |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("ссылка",Реализация); выборка = запрос.Выполнить().Выгрузить(); далее Запрос = connection.NewObject("Запрос"); Запрос.Текст= "ВЫБРАТЬ | ПТУ.Количество КАК Количество, | ПТУ.Номенклатура.Представление КАК Номенклатура, | ПТУ.Ссылка.НомерВходящегоДокумента КАК ВхНомер, | ПТУ.Ссылка.Контрагент.Наименование КАК Поставщик, | ПТУ.Ссылка.Представление КАК Ссылка, | ПТУ.Ссылка.Дата КАК Дата, | ПТУ.Номенклатура.Код как код |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ |ГДЕ | ПТУ.Ссылка.Дата МЕЖДУ &ДатаНачала И &ДатаКонца И ПТУ.Номенклатура.Код В (&код)"; Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала)); Запрос.УстановитьПараметр("ДатаКонца",КонецДня(ДатаКонца)); Запрос.УстановитьПараметр("код",выборка); Таб = Запрос.Выполнить().Выгрузить(); выдает ошибку - неверный параметр |
|||
27
ilkoder
01.06.11
✎
00:46
|
Запрос.УстановитьПараметр("код",выборка.выгрузитьколонку("код")); вроде как-то так
|
|||
28
Stim213
01.06.11
✎
00:49
|
Если ты делаешь структуру поиска, то юзай так же NewObject
Запрос = connection.NewObject("Запрос"); Запрос.Текст= "ВЫБРАТЬ | ПТУ.Количество Как Количество, | ПТУ.Номенклатура.представление Как Номенклатура, | ПТУ.Ссылка.НомерВходящегоДокумента Как ВхНомер, | ПТУ.Ссылка.Контрагент.наименование Как Поставщик, | ПТУ.Ссылка.представление Как Ссылка, | ПТУ.Ссылка.Дата Как Дата |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ |Где ПТУ.Ссылка.Дата Между &ДатаНачала И &ДатаКонца "; Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала)); Запрос.УстановитьПараметр("ДатаКонца",КонецДня(ДатаКонца)); Таб = Запрос.Выполнить().Выгрузить(); Таб.Сортировать("Номенклатура возр,Дата Убыв"); СтруктураПоиска = connection.NewObject("Структура"); Для Каждого ТекСтрока Из Реализация.Товары Цикл СтруктураПоиска.Вставить("Номенклатура",ТекСтрока.Номенклатура.Наименование); Поиск= таб.найтистроки(СтруктураПоиска); КонецЦикла; |
|||
29
rchervak
01.06.11
✎
00:52
|
(28) я структуру собираю в другой базе..
|
|||
30
rchervak
01.06.11
✎
00:56
|
{Форма.Форма.Форма(71)}: Ошибка при вызове метода контекста (Выполнить)
Таб = Запрос.Выполнить().Выгрузить(); по причине: Произошла исключительная ситуация: {(12, 23)}: Неверные параметры ПТУ.Номенклатура.Код <<?>>В(&код) |
|||
31
rchervak
01.06.11
✎
00:58
|
запрос = новый запрос;
запрос.Текст = " |ВЫБРАТЬ | РеализацияТоваровУслугТовары.Номенклатура.Код как код |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("ссылка",Реализация); выборка = запрос.Выполнить().Выгрузить(); далее пробую сверить с структурой Запрос = connection.NewObject("Запрос"); Запрос.Текст= "ВЫБРАТЬ | ПТУ.Количество КАК Количество, | ПТУ.Номенклатура.Представление КАК Номенклатура, | ПТУ.Ссылка.НомерВходящегоДокумента КАК ВхНомер, | ПТУ.Ссылка.Контрагент.Наименование КАК Поставщик, | ПТУ.Ссылка.Представление КАК Ссылка, | ПТУ.Ссылка.Дата КАК Дата, | ПТУ.Номенклатура.Код как код |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ |ГДЕ | ПТУ.Номенклатура.Код В(&код)"; Запрос.УстановитьПараметр("код",выборка.выгрузитьколонку("код")); Таб = Запрос.Выполнить().Выгрузить(); вылазит ошибка (30) |
|||
32
Stim213
01.06.11
✎
00:59
|
блин, чувак
|
|||
33
rchervak
01.06.11
✎
01:00
|
(32) думаеш намудрил, ага..
|
|||
34
Stim213
01.06.11
✎
01:00
|
если ты хочешь передать в параметры ком-запроса значение не примитивного типа(не число,строку, булево), то ты должен передавать это как ком объект.
connection.NewObject("СписокЗначений"); |
|||
35
rchervak
01.06.11
✎
01:28
|
(34)
вот код: //в базе 2.0 выбираю реализацию и выгружаю колонку с номенклатурой. СписТов = Реализация.Товары.ВыгрузитьКолонку("Номенклатура"); //далее подключаюсь к базе 1.6 по сом соединению s1 = Новый ComОбъект("v82.comconnector"); Попытка СтрокаПодключения = "Srvr="+ПарСервер+";Ref="+ПарБаза+";Usr="+СокрЛП(Пользователь)+";Pwd="+СокрЛП(Пароль); connection = s1.Connect(СтрокаПодключения); сообщить("база успешно открыта"); Исключение Предупреждение("База данных не открыта!!!"); Возврат; КонецПопытки; //после обращаюсь к базе 1.6 Запрос = connection.NewObject("Запрос"); Запрос.Текст= "ВЫБРАТЬ | ПТУ.Количество Как Количество, | ПТУ.Номенклатура Как Номенклатура, | ПТУ.Ссылка.НомерВходящегоДокумента Как ВхНомер, | ПТУ.Ссылка.Контрагент Как Поставщик, | ПТУ.Ссылка Как Ссылка, | ПТУ.Ссылка.Дата Как Дата |ИЗ | Документ.ПоступлениеТоваровУслуг.Товары КАК ПТУ |Где ПТУ.Ссылка.Дата Между &ДатаНачала И &ДатаКонца И ПТУ.Ссылка.Проведен И (Не ПТУ.Ссылка.ПометкаУдаления) И ПТУ.Номенклатура В (&СписТовары) И ПТУ.Ссылка.Склад = &ВыбСклад |Объединить ВСЕ |ВЫБРАТЬ | ПТУ.Количество Как Количество, | ПТУ.Номенклатура Как Номенклатура, | 0 Как ВхНомер, | ПТУ.Ссылка.СкладОтправитель Как Поставщик, | ПТУ.Ссылка Как Ссылка, | ПТУ.Ссылка.Дата Как Дата |ИЗ | Документ.ПеремещениеТоваров.Товары КАК ПТУ |Где ПТУ.Ссылка.Дата Между &ДатаНачала И &ДатаКонца И ПТУ.Ссылка.Проведен И (Не ПТУ.Ссылка.ПометкаУдаления) И ПТУ.Номенклатура В (&СписТовары) И ПТУ.Ссылка.СкладПолучатель = &ВыбСклад"; Запрос.УстановитьПараметр("ДатаНачала",НачалоДня(ДатаНачала)); Запрос.УстановитьПараметр("ДатаКонца",КонецДня(ДатаКонца)); Запрос.УстановитьПараметр("СписТовары",СписТов); Запрос.УстановитьПараметр("ВыбСклад",Склад); Таб = Запрос.Выполнить().Выгрузить(); Таб.Сортировать("Номенклатура возр,Дата Убыв"); СтруктураПоиска = connection.NewObject("Структура"); В итоге получаю ошибку: {Форма.Форма.Форма(64)}: Ошибка при вызове метода контекста (Выполнить) Таб = Запрос.Выполнить().Выгрузить(); по причине: Произошла исключительная ситуация: {(10, 162)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. Где ПТУ.Ссылка.Дата Между &ДатаНачала И &ДатаКонца И ПТУ.Ссылка.Проведен И (Не ПТУ.Ссылка.ПометкаУдаления) И ПТУ.Номенклатура Не могу разобраться почему не выходит(( |
|||
36
rchervak
01.06.11
✎
01:29
|
Где ПТУ.Ссылка.Дата Между &ДатаНачала И &ДатаКонца И ПТУ.Ссылка.Проведен И (Не ПТУ.Ссылка.ПометкаУдаления) И ПТУ.Номенклатура В (&СписТовары) И ПТУ.Ссылка.Склад <<?>>= &ВыбСклад
последняя строчка не вставилась |
|||
37
Anjo
01.06.11
✎
08:17
|
читай внимательно (34)
|
|||
38
Anjo
01.06.11
✎
08:22
|
СписокCOM.ЗагрузитьЗначения(СписокТвояБаза.ВыгрузитьЗначения()); но наверно не сработает по той же причине что и (34)
2-й способ при условии что твой список содержит строки перебрать циклом; Для Инд=1 по СписокТвояБаза.Количество()-1 Цикл СписокCOM.Добавить(СписокТвояБаза[Инд]).Значение; КонецЦикла; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |