Переключение на Главную Страницу Страницы: [1] 2 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Запрос по получению партий товаров (число прочтений - 12112 )
kiv_i
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 13. Июля 2006
Запрос по получению партий товаров
30. Августа 2006 :: 09:15
Печать  
Исх. данные: V7.7SQL рел. 25, Win2000/SQL2000sp4, 1CPP.dll v2.0.3.0
Есть регистр  партий RG/RA1360 со следующей структурой:
Измерения: Товар (тип - спр.Товары), ПрихДокумент (тип – Документ неопределенного вида)
Ресурсы: ОстатокТовара, Стоимость, НДС
Реквизит: СуммаПродажи
Хочу получить некий аналог РегПартий.ВыгрузитьИтоги(тзПартий,1,1) в документе расхода 
на позицию документа при проведении и списать партии по FIFO.
//Код  запроса получения итогов по партиям на документ:
ЗапросПартий = "SELECT
РегПартий.ПрихДокумент [ПрихДокумент $Документ],   
SUM(РегПартий.ОстатокТовараОстаток) [ОстатокТовара $Число],
SUM(РегПартий.СтоимостьОстаток)/SUM(РегПартий.ОстатокТовараОстаток) [Стоимость $Число],
SUM(РегПартий.НДСОстаток)/SUM(РегПартий.ОстатокТовараОстаток) [НДС $Число]
FROM $РегистрОстатки.ПартииТоваров(:ПозДок~,,Товар =:ТекТовар,(ПрихДокумент),(ОстатокТовара,Стоимость,НДС)) as РегПартий
WHERE  (РегПартий.ОстатокТовараОстаток > 0)   
GROUP BY РегПартий.ПрихДокумент
ORDER BY РегПартий.ПрихДокумент";
Далее в цикле по товарам расходной:
глSQLSession.РежимRPC(1);                            
глSQLSession.УстановитьТекстовыйПараметр("ТекТовар",тзТЧ.Товар);
глSQLSession.УстановитьТекстовыйПараметр("ПозДок",
СформироватьПозициюДокумента(ПолучитьПозицию(),-1));                     
глSQLSession.ВыполнитьИнструкцию(ЗапросПартий,тзПартий,1);

Запрос выполняется. Итоги в тзПартий есть. Цифры в целом правильные. НО(!):
Т.к. партия-образующие доки разные по виду – приходные, инвентаризация и пр., 
то в результирующей тзПартий они отсортированы сначала в последовательности видов документов, определенной в конфигураторе, а уже затем – по позиции во времени.
(напр,.Инв - я1 Дата1 Инв- я2 Дата2 , ПриходнаяН1 Дата1, ПриходнаяН2 Дата2 …).
А хочется по расположить док-ты партий по FIFO во времени.
В коде 1с я делал так:
тзПартий.НоваяКолонка("Поз1");.
тзПартий.НоваяКолонка("Поз2");.

РазобратьПозициюДокумента(тзПартий.ПрихДок.ПолучитьПозицию(),Д,Ч,М,С,);

тзПартий.Поз1 = Д;
тзПартий.Поз2 = Ч;

тзПартий.Сортировать("Поз1,Поз2...);

Здесь, IMHO, нужно «order by РегПартий.ПрихДокумент.date_time_iddoc» из RA####, но как позицию  «ПрихДокумента» получить в «ЗапросеПартий» – никак не соображу. Если можете, помогите, пожалуйста.
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #1 - 30. Августа 2006 :: 09:28
Печать  
заджоинь общий журнал документов и отсортируй по позиции документа, по крайней мере я так делаю...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #2 - 30. Августа 2006 :: 09:32
Печать  
Можно так, присоеденить таблицу:
INNER JOIN
_1SJourn as Жур ON Жур.IDDoc = ПрихДокумент
И отсортировать по LEFT(Жур.date_time_iddoc,14)
И отбирай партии одним запросом по ТЧ - обрати внимание на $ДокументСтроки
  
Наверх
ICQ  
IP записан
 
kiv_i
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 13. Июля 2006
Re: Запрос по получению партий товаров
Ответ #3 - 30. Августа 2006 :: 10:58
Печать  
Очень довольный Спасибо, все ОК
добавлением
INNER JOIN _1SJourn as Жур ON Жур.IDDoc = Right(РегПартий.ПрихДокумент,9)
т.к. РегПартий.ПрихДокумент = сhar(13)
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #4 - 30. Августа 2006 :: 11:13
Печать  
kiv_i писал(а) 30. Августа 2006 :: 10:58:
Очень довольный Спасибо, все ОК
добавлением
INNER JOIN _1SJourn as Жур ON Жур.IDDoc = Right(РегПартий.ПрихДокумент,9)
т.к. РегПартий.ПрихДокумент = сhar(13)

правильным будет по date_time_iddoc сортировать, ибо это сортировка не верная, это просто ИД а он в 98% в хронологию создания доков не вписывается...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
kiv_i
YaBB Newbies
*
Отсутствует


I Love YaBB 2!

Сообщений: 11
Зарегистрирован: 13. Июля 2006
Re: Запрос по получению партий товаров
Ответ #5 - 30. Августа 2006 :: 11:24
Печать  
да, но у меня: ... Order by LEFT(Жур.date_time_iddoc,14), а это вроде  - дата_время?
  
Наверх
 
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #6 - 30. Августа 2006 :: 11:46
Печать  
kiv_i писал(а) 30. Августа 2006 :: 11:24:
да, но у меня: ... Order by LEFT(Жур.date_time_iddoc,14), а это вроде  - дата_время?

у tav13 это заметил, у тебя нет, потому и решил акцентировать твое внимание...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #7 - 30. Августа 2006 :: 11:49
Печать  
Сортируйте просто по Order by Жур.date_time_iddoc
  
Наверх
ICQ  
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #8 - 30. Августа 2006 :: 12:27
Печать  
spock писал(а) 30. Августа 2006 :: 11:49:
Сортируйте просто по Order by Жур.date_time_iddoc

В данном случае это будет не правильно
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #9 - 30. Августа 2006 :: 12:43
Печать  
tav13 писал(а) 30. Августа 2006 :: 12:27:
В данном случае это будет не правильно

Почему?  Озадачен
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #10 - 30. Августа 2006 :: 13:21
Печать  
Потому что при списании по FIFO (первый пришел - первым ушел), партии нужны в хронологическом порядке, которого сортировка по date_time_iddoc даст не всегда. Вот и приходится делать LEFT(Жур.date_time_iddoc,14)
  
Наверх
ICQ  
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #11 - 30. Августа 2006 :: 13:38
Печать  
Твоё мнение по этому поводу я понял из предыдущего поста. Я спрашивал, почему сортировка по date_time_iddoc "даст не всегда" упорядочивание по хронологии?
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
tav13
1c++ donor
Отсутствует



Сообщений: 108
Местоположение: Donetsk
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #12 - 30. Августа 2006 :: 13:51
Печать  
Потому что я не встречал пользователей 1С, которые всегда последовательно, правильно с первого раза и т.д. создавали документы. После их бы не изменяли, проводили, делали не проведенными, снова проводили, устанавливали "в начало дня". И не создавали документы "задним числом"
  
Наверх
ICQ  
IP записан
 
Славко
Senior Member
****
Отсутствует



Сообщений: 467
Местоположение: Украина, г. Днепропетровск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #13 - 30. Августа 2006 :: 14:08
Печать  
berezdetsky писал(а) 30. Августа 2006 :: 13:38:
Твоё мнение по этому поводу я понял из предыдущего поста. Я спрашивал, почему сортировка по date_time_iddoc "даст не всегда" упорядочивание по хронологии?

потому что это сортировка по:
Дата+Время+ИДДока
если брать хронологию то это:
Дата+Время

а добавлять в сортировку ИД это даже не по виду сортировать 3-м параметром...
  

Ламер, самый обычный ламер...    сначала мы ...   а потом мы ...
Наверх
wwwICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос по получению партий товаров
Ответ #14 - 30. Августа 2006 :: 14:22
Печать  
ужасно...
Если в одно и тоже время будет несколько документов?
В 2006-08-30 21:14:43 будет записано 10 документов, например. То при сортировке LEFT(date_time_iddoc,14) есть возможность, что сервер будет каждый раз по разному возвращать порядок документов, т.е. так как ему будет удобно.
Еще раз: ORDER BY date_time_iddoc.
  
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 3 
ОтправитьПечать