Имя: Пароль:
1C
1C 7.7
v7: Проблема с выгрузкой данных из fdb
0 sevensword
 
26.08.14
11:33
Всем добрый день, возик насущий вопрос
организовываю выгрузку данны из fdb базы,в базе две таблицы, в одной айди товара количество проданного а в другой айди товара и его наименование,
при выгрузке данных происходит сверка справочника 1с и данных таблице по наименованию
сейчас получается что количество и цена грузятся а наименования выходят пустыми, кто может подсказать где ошибка?


функция найти_товар_алт(наим_тов)
    спр_тов=создатьобъект("Справочник.Номенклатура");
            спр_тов.выбратьэлементы();
            Пока спр_тов.получитьэлемент()=1 Цикл
                Если лев(сокрлп(наим_тов),3)=лев(спр_тов.наименование,3) Тогда
                    возврат(спр_тов.текущийэлемент());
                КонецЕсли;
                
            КонецЦикла;
    возврат(получитьпустоезначение("Справочник.Номенклатура"));
    
конецфункции

процедура загрузка_магаз()
        
    
    АДО = СоздатьОбъект("ADODB.Connection");
    АДО.ConnectionString     = "Provider=LCPI.IBProvider.1;Password=masterkey;Persist Security Info=True;User ID=SYSDBA;Data Source=127.0.0.1:C:\alfamagasine\pstation.FDB";
    
    АДО.Open();
    //Сообщить(АДО.Version);
                                                                                                                                            
    
    АДО.BeginTrans();
                
    а=азс.код_альт;
    //ввестичисло(а,"Введи    
        
//    АДО.BeginTrans();
    rs=АДО.Execute("SELECT * FROM SGOODS WHERE SHIFT="+строка(смена)+"");  
    rd=АДО.Execute("SELECT * FROM GOODS");// WHERE SHIFT="+строка(смена)+"");
    
    таб=создатьобъект("ТаблицаЗначений");
    таб.новаяколонка("ИД","Число");
    таб.новаяколонка("наим_тов","Строка");
    таб.новаяколонка("наим_т","число");
//    таб.новаяколонка("наим_ст","число");
    
    таб.новаяколонка("кол","Число");
    таб.новаяколонка("цена","Число");

    таб.новаяколонка("Вид_опл_код","Число");
    таб.новаяколонка("Вид_опл","Справочник.ВидОплаты");
    спр=создатьобъект("Справочник.ВидОплаты");
    спр.найтипокоду(1); // нал.  

    //
    таб2=создатьобъект("ТаблицаЗначений");
    таб2.новаяколонка("ИД","Число");
    таб2.новаяколонка("наим_тов","Строка");
    таб2.новаяколонка("наим_ст","число");
    таб3=создатьобъект("ТаблицаЗначений");
    таб3.новаяколонка("ИД","Число");
    таб3.новаяколонка("наим_тов","Строка");
    таб3.новаяколонка("наим_ст","число");
    таб3.новаяколонка("кол","Число");
    таб3.новаяколонка("цена","Число");
    
    пока rs.EOF=0 цикл            
        
        таб.новаястрока()
        ;
    таб.наим_т=rs.fields.Item("IDGOOD").value;//бд.FUEL;  \
    таб2.наим_ст=rd.fields.Item("id").value;//бд.FUEL;  \
    таб2.наим_тов=rd.fields.Item("NAME").value;//бд.TYPEPAY;    
    таб.кол=rs.fields.Item("OUTGO").value;//бд.TYPEPAY;
    таб.цена=rs.fields.Item("PRICE").value;//бд.TYPEPAY; \
     //  экспорт
    rs.movenext();

         таб2.выбратьстроки();
    Пока таб2.получитьстроку()=0 цикл
      таб3.новаястрока();
      таб3.наим_тов=таб2.наим_тов;
      таб3.ид=таб2.наим_ст;  
      конеццикла;
      
    таб.выбратьстроки();
    Пока таб.получитьстроку()=0 цикл
      таб3.новаястрока();
      таб3.ид=таб.наим_т;
      таб3.кол=таб.кол;
      таб3.цена=таб.цена;
      конеццикла;    
         конеццикла;    
    
    АДО.CommitTrans();    
    

    таб.Выгрузить(таб3,,,"наим_т,кол,цена");
    таб2.Выгрузить(таб3,,,"наим_тов,наим_ст");
    таб3.Свернуть("наим_тов,наим_т,наим_ст,цена", "кол");    
    ТЗ_5.удалитьстроки();    
таб3.ВыбратьСтроки();
Пока таб3.ПолучитьСтроку() = 1 Цикл
  ТЗ_5.новаястрока();
        ТЗ_5.товар=найти_товар_алт(таб3.наим_тов);
//    ТЗ_5.товар=таб3.наим_тов;
        ТЗ_5.расх_кол=таб3.кол;
        ТЗ_5.цена=таб3.цена;
        ТЗ_5.сумма=ТЗ_5.цена*ТЗ_5.расх_кол;
КонецЦикла;
1 Ёпрст
 
26.08.14
11:37
таб2.наим_ст=rd.fields.Item("id").value;//бд.FUEL;  

Присваиваешь значение, а таб2.НоваяСттрока или позиционирования на любой другой строке в коде нема..
2 Ёпрст
 
26.08.14
11:38
ну и ... весь код в топку..
3 Ёпрст
 
26.08.14
11:41
и поиск весьма забавный..по первым 3-м символам..
4 Ёпрст
 
26.08.14
11:42
хотя бы к нижнему регистру приводил, что ле..
5 sevensword
 
26.08.14
11:53
(4) смысла нет от нижнего регистра, код выставляют перед наименованием, товара немного трех цифр хватает
6 sevensword
 
26.08.14
11:53
(1) ща буду переделывать
7 Ёпрст
 
26.08.14
11:55
и если че, всю синхронизацию можно было бы слепить в одном запросе. Только использовать не адо, а 1cpp и oledb провайдер
И получить на выходе готовый результат - сами элементы и цена твоя с левой базы.
8 sevensword
 
26.08.14
13:33
(7) в дебри 1cpp и oledb не стал лезть
щас дописал но грузит первую строчку справочника
Епрст подскажи как стравнить строчки id и idgood в разных таблицах чтобы получить поле name
           процедура загрузка_магазина()
        
    
    АДО = СоздатьОбъект("ADODB.Connection");
    АДО.ConnectionString     = "Provider=LCPI.IBProvider.1;Password=masterkey;Persist Security Info=True;User ID=SYSDBA;Data Source=127.0.0.1:C:\alfamagasine\pstation.FDB";
    
    АДО.Open();
    //Сообщить(АДО.Version);
                                                                                                                                            
    
    АДО.BeginTrans();
                
    а=азс.код_альт;
    //ввестичисло(а,"Введи    
        
//    АДО.BeginTrans();
    rs=АДО.Execute("SELECT * FROM SGOODS WHERE SHIFT="+строка(смена)+"");  
    rd=АДО.Execute("SELECT * FROM GOODS");// WHERE SHIFT="+строка(смена)+"");
    
    таб=создатьобъект("ТаблицаЗначений");
    таб.новаяколонка("ИД","Число");
    таб.новаяколонка("наим_тов","Строка");
    таб.новаяколонка("наим_2","Строка");
    таб.новаяколонка("наим_3","Строка");
    
    таб.новаяколонка("кол","Число");
    таб.новаяколонка("цена","Число");

    таб.новаяколонка("Вид_опл_код","Число");
    таб.новаяколонка("Вид_опл","Справочник.ВидОплаты");
    спр=создатьобъект("Справочник.ВидОплаты");
    спр.найтипокоду(1); // нал.  

    //
    
    пока rs.EOF=0 цикл            
        
        таб.новаястрока()
        ;
    //    таб.наим_2=rs.fields.Item("IDGOOD").value;//бд.FUEL;  \
      //  таб.наим_3=rd.fields.Item("id").value;//бд.FUEL;  \
        таб.наим_тов=rd.fields.Item("NAME").value;//бд.TYPEPAY;    
        таб.кол=rs.fields.Item("OUTGO").value;//бд.TYPEPAY;
        таб.цена=rs.fields.Item("PRICE").value;//бд.TYPEPAY; \
    //    иначе конецесли;
     //  экспорт
             rs.movenext();
    таб.вид_опл=спр.найтипокоду(1);
    
    Если спр.найтипокоду(1)=1 Тогда
таб.вид_опл = Спр.ТекущийЭлемент();
КонецЕсли;


    
конеццикла;  


    
    АДО.CommitTrans();  
    
    
    таб.свернуть("наим_тов,цена,вид_опл","кол");
    ТЗ_5.удалитьстроки();
    
    таб.выбратьстроки();
    Пока таб.получитьстроку()=1 Цикл
        если таб.кол=0 тогда
           продолжить;
        конецесли;
        ТЗ_5.новаястрока();
        ТЗ_5.товар=найти_товар_алт(таб.наим_тов);
        ТЗ_5.расх_кол=таб.кол;
        ТЗ_5.цена=таб.цена;
        ТЗ_5.сумма=ТЗ_5.цена*ТЗ_5.расх_кол;
    
        ТЗ_5.вид_оплаты=таб.вид_опл;
    //    ТЗ_5.Заполнить(ТЗ_5,,,"вид_оплаты");
    КонецЦикла;
    
    
    
конецпроцедуры
9 Ёпрст
 
26.08.14
13:38
дык связь то какая между ними ?

так что ле надо ?

SELECT b.name  FROM SGOODS as a WHERE a.SHIFT="+строка(смена)+"
  left join GOODS as b on b.ID = a.IDGOOD");// WHERE SHIFT="+строка(смена)+"");
10 Ёпрст
 
26.08.14
13:39
SELECT b.name  FROM SGOODS as a
left join GOODS as b on b.ID = a.IDGOOD
WHERE a.SHIFT="+строка(смена)+"
11 sevensword
 
26.08.14
13:52
(10) rs=???.Execute(("SELECT b.name  FROM SGOODS as a left join GOODS as b on b.ID = a.IDGOOD WHERE a.SHIFT="+??????(?????)+""));
{????????.????????????.?????.??????(1888)}: : Prepare:
SQLCODE=-104:
Dynamic SQL Error
SQL error code = -104
Token unknown - line
12 sevensword
 
26.08.14
13:52
ошибка запроса
13 sevensword
 
26.08.14
14:08
через ibeexpert показывает ошибку не нравится ему AS
14 Злой Бобр
 
26.08.14
14:08
rs=АДО.Execute("SELECT * FROM SGOODS WHERE SHIFT="+строка(смена)+"");
Поменяй на :
rs=АДО.Execute("SELECT * FROM SGOODS WHERE SHIFT='"+строка(смена)+"'");

Эх... молодежь. )
15 sevensword
 
26.08.14
14:24
(14) что это должно изменить?
16 Злой Бобр
 
26.08.14
14:30
(15) Строка в одинарной кавычке должна быть. То что ты в 1С преобразуешь в строку для запроса ничего не значит. Ну попробуй так и посмотри что выдаст.
17 sevensword
 
26.08.14
14:48
переделал запрос, в bexperte формирует как надо а в 1ске ошибка
rs=АДО.Execute("SELECT sgoods.idgood,  goods.id, goods.name FROM sgoods left join goods on GOODS.id = SGOODS.idgood WHERE a.SHIFT="+строка(смена)+"");
Prepare:
SQLCODE=-206:
Dynamic SQL Error
SQL error code =
18 sevensword
 
26.08.14
14:55
опечатка была нашел поправил
19 sevensword
 
26.08.14
15:09
всем спасибо, все работает
процедура загрузка_магазина()
        
    
    АДО = СоздатьОбъект("ADODB.Connection");
    АДО.ConnectionString     = "Provider=LCPI.IBProvider.1;Password=masterkey;Persist Security Info=True;User ID=SYSDBA;Data Source=127.0.0.1:C:\alfamagasine\pstation.FDB";
    
    АДО.Open();
    //Сообщить(АДО.Version);
                                                                                                                                            
    
    АДО.BeginTrans();
                
    а=азс.код_альт;

rs=АДО.Execute("SELECT sgoods.idgood,  goods.id, goods.name, sgoods.outgo, sgoods.price FROM sgoods left join goods on GOODS.id = SGOODS.idgood WHERE SHIFT="+строка(смена)+"");
таб=создатьобъект("ТаблицаЗначений");
    таб.новаяколонка("ИД","Число");
    таб.новаяколонка("наим_тов","Строка");
    
    таб.новаяколонка("кол","Число");
    таб.новаяколонка("цена","Число");

    таб.новаяколонка("Вид_опл_код","Число");
    таб.новаяколонка("Вид_опл","Справочник.ВидОплаты");
    спр=создатьобъект("Справочник.ВидОплаты");
    спр.найтипокоду(1); // нал.  

    //
    
    пока rs.EOF=0 цикл            
        
        таб.новаястрока()
        ;

        таб.наим_тов=rs.fields.Item("NAME").value;//бд.TYPEPAY;    
        таб.кол=rs.fields.Item("OUTGO").value;//бд.TYPEPAY;
        таб.цена=rs.fields.Item("PRICE").value;//бд.TYPEPAY; \

             rs.movenext();
    таб.вид_опл=спр.найтипокоду(1);
    
    Если спр.найтипокоду(1)=1 Тогда
таб.вид_опл = Спр.ТекущийЭлемент();
КонецЕсли;


    
конеццикла;  


    
    АДО.CommitTrans();  
    
    
    таб.свернуть("наим_тов,цена,вид_опл","кол");
    ТЗ_5.удалитьстроки();
    
    таб.выбратьстроки();
    Пока таб.получитьстроку()=1 Цикл
        если таб.кол=0 тогда
           продолжить;
        конецесли;
        ТЗ_5.новаястрока();
        ТЗ_5.товар=найти_товар_алт(таб.наим_тов);
        ТЗ_5.расх_кол=таб.кол;
        ТЗ_5.цена=таб.цена;
        ТЗ_5.сумма=ТЗ_5.цена*ТЗ_5.расх_кол;
    
        ТЗ_5.вид_оплаты=таб.вид_опл;
    
    КонецЦикла;
    
    
    
конецпроцедуры
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.