Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Горячая тема (более 10 ответов) Хочу невозможного: транслятор запросов 1С в 1С++ (число прочтений - 8940 )
bes
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 4
Зарегистрирован: 06. Декабря 2006
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #15 - 28. Декабря 2006 :: 11:09
Печать  
Нафиг транслятор. Я полгода о T-SQL и прямых запросах  только краем уха слышал. Благодаря www.1cpp.ru и яндексу прямые запросы почти полность освоил. и на стандартные запросы 1С - не вернусь. НИЗАЧТО.
P.S.Повторюсь-транслятор нафиг. Лучше просто знать ЧТО и ОТКУДА брать Улыбка.
  
Наверх
 
IP записан
 
orefkov
1c++ developer
1c++ moderator
Отсутствует


I Love YaBB 2!

Сообщений: 896
Зарегистрирован: 20. Мая 2006
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #16 - 28. Декабря 2006 :: 14:22
Печать  
Универсальный транслятор с запросов 1С на T-SQL уже есть.
Это сама 1С.
На ее примере отлично видно, какими недостатками всегда страдает универсальное решение против специализированного частного.
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


Нам бы чего про ОдноЦэ...

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #17 - 28. Декабря 2006 :: 14:26
Печать  
Александр, +1
Автор, посмотри конструктор от berezdetsky - мега-супер (правда иногда глючит)
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
Arta
1c++ power user
Отсутствует



Сообщений: 2537
Местоположение: Нижний Новгород
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #18 - 28. Декабря 2006 :: 17:33
Печать  
Kapet писал(а) 28. Декабря 2006 :: 11:07:
В целом ситуация пока наблюдается как у нас на Украине: кругом беднота и есть высший класс, а средний как класс отсутствует почти вообще.
Присутствующим здесь корифеям (за то, что отвечают на глупые вопросы таких как я Васей Пупкиных глубокий поклон!) такой транслятор напроч не нужен. А низы не могут, а верхи не хотят. Почти классика, только наоборот...


Зря ты так. Год назад на итланде я такие вопросы задавал на форуме, что теперь за себя стыдно Улыбка
А теперь вроде освоился.

P.S. К тому же я не программер вообще! По совместительству приходится Улыбка
P.S.S. Я на полном серьезе.

Скачай обработки что выкладываются в репозитарии, поэкспериментируй. Результат понравится, поверь мне Улыбка
  
Наверх
 
IP записан
 
Kapet
Senior Member
****
Отсутствует


Ламер - вансист

Сообщений: 262
Местоположение: Ukraine, Kyiv
Зарегистрирован: 27. Декабря 2006
Пол: Мужской
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #19 - 03. Января 2007 :: 19:38
Печать  
Arta писал(а) 28. Декабря 2006 :: 17:33:
Скачай обработки что выкладываются в репозитарии, поэкспериментируй. Результат понравится, поверь мне Улыбка


Уже нравится, всё больше и больше.

Ну что ж, размечтался немного под Новый Год, а теперь засучу рукавички...

Всем огромное спасибо и с Новым Годом!
  
Наверх
ICQ  
IP записан
 
nikolka
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #20 - 15. Января 2007 :: 13:37
Печать  
Если кому интересно могу на днях (в  среду четверг) выложить  начальную
заготовку которая  переводить запросы по регистрам движений
написаные на 1С в запросы на 1С++   (написана она 1С).
Логика такая
1)  сперва пути вида ф=регистр.авав.ваываыв....
расчепляються и заносяться в  таблицу  значений
2) это все разбиваеться на  виды регистров (которые в последствии обединяються)
потом постеменно строяться подзапросы
(связаные с тем что для некоторых путей нужно соединяться со справочниками).
4) потом добавляються групировки и фильтры
Здесь у меня  есть заготовка для  универсальной  работы  с  групиросвками
в иерархическом справочнике. (как я знаю в 1С++ работа с иерархией не доделана)

Мне кажеться все же задача вполне правильная и имеет смысл.
Приблизительный ее смысл перевести с русского филосовского  на конкретный.

Даже если в начале это будет грубо зато уменьшит ряд рутиных оперраций.
В некоторых случаев можно получить нормальный перевод.

Если кого то все это заинтересовало то прошу пинать и пинать (желательно по сильнее).
Хотел сделать и выложить до нового года но что то его держало
может пара детей а может быть директор школы
(вспомнился куплет из Чижа хотя и не по сути но зато прикольно).

Всех с наступившим старым новым годом ... Подмигивание
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #21 - 15. Января 2007 :: 23:29
Печать  
Я конечно не гуру, но могу сказать, выкладывай.
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
nikolka
Junior Member
**
Отсутствует


I Love YaBB 2!

Сообщений: 83
Зарегистрирован: 15. Января 2007
Re: Хочу невозможного: транслятор запросов 1С в 1С
Ответ #22 - 19. Января 2007 :: 14:19
Печать  
//1) Выкладываю не доделаную версию конвертера.
// в ближайшее время постараюсь доделать.
// так что заранее извеняюсь.
// а) сделано только получение нужных даных и частичное построение запроса.
// расматриваеться только часть запроса отвечающая за пути.

//краткое описание
ТЗ_Запрос или ТаблицаПЗ_Под- таблица содержащая начальную информацию при разбиении путей
ТЗ_ИменаПеременых- таблица содержащая итоговую информацию

Постараюсь по возможности довести обработку до состаяния автоматом
перевести отчеты типа Отчет по продажам ТМЦ   ТИС.
Всем кто может помочь помогите.

Мне кажеться что объекты типа смысловых переводчиков со временем появяься для многих связок.
Наиболее вероятно Количество языков одной  среды возрастет.(частично это и так простходит).
В настоящий момент  для меня осоменно интерсны:
1С++--->1C,
1С++--->1C8,
1С8--->1С++,
1С8--->1С
Также мне кажеться перспектвным переводчик.
1С-->EXCEL+VBA.
Возможно интересна и связка
1С-->C++,ASM(+ разпаралеливание).
Но это связка пока мне кажеться менее перспективной.

Но это все в большей степени сказки, Подмигивание  а пока нет времени сделать
не такую уж и сложную задачу, ничего все еще только начинаеться.
Возможно стоит создать раздел посвященый переводчикам  1С-->1C++.
Его возможные части:
а) общая логика перевода.
б)  разделы по специфики для компонент,
г)  конкретные сложные примеры

//2 Подсчет итогов для групп в иерархическом справочнике 
//а)  получим группы для справочника
Справ="$Справочник.Номенклатура";
Grup="
|SELECT   "+Справ+".ID, ase when ("+Справ+".ID=Grup2.ID) then Grup2.rod3  else "+Справ+".ID end
|FROM "+Справ+",
|      (SELECT   "+Справ+".ID, "+Справ+".PARENTID,"+Справ+".DESCR,
|rod0=case when ("+Справ+".ID=Grup1.ID) then 0  else 1 end,
|rod1=Grup1.rod1,
|rod2=case when ("+Справ+".ID=Grup1.ID) then Grup1.rod2  else "+Справ+".ID end,
|rod3='     0'
|      FROM "+Справ+",
|            (SELECT   "+Справ+".ID, "+Справ+".PARENTID,"+Справ+".DESCR,
|            rod0=0,
|            rod1="+Справ+".ID,rod2='     0',rod3='     0'
|            FROM     "+Справ+"  WHERE    ltrim("+Справ+".PARENTID)='0') as Grup1
|      WHERE (("+Справ+".PARENTID=Grup1.ID) and (Grup1.rod0=0)  ) OR  ("+Справ+".ID=Grup1.ID )) as Grup2
|WHERE ("+Справ+".PARENTID=Grup2.ID and (Grup2.rod0=1)) OR  ("+Справ+".ID=Grup2.ID)";
////|Order by 5,6,7

//б) получим исходную таблицу
vt_ПродажыТов="
     |select
     |      /* Переменные запроса (группировки)*/
     |   Тов,
     |   /* Функции запроса */
     |   Колво=Sum(case when vt_Продажы.Количество>0 then vt_Продажы.Количество else 0 end),
     |   СумРуб=Sum(case when vt_Продажы.Количество>0 then vt_Продажы.СуммаРуб else 0 end),
     |   СумВал=Sum(case when vt_Продажы.Количество>0 then vt_Продажы.СуммаДол else 0 end),
     |   СумПок=Sum(case when vt_Продажы.Количество>0 then vt_Продажы.ПокрытиеДол else 0 end)
     |from("+vt_Продажы+") as vt_Продажы
     |      group by
     |   Тов
     |";   
     
// добавлять группы лучше после подсчета итогов так быстрей!!!      
// в)сперва добавим столбец с родителеми
ТекстSELECT="      
     |select
//      |      Тов [Тов $Справочник.Товар],
       |      Тов,
     |Колво,СумРуб,СумВал,СумПок,
     |rod0,rod1,rod2,rod3
     |from("+vt_ПродажыТов+") as vt_ПродажыТов      
     |Left outer join ("+Grup+") Grup on (Grup.id=vt_ПродажыТов.Тов)";      
     
// г) потом добавим родителей у наших элементов      
ТекстSELECT="      
     |select      
     |      Тов=case when (Det.Тов=Rod.Id) then Тов else Rod.Id  end,
     |Колво,СумРуб,СумВал,СумПок,
//      |Nrod3=case when (Det.Тов=Rod.Id) then rod3 else Rod.rod3 end)      
     |Rod.rod1,
     |Rod.rod2,
     |Rod.rod3
     |from ("+ТекстSELECT+") Det      
     //|Left outer join ("+Grup+") as Rod on ((Det.Тов=Rod.Id) or (Det.rod1=Rod.Id) or (Det.rod2=Rod.Id) or (Det.rod3=Rod.Id))";
     |Left outer join ("+Grup+") as Rod on ((Det.Тов=Rod.Id) or (Det.rod1=Rod.Id) or (Det.rod2=Rod.Id) or (Det.rod3=Rod.Id))";
// д) потом подсчитаем итоги и сортируем
ТекстSELECT="
     |select
     |      /* Переменные запроса (группировки)*/
     |   Тов [Тов $Справочник.Товар],      
     |   Колво=Sum(Колво),
     |   СумРуб=Sum(СумРуб),
     |   СумВал=Sum(СумВал),
     |   СумПок=Sum(СумПок)
     |      ,rod1,rod2,rod3
     |      from("+ТекстSELECT+") as vt_ПродажыИтог
     |      group by         
     |   rod1,rod2,rod3,Тов
     |";            

//3 обрботка списка в котором есть группы
// хотя и не оптимально (некоторые элементы могут повторяться, зато просто)
Процедура СписокСГруппами1(СписокНач,СписокКон,ВидСправочника)
СписокКон=СоздатьОбъект("СписокЗначений");
КолЭлемент=СписокНач.РазмерСписка();
Если КолЭлемент>0 Тогда
     Для х=1 По КолЭлемент Цикл
           ТоварЭлем=СписокНач.ПолучитьЗначение(х);
           Если ТоварЭлем.ЭтоГруппа()=1 Тогда
                 //Сообщить(ТоварЭлем);                  
                 ТекстЗапроса = "
                 |SELECT
                 | Val [Элемент $Справочник."+ВидСправочника+"]
                 |FROM #Группа";
                 Query.УложитьСписокОбъектов(ТоварЭлем, "#Группа",ВидСправочника);
                 //ТЗ=СоздатьОбъект("ТаблицаЗначений");
                 ТЗ = Query.ВыполнитьИнструкцию(ТекстЗапроса);                  
                 //Сообщить(ТЗ.КоличествоСтрок());                  
                 //ТЗ.Выгрузить(ТЗПров);
                 ТЗ.ВыбратьСтроки();
                 Пока ТЗ.ПолучитьСтроку()=1 Цикл                        
                       СписокКон.ДобавитьЗначение(ТЗ.Элемент); 
                 КонецЦикла;                  
           Иначе
                   СписокКон.ДобавитьЗначение(ТоварЭлем); 
           КонецЕсли;
     КонецЦикла;      
КонецЕсли;                        

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

3_5.ert ( 27 KB | Загрузки )
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать