Имя: Пароль:
1C
 
Ошибка отбора данных в обработке
, ,
0 Олеся999
 
06.04.15
06:50
Обработка загрузки документов из самописной конфы в БП.
В верхней таблице (ДанныеОбмена) выбираем документ, в нижней таблице (тзДокумент) должно отобразиться содержание этого документа.
Проблема возникла с отбором в нижней таблице почему то выводятся содержание всех документов.


Код:

&НаКлиенте
Функция ПодключитьсяК1С()
    // создается объект COM-соединение
    Соединитель = Новый COMObject("V83.COMConnector");
    Попытка
        v8 = Соединитель.Connect("srvr = ""1C""; ref = ""Производство""; usr = ""Админ""; pwd = ""4466""");  
    Исключение
        Предупреждение("Не удалось подключиться к Биллингу!",5);
        Возврат Неопределено;
    КонецПопытки;
    Возврат v8;
КонецФункции

&НаКлиенте
Процедура ПолучитьДанные(Команда)

        Перем COM;
    Если НЕ ЗначениеЗаполнено(НачПериода) Тогда
        Предупреждение("Заполните начало периода", 3);
        ТекущийЭлемент = Элементы.НачПериода;
        Возврат;
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(КонПериода) Тогда
        Предупреждение("Заполните окончание периода", 3);
        ТекущийЭлемент = Элементы.КонПериода;
        Возврат;
    КонецЕсли;
    
    Если COM = Неопределено Тогда
        COM = ПодключитьсяК1С();
        Если COM = Неопределено Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    ДанныеОбмена.Очистить();
    ЗапросCOM = COM.NewObject("Запрос");
    ЗапросCOM.Текст = "ВЫБРАТЬ
    |    ПриходнаяНакладная.Номер,
    |    ПриходнаяНакладная.Дата,
    |    ПриходнаяНакладная.Контрагент.Наименование КАК Контрагент,
    |    ПриходнаяНакладная.ИтоговаяСумма,
    |    ПриходнаяНакладная.Фирма.Наименование КАК Фирма,
    |    ПриходнаяНакладная.ИнфНакладной,
    |    ПриходнаяНакладная.ДатаНакладной,
    |    ПриходнаяНакладная.ИнфСчета,
    |    ПриходнаяНакладная.ДатаСчета
    |ИЗ
    |    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
    |ГДЕ
    |    ПриходнаяНакладная.Дата МЕЖДУ &НачДата И &КонДата";

    ЗапросCOM.УстановитьПараметр("НачДата", НачалоДня(НачПериода));
    ЗапросCOM.УстановитьПараметр("КонДата", КонецДня(КонПериода));
    Рез = ЗапросCOM.Выполнить();
    //Рез.Выгрузить(ДанныеОбмена);
    Выборка = Рез.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        НС = ДанныеОбмена.Добавить();
        ЗаполнитьЗначенияСвойств(НС, Выборка);
    КонецЦикла;
    COM = Неопределено;
    
    Сообщение = Новый СообщениеПользователю;
    
    //================================================================================
    
КонецПроцедуры

&НаКлиенте
Процедура ДанныеОбменаПриАктивизацииСтроки(Элемент)
    
        Перем COM;    
    Если COM = Неопределено Тогда
        COM = ПодключитьсяК1С();
        Если COM = Неопределено Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    //ДанныеОбмена.Очистить();
    ЗапросCOM2 = COM.NewObject("Запрос");
    ЗапросCOM2.Текст = "ВЫБРАТЬ
    |    ПриходнаяНакладнаяТаблЧасть.Ссылка.Номер,
    |    ПриходнаяНакладнаяТаблЧасть.Номенклатура,
    |    ПриходнаяНакладнаяТаблЧасть.Артикул,
    |    ПриходнаяНакладнаяТаблЧасть.Количество,
    |    ПриходнаяНакладнаяТаблЧасть.Цена,
    |    ПриходнаяНакладнаяТаблЧасть.Сумма
    |ИЗ
    |    Документ.ПриходнаяНакладная.ТаблЧасть КАК ПриходнаяНакладнаяТаблЧасть";
        Рез2 = ЗапросCOM2.Выполнить();
    //Рез.Выгрузить(ДанныеОбмена);
    Выборка2 = Рез2.Выбрать();
    
    Пока Выборка2.Следующий() Цикл
        НС2 = тзДокумент.Добавить();
        ЗаполнитьЗначенияСвойств(НС2, Выборка2);
    КонецЦикла;
    
    //    тзДокумент.Очистить();
    //        // Отберем строки табличной части
    //    ОтборСтрок = Новый Структура;
    //    ОтборСтрок.Вставить("Номер",ДанныеОбмена.Номер);
    //    МассивС = ДанныеОбмена.НайтиСтроки(ОтборСтрок);
    //    Для каждого СтрокаМассивС Из МассивС Цикл
    //    // Добавим анализ
    //    Если   СтрокаМассивС.ДанныеОбмена.Номер  Тогда
    //    НС =тзДокумент.Номер.Добавить();
    //    ЗаполнитьЗначенияСвойств(НС, СтрокаМассивС, "Номенклатура,Количество,Цена,Сумма");
    //    Иначе
    //    Сообщить("Какаета херня");
    //            //НС = НДок.Товары.Добавить();
    //            //ЗаполнитьЗначенияСвойств(НС, См, , "Себестоимость");
    //            //НС.СчетУчета        = СчетУчетаТч;
    //            //НС.КоличествоМест    = 1;
    //        КонецЕсли;
    //        КонецЦикла;

    ////COM = Неопределено;
    ////
    ////Сообщение = Новый СообщениеПользователю;

КонецПроцедуры












Выводится: http://lvkr.ru/f/ts2AYH/640.jpg


//________________________________________________________________________________________________






















&НаКлиенте
Функция ПодключитьсяК1С()
    // создается объект COM-соединение
    Соединитель = Новый COMObject("V83.COMConnector");
    Попытка
        v8 = Соединитель.Connect("srvr = ""1C""; ref = ""Производство""; usr = ""Админ""; pwd = ""4466""");  
    Исключение
        Предупреждение("Не удалось подключиться к Биллингу!",5);
        Возврат Неопределено;
    КонецПопытки;
    Возврат v8;
КонецФункции

&НаКлиенте
Процедура ПолучитьДанные(Команда)

        Перем COM;
    Если НЕ ЗначениеЗаполнено(НачПериода) Тогда
        Предупреждение("Заполните начало периода", 3);
        ТекущийЭлемент = Элементы.НачПериода;
        Возврат;
    КонецЕсли;
    Если НЕ ЗначениеЗаполнено(КонПериода) Тогда
        Предупреждение("Заполните окончание периода", 3);
        ТекущийЭлемент = Элементы.КонПериода;
        Возврат;
    КонецЕсли;
    
    Если COM = Неопределено Тогда
        COM = ПодключитьсяК1С();
        Если COM = Неопределено Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    ДанныеОбмена.Очистить();
    ЗапросCOM = COM.NewObject("Запрос");
    ЗапросCOM.Текст = "ВЫБРАТЬ
    |    ПриходнаяНакладная.Номер,
    |    ПриходнаяНакладная.Дата,
    |    ПриходнаяНакладная.Контрагент.Наименование КАК Контрагент,
    |    ПриходнаяНакладная.ИтоговаяСумма,
    |    ПриходнаяНакладная.Фирма.Наименование КАК Фирма,
    |    ПриходнаяНакладная.ИнфНакладной,
    |    ПриходнаяНакладная.ДатаНакладной,
    |    ПриходнаяНакладная.ИнфСчета,
    |    ПриходнаяНакладная.ДатаСчета
    |ИЗ
    |    Документ.ПриходнаяНакладная КАК ПриходнаяНакладная
    |ГДЕ
    |    ПриходнаяНакладная.Дата МЕЖДУ &НачДата И &КонДата";

    ЗапросCOM.УстановитьПараметр("НачДата", НачалоДня(НачПериода));
    ЗапросCOM.УстановитьПараметр("КонДата", КонецДня(КонПериода));
    Рез = ЗапросCOM.Выполнить();
    //Рез.Выгрузить(ДанныеОбмена);
    Выборка = Рез.Выбрать();
    
    Пока Выборка.Следующий() Цикл
        НС = ДанныеОбмена.Добавить();
        ЗаполнитьЗначенияСвойств(НС, Выборка);
    КонецЦикла;
    COM = Неопределено;
    
    Сообщение = Новый СообщениеПользователю;
    
    //================================================================================
    
КонецПроцедуры

&НаКлиенте
Процедура ДанныеОбменаПриАктивизацииСтроки(Элемент)
    
        Перем COM;    
    Если COM = Неопределено Тогда
        COM = ПодключитьсяК1С();
        Если COM = Неопределено Тогда
            Возврат;
        КонецЕсли;
    КонецЕсли;
    
    //ДанныеОбмена.Очистить();
    ЗапросCOM2 = COM.NewObject("Запрос");
    ЗапросCOM2.Текст = "ВЫБРАТЬ
    |    ПриходнаяНакладнаяТаблЧасть.Ссылка.Номер,
    |    ПриходнаяНакладнаяТаблЧасть.Номенклатура,
    |    ПриходнаяНакладнаяТаблЧасть.Артикул,
    |    ПриходнаяНакладнаяТаблЧасть.Количество,
    |    ПриходнаяНакладнаяТаблЧасть.Цена,
    |    ПриходнаяНакладнаяТаблЧасть.Сумма
    |ИЗ
    |    Документ.ПриходнаяНакладная.ТаблЧасть КАК ПриходнаяНакладнаяТаблЧасть";
        Рез2 = ЗапросCOM2.Выполнить();
    //Рез.Выгрузить(ДанныеОбмена);
    Выборка2 = Рез2.Выбрать();
    
    Пока Выборка2.Следующий() Цикл
        НС2 = тзДокумент.Добавить();
        ЗаполнитьЗначенияСвойств(НС2, Выборка2);
    КонецЦикла;
    
        тзДокумент.Очистить();
            // Отберем строки табличной части
        ОтборСтрок = Новый Структура;
        ОтборСтрок.Вставить("Номер",ДанныеОбмена.Номер);
        МассивС = ДанныеОбмена.НайтиСтроки(ОтборСтрок);
        Для каждого СтрокаМассивС Из МассивС Цикл
        // Добавим анализ
        Если   СтрокаМассивС.ДанныеОбмена.Номер  Тогда
        НС =тзДокумент.Номер.Добавить();
        ЗаполнитьЗначенияСвойств(НС, СтрокаМассивС, "Номенклатура,Количество,Цена,Сумма");
        Иначе
        Сообщить("Какаета хрень");
                //НС = НДок.Товары.Добавить();
                //ЗаполнитьЗначенияСвойств(НС, См, , "Себестоимость");
                //НС.СчетУчета        = СчетУчетаТч;
                //НС.КоличествоМест    = 1;
            КонецЕсли;
            КонецЦикла;

    //COM = Неопределено;
    //
    //Сообщение = Новый СообщениеПользователю;

КонецПроцедуры









Выводится:http://lvkr.ru/f/R4HAj8/640.jpg

Ошибка: {Форма.Форма.Форма(106)}: Поле объекта не обнаружено (Номер)
        ОтборСтрок.Вставить("Номер",ДанныеОбмена.Номер);
1 Wobland
 
06.04.15
06:52
что за ДанныеОбмена?
2 Олеся999
 
06.04.15
06:53
1)http://lvkr.ru/f/R4HAj8/640.jpg

С закомментированой строкой
2)http://lvkr.ru/f/R4HAj8/640.jpg
3 Олеся999
 
06.04.15
06:54
(1) Документы приходной накладной
4 Wobland
 
06.04.15
06:55
(3) это ты так думаешь ;)
5 Олеся999
 
06.04.15
07:02
(1) А еще это так ТЗ Называется
Таблица значений ДанныеОбмена
6 smitru
 
06.04.15
07:40
(5) попробуй исправить, вместо:
|    ПриходнаяНакладнаяТаблЧасть.Ссылка.Номер,

Поставь
|    ПриходнаяНакладнаяТаблЧасть.Ссылка.Номер Как Номер,
7 Олеся999
 
06.04.15
07:49
(6) Неа такая же  ошибка
8 Wobland
 
06.04.15
07:53
ТЗ, говоришь? неопределено у тебя там
9 Олеся999
 
06.04.15
07:54
(8) Ну да ДанныеОбмена эта таблица значений
10 Олеся999
 
06.04.15
09:45
Написала вот так
ОтборСтрок.Вставить("Номер",Номер);

Ругается:
{Форма.Форма.Форма(106,31)}: Переменная не определена (Номер)
        ОтборСтрок.Вставить("Номер",<<?>>Номер); (Проверка: Тонкий клиент)
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.