Переключение на Главную Страницу Страницы: 1 [2]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Можно ли с помощью 1С++ решить такую задачу? (число прочтений - 9579 )
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #15 - 08. Августа 2006 :: 08:25
Печать  
DrACe писал(а) 08. Августа 2006 :: 08:05:
к тому же надо бы тут сделать INNER JOIN $Справочник.Сотрудники Агенты (nolock) ON Агенты.id = $ШапкаДок.Агент, а не LEFT JOIN, а то она может NULL в регистр засунуть в случае, когда не указан Агент в документе, а NULL в реквизитах таблиц 1C не любит

Нет INNER НЕЛЬЗЯ, т.к. не будут обработаны движения документов где не указан агент, а кроме установки проекта есть еще и установка адреса.
Поэтому, для случаев когда агента нет нужно написать isnull($Агенты.Проект, $ПустойИД).
Т.е. получим:
$Регистр.ВзаиморасчетыПокупателей.Проект = case when $ШапкаДок.ПризнакНакладной = :Продажа then isnull($Агенты.Проект, $ПустойИД) else $ПустойИД end
  

1&&2&&3
Наверх
 
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #16 - 08. Августа 2006 :: 08:27
Печать  
Вот так правильно будет?


|UPDATE
|  $Регистр.ВзаиморасчетыПокупателей
|SET
|  $Регистр.ВзаиморасчетыПокупателей.Адрес = $ШапкаДок.Адрес,
|$Регистр.ВзаиморасчетыПокупателей.Проект = case when $ШапкаДок.ПризнакНакладной = :Продажа then isnull($Агенты.Проект, $ПустойИД) else $ПустойИД end 
|FROM
|  $Регистр.ВзаиморасчетыПокупателей  Рег
|INNER JOIN $Документ.РасходнаяНакладная ШапкаДок on ШапкаДок.iddoc = Рег.iddoc
|LEFT JOIN $Справочник.Сотрудники Агенты (nolock) ON Агенты.id = $ШапкаДок.Агент";
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #17 - 08. Августа 2006 :: 08:28
Печать  
trad писал(а) 08. Августа 2006 :: 08:25:
DrACe писал(а) 08. Августа 2006 :: 08:05:
к тому же надо бы тут сделать INNER JOIN $Справочник.Сотрудники Агенты (nolock) ON Агенты.id = $ШапкаДок.Агент, а не LEFT JOIN, а то она может NULL в регистр засунуть в случае, когда не указан Агент в документе, а NULL в реквизитах таблиц 1C не любит

Нет inner нельзя, т.к. не будут обработаны движения документов где не указан агент, а кроме установки проекта есть еще и установка адреса.
А для случаев когда агента нет нужно написать isnull($Агенты.Проект, $ПустойИД).
Т.е. получим:
$Регистр.ВзаиморасчетыПокупателей.Проект = case when $ШапкаДок.ПризнакНакладной = :Продажа then isnull($Агенты.Проект, $ПустойИД) else $ПустойИД end

верно,
про установку второго реквизита я не подумал, просто бросилось в глаза возможность попадания NULL, но этой конструкцией его можно ликвидировать isnull($Агенты.Проект, $ПустойИД), короче - все на усмотрение программера
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #18 - 08. Августа 2006 :: 08:29
Печать  
sv_stas_sv писал(а) 08. Августа 2006 :: 08:27:
Вот так правильно будет?

правильно
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #19 - 08. Августа 2006 :: 08:35
Печать  
и имей ввиду, что после такого шаманства необходимо обязательно пересчитать итоги
и, если устанавливаемые поля учавствуют в каких-либо графах отбора, то пересчитать графы отбора
  

1&&2&&3
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #20 - 08. Августа 2006 :: 08:45
Печать  
trad писал(а) 08. Августа 2006 :: 08:35:
...
и, если устанавливаемые поля учавствуют в каких-либо графах отбора, то пересчитать графы отбора


измерения регистра могут быть в каких-либо таблицах, кроме таблицы итогов и движений? Озадачен
  
Наверх
 
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #21 - 08. Августа 2006 :: 09:06
Печать  
А графы отбора каким образом пересчитать?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #22 - 08. Августа 2006 :: 09:06
Печать  
to DrACe
в движениях, итогах и графах отбора (но это редкость)
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #23 - 08. Августа 2006 :: 09:07
Печать  
sv_stas_sv писал(а) 08. Августа 2006 :: 09:06:
А графы отбора каким образом пересчитать?

а эти новые измерения учавствуют в графах отбора?
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #24 - 08. Августа 2006 :: 09:08
Печать  
а вообще ТиИ ИБ - пересчет служебных данных
  

1&&2&&3
Наверх
 
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #25 - 08. Августа 2006 :: 09:09
Печать  
в графах отбора они не участвуют.
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


1С++ любитель

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #26 - 08. Августа 2006 :: 09:15
Печать  
trad писал(а) 08. Августа 2006 :: 09:06:
to DrACe
в движениях, итогах и графах отбора (но это редкость)

действительно измерения и реквизиты регистра можно включить в графу отбора, а в какой таблице они будут располагаться?
часом не тут: 1SCRDOC (Ссылки документов)?
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #27 - 08. Августа 2006 :: 09:48
Печать  
именно там
  

1&&2&&3
Наверх
 
IP записан
 
classic
Senior Member
****
Отсутствует


I Love YaBB 2!

Сообщений: 330
Местоположение: г. Харьков
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #28 - 11. Августа 2006 :: 15:00
Печать  
DrACe писал(а) 08. Августа 2006 :: 08:45:
trad писал(а) 08. Августа 2006 :: 08:35:
...
и, если устанавливаемые поля учавствуют в каких-либо графах отбора, то пересчитать графы отбора


измерения регистра могут быть в каких-либо таблицах, кроме таблицы итогов и движений? Озадачен

После всего не забудь установить флаги rfXXXX  в _1sjourn для нужных регистров. Если этого не сделать, то при отмене проведения документов движения не будут удаляться
  
Наверх
 
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #29 - 14. Августа 2006 :: 03:32
Печать  
А не подскажете поконкретней как это сделать?
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 
ОтправитьПечать