Имя: Пароль:
1C
 
помогите с поиском в ком объекте
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.Добавить(СписокТвояБаза[Инд]).Значение;
КонецЦикла;
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой