Переключение на Главную Страницу Страницы: [1] 2  ОтправитьПечать
Горячая тема (более 10 ответов) позиция документа (число прочтений - 5509 )
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
позиция документа
17. Марта 2008 :: 14:02
Печать  
при оптимизации модуля проведения заметил, что получение позиции документа средствами 1С занимает много времени. Решил оптимизировать, добавив в запрос по остаткам поле "DATE_TIME_IDDOC" из журнала документов, но при сравнении полученной строки с 1С-ким форматом обнаружил следующее:
"#20080314 645080000    599956CEE" - это формат 1С
"20080306CG5TWG  CUV0CEE" - это получаю из запроса.

Возможно ли скуль заставить преобразовать 36-й формат в 10-й (выделил то, что надо преобразовать)?
Или может быть что-то еще подскажете?

Заранее благодарен
  
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: позиция документа
Ответ #1 - 17. Марта 2008 :: 14:52
Печать  
Цитата:
Вот пример полезной для одинэснега функции, разбирайся:

Код
Выбрать все
	|CREATE FUNCTION Convert36To10(@Res36 CHAR(9)) RETURNS int
	|AS
	|begin
	|DECLARE @j INT
	|DECLARE @Deci INT
	|DECLARE @Arr36 CHAR(36)
	|SELECT @Arr36 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
	|SELECT @Deci = 0
	|SELECT @j = 1
	|while @j <= LEN(LTRIM(RTRIM(@Res36)))
	|begin
	|if @j <> 1
	|SELECT @Deci = @Deci*36
	|SELECT @Deci = @Deci + CHARINDEX(SUBSTRING(LTRIM(RTRIM(@Res36)), @j,1),@Arr36) -1
	|SELECT @j = @j+1
	|end
	|RETURN(@Deci);
	|end

 


  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: позиция документа
Ответ #2 - 17. Марта 2008 :: 16:04
Печать  
А зачем тебе формат 1С?  Злой

Лишнее поле позволяет избегать соединения с журналом, т.е.

Код
Выбрать все
Where Рег.Date_Time_Iddoc Between :ДатаНачала And :ДатаКонца~
 



  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: позиция документа
Ответ #3 - 18. Марта 2008 :: 05:59
Печать  
Цитата:
А зачем тебе формат 1С?  Злой

там идет сравнение партий (всякие ФИФО, ЛИФО и прочая жуть).
я, в принципе нашел решение быстрое:
Код
Выбрать все
ПозицияПартии = "#"+лев(ТаблИтогов.ПозицияПартии,8)+" "+_strtoID(сред(ТаблИтогов.ПозицияПартии, 9,6)); 


для сравнения партий мне больше ничего и не надо, но вот че заметил, что для поля IDDOC 1С (из функции ПолучитьПозицию()) возвращает значение (похоже на дополнение, поскольку больше и начинается с 9) не равное значению функции _strtoID()
Код
Выбрать все
Партия.ПолучитьПозицию() = "#20080306 752740000    599868CEE"
_strtoID(сред(ТаблИтогов.ПозицияПартии, 16,4)) = "16663"
ТаблИтогов.ПозицияПартии = "20080306CG5TWG  CUV0CEE" 

« Последняя редакция: 18. Марта 2008 :: 10:08 - sml »  
Наверх
 
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: позиция документа
Ответ #4 - 18. Марта 2008 :: 11:01
Печать  
sml писал(а) 18. Марта 2008 :: 05:59:
но вот че заметил, что для поля IDDOC 1С (из функции ПолучитьПозицию()) возвращает значение (похоже на дополнение, поскольку больше и начинается с 9) не равное значению функции _strtoID()

Там должно быть не 16, 4, а 15, 6.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: позиция документа
Ответ #5 - 18. Марта 2008 :: 12:17
Печать  
СтрТоИД надо применять к шести левым символам из ИДДок (последние 9 в Дате_Тайм_ИдДок), код базы (последние три) остаются неизменными!
ЗЫ. Если честно ниасилел зачем все это нужно
  

Кампутер, кофе и сигареты - это очень плохо для моего здоровья...
Наверх
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: позиция документа
Ответ #6 - 18. Марта 2008 :: 13:15
Печать  
berezdetsky писал(а) 18. Марта 2008 :: 11:01:
Там должно быть не 16, 4, а 15, 6.


действительно, я лажанулся  и не захватывал еще 1 символ ИД справа и 1 слева.

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


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: позиция документа
Ответ #7 - 18. Марта 2008 :: 13:19
Печать  
sml писал(а) 17. Марта 2008 :: 14:02:
при оптимизации модуля проведения заметил, что получение позиции документа средствами 1С занимает много времени. Решил оптимизировать, добавив в запрос по остаткам поле "DATE_TIME_IDDOC" из журнала документов...


Добейся, что бы при проведении документ спросил "Изменить время?" и дай положительный ответ.
Будешь неприятно удивлен, увидев, что в _1SJOURN в поле DATE_TIME_IDDOC будет старое время...
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: позиция документа
Ответ #8 - 18. Марта 2008 :: 13:28
Печать  
sadovnikov писал(а) 18. Марта 2008 :: 13:19:
Добейся, что бы при проведении документ спросил "Изменить время?" и дай положительный ответ.
Будешь неприятно удивлен, увидев, что в _1SJOURN в поле DATE_TIME_IDDOC будет старое время...


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


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: позиция документа
Ответ #9 - 18. Марта 2008 :: 13:37
Печать  
sml писал(а) 18. Марта 2008 :: 13:28:
это понятно, поскольку сначала отрабатывает модуль проведения, и при удачном исходе меняется время документа.


Так а все итоги-то надо посчитать с новым временем. Можешь лихо лопухнуться.
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: позиция документа
Ответ #10 - 18. Марта 2008 :: 13:42
Печать  
sadovnikov писал(а) 18. Марта 2008 :: 13:37:
Так а все итоги-то надо посчитать с новым временем. Можешь лихо лопухнуться.

с итогами будет все ОК, поскольку время меняется, когда итоги актуальны - у меня там отдельный запрос по $РегистрИтоги на ТА.
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: позиция документа
Ответ #11 - 18. Марта 2008 :: 14:55
Печать  
sml писал(а) 18. Марта 2008 :: 13:42:
с итогами будет все ОК, поскольку время меняется, когда итоги актуальны - у меня там отдельный запрос по $РегистрИтоги на ТА.


Тоесть, ты не делаешь никаких рассчетов, никаких выборон на позицию документа?
Зачем же она (позиция) тебе тогда нужна?
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: позиция документа
Ответ #12 - 19. Марта 2008 :: 06:07
Печать  
sadovnikov писал(а) 18. Марта 2008 :: 14:55:
Тоесть, ты не делаешь никаких рассчетов, никаких выборон на позицию документа?
Зачем же она (позиция) тебе тогда нужна?

там просто сравнивается позиция документа с позициями партий, чтобы партии были ранее документа, но это важно только, когда итоги неактуальны (время не меняем)
  
Наверх
 
IP записан
 
sadovnikov
1c++ power user
Отсутствует


I Love YaBB 2!

Сообщений: 420
Зарегистрирован: 06. Марта 2007
Re: позиция документа
Ответ #13 - 19. Марта 2008 :: 06:21
Печать  
sml писал(а) 19. Марта 2008 :: 06:07:
там просто сравнивается позиция документа с позициями партий, чтобы партии были ранее документа, но это важно только, когда итоги неактуальны (время не меняем)


А с чего ты взял, что пользователь поменяет время на ТА? А если он в начало дня засунет документ? И вот тут -то побреешься.
  
Наверх
 
IP записан
 
sml
Full Member
***
Отсутствует


I Love 1С++!

Сообщений: 186
Зарегистрирован: 28. Февраля 2008
Re: позиция документа
Ответ #14 - 19. Марта 2008 :: 08:23
Печать  
sadovnikov писал(а) 19. Марта 2008 :: 06:21:
А с чего ты взял, что пользователь поменяет время на ТА? А если он в начало дня засунет документ? И вот тут -то побреешься.


наши юзвери работают по ТА, даже когда перепроводят документ Перемещение (из статуса предварительно проведенный в окончательно проведенный) - всегда меняют даже дату
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать