Имя: Пароль:
1C
1C 7.7
v7: 1С++ запрос
0 bananan
 
08.01.13
12:47
Добрый день! Нужна помощь в переделке запроса.
Запрос Такой:
   ТекстЗапроса = "
   |SELECT
   | Клиент [Клиент $Справочник.Клиенты]
   |,Агент [Агент $Справочник.Агент]
   |,Заказ [Заказ $Документ]  
   |,НачОст
   |,Приход
   |,Расход
   |,КонОст
   |,ПрошлоДней
   |,Долг
   |,Переплата
   |,Отсрочка
   |,CASE WHEN ПрошлоДней > Отсрочка THEN ROUND((ПрошлоДней-Отсрочка) * (:процент) * Долг / 100,2) ELSE 0 END as Пеня
   |
   |FROM
   |(
   |SELECT
   |
   | *    
   |,CASE WHEN КонОст<0 THEN КонОст ELSE 0 END Долг
   |,CASE WHEN КонОст>0 THEN КонОст ELSE 0 END Переплата
   |,CASE WHEN $ПоследнееЗначение.Клиенты.СрокКредита(Клиент, :ТекДата) = 0
   | THEN :Дней
   |    ELSE $ПоследнееЗначение.Клиенты.СрокКредита(Клиент, :ТекДата) END Отсрочка
   
   | FROM
   |(
   |SELECT
   |  Журнал.IDDOCDEF
   |, (DATEDIFF(day,LEFT(Журнал.DATE_TIME_IDDOC, 8),:Дата2)) AS ПрошлоДней
   |, CASE WHEN Журнал.IDDOCDEF = $ВидДокумента.РасходнаяНакладная"+?(ф2=1,"Н","")+" THEN $РН.Агент ELSE $Ост.Агент END Агент
   |, ВЗОст.Клиент Клиент
   |, ВЗОст.Заказ Заказ
   |, ВЗОст.СуммаОснНачальныйОстаток НачОст
   |, ВЗОст.СуммаОснПриход Приход
   |, ВЗОст.СуммаОснРасход Расход
   |, ВЗОст.СуммаОснКонечныйОстаток as КонОст
   |  FROM $РегистрОстаткиОбороты.Взаиморасчеты"+?(ф2=1,"Нал","")+"(:Дата1,:Дата2~,,Движения,,,(Клиент, Заказ),СуммаОсн) AS ВЗОст
   |  LEFT JOIN _1SJOURN AS Журнал ON Журнал.IDDOC = RIGHT(ВЗОст.Заказ,9)
   |  LEFT JOIN $Документ.РасходнаяНакладная"+?(ф2=1,"Н","")+" AS РН ON Журнал.IDDOC = РН.IDDOC
   |  LEFT JOIN $Документ.Остатки"+?(ф2=1,"Нал","Взаиморасчетов")+" AS Ост ON Ост.IDDOC = Журнал.IDDOC
   |  WHERE Журнал.IDDOCDEF IN  ($ВидДокумента.РасходнаяНакладная"+?(ф2=1,"Н","")+",$ВидДокумента.Остатки"+?(ф2=1,"Нал","Взаиморасчетов")+")
   |) T1
   |) T2
   |  LEFT JOIN $Справочник.Клиенты  AS Клиенты ON RIGHT(Клиент,9) = Клиенты.ID
   |
Так вот в переработаном запросе надо добавить поле В том числе и в это поле скидать данные по таких документах:
1. ПерезачетБартер
2. ВозвратнаяНакладная
3. ПерезачетБартерНал
4. ВозвратнаяНакладнаяН
Насколько я понимаю - тут ничего сложного вроде и нет, но, уже с час смотрю на эту задачу, как баран на новые ворота.
Где и как вставить условие по данным документа?
Честно, говоря, - ничего не понимаю. :(
1 Азат
 
08.01.13
12:52
CASE WHEN Журнал.IDDOCDEF = $ВидДокумента.ТВОЙВИДДОКУМЕНТА"+?(ф2=1,"Н","")+" THEN $РН.ТВОЕПОЛЕ ELSE $Ост.ДРУГОЕПОЛЕ END Агент

добавляй такие строки и будет тебе щастье
2 Mikeware
 
08.01.13
12:53
:-)
3 bananan
 
08.01.13
12:58
(1) Добвлять, насколько я понимаю, во второй SELECT?
4 Азат
 
08.01.13
12:59
(3) а потом ссылку еще и в первый... ты чо, симен сименыч
5 bananan
 
08.01.13
13:01
(4) Ссылк. А ссылку - это как?
Рябата, я с 1С++ третий день работаю. Да и в SQL познания - желают лучшего :(
6 Mikeware
 
08.01.13
13:01
(4) это называется "это же несложно - сделайте за меня"©
7 bananan
 
08.01.13
13:03
(6) Не правда!
8 Mikeware
 
08.01.13
13:03
(5) ссылку на документацию тебе дали 24 декабря - 2 недели назад.
9 bananan
 
08.01.13
13:14
Да докуметацию я читаю..
(4) Я понрял что надо ссылку вставлять в первй оператор SELECT
10 Азат
 
08.01.13
13:16
(9) идешь к любому терминалу киви, кидаешь 500 рублей на кошелек 9875811760 и я за тебя это поле добавлю
11 bananan
 
08.01.13
13:27
(10) В Украине - гривни, да и терминалов киви нет
12 Азат
 
08.01.13
13:33
(11) ну и мучайся
13 bananan
 
08.01.13
13:35
(12) Спасбо за понимание и поддержку :)
14 КонецЦикла
 
08.01.13
13:47
Добавлять во все селекты по аналогии
Что такое "скидать данные таких документах" не совсем понятно, скорее всего во внутреннем запросе нужно к вирт. таблице добавить соединение с документами (по типу тех которые уже есть)
15 bananan
 
08.01.13
13:53
(14) Какае имеено данные нужны я и сам тоолком не понял - уточню после обеда.
А пробывал так:
|SELECT
   | Клиент [Клиент $Справочник.Клиенты]
   |,Агент [Агент $Справочник.Агент]
   |,Заказ [Заказ $Документ]  
   |,НачОст
   |,Приход
   |,Расход
   |,КонОст
   |,ПрошлоДней
   |,Долг
   |,Переплата
   |,Отсрочка
   |,CASE WHEN ПрошлоДней > Отсрочка THEN ROUND((ПрошлоДней-Отсрочка) * (:процент) * Долг / 100,2) ELSE 0 END as Пеня
   |
   |FROM
   |(
   |SELECT
   |
   | *    
   |,CASE WHEN КонОст<0 THEN КонОст ELSE 0 END Долг
   |,CASE WHEN КонОст>0 THEN КонОст ELSE 0 END Переплата
   |,CASE WHEN $ПоследнееЗначение.Клиенты.СрокКредита(Клиент, :ТекДата) = 0
   | THEN :Дней
   |    ELSE $ПоследнееЗначение.Клиенты.СрокКредита(Клиент, :ТекДата) END Отсрочка
   
   | FROM
   |(
   |SELECT
   |  Журнал.IDDOCDEF
   |, (DATEDIFF(day,LEFT(Журнал.DATE_TIME_IDDOC, 8),:Дата2)) AS ПрошлоДней
   |, CASE WHEN Журнал.IDDOCDEF = $ВидДокумента.РасходнаяНакладная"+?(ф2=1,"Н","")+" THEN $РН.Агент ELSE $Ост.Агент END Агент
   |, CASE WHEN Журнал.IDDOCDEF = $ВидДокумента.ПерезачетБартер"+?(ф2=1,"Н","")+" THEN $РН.Агент ELSE $Ост.Агент END Агент
   |, ВЗОст.Клиент Клиент
   |, ВЗОст.Заказ Заказ
   |, ВЗОст.СуммаОснНачальныйОстаток НачОст
   |, ВЗОст.СуммаОснПриход Приход
   |, ВЗОст.СуммаОснРасход Расход
   |, ВЗОст.СуммаОснКонечныйОстаток as КонОст
   |  FROM $РегистрОстаткиОбороты.Взаиморасчеты"+?(ф2=1,"Нал","")+"(:Дата1,:Дата2~,,Движения,,,(Клиент, Заказ),СуммаОсн) AS ВЗОст
   |  LEFT JOIN _1SJOURN AS Журнал ON Журнал.IDDOC = RIGHT(ВЗОст.Заказ,9)
   |  LEFT JOIN $Документ.РасходнаяНакладная"+?(ф2=1,"Н","")+" AS РН ON Журнал.IDDOC = РН.IDDOC
   |  LEFT JOIN $Документ.Остатки"+?(ф2=1,"Нал","Взаиморасчетов")+" AS Ост ON Ост.IDDOC = Журнал.IDDOC
   |  WHERE Журнал.IDDOCDEF IN  ($ВидДокумента.РасходнаяНакладная"+?(ф2=1,"Н","")+",$ВидДокумента.Остатки"+?(ф2=1,"Нал","Взаиморасчетов")+")
   |) T1
   |) T2      
   | T3
   |  LEFT JOIN $Справочник.Клиенты  AS Клиенты ON RIGHT(Клиент,9) = Клиенты.ID
   |
   
   
Так ругается:
Line 101: Incorrect syntax near 'T3'.
16 КонецЦикла
 
08.01.13
13:54
(15) Пилять, ну так не берись за работу пока не знаешь что делать
И зачем создавать ветку? чтобы мистяне были на низком старте до обеда?
17 bananan
 
08.01.13
13:55
+(15) Еще, честно говоря, я слабо понимаю как работает исходный запрос. Может кто поможет и расскажет: как он работает?
18 bananan
 
08.01.13
13:55
(16) Так вот и прошу подсказки...
19 Mikeware
 
08.01.13
13:56
(15) как бы логично
20 Mikeware
 
08.01.13
13:57
(17) ну и спроси у того, кто его писал....
21 КонецЦикла
 
08.01.13
13:57
Откуда взялось T3?
Делай соединения по типу
LEFT JOIN _1SJOURN AS Журнал ON Журнал.IDDOC = RIGHT(ВЗОст.Заказ,9)

И добавляй поля в селект по аналогии с

|,CASE WHEN КонОст<0 THEN КонОст ELSE 0 END Долг
22 КонецЦикла
 
08.01.13
13:58
Проще, наверное, позвать кого-то или тут оформить как заявку на удаленку
23 bananan
 
08.01.13
14:05
(20) Нет того, кто писал... Теперь он далеко от сюда.
(21) Сделать соединение по типу и добавлять поля по аналогии.. А можно подробнее и конкретно к данному запросу?
24 bananan
 
08.01.13
14:10
Если я во второй селект вставляю:
|, CASE WHEN Журнал.IDDOCDEF = $ВидДокумента.ПерезачетБартер"+?(ф2=1,"Н","")+" THEN $РН.Агент ELSE $Ост.Агент END Агент
То ругается:
The column 'Агент' was specified multiple times for 'T1'.
25 Mikeware
 
08.01.13
14:15
(24) она не ругается, а сообщает об ошибке. вполне нормально сообщает. остается две вещи:
1. прочитать
2. понять прочитанное
26 bananan
 
08.01.13
14:21
(25) Колонка"Агент" была указана несколько раз....
А что мне делать, чтобы не было несколько раз? Мне надо эту колонку (поле) просмтреть в 5 разных видах документов!
27 Mikeware
 
08.01.13
14:22
(26) я не возражаю...
а для начала советую почитать таки документацию.
28 КонецЦикла
 
08.01.13
14:25
Можно тупо сделать соединения с шапками документов во вложенном запросе
В том запросе который повыше сделать через case обработку полей (типа вытащить в самый верхний запрос одно поле вместо четырех)
29 bananan
 
08.01.13
14:48
(27) Документацию читаю по 1С, 1С++, SQL
(28) соединение с шапками документов - сделать через JOIN?
case обработку полей (типа вытащить в самый верхний запрос одно поле вместо четырех) - а это совсем не понял как
30 Mikeware
 
08.01.13
15:00
(29) выбор когда Журнал.иддокдеф=$ВидДокумента.ПервыйДокумент Тогда $ПервыйДокумент.Агент Когда Журнал.иддокдеф=$ВидДокумента.Второйокумент Тогда $ВторойДокумент.Агент
когда Журнал.иддокдеф=$ВидДокумента.ТретийДокумент Тогда $ТретийДокумент.Агент иначе $ЧетвертыйДокумент.агент конец
31 bananan
 
08.01.13
15:02
(30) Это case?
32 Азат
 
08.01.13
15:06
(31) lingvo.yandex.ru, translate.google.com
33 bananan
 
08.01.13
15:08
(32) Еще раз ОГРОМНОЕ спасибо за полезные подсказки
34 bananan
 
08.01.13
15:25
Хорошо. с предыдущим запросом вроде как разобрался. Но, теперь, нужда созхдать запрос с нуля... Тут я уж точно без помощи не справлюсь.
Задача такая - по документах ВыплатаЗП и Справочнику.Сотрудники - "вынуть" всю инфу о сотруднике (из справочника) и его зарплате за какой-то месяц
1. В форме для этого нужно задать - выбор месяца. - как конкретную дату выбрать знаю; месяц - не знаю
2. В запросе пробывал так:
|SELECT
           |   Жур.iddoc as [Док $Документ]
           |   ,Жур.iddocdef as [Док_вид $ВидДокумента]
           | Сотр [Сотрудник $Справочник.Сотрудники]
           | FROM  $ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)";
Выдает:
: Incorrect syntax near 'Сотр'.
Пожалйста, подскажите!!
35 Mikeware
 
08.01.13
15:41
(34) неправильный синаксис возле "Сотр"
а когда исправишь синтаксис - выйдет ошибка "Неизвестное имя "Сотр"
36 bananan
 
08.01.13
15:54
(35) Неправильный синтаксис - нестрашно - разберусь
А вот с "Неизвестное имя "Сотр" - что делать?
37 Mikeware
 
08.01.13
16:05
(36) сделать известным.
38 viktor_vv
 
08.01.13
16:07
(36) Ну как бы нету такого поля в твоих таблицах.
В приведенном примере оно и на Жур должно ругаться, если это весь текст запроса.
Из какой таблицы ты это поле выдернуть хочешь?
Наверное надо

$ДокЗП.Сотр
39 Mikeware
 
08.01.13
16:10
(38) "Стоит негр на улице и пьет молоко. Мимо проходит белый, останавливается перед ним, смотрит так пристально и говорит:
- Не-е-е, не поможет..."
©
40 bananan
 
08.01.13
16:12
(38) Поле Сотр - это Элемент справочника Сотрудники ну и строка из Документа ВыплатаЗП
Сделал $ДокЗП.Сотр - ошибка:
Incorrect syntax near '?????'.
41 viktor_vv
 
08.01.13
16:13
(39) :)).
42 viktor_vv
 
08.01.13
16:14
(40) Поле Сотр в какой таблице ???
43 viktor_vv
 
08.01.13
16:15
(42)+ В табличной части какого-то документа, в шапке какого-то документа, реквизит какого-то справочника ?
44 bananan
 
08.01.13
16:16
(43) В табличной части доумента ВыплатаЗП, реквизит - справочника Сотрудники
45 viktor_vv
 
08.01.13
16:18
Если прваильно помню, ты укрбухию мучаешь. В табчасти "Выплата ЗП" там реквизит "Сотрудник". Тогда

|SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники]
           | FROM  $ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)";
46 bananan
 
08.01.13
16:22
(45) Да, 1С Бухгалтерия для Украины
Попробывал код, что ты написал - ошибка:
eta name parser error: поле таблицы не найдено "$ДокЗП.Сотрудник"
47 bananan
 
08.01.13
16:23
+(46) А где можно узнать какие имена парсер дает документам?
48 viktor_vv
 
08.01.13
16:26
(47) Открыть конфигуратор, там русским по черному написаны идентификаторы реквизитов, а парсер уже подставляет реальные имена таблиц в базе.
(46) Какая-то у тебя неправильная бухия, в моей есть такой реквизит.
49 Patrio_
O_Muerte
 
08.01.13
16:29
(8)Совсем с ума сошел, тут ведь праздники были! Когда б он занимался делом?
50 viktor_vv
 
08.01.13
16:29
(48)* подставляет реальные имена таблиц и полей.
51 bananan
 
08.01.13
16:29
(48) Документ называется ВыплатаЗП
Идентификатор: ВыплатаЗП
Синоним: ВыплатаЗП
Комментарий: Выплата заработной платы
52 viktor_vv
 
08.01.13
16:30
(48)* праздники сказываются :), русским по белому.
53 viktor_vv
 
08.01.13
16:30
(51) Теперь раскрываем ветку ТабличнаяЧасть и что там ?
54 bananan
 
08.01.13
16:31
(53) Сотр
55 viktor_vv
 
08.01.13
16:33
(54) Это у тебя что-то очень древнее.

|SELECT
           | $ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники]
           | FROM  $ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)";
56 bananan
 
08.01.13
16:33
Ясно, теперь понял в чем фигоня. А по поводу парсера... Откуда мили как ... ну не знаю как точно сформулировать..
Откуда ты взял $ДокЗП?
57 viktor_vv
 
08.01.13
16:35
(56) Строчка

FROM  $ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)";

ничего не навевает ?
58 bananan
 
08.01.13
16:35
(57) Пардон; туплю
59 viktor_vv
 
08.01.13
16:36
И таки лучше, хотя бы по диагонали, документацию почитать.
60 bananan
 
08.01.13
16:37
А теперь нужно делать подзапрос - чтобы выбрать данные о Сотр из таблицной части документа - из справочника Сотрудники?
61 bananan
 
08.01.13
16:38
Через inner join?
62 viktor_vv
 
08.01.13
16:39
(60) Левое соединение со справочником Сотрудники по реквизиту Сотр и ID справочника.
63 viktor_vv
 
08.01.13
16:39
(62)+ Реквизиту Сотр табличной части дока.
64 bananan
 
08.01.13
16:39
(62) Спасибо, попробую
65 Mikeware
 
08.01.13
16:57
(62) Зачем левое, если у него сотрудник точно есть?
66 bananan
 
08.01.13
17:05
Я пока еще не очень в SQL-е, короче написла таой текст запроса:
ТекстЗапроса = "
           |SELECT
           | $ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники]
           | JOIN (                                    
           | SELECT                                        
           | $ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники]
           | FROM $Справочник.Сотрудники
           |
           | FROM  $ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)";
           
Выдает ошибку:Server]Incorrect syntax near the keyword 'JOIN'
67 Mikeware
 
08.01.13
17:07
(66) абсолютно верно выдает.
68 Mikeware
 
08.01.13
17:08
+(67) я б за такое еще б и в морду дал на его месте...
69 viktor_vv
 
08.01.13
17:10
(65) Ну это да.
Привык inner как фильтр использовать в основном.
70 bananan
 
08.01.13
17:10
(67-69) А как написать?
71 Mikeware
 
08.01.13
17:14
(70) как написано в учебниках по языку
72 viktor_vv
 
08.01.13
17:16
ТекстЗапроса = "
           |SELECT
           |$ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники],
           |СпрСотр.ИдентификаторНеПереодическогоРеквизитаСправочника [Алиас $Типизация]
           |FROM
           |
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | inner JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   on $ДокЗП.Сотр = СпрСотр.ID
           |";

Извини, но больше я пас.
Ты ж не читаешь нихрена.
73 viktor_vv
 
08.01.13
17:17
(72)*

           |$СпрСотр.ИдентификаторНеПереодическогоРеквизитаСправочника [Алиас $Типизация]
74 bananan
 
08.01.13
17:17
(72) Да читаю... Спасибо и за то
75 viktor_vv
 
08.01.13
17:17
* Периодического.
76 bananan
 
08.01.13
17:18
(73) А какого именно реквизита?
77 КонецЦикла
 
08.01.13
17:19
(66) Скачай конструктор запросов by Berezdetsky
78 bananan
 
08.01.13
17:20
В справочнике Сотрудники - 14 Периодических реквизитов
79 Mikeware
 
08.01.13
17:23
(77) ну, конструктор тоже иногда ляпы дает. Плюс с виртуальными таблицами у него косячок - параметры не ставит, да и лишние соединения пихает.
Лучше руками научиться...
80 bananan
 
08.01.13
17:25
(77)(79) Так какой именно периодический реквизит справочника надо указать?
81 viktor_vv
 
08.01.13
17:26
(76) То есть ты у МЕНЯ спрашиваешь, какие данные ТЫ хочешь получить из справочника сотрудники ?
Пожалуй у меня не настолько развита telepat.dll .
82 bananan
 
08.01.13
17:26
(81) Понял
83 Mikeware
 
08.01.13
17:27
(81) не обновлял давно? :-)))
84 КонецЦикла
 
08.01.13
17:28
(79) 90% забот автора уберет
85 viktor_vv
 
08.01.13
17:29
(83) Да че-то закрутился, пропустил пару релизов :)).
86 bananan
 
08.01.13
17:31
Мне нужны многие поля из справочника вот, например текст запроса:
|SELECT
           |$ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники],
           |СпрСотр.ИНН [Алиас $Типизация]
           |FROM
           |
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | inner JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   on $ДокЗП.Сотр = СпрСотр.ID
           |";
Выдает ошибку:
Invalid column name 'ИНН'.
А в Справочнике Сотрудники эсть реквизит ИНН!
Что здесь не так?
87 bananan
 
08.01.13
17:32
* И ято значит [Алиас $Типизация]?
88 КонецЦикла
 
08.01.13
17:32
$СпрСотр.ИНН

[Алиас $Типизация] - убрать нах
89 КонецЦикла
 
08.01.13
17:33
До чего ты туп блин... извини конечно
90 bananan
 
08.01.13
17:34
(89) извинятся не надо - бывает и туплю
91 viktor_vv
 
08.01.13
17:35
(86) Я ж в (73) специально исправил.
92 bananan
 
08.01.13
17:35
(880 Написал такой текст запроса:
|SELECT
           |$ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники],
           |СпрСотр.ИНН
           |FROM
           |
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | inner JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   on $ДокЗП.Сотр = СпрСотр.ID
           |";
Выдает ошибку:
nvalid column name 'ИНН'.
Реквищзит ИНН ТОЧНО есть в справочнике сотрудники!!
93 viktor_vv
 
08.01.13
17:36
Для примитивных типов не надо типизировать.
94 Mikeware
 
08.01.13
17:37
(90) не "бывает", а "постоянно"
95 Mikeware
 
08.01.13
17:38
(93) почему бы и нет? правила приличия....
96 bananan
 
08.01.13
17:38
*(92) И откуда парсер или там SQL знает что такое СпрСотр?
97 Mikeware
 
08.01.13
17:39
финиш
98 viktor_vv
 
08.01.13
17:40
(95) Ну может быть, только придется писать, что такое типизация :)). Боюсь не осилю доступно.
99 bananan
 
08.01.13
17:40
(97)    Mikeware - ты даешь самые "полезные" подсказки и советы
100 bananan
 
08.01.13
17:42
Сменил СпрСотр.ИНН на СпрСотр.Налоговая - так он и такого поля не видит: Invalid column name 'Налоговая'
101 viktor_vv
 
08.01.13
17:43
|SELECT
           |$ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники],
           |$СпрСотр.ИНН
           |FROM
           |
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | inner JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   on $ДокЗП.Сотр = СпрСотр.ID
           |";

Это чтобы было над чем пораскинуть.
102 КонецЦикла
 
08.01.13
17:44
(92) Специально дразнишь?
Втыкай в (88) до просветления
Это же вторая строка почти такая же как первая!
Только строку или число необязательно типизировать, можно написать $СпрСотр.ИНН ИНН или $СпрСотр.ИНН МойИННДляОтчета
103 bananan
 
08.01.13
17:55
(102) Так как в (101) - работает
104 Mikeware
 
08.01.13
17:56
(103) так там и написано без ошибок...
105 bananan
 
08.01.13
18:08
Вот такой текст запроса:
ТекстЗапроса = "
           |SELECT
           |$ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники],
           |$СпрСотр.ДатаРождения
           |FROM
           |
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | inner JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   on $ДокЗП.Сотр = СпрСотр.ID
           |";
В ТаблицуЗначений выводятся пустые строки, т.е. ничего в Таблице значений нет! Есть только две колонки: Сотрудник и sp2291
106 bananan
 
08.01.13
18:13
*(105) Почему запрос ничего не возвращает?
107 viktor_vv
 
08.01.13
18:14
(105) Документы такие в базе вообще есть ?
108 ЧеловекДуши
 
08.01.13
18:16
(106)  inner JOIN  - По гугли, что есть JOIN и с чем его едят ;)
109 bananan
 
08.01.13
18:16
(107) Я, кажется ошибся, окно таблицы значений появилось , а в нем нет никаких данных, но в строке сатуса 1С - "выполняется обработка"
110 ЧеловекДуши
 
08.01.13
18:18
(109)Беги... беги от туда :)
Или все же стоит быть трезвым ? ;)
111 viktor_vv
 
08.01.13
18:19
(108) В данном слечае по барабану. Разве что удалили элементы справочника без контроля ссылочной целостности.
112 bananan
 
08.01.13
18:19
(110) В последний раз выпил немного вина - 15 ноября
113 bananan
 
08.01.13
18:23
(109) Да не ошибся я Сообщить(ТЗ.КоличествоСтрок()); выдает 0!
114 bananan
 
08.01.13
18:25
т.е. Такой код:
   ТекстОшибки = "";
   Если ФС.СуществуетФайл(ИмяФайлаXML) <> 1 Тогда
       ТекстОшибки = "Файл """ + ИмяФайлаXML + """ не найден!";
   ИначеЕсли ЗагрузитьВнешнююКомпоненту(КаталогИБ() + "v7plus.dll") <> 1 Тогда
       ТекстОшибки = "Компонента v7plus.dll не найдена!";
   КонецЕсли;
   
   Если ПустаяСтрока(ТекстОшибки) <> 1    Тогда
       Предупреждение(ТекстОшибки);
       Возврат;
   КонецЕсли;

   
   ТекстЗапроса = "
           |SELECT
           | $ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники],
           | $СпрСотр.ДатаРождения
           | ,$СпрСотр.РождГород
           |FROM
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | INNER JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   ON $ДокЗП.Сотр = СпрСотр.ID
           |";

           
   Запр=СоздатьОбъект("ODBCRecordset");
   Запр.УстановитьТекстовыйПараметр("НачДата", НачДата);
   Запр.УстановитьТекстовыйПараметр("КонДата", КонДата);
   ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.ВыбратьСтроку();
   Сообщить(ТЗ.КоличествоСтрок());
В таблицу значений ничего не попадает!
115 bananan
 
08.01.13
18:27
а сообщить выдате 0
116 viktor_vv
 
08.01.13
18:34
Выполни

ДокЗП = СоздатьОбъект("Документ.ВыплатаЗП");

Если ДокЗП.ВыбратьДокументы() = 0 Тогда
  Сообщить("Н у нету в базе документов ""Выплата ЗП""");
Иначе
  Сообщить("Таки какая-то фигня в запросе.");
КонецЕсли;
117 bananan
 
08.01.13
18:38
(116) Блин, таки он выдал: Н у нету в базе документов "Выплата ЗП
118 Mikeware
 
08.01.13
18:59
:-)))
119 sapphire
 
09.01.13
04:14
(115) открой для себя UNIREPS & UNIPROC c ИТС...
120 Mikeware
 
09.01.13
05:46
(119) а смысл? еще 100500 веток учить его ими пользоваться?
зы. по-моем, бананан - это нечто типа wiki:Теорема_о_бесконечных_обезьянах
121 bananan
 
09.01.13
12:27
(120) Дорогой, Mikeware вы тоже от обезьяны произошли, ибо каждый судит по себе.
А по поводу документа ВыплатаЗП... Тут я НЕ ПОНИМАЮ, потому что - когда запускаю программу и Открывааю журнал Зарплаты - там есть два типа документов: Начисление ЗП и... Выплата ЗП.
Если текст запроса такой:
   |SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
           | $СпрСотр.Имя AS Name
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.Пол AS Пол
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДоккогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.КодПользователя AS КодПользователя
           |FROM
           |$ДокументСтроки.НачислениеЗП as ДокЗП (nolock)
           | INNER JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   ON $ДокЗП.Сотрудник = СпрСотр.ID
Запрос работает нормально и выдает 10000 с лишним строк...
Если текст запроса такой:
|SELECT
           | $ДокЗП.Сотрудник [Сотрудник $Справочник.Сотрудники],
           | $СпрСотр.Имя AS Name
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.Пол AS Пол
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДоккогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.КодПользователя AS КодПользователя
           |FROM
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | INNER JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   ON $ДокЗП.Сотрудник = СпрСотр.ID
выдает ошибку:
Meta name parser error: поле таблицы не найдено "$ДокЗП.Сотрудник"
Где здесь обезьяна зарыта. увжаемый, Mikeware??
122 Ёпрст
 
09.01.13
12:32
(121) в табличной части документа ВыплатаЗП нет реквизита Сотрудник, и всего лишь
123 sapphire
 
09.01.13
12:36
(120) (122) Интересно, ТС вслепую запросы пишет?
т.е. глянуть дерево метаданных и посмотреть что и где лежит ему, видимо, религия не позволяет :)
124 Mikeware
 
09.01.13
12:36
(122) Обезьяна зарыта в ДНК того, кто ищет поле Сотрудник в шапке документа ВыплатаЗП. Причем зарыта весьма неглубоко, ибо эта обезьяна упорно не читает документацию.
125 bananan
 
09.01.13
12:37
*(121) И еще вопрос, я формирую запрос - тот что приведен первым, выполняю: ТЗ = Запр.ВыполнитьИнструкцию(ТекстЗапроса);
   ТЗ.ВыбратьСтроку();
И, я что-то не понимаю, но даю:
Сообщить("ТЗ.Name= "+ТЗ.Name+"ТЗ.Отчество="+ТЗ.Отчество);
В окне сообщений вижу:
ТЗ.Name= ТЗ.Отчество=
Я не так как нужно пытаюсь вызвать поле из таблицы значений?
(122) Добрий день, Ёпрст4, да тут дело не в том, вчера ошибки не выдавал (после того, я видимо сделал правки в коде). Так вот, до этих правок в коде - ошибки не выдавал, но и... не выдавал никаких значений! К тому же, когда запустил такой код:
ДокЗП = СоздатьОбъект("Документ.ВыплатаЗП");

Если ДокЗП.ВыбратьДокументы() = 0 Тогда
  Сообщить("Н у нету в базе документов ""Выплата ЗП""");
Иначе
  Сообщить("Таки какая-то фигня в запросе.");
КонецЕсли;
Он выдал.: Н у нету в базе документов ""Выплата ЗП""
Хотя если смотреть Журнал Зарплаты - Там документы ВыплатаЗП - есть и их там довольно много!!!!
126 Mikeware
 
09.01.13
12:37
(123) контрол-цэ - контрол-вэ...
127 Ёпрст
 
09.01.13
12:40
(125) смотри ВыплатаЗПБ
128 Ёпрст
 
09.01.13
12:40
мот не тот вид документа смотришь в журнале своём
129 sapphire
 
09.01.13
12:40
(126) Надо кусок 1cpp сделать шароварным - т.е. ответил на ряд вопросов функционал доступен, нет - ПНХ.
130 Ёпрст
 
09.01.13
12:41
по-поводу (121)

у тебя есть Сотр, а не Сотрудник в ТЧ дока.
131 bananan
 
09.01.13
12:42
Ну забыл я, что в ВыплатаЗП это поле назхывается Сотр.
Запрос:
|SELECT
           | $ДокЗП.Сотр [Сотрудник $Справочник.Сотрудники],
           | $СпрСотр.Имя AS Name
           | ,$СпрСотр.Отчество AS Отчество
           | ,$СпрСотр.Пол AS Пол
           | ,$СпрСотр.ДокСерия AS ДокСерия
           | ,$СпрСотр.ДокНомер AS ДокНомер
           | ,$СпрСотр.ДокКогдаВыдан AS ДоккогдаВыдан
           | ,$СпрСотр.ДокКемВыдан AS ДокКемВыдан
           | ,$СпрСотр.ДатаРождения AS ДатаРождения
           | ,$СпрСотр.РождГород AS РождГород
           | ,$СпрСотр.ФактАдрес AS ФактАдрес
           | ,$СпрСотр.ФактИндекс AS ФактИндекс
           | ,$СпрСотр.ДатаПриема AS ДатаПриема
           | ,$СпрСотр.ТелефонДом AS ТелефонДом
           | ,$СпрСотр.ТелефонРаб AS ТелефонРаб
           | ,$СпрСотр.КодПользователя AS КодПользователя
           |FROM
           |$ДокументСтроки.ВыплатаЗП as ДокЗП (nolock)
           | INNER JOIN $Справочник.Сотрудники as СпрСотр (nolock)
           |   ON $ДокЗП.Сотр = СпрСотр.ID
Не выдает ничего!!! Почему::
(127) мне нужно в запросе ВыплатаЗП, а не ВыплатаЗПБ
132 Ёпрст
 
09.01.13
12:44
(131) ну нет таких документов в базе и привет.
Смотри, какой еще документ имеет такой же синоним (это то, что ты в журнальчике своём видишь потом)
133 bananan
 
09.01.13
12:47
(132) смотрю в конфигупаторе документ ВыплатаЗП:
Синоним: Выплата ЗП, что мне программа и показывает, а ЗАПРОС документов ВыплатаЗП НЕ ВИДИТ. Почему?
134 Mikeware
 
09.01.13
12:48
(132) не, ну каково тебе (133)? :-)))
135 Ёпрст
 
09.01.13
12:49
(133) это же очевидно - Сотр в документе имеет тип НЕ
Справочник.Сотрудники.

Вот при inner join у тебя и пусто
136 Ёпрст
 
09.01.13
12:49
(134) :)
137 Ёпрст
 
09.01.13
12:50
у меня есть его md. мне проще
:)
138 bananan
 
09.01.13
12:51
*(133)    Ёпрст4 - как всегда прав. Документ ВыплатаЗПБ тоже имеет синоним Выплата ЗП!
еще один ну очень маленький вопрос. Как мне сообщить какую-то ячеку из таблицы значений?
Такой код:
Сообщить("ТЗ.Name= "+ТЗ.Name+"ТЗ.Отчество="+ТЗ.Отчество);
Выдает:
ТЗ.Name= ТЗ.Отчество=
139 Ёпрст
 
09.01.13
12:57
ТЗ.ПолучитьСтрокуПоНомеру(1);//или какая там тебя строка интересует ?
140 monsterZE
 
09.01.13
12:58
выбратьСтроки
пока получитьСтроку()=1 цикл
..
141 Mikeware
 
09.01.13
12:58
(138) или ВыбратьСтроку()
а вообще, вопрос уже за грань добра и зла...
142 sapphire
 
09.01.13
12:59
(137) счастливый обладатель md-шника :D
143 viktor_vv
 
09.01.13
13:00
(137) Так ты читер :)).
144 Mikeware
 
09.01.13
13:02
(142) заветного эмдэшника :-)
145 bananan
 
09.01.13
13:03
Все большое спасибо! Отдельное спасибо Ёпрст4!
146 КонецЦикла
 
09.01.13
13:29
(137) :)
Подключись через МД и всоси в автора ЗНАНИЕ
147 Mikeware
 
09.01.13
13:30
(146) автору надо не "всосать", а "вдуть"...
148 sapphire
 
09.01.13
13:33
(147) Он еще #ЗагрузитьИзФайла не освоил? :)
Ошибка? Это не ошибка, это системная функция.