Переключение на Главную Страницу Страницы: [1]  ОтправитьПечать
Горячая тема (более 10 ответов) Документы (число прочтений - 4668 )
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Документы
04. Апреля 2009 :: 10:48
Печать  
Доброго времени суток, помогите плиз реализовать следующий код на 1С++, уже выбился из сил
Код
Выбрать все
	ТекстЗапроса =
	"//{{ЗАПРОС(Сформировать)
	|Период с ВыбНачПериода по ВыбКонПериода;
	|Номенклатура = Регистр.ОстаткиТМЦ.Номенклатура;
	|Склад = Регистр.ОстаткиТМЦ.Склад;
	|Количество = Регистр.ОстаткиТМЦ.Количество;
	|Сторно = Регистр.ОстаткиТМЦ.ТекущийДокумент.Сторно.ТекущийДокумент;
	|Функция КоличествоПриход = Приход(Количество) когда (ПустоеЗначение(Сторно)=0);
	|Функция КоличествоРасход = Расход(Количество) когда (ПустоеЗначение(Сторно)=0);
	|Группировка Номенклатура без Групп;
	|Группировка Склад без Групп;  
	|Группировка Сторно;
	|Условие(Склад в ВыбСклад);
	|Условие(Номенклатура в ВыбНоменклатура);
	|"//}}ЗАПРОС 


делал вот так
|SELECT  
|Рег.Номенклатура        as [Номенклатура $Справочник.Номенклатура],
|Рег.Склад                   as [Склад            $Справочник.Склады],      
|Рег.КоличествоПриход as КоличествоПриход,
|Рег.КоличествоРасход as КоличествоРасход,
|Рег.IDDoc                   as Сторно      
|FROM
|$РегистрОстаткиОбороты.ОстаткиТМЦ(:ДатаС, :ДатаПо,,,INNER JOIN $Документ.Сторно Сторно1 ON Сторно1.IDDoc = IDDoc, Склад = :ВыбСклад, (Номенклатура, Склад) , Количество) as Рег
|WHERE Рег.Номенклатура IN (SELECT Val FROM #Группа)
|";
  
Наверх
 
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Документы
Ответ #1 - 05. Апреля 2009 :: 05:13
Печать  
1) В твоем запросе на 1С ты используешь только функции Приход и Расход - пользуйся ВТ Обороты;
2) Условие на номенклатуру внеси в ВТ - так будет быстрее;
3) После п.п.1,2 Покажи текст получившегося запроса и покажи ошибку которую выдает
  
Наверх
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #2 - 05. Апреля 2009 :: 09:07
Печать  
В данном запросе у меня проблемы тока с получением документа "Сторно" в описании ВТ ОстаткиОбороты написано что надо использовать соединения для получения реквизитов регистра (например таких как Регистр.IDDoc), но чет у меня ничего не получается
  
Наверх
 
IP записан
 
Вадимко
God Member
*****
Отсутствует


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

Сообщений: 1048
Местоположение: Минск
Зарегистрирован: 24. Мая 2006
Пол: Мужской
Re: Документы
Ответ #3 - 05. Апреля 2009 :: 13:00
Печать  
Почитай документацию (в частности про периодичность в вирт. таблице)
Iddoc - это не реквизит регистра (в понимании конфигураста)
  

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


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #4 - 05. Апреля 2009 :: 15:26
Печать  
Спасибо, опять эта невнимательность Улыбка
  
Наверх
 
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #5 - 06. Апреля 2009 :: 07:25
Печать  
Сделал так :
|Рег.ВидДокумента as Документ
|FROM
|$РегистрыОстаткиОбороты.ОстаткиТМЦ(:ДатаС, :ДатаПо, Документ, ,INNER JOIN _1SJourn AS Док ON Док.IDDoc = Iddoc, Склад = :ВыбСклад, (Номенклатура, Склад) , Количество) as Рег
Все равно не получается, как правильно сделать ?
Выдал ошибку: [Microsoft][ODBC SQL Server Driver][SQL Server]Ambiguous column name 'IDDOC'.
  
Наверх
 
IP записан
 
JohnyDeath
1c++ power user
1c++ donor
Отсутствует



Сообщений: 3050
Местоположение: Волгоград
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Документы
Ответ #6 - 06. Апреля 2009 :: 08:46
Печать  
Быстрый отбор у регистра стоит?
Зачем с журналом соединяешься?
  
Наверх
 
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #7 - 06. Апреля 2009 :: 09:05
Печать  
НЕТ НЕ СТОИТ, я новичок в этом деле. Вот начал с простого запроса, а оказывается не так все просто.
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Документы
Ответ #8 - 06. Апреля 2009 :: 10:11
Печать  
примерно так:
Код
Выбрать все
select
    $Рег.Номенклатура as [Номенклатура $Справочник.Номенклатура],
    $Рег.Склад as [Склад $Справочник.Склады],
    j.iddoc as [Сторно $Документ.Сторно],
    sum(case when Рег.debkred = 0 then $Рег.Количество else 0 end) as Приход,
    sum(case when Рег.debkred = 1 then $Рег.Количество else 0 end) as Расход
from _1sjourn as j (nolock)
inner join $Регистр.ОстаткиТМЦ as Рег (nolock) on Рег.iddoc = j.iddoc
where j.iddocdef = $ВидДокумента.Сторно and j.date_time_iddoc between :ВыбНачПериода and :ВыбКонПериода~
    and $Рег.Склад = :ВыбСклад
    and $Рег.Номенклатура in (select val from #Группа)
group by $Рег.Номенклатура, $Рег.Склад, j.iddoc
 


Использование виртуальных таблиц не имеет смысла т.к.
1)необходим отбор по виду документа;
2)данные нужны из регистра остатков и нужны только обороты;
Собственно поэтому используется таблица движений регистра.
  
Наверх
ICQ  
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #9 - 06. Апреля 2009 :: 10:20
Печать  
Спасибо DmitrO, а как добавить еще ОстаткиНаНачало если не трудно ?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Документы
Ответ #10 - 06. Апреля 2009 :: 10:36
Печать  
ну вот, блин

Все это в подзапрос, и цеплять к нему ВТ с остатками.
От того что нужно в результате будет зависеть характер связи, т.к. могут быть остатки по тем позициям по которым нет оборотов, и наоборот, могут быть позиции по которым нет остатков но есть обороты.
  
Наверх
ICQ  
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #11 - 06. Апреля 2009 :: 10:46
Печать  
это поставить inner join $РегистрОстаткиОбороты.ОстаткиТМЦ (,,,,,,,,) вместо inner join $Регистр.ОстаткиТМЦ as Рег (nolock). Я правильно понял ?
  
Наверх
 
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Документы
Ответ #12 - 06. Апреля 2009 :: 10:56
Печать  
нет, не правильно
  
Наверх
ICQ  
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #13 - 06. Апреля 2009 :: 11:19
Печать  
Подскажи если тебя не затруднит.
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Документы
Ответ #14 - 06. Апреля 2009 :: 11:45
Печать  
Что такое Сторно? Общий реквизит документа?.. Какого типа?..
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #15 - 06. Апреля 2009 :: 11:52
Печать  
Сторно - это документ.
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Документы
Ответ #16 - 06. Апреля 2009 :: 11:55
Печать  
AVenger писал(а) 06. Апреля 2009 :: 11:52:
Сторно - это документ.

Ну и?... Типа какого? Или неопределенный?...
Че из тя все тянуть нада? Тебе ж вроде как нада.
Щас за паяльником схожу... Злой
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #17 - 06. Апреля 2009 :: 11:59
Печать  
Это значение может быть неопределенным, а это "ДОКУМЕНТ". Это во первых, во вторых речь щас идет не об этом. А о том как присоединить к вышеописанному запросу остатки НА НАЧАЛО. За очками лучше сходи.
  
Наверх
 
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Документы
Ответ #18 - 06. Апреля 2009 :: 11:59
Печать  
И так неответил - общий реквизит или нет?
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
Злой Бобр
Junior Member
**
Отсутствует



Сообщений: 56
Местоположение: Украина, Кривой Рог
Зарегистрирован: 07. Марта 2009
Пол: Мужской
Re: Документы
Ответ #19 - 06. Апреля 2009 :: 12:19
Печать  
AVenger писал(а) 06. Апреля 2009 :: 11:59:
За очками лучше сходи.

Плачущий Ну и гребись сам. Научишся мануалы читать - все получится.  Смех
  

Если у вас есть деньги тогда мы идем к вам!!!
Наверх
ICQ  
IP записан
 
DmitrO
1c++ power user
Отсутствует


ex developer

Сообщений: 579
Местоположение: г. Киров
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Документы
Ответ #20 - 06. Апреля 2009 :: 16:38
Печать  
А как ты себе представляешь "остатки на начало" когда в выборке присутствует документ сделавший движения?
В каждой записи о документе должен быть остаток на начало периода?
т.е. так:
Товар Склад Сторно Приход Расход Остаток
Товар1 Склад1 Сторно 1 (01.04.09) 0 20 100
Товар1 Склад1 Сторно 2 (08.04.09) 10 0 100
в данном случае можно предположить, что товары по которым не было оборотов но на начало периода есть остатки не нужны в выборке.

Или записи остатков надо выделить отдельно (у них будет не заполнено поле Сторно)?
т.е. так:
Товар Склад Сторно Приход Расход Остаток
Товар1 Склад1 0 0 100
Товар1 Склад1 Сторно 1 (01.04.09) 0 20 0
Товар1 Склад1 Сторно 2 (08.04.09) 10 0 0
в данном случае можно предположить, что товары по которым не было оборотов, но на начало периода есть остатки всеже нужны в выборке  и по ним будет только запись остатков.

И когда только 1Ски вырастут хотя бы до уровня чтобы уметь точно поставить вопрос.
  
Наверх
ICQ  
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #21 - 06. Апреля 2009 :: 17:21
Печать  
Спасибо, DmitrO. Разобрался немного что к чему ))))
И еще такой вопрос по поводу типизации документов. Если указываешь например Рег.IDDOC as [Документ $Документ], то в Рег.IDDOCDef as Документ_Вид так надо указывать Документ? Просто щас проверить не могу. Спасибо за помощь.
  
Наверх
 
IP записан
 
Salimbek
God Member
*****
Отсутствует



Сообщений: 862
Зарегистрирован: 06. Июня 2006
Пол: Мужской
Re: Документы
Ответ #22 - 06. Апреля 2009 :: 17:30
Печать  
AVenger писал(а) 06. Апреля 2009 :: 17:21:
Спасибо, DmitrO. Разобрался немного что к чему ))))
И еще такой вопрос по поводу типизации документов. Если указываешь например Рег.IDDOC as [Документ $Документ], то в Рег.IDDOCDef as Документ_Вид так надо указывать Документ? Просто щас проверить не могу. Спасибо за помощь.

Если внимательно почитать доку, то:
Цитата:
...кроме того, в наборе данных должна находиться колонка с именем составленным из имени этой колонки и суффикса {_вид|_kind} (чувствительно к регистру), в которой должны содержаться идентификаторы видов документов. Тип колонки SQL: int

Так что писать надо Документ_вид (вид с маленькой буквы)
  
Наверх
ICQ  
IP записан
 
AVenger
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 40
Зарегистрирован: 08. Января 2009
Re: Документы
Ответ #23 - 06. Апреля 2009 :: 17:36
Печать  
Спасибо, я это и имел ввиду.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 
ОтправитьПечать