Имя: Пароль:
1C
1C 7.7
v7: 1С++
,
0 bananan
 
24.01.13
13:33
Все-таки читаю я документацию...
Вот сегодн запары по работе нет - решил хорошо ознакомится с документацией по 1С++.
Так во написал я код такой:
ТекстЗапроса = "
   
      |SELECT    Сотрудник.Descr AS Наименование
      |        ,Сотрудник.Code AS Код
      |FROM
      |    $Справочник.Сотрудники AS Сотрудник
      | WHERE Сотрудник.Code = 1241;";        
     RS = СоздатьОбъект("ODBCRecordset");
    RS.Отладка(1);
    ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
    //ТЗ.ВыбратьСтроку();                        
    Сообщить("ТЗ.Наименование-"+ТЗ.Наименование);
В таблице значений показывает одного сотрудника (его фамилию в поле НАименование и код в поле Код. Все нормально.. но, почему код     Сообщить("ТЗ.Наименование-"+ТЗ.Наименование); не выдает (сообщает) фамилию сотрудника?
Данный вопрос - это потому что я изучаю документацию, он не относится ни к какому конкретному запросу..
62 Ёпрст
 
24.01.13
15:45
какие вы все мелочные
DROP DATABASE надоть
63 bananan
 
24.01.13
15:59
Такой вопрос в справочнике поле - поле - перечисление, если там 0 - то женский пол иначе - мужской...
Как это для 1С++ написать?
пробывал так:
|    CASE
      |    WHEN $Сотрудник.Пол = 0 THEN Стать "Ж"
      |    ELSE "Ч"    
     
Понятно ошибку выдает..
64 Ёпрст
 
24.01.13
16:01
(63) выкинуть case и типизировать к $Перечисление.Вид
65 Mikeware
 
24.01.13
16:01
(64)читай про  $Перечисление
66 bananan
 
24.01.13
16:02
(64) Спасибо, попробую (о возвожности типизации - забыл)
67 Mikeware
 
24.01.13
16:02
(65) может, ему не перечисление надо, а именно строку в зависимости от пола?
68 GLazNik
 
24.01.13
16:03
(63) "Ч"? "женщина друг человека"?
69 Ёпрст
 
24.01.13
16:03
(67) раздвояищься ?..
:)

пусть в начале с типизацией пробует.
70 Ёпрст
 
24.01.13
16:04
(68) Червона дива..
71 Mikeware
 
24.01.13
16:08
(68) он хохол...
------
Девушка ночевала у парня. Утром выходит из ванной и спрашивает:
- Дорогой, у тебя висит 2 полотенца с надписями «М» и «Ж». Я вытерлась полотенцем с надписью «Ж», потому что подумала, что М - это для мужчин?
-Ну, вообще-то, «М» - это для морды…
©
72 Delorn
 
24.01.13
16:13
(63) еще раз перечитай ссылку
ТекстЗапроса = "
|SELECT
|    Спр.ID as [Элемент $Справочник.Номенклатура]
|FROM
|    $Справочник.Номенклатура as Спр
|WHERE
|    $Спр.ТипНоменклатуры = :Товар";

RS.УстановитьТекстовыйПараметр("Товар", Перечисление.ТипыНоменклатуры.Товар);
ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
ТЗ.ВыбратьСтроку();
Это от туда
73 Delorn
 
24.01.13
16:15
+(72) Но тебя наверное интересует 6 пример по ссылке
|    $Спр.ТипНоменклатуры as [ТипНоменклатуры $Перечисление.ТипНоменклатуры]
74 bananan
 
24.01.13
16:24
Ж - жинка (женщина), Ч - чоловик (мужчина)
(72)(73) За ссылки спасибо, но у меня так работает:
|        ,$Сотрудник.Пол as [Стать $Перечисление.Пол]
(кстати) "стать" - это пол на украинском языке... :)
75 monsterZE
 
24.01.13
16:28
пиши запросы на украинском =) на родном..
76 Wobland
 
24.01.13
16:28
(74) гы. а я принял за бейсиковский атавизм LET
77 bananan
 
24.01.13
16:35
(75) При всем желании 1С украинскую букву "i" в упор не видит..
А русский я знаю где-то с 3-х лет... :)
78 Ёпрст
 
24.01.13
16:46
ntnc @Ёпрст
79 sapphire
 
24.01.13
16:48
Блeaть, ну неужели непонятно как это работает? :(

Короче, весь сакральный смысл работы прямых запросов в 1С++ сводится к следующему:

1С++ транслирует "мета-SQL" в SQL/t-SQL.

Даже объект есть такой в 1С++ МетаСКЛ....

Значит, нужно понимать следующее:
1. Как правильно использовать метаСКЛ в 1С++
2. Как правильно писать запросы в SQL/t-SQL

по п.1
${Имя типа}.{Идентификатор} вернет имя таблицы
$Справочник.Товары - SC11 к примеру, можно посмотреть как указано в файле 1cv7.dd/1cv7.dds

${Имя типа}.{Идентификатор}.{Поле} - вернет идентификатор поля таблицы. Что-то типа SP1321

в итоге, можно получить конструкцию [Имя таблицы].[Имя поля]

Ликбез по 77: все "Периодический" & Константы храняться в _1SCONST, общие реквизиты и флаги проведения по регистрам - в _1SJOURN.

по п.2: ищи на просторах интернета:
Microsoft SQL Server 2008. Основы T-SQL. Ицик Бен-Ган
80 Ёпрст
 
24.01.13
16:50
81 bananan
 
24.01.13
16:50
(79) Ицика нашел - при возможности - читаю
82 bananan
 
24.01.13
16:57
Процедуру ПриОткрытии надо после всех своих процедур определять или после?
Такой кусок кода
//============================
Процедура ПриОткрытии()
   ДатаАктуальности = РабочаяДата();
   Фирма = Константа.БазФирма.Получить(ДатаАктуальности);
   фОсновные = 1;
   фСовместители = 1;
   фУволенные = 0;
КонецПроцедуры

//*******************************************
Процедура Сформировать()
   Сообщить("ДатаАктуальности =  "+ДатаАктуальности);
выдает ошибку:
 Переменная не определена (ДатаАктуальности)
Что здесь не так??
83 Wobland
 
24.01.13
16:59
(82) даты актуальности нет, ты её спрятал
84 Ёпрст
 
24.01.13
17:00
(82) без разницы
85 bananan
 
24.01.13
17:01
(83) Не понял, - я ДАтуАктуальности назначаю ПриОткрытии()...
Где я ее спраятал и как?
86 Wobland
 
24.01.13
17:02
(85) вот в при открытии и спрятал. видна только там. кури Перем
87 Ёпрст
 
24.01.13
17:02
+84
ДатаАктуальности должна быть или глобальной переменной модуля формы или глобальной (экспортной )переменной глобальника
или реквизитом формы (или риквизитом объекта , если этот код не в обработке/отчете)
88 bananan
 
24.01.13
17:05
С переменной разобрался с вашей помощью...
А вот такой код:
ТекстЗапроса = "
   
      |SELECT    Сотрудник.Descr AS Наименование
      |        ,Сотрудник.Code AS Код  
      |        ,$Сотрудник.Фирма AS [Фирма $Справочник.Фирмы]
      |        ,$Сотрудник.ДатаУвольнения AS ДатаУвольнения
      |        ,$Сотрудник.ДатаПриема AS ДатаПриема    
      |        ,$Сотрудник.ДатаРождения AS ДатаРождения
      |        ,$Сотрудник.ПропискаАдрес AS ПропискаАдрес
      |        ,$Сотрудник.ФактАдрес AS ФактАдрес        
      |        ,$Сотрудник.Пол as [Стать $Перечисление.Пол]
      |        ,$Сотрудник.Образование AS [Образование $Перечисление.Образование]
      |        ,$Сотрудник.СемейноеПоложение AS [СемейноеПоложение $Перечисление.СемейноеПоложение]
      |        ,$Сотрудник.ИНН AS ИНН
      |        ,$Сотрудник.ДокВид AS [ДокВид $Перечисление.ВидыДокументов]
      |        ,$Сотрудник.ДокСерия AS ДокСерия
      |        ,$Сотрудник.ДокНомер AS ДокНомер
      |        ,$Сотрудник.ДокКемВыдан AS ДокКемВыдан
      |        ,$Сотрудник.ДокКогдаВыдан AS ДокКогдаВыдан
      |        ,SUM(Внутренний.Став) as Ставка
      |FROM    
      |(
      |  SELECT
      |     $ПоследнееЗначение.Сотрудники.Ставка(Сотр.ID, :ДатаАктуальности) Став
      |  FROM
      |    $Справочник.Сотрудники Сотр
      |  WHERE
      |     Сотр.ID IN (SELECT Val FROM #tmpSotr)
      |    AND $Сотр.ДатаПриема> :Дат1
      |    AND $Сотр.ДатаПриема<= :ДатаАктуальности
      |    AND  ($Сотр.ДатаУвольнения = '01.01.1753' or  $Сотр.ДатаУвольнения>= :ДатаАктуальности )
      |) as Внутренний";
    RS = СоздатьОбъект("ODBCRecordset");
    RS.УстановитьТекстовыйПараметр("Дат1", Дата("01.01.1989"));  
    RS.УстановитьТекстовыйПараметр("ДатаАктуальности", ДатаАктуальности+1);  
             
    ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
Выдает ошибку:
  Meta name parser error: неизвестное метаимя или алиас "$Сотрудник"
Что он здесь хочет?? Подзапрос вставил... Может в подзапросе что не так?
89 Wobland
 
24.01.13
17:07
(88) перестань запятые где попало ставить. поубивать надо
на пальцах:

выбрать
сотрудник.что-то
из
(неважно что) как внутренний

какой такой сотрудник?
90 bananan
 
24.01.13
17:07
+(88) уже нашел... не надо с эотим разобрался
91 Ёпрст
 
24.01.13
17:08
(88) всё же книжку то почитай, про скулю..

щас тебе он в вежливой форме пока ошибки выдает, не помню уже, но с 10 или 13 раза уже будет чистый мат на русском!
92 bananan
 
24.01.13
17:10
Сори, запрос с подзапросом по сотрудниках обсуждали вчера и вчера подобный код работал,
в этот код я просто добавил в селекте несколько полей
а он выдает ошибку:
Invalid object name '#tmpSotr'.
93 bananan
 
24.01.13
17:11
(91) Книжку я почитываю периодически, а (88) - невнимательность
94 Wobland
 
24.01.13
17:11
(92) ну не знает оно тмпСотр. ты по-английски понимаешь вообще?
95 Ёпрст
 
24.01.13
17:12
(92) дык а сама временная табличка то есть ?
ты её параметром запроса установил ?
96 bananan
 
24.01.13
17:13
(95) Понял, спасибо!
97 sapphire
 
24.01.13
17:16
Жуть. Прям обострение какое-то.
98 bananan
 
24.01.13
17:28
по поводу tmpSotr...
так вот это писалось под готовый код (и оно, в конце концов заработало)
    RS.УложитьСписокОбъектов(Запрос.Сотр.ТекущийЭлемент(), "#tmpSotr","Сотрудники");      
Как видите здесь используется еще один запрос, а моя задача сейчас все сделать в одном запросе.
Как быть??
99 Ёпрст
 
24.01.13
17:29
(98)
нам отсюда не видно твой код
100 Wobland
 
24.01.13
17:30
(98) соединить
101 bananan
 
24.01.13
17:31
(99) показываю предыдущий код:

//============================
Процедура ПриОткрытии()
   ДатаАктуальности = РабочаяДата();
   Фирма = Константа.БазФирма.Получить(ДатаАктуальности);
   фОсновные = 1;
   фСовместители = 1;
   фУволенные = 0;
КонецПроцедуры

//============================
Процедура ИзмРазрез()
   Если (фОсновные=0) и (фСовместители=0) Тогда
       фОсновные = 1;
       фСовместители = 1;
   КонецЕсли;
КонецПроцедуры

//============================
Функция ФорматПок(Чсл) Экспорт
   Возврат Формат(Чсл,"Ч012.2.,");
КонецФункции

Процедура Сформировать(Пар)    
   ТекстЗапроса = "//{{ЗАПРОС(СписокСотрудников)
   |Период с {ДатаАктуальности} по {ДатаАктуальности};
   |Сотр = Справочник.Сотрудники.ТекущийЭлемент;
   |Фир = Справочник.Сотрудники.Фирма;
   |Оклад = Справочник.Сотрудники.Оклад;
   |КвоЛьгот = Справочник.Сотрудники.КвоЛьгот;
   |Тариф = Справочник.Сотрудники.Тариф;
   |Пенсионер = Справочник.Сотрудники.Пенсионер;
   |Инвалид = Справочник.Сотрудники.Инвалид;
   |Должность = Справочник.Сотрудники.МестоРаботы;
   |Ставка = Справочник.Сотрудники.Ставка;
   |Совместитель = Справочник.Сотрудники.ТипСотрудника;
   |ДатаПриема = Справочник.Сотрудники.ДатаПриема;
   |ДатаУвольнения = Справочник.Сотрудники.ДатаУвольнения;
   |//основные
   |ДатаРождения = Справочник.Сотрудники.ДатаРождения;
   |//координаты
   |ПропискаАдрес = Справочник.Сотрудники.ПропискаАдрес;
   |ФактАдрес = Справочник.Сотрудники.ФактАдрес;
   |//кадровые
   |Стать = Справочник.Сотрудники.Пол;
   |Образование = Справочник.Сотрудники.Образование;
   |СемейноеПоложение = Справочник.Сотрудники.СемейноеПоложение;
   |//идентификация        
   |ИНН = Справочник.Сотрудники.ИНН;
   |ДокВид = Справочник.Сотрудники.ДокВид;
   |ДокСерия = Справочник.Сотрудники.ДокСерия;
   |ДокНомер = Справочник.Сотрудники.ДокНомер;
   |ДокКемВыдан = Справочник.Сотрудники.ДокКемВыдан;
   |ДокКогдаВыдан = Справочник.Сотрудники.ДокКогдаВыдан;
   |//условия запроса и т.д.
   |Условие(Фир=Фирма);
   |Условие (Число(Сотр.Родитель.Код) <> 0);
   |Условие(Сотр в ВыбСотрудник);
   |Условие(ДатаПриема<>Дата(0));
   |Условие(ДатаПриема<=ДатаАктуальности);";
   Если фОсновные=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |Условие(Совместитель=1);";
   КонецЕсли;
   Если фСовместители=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |Условие(Совместитель=0);";
   КонецЕсли;
   Если Пар=1 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |Группировка Сотр Упорядочить По Сотр.Наименование;";
   Иначе
       ТекстЗапроса=ТекстЗапроса+"
       |Группировка Сотр Упорядочить По Сотр.Код;";
   КонецЕсли;
   ТекстЗапроса=ТекстЗапроса+"
   |Функция Окл = Сумма(Оклад);    
   |Функция Тар = Сумма(Тариф);";
         
   
   
   Запрос = СоздатьОбъект("Запрос");
   Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
       Возврат;
   КонецЕсли;

   Таб = СоздатьОбъект("Таблица");

   Таб.ВывестиСекцию("Шапка|Основная");
   Если фУволенные=1 Тогда
       Таб.ПрисоединитьСекцию("Шапка|Увольнение");
   КонецЕсли;
   Если (фОсновные=1) и (фСовместители=1) Тогда
       Таб.ПрисоединитьСекцию("Шапка|Совместитель");
   КонецЕсли;                          
   Если Основные = 1 Тогда
       Таб.ПрисоединитьСекцию("Шапка|Основные");
   КонецЕсли;
   Если Кадровые = 1 Тогда
       Таб.ПрисоединитьСекцию("Шапка|Кадровые");
   КонецЕсли;
   Если Идентификация = 1 Тогда
       Таб.ПрисоединитьСекцию("Шапка|Идентификация");
   КонецЕсли;
   Если Координаты = 1 Тогда
       Таб.ПрисоединитьСекцию("Шапка|Координаты");
   КонецЕсли;
   Кво = 0;  
   тЗанято = 0;
   Пока Запрос.Группировка("Сотр")=1 Цикл
       тЗанято = тЗанято + 1;
       Состояние( "Обработка " + Запрос.Сотр);
       Если Запрос.Сотр.ЭтоГруппа() = 1 Тогда    
             Запрос_=СоздатьОбъект("ODBCRecordset");    
           ТекстЗапроса = "
               |SELECT
               | SUM(Внутренний.Став) as Ставка
                 |From
                 |(
                 |  SELECT
                 |     $ПоследнееЗначение.Сотрудники.Ставка(Сотр.ID, :ДатаАктуальности) Став
                 |  FROM
                 |    $Справочник.Сотрудники Сотр
                 |  WHERE
                 |     Сотр.ID IN (SELECT Val FROM #tmpSotr)
                 |    AND $Сотр.ДатаПриема> :Дат1
                 |    AND $Сотр.ДатаПриема<= :ДатаАктуальности
                 |    AND  ($Сотр.ДатаУвольнения = '01.01.1753' or  $Сотр.ДатаУвольнения>= :ДатаАктуальности )
                 |) as Внутренний
               |";
             Запрос_.УстановитьТекстовыйПараметр("Дат1", Дата("01.01.1989"));  
             Запрос_.УстановитьТекстовыйПараметр("ДатаАктуальности", ДатаАктуальности+1);  
             Запрос_.УложитьСписокОбъектов(Запрос.Сотр.ТекущийЭлемент(), "#tmpSotr","Сотрудники");  
               тЗанято = Запрос_.ВыполнитьСкалярный(ТекстЗапроса);
             ПоШтату =  Запрос.Сотр.ПоШтату;        
             тВакантно = Запрос.Сотр.ПоШтату-тЗанято;
             ФиксДан = Шаблон("Занято: [тЗанято] \ По штату: [Запрос.Сотр.ПоШтату] \ Вакантно: [тВакантно]");          
         Таб.ВывестиСекцию("Группа|Основная");
         Если фУволенные=1 Тогда
             Таб.ПрисоединитьСекцию("Группа|Увольнение");    
         Конецесли;
         Если (фОсновные=1) и (фСовместители=1) Тогда
           Таб.ПрисоединитьСекцию("Группа|Совместитель");
       КонецЕсли;
       Иначе    
       
       Если (фУволенные=0) и (ДатаЧисло(Запрос.ДатаУвольнения)<>0) и (Запрос.ДатаУвольнения<=ДатаАктуальности) Тогда
           Продолжить;
       КонецЕсли;
       Кво = Кво + 1;
       ОснПенс = ?(Запрос.Пенсионер=1,"+","");
       ОснИнв = ?(Запрос.Инвалид=1,"+","");
       Таб.ВывестиСекцию("Сотрудник|Основная");
       Если фУволенные=1 Тогда
           Если (ДатаЧисло(Запрос.ДатаУвольнения)<>0) и (Запрос.ДатаУвольнения<=ДатаАктуальности) Тогда
               ДатаУвольнения = Формат(Запрос.ДатаУвольнения,"ДДММГГ");
           Иначе
               ДатаУвольнения = "";
           КонецЕсли;
           Таб.ПрисоединитьСекцию("Сотрудник|Увольнение");
       КонецЕсли;                              
       Если (фОсновные=1) и (фСовместители=1) Тогда
           ОснСовм = ?(Запрос.Совместитель=1,"+","");
           Таб.ПрисоединитьСекцию("Сотрудник|Совместитель");
       КонецЕсли;
       КонецЕсли;
       Если Основные = 1 Тогда
           Таб.ПрисоединитьСекцию("Сотрудник|Основные");
       КонецЕсли;
       Если Кадровые = 1 Тогда
           Таб.ПрисоединитьСекцию("Сотрудник|Кадровые");
       КонецЕсли;
       Если Идентификация = 1 Тогда
           Таб.ПрисоединитьСекцию("Сотрудник|Идентификация");
       КонецЕсли;                                            
       Если Координаты = 1 Тогда
           Таб.ПрисоединитьСекцию("Сотрудник|Координаты");
       КонецЕсли;
   КонецЦикла;

   Таб.ВывестиСекцию("Дно|Основная");
   Если фУволенные=1 Тогда
       Таб.ПрисоединитьСекцию("Дно|Увольнение");
   КонецЕсли;
   Если (фОсновные=1) и (фСовместители=1) Тогда
       Таб.ПрисоединитьСекцию("Дно|Совместитель");
   КонецЕсли;

   Таб.Опции(0,0,0,0);
   Таб.ТолькоПросмотр(0);
   Таб.Показать("Список сотрудников");

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

Здесь нонсенс: запрос на 1С++ выполняется в цикле обработки запроса по 1С... (Код писал не я)
102 bananan
 
24.01.13
17:31
(100) Что соеденить и как?
103 Ёпрст
 
24.01.13
17:34
(101) Дык он работает ?
Тогда забить.
Если не устраивает скорость - переписать
104 Wobland
 
24.01.13
17:34
(101) нене, чур меня
105 bananan
 
24.01.13
17:35
(103) Да он - работает; скорость - не устраивает, вот и пытаюсь переписать...
106 bananan
 
24.01.13
17:38
+(105) Т.е. я не понимаю чего мне делать вместо Запроса на 1С...
отсюда затык с:
 RS.УложитьСписокОбъектов(Запрос<<?>>.Сотр.ТекущийЭлемент(), "#tmpSotr","Сотрудники");  
Что мне взять вместо того запроса?
107 bananan
 
24.01.13
17:40
В принципе, если юзер выбирет Какого-то конкретного работика или какое -то подразделение фирмы, тогда, кажется что-то можно придумать.. А если надо по всей фирме - тогда как?
108 bananan
 
24.01.13
17:44
+(106) А вот текст первого запроса:
   ТекстЗапроса = "//{{ЗАПРОС(СписокСотрудников)
   |Период с {ДатаАктуальности} по {ДатаАктуальности};
   |Сотр = Справочник.Сотрудники.ТекущийЭлемент;
   |Фир = Справочник.Сотрудники.Фирма;
   |Оклад = Справочник.Сотрудники.Оклад;
   |КвоЛьгот = Справочник.Сотрудники.КвоЛьгот;
   |Тариф = Справочник.Сотрудники.Тариф;
   |Пенсионер = Справочник.Сотрудники.Пенсионер;
   |Инвалид = Справочник.Сотрудники.Инвалид;
   |Должность = Справочник.Сотрудники.МестоРаботы;
   |Ставка = Справочник.Сотрудники.Ставка;
   |Совместитель = Справочник.Сотрудники.ТипСотрудника;
   |ДатаПриема = Справочник.Сотрудники.ДатаПриема;
   |ДатаУвольнения = Справочник.Сотрудники.ДатаУвольнения;
   |//основные
   |ДатаРождения = Справочник.Сотрудники.ДатаРождения;
   |//координаты
   |ПропискаАдрес = Справочник.Сотрудники.ПропискаАдрес;
   |ФактАдрес = Справочник.Сотрудники.ФактАдрес;
   |//кадровые
   |Стать = Справочник.Сотрудники.Пол;
   |Образование = Справочник.Сотрудники.Образование;
   |СемейноеПоложение = Справочник.Сотрудники.СемейноеПоложение;
   |//идентификация        
   |ИНН = Справочник.Сотрудники.ИНН;
   |ДокВид = Справочник.Сотрудники.ДокВид;
   |ДокСерия = Справочник.Сотрудники.ДокСерия;
   |ДокНомер = Справочник.Сотрудники.ДокНомер;
   |ДокКемВыдан = Справочник.Сотрудники.ДокКемВыдан;
   |ДокКогдаВыдан = Справочник.Сотрудники.ДокКогдаВыдан;
   |//условия запроса и т.д.
   |Условие(Фир=Фирма);
   |Условие (Число(Сотр.Родитель.Код) <> 0);
   |Условие(Сотр в ВыбСотрудник);
   |Условие(ДатаПриема<>Дата(0));
   |Условие(ДатаПриема<=ДатаАктуальности);";
   Если фОсновные=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |Условие(Совместитель=1);";
   КонецЕсли;
   Если фСовместители=0 Тогда
       ТекстЗапроса=ТекстЗапроса+"
       |Условие(Совместитель=0);";
   КонецЕсли;
ну и при различных уловиях текст запроса дополняется...
109 Ёпрст
 
24.01.13
17:45
сделать один запрос, далее сгруппировать с иерархией в индексированной табличке, или.. получить иерархию в самом запросе.
+ наложить фильтр на вычисление суммы по "уволенным" и "основным" сотрудникам в группе.
110 sapphire
 
24.01.13
17:45
(103) Автора забить. Код переписать.
111 bananan
 
24.01.13
17:47
(109) Дык я и пытаюсь все сделать в одном запрое.. а по поводу иерархии - нифига не понял :(
112 sapphire
 
24.01.13
17:48
(106) Это уже совсем плохо, если такой простой код не понимаешь.
113 Ёпрст
 
24.01.13
17:49
(111) чтоб получить иерархию справочника, тебе нужно, либо делать это в самом запросе (прямом) или на выходе через индексированную таблицу.
114 sapphire
 
24.01.13
17:50
А кто тут у нас, кроме ТС, обладатель md этой чудо-конфы?
115 sapphire
 
24.01.13
17:51
(113) В самом он врядли сможет.
116 sapphire
 
24.01.13
17:53
(113) Какая у него там версия скуля?
117 Ёпрст
 
24.01.13
17:53
(114) у меня еть :)
118 Ёпрст
 
24.01.13
17:53
(116) скорее всего 2000
119 sapphire
 
24.01.13
17:54
(118) Мысль написать изврат с кучей параметров :)
120 Ёпрст
 
24.01.13
17:55
чорт, я прибил его мд-ник..
:(
121 sapphire
 
24.01.13
17:56
(118) Можно получить данные сначала прямым запросом, а потом посчитать для групп.
122 sapphire
 
24.01.13
17:57
(118) просто в 2000 курсором только можно :(
123 bananan
 
24.01.13
17:59
кажется 2005 версия у нас
124 bananan
 
24.01.13
18:00
А где и как можно посмотреть версию?
125 sapphire
 
24.01.13
18:13
select @@VERSION Версия
126 bananan
 
24.01.13
18:26
Ла и здесь нужно выбрать ставку для конкретного сотрудника,
а вот как сделать иерархию, и вот что в данном случае означает слово иерархия - не понимаю, иерархия, ну скажем Фирма в фирме подразделения несколько подразделений имеют еще свои подразделения ну и практически в каждом подразделении есть один и больше сотрудников.
Это подразумевается под иерархией?
т.е. в корнре - фирма - от нее ветви подразделениия и т.д. а уже на ветках сотрудники.
Так?
127 viktor_vv
 
24.01.13
18:40
(126) А где ты Ицика нашел ?
А то че-то в столице как-то глухо с ним.
128 viktor_vv
 
24.01.13
18:41
(127) Я имел ввиду в бумажном варианте. Или ты скачал ?
129 bananan
 
24.01.13
18:44
(128) Скачал
130 bananan
 
24.01.13
18:45
а в бумажном варианте- не искал
131 bananan
 
24.01.13
19:09
Опять же - не понимаю. В главном (внешнем) запросе я выбираю какого-то сотрудника в подзапросе по ИД искать ставку для этого суотрудника и т.д?
ТАк? Или, может кто что-то лучшее подскажет...
132 bananan
 
24.01.13
19:12
То ли что с форумомо то ли что... я уже несколько сообщений написал. А они все "пропали"..
133 bananan
 
24.01.13
19:14
конструкцию Сотр.ID IN (SELECT Val FROM #tmpSotr) Чем можно заменить? Т.е. как создать временную таблицу или что еще??
134 Wobland
 
24.01.13
19:16
навскидку. Сотр.ID IN (SELECT нужные тебе сотрудники)
135 bananan
 
24.01.13
19:17
SELECT (*) Сойдет?
136 Wobland
 
24.01.13
19:18
(135) select "*" тогда уж ;)
137 bananan
 
24.01.13
19:21
Написал такой код:
|SELECT    Сотрудник.Descr AS Наименование
      |        ,Сотр.Code AS Код  
      |        ,$Сотр.Фирма AS [Фирма $Справочник.Фирмы]
      |        ,$Сотр.ДатаУвольнения AS ДатаУвольнения
      |        ,$Сотр.ДатаПриема AS ДатаПриема    
      |        ,$Сотр.ДатаРождения AS ДатаРождения
      |        ,$Сотр.ПропискаАдрес AS ПропискаАдрес
      |        ,$Сотр.ФактАдрес AS ФактАдрес        
      |        ,$Сотр.Пол as [Стать $Перечисление.Пол]
      |        ,$Сотр.Образование AS [Образование $Перечисление.Образование]
      |        ,$Сотр.СемейноеПоложение AS [СемейноеПоложение $Перечисление.СемейноеПоложение]
      |        ,$Сотр.ИНН AS ИНН
      |        ,$Сотр.ДокВид AS [ДокВид $Перечисление.ВидыДокументов]
      |        ,$Сотр.ДокСерия AS ДокСерия
      |        ,$Сотр.ДокНомер AS ДокНомер
      |        ,$Сотр.ДокКемВыдан AS ДокКемВыдан
      |        ,$Сотр.ДокКогдаВыдан AS ДокКогдаВыдан
      |        ,SUM(Внутренний.Став) as Ставка
      |FROM    
      |(
      |  SELECT
      |     $ПоследнееЗначение.Сотрудники.Ставка(Сотр.ID, :ДатаАктуальности) Став
      |  FROM
      |    $Справочник.Сотрудники Сотр
      |  WHERE
      |     Сотр.ID IN (SELECT Сотрв.Code AS КодВ FROM $Справочник.Сотрудники Сотрв))
      |    AND $Сотр.ДатаПриема> :Дат1
      |    AND $Сотр.ДатаПриема<= :ДатаАктуальности
      |    AND  ($Сотр.ДатаУвольнения = '01.01.1753' or  $Сотр.ДатаУвольнения>= :ДатаАктуальности )
      |) as Внутренний";
Выдает ошибку:
 Сформировать(<<?>>1)
Слишком много фактических параметров...
138 Wobland
 
24.01.13
19:22
(137) о чём тебе говорит сообщение об ошибке? ты же подумал прежде, чем спрашивать, правда?
139 bananan
 
24.01.13
19:22
И по ошибке кликаеш - никакой реакции... Что это может быть?
140 Mikeware
 
24.01.13
19:22
(137) естественно...
читай документацию
141 bananan
 
24.01.13
19:23
(138) Где в Сформировать () у меня паремтры?
142 Wobland
 
24.01.13
19:23
(141) Сформировать(<<?>>1)
143 bananan
 
24.01.13
19:24
Вот код процедуры Сформировать() полностю:
//*******************************************
Процедура Сформировать()
   Сообщить("ДатаАктуальности =  "+ДатаАктуальности);
   ТекстЗапроса = "
   
      |SELECT    Сотрудник.Descr AS Наименование
      |        ,Сотр.Code AS Код  
      |        ,$Сотр.Фирма AS [Фирма $Справочник.Фирмы]
      |        ,$Сотр.ДатаУвольнения AS ДатаУвольнения
      |        ,$Сотр.ДатаПриема AS ДатаПриема    
      |        ,$Сотр.ДатаРождения AS ДатаРождения
      |        ,$Сотр.ПропискаАдрес AS ПропискаАдрес
      |        ,$Сотр.ФактАдрес AS ФактАдрес        
      |        ,$Сотр.Пол as [Стать $Перечисление.Пол]
      |        ,$Сотр.Образование AS [Образование $Перечисление.Образование]
      |        ,$Сотр.СемейноеПоложение AS [СемейноеПоложение $Перечисление.СемейноеПоложение]
      |        ,$Сотр.ИНН AS ИНН
      |        ,$Сотр.ДокВид AS [ДокВид $Перечисление.ВидыДокументов]
      |        ,$Сотр.ДокСерия AS ДокСерия
      |        ,$Сотр.ДокНомер AS ДокНомер
      |        ,$Сотр.ДокКемВыдан AS ДокКемВыдан
      |        ,$Сотр.ДокКогдаВыдан AS ДокКогдаВыдан
      |        ,SUM(Внутренний.Став) as Ставка
      |FROM    
      |(
      |  SELECT
      |     $ПоследнееЗначение.Сотрудники.Ставка(Сотр.ID, :ДатаАктуальности) Став
      |  FROM
      |    $Справочник.Сотрудники Сотр
      |  WHERE
      |     Сотр.ID IN (SELECT Сотрв.Code AS КодВ FROM $Справочник.Сотрудники Сотрв))
      |    AND $Сотр.ДатаПриема> :Дат1
      |    AND $Сотр.ДатаПриема<= :ДатаАктуальности
      |    AND  ($Сотр.ДатаУвольнения = '01.01.1753' or  $Сотр.ДатаУвольнения>= :ДатаАктуальности )
      |) as Внутренний";
    RS = СоздатьОбъект("ODBCRecordset");
    RS.УстановитьТекстовыйПараметр("Дат1", Дата("01.01.1989"));  
    RS.УстановитьТекстовыйПараметр("ДатаАктуальности", ДатаАктуальности+1);  
   
    ТЗ = RS.ВыполнитьИнструкцию(ТекстЗапроса);
    ТЗ.ВыбратьСтроку();
    Пока ТЗ.ПолучитьСтроку()=1 цикл
       Чис = Чис + 1;
       Если Чис > 3 тогда
           Возврат;
       КонецЕсли;
    КонецЦикла;              
КонецПроцедуры
144 Wobland
 
24.01.13
19:24
(143) сколько параметров в заголовке?
145 bananan
 
24.01.13
19:26
(142) В моем коде покажи такой вызов процедуры Сформировать..
В заголовке нет параметров ...
Упс. Нашел я параметры они на кнопках формы...
146 bananan
 
24.01.13
19:26
Сча с параметрамы - раздберусь
147 Wobland
 
24.01.13
19:28
(145) ты начни думать. и только после того, как не сможешь самостоятельно найти ответ, спрашивай сюда. это практический совет из личного опыта - лучший имхо способ роста в профессиональном плане
148 Wobland
 
24.01.13
19:33
Сотр.ID IN (SELECT Сотрв.Code
поправьте меня, всегда будет пусто
149 bananan
 
24.01.13
19:35
Параметры убрал ошибка:
 Incorrect syntax near the keyword 'AND'.
Это уже легче (если запрос правильно работает) :)
150 Mikeware
 
24.01.13
19:35
(148) случайные совпадения возможны, но маловероятны...
зы. он таки напоминает мне обезъяну за пишущей машинкой, пытающуюся напечатать даже не "войну и мир", а просто связное предложение...
151 Wobland
 
24.01.13
19:36
и скоро ты придёшь к (89)...
152 Wobland
 
24.01.13
19:36
(149) какие мысли есть?
153 Wobland
 
24.01.13
19:38
(152) мда.. он долго будет лишнюю скобку искать
154 Wobland
 
24.01.13
19:39
(153) плин, ну я всё же верю, что человек ищет, а не сидит и ждёт доброго дядю
155 Mikeware
 
24.01.13
19:39
(153) если б только скобка. он вообще не понимает, и не пытается понять - что пишет...
156 Wobland
 
24.01.13
19:40
(155) ну, синтаксически же только скобка. а, ну и (89)
157 Mikeware
 
24.01.13
19:43
(156) а Сотр откуда возьмется?
158 Wobland
 
24.01.13
19:45
(157) вот и я о том же
159 sapphire
 
25.01.13
10:15
(127) В сети, в формате pdf есть
160 Ёпрст
 
25.01.13
10:15
да и так купить можно, в бумажном виде.
На полянке какой-нить или во всяких либру и озонах.
161 sapphire
 
25.01.13
10:17
Кажись там есть еще и периодика, не?