Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Очень популярная тема (более 25 ответов) Можно ли с помощью 1С++ решить такую задачу? (число прочтений - 9576 )
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Можно ли с помощью 1С++ решить такую задачу?
02. Августа 2006 :: 06:32
Печать  
До определенного времени не было движений по 2 ресурсам регистра "ВзаиморасчетыПокупателей", причем в документах эти реквизиты присутствуют , можно ли при помощи прямого обращения к БД перебрать все документы и без их перепроведения занести в базу эти движения????
Интерисует как примерное описание как сделать, и как пересчитать регистры.
Печаль
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



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



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #2 - 02. Августа 2006 :: 10:20
Печать  
примерно так:
Код
Выбрать все
update $Регистр.ВзаиморасчетыПокупателей
set
  $Регистр.ВзаиморасчетыПокупателей.НовыйРесурс1 = $ШапкаДок.Реквизит1,
  $Регистр.ВзаиморасчетыПокупателей.НовыйРесурс2 = $ШапкаДок.Реквизит2
from $Регистр.ВзаиморасчетыПокупателей Рег
join $Документ.ВидДокумента ШапкаДок on ШапкаДок.iddoc = Рег.iddoc 


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

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


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #3 - 03. Августа 2006 :: 12:19
Печать  
Если можно поконкретнее, а именно
Выбрать документы (например реализация ) за определенный период с условием на реквизит1  в документе, и обновить значения регистра взаиморасчеты  (допустим реквизитом2).
Запись в регистр описаная выше понятна, не понятно как привязать выборку документов...... Печаль
  
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



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

документы там тоже привязаны
  

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


1с++ lamer

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

|update
|  $Регистр.ВзаиморасчетыПокупателей
|set
|  $Регистр.ВзаиморасчетыПокупателей.Адрес = $ШапкаДок.Адрес
|from
|$Регистр.ВзаиморасчетыПокупателей  Рег
|INER JOIN  $Документ.РасходнаяНакладная ШапкаДок on ШапкаДок.iddoc = Рег.iddoc";

Ошибка
Server: Msg 170, Level 15, State 1, Line 7
Line 7: Incorrect syntax near 'INER'.


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


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #6 - 04. Августа 2006 :: 04:26
Печать  
INNER
  
Наверх
 
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

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

|update 
|  $Регистр.ВзаиморасчетыПокупателей
|set
|  $Регистр.ВзаиморасчетыПокупателей.Адрес = $ШапкаДок.Адрес
|from 
|$Регистр.ВзаиморасчетыПокупателей  Рег
|INNER  $Документ.РасходнаяНакладная ШапкаДок on ШапкаДок.iddoc = Рег.iddoc";

Ошибка

Server: Msg 155, Level 15, State 1, Line 7
'dh410' is not a recognized join option.
« Последняя редакция: 04. Августа 2006 :: 08:20 - sv_stas_sv »  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2344
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #8 - 04. Августа 2006 :: 12:13
Печать  
А где Join?
  
Наверх
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #9 - 05. Августа 2006 :: 08:43
Печать  
INNER JOIN, разумеется, а еще BOL, то бишь, справка по T-SQL
  
Наверх
 
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #10 - 08. Августа 2006 :: 07:55
Печать  
|UPDATE
|  $Регистр.ВзаиморасчетыПокупателей
|SET
|  $Регистр.ВзаиморасчетыПокупателей.Адрес = $ШапкаДок.Адрес,
|  $Регистр.ВзаиморасчетыПокупателей.Проект = case when $ШапкаДок.ПризнакНакладной = :Продажа then $Справочник.Сотрудники.Проект 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С++ решить такую задачу?
Ответ #11 - 08. Августа 2006 :: 08:05
Печать  
и что не так? что не получается?

ты использовал алиас для справочника Сотрудники, дальше оперируй уже с ним:
не так $Справочник.Сотрудники.Проект
а так $Агенты.Проект

к тому же надо бы тут сделать INNER JOIN $Справочник.Сотрудники Агенты (nolock) ON Агенты.id = $ШапкаДок.Агент, а не LEFT JOIN, а то она может NULL в регистр засунуть в случае, когда не указан Агент в документе, а NULL в реквизитах таблиц 1C не любит
  
Наверх
 
IP записан
 
sv_stas_sv
Junior Member
**
Отсутствует


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #12 - 08. Августа 2006 :: 08:19
Печать  
|UPDATE
|  $Регистр.ВзаиморасчетыПокупателей
|SET
|  $Регистр.ВзаиморасчетыПокупателей.Адрес = $ШапкаДок.Адрес,
|  $Регистр.ВзаиморасчетыПокупателей.Проект = case when $ШапкаДок.ПризнакНакладной = :Продажа then $Агенты.Проект else $ПустойИД end
|FROM
|  $Регистр.ВзаиморасчетыПокупателей  Рег
|INNER JOIN $Документ.РасходнаяНакладная ШапкаДок on ШапкаДок.iddoc = Рег.iddoc,
|INNER JOIN $Справочник.Сотрудники Агенты (nolock) ON Агенты.id = ШапкаДок.Агент";

все равно ругается на секцию INNER!!!!
  
Наверх
 
IP записан
 
DrACe
1c++ donor
1c++ power user
Отсутствует


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

Сообщений: 447
Местоположение: г. Новосибирск
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #13 - 08. Августа 2006 :: 08:21
Печать  
запятая вот тут
Код
Выбрать все
INNER JOIN $Документ.РасходнаяНакладная ШапкаДок on ШапкаДок.iddoc = Рег.iddoc,
INNER JOIN $Справочник.Сотрудники Агенты (nolock) ON Агенты.id = ШапкаДок.Агент 


не нужна

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


1с++ lamer

Сообщений: 46
Зарегистрирован: 19. Июля 2006
Re: Можно ли с помощью 1С++ решить такую задачу?
Ответ #14 - 08. Августа 2006 :: 08:23
Печать  
Спасибо, помогло !
  
Наверх
 
IP записан
 
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] 
ОтправитьПечать