Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема Запрос  бухгалтерским итогам (AccountsRecords (число прочтений - 3593 )
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Запрос  бухгалтерским итогам (AccountsRecords
23. Октября 2007 :: 05:34
Печать  
Всем добрый день!
Помогите, пожалуйста правильно написать следующие бухгалтерские запросы?

1 запрос;
Код
Выбрать все
	БИ = СоздатьОбъект("БухгалтерскиеИтоги");
	БИ.ИспользоватьСубконто(ВидыСубконто.Студенты,фасСтудент,2);
	БИ.ИспользоватьСубконто(ВидыСубконто.ПериодОбучения);
	БИ.ВыполнитьЗапрос(лдДатаОт,лдДатаДо,"НЗО",,,1,,"С");
 



2 запрос;
Код
Выбрать все
	БИ = СоздатьОбъект("БухгалтерскиеИтоги");
	БИ.ИспользоватьСубконто(ВидыСубконто.Студенты,фасСтудент,2);
	БИ.ИспользоватьСубконто(ВидыСубконто.ОплатаСтудентов,,1);
	БИ.ИспользоватьСубконто(ВидыСубконто.ПериодОбучения);
	БИ.ВыполнитьЗапрос(лдДатаОт,Дата("31.12.2005"),"ОПО",,,1,"Проводка","С");
 



по первому запросу получилось изобразить вот такую вещь:
Код
Выбрать все
	|	SELECT
	|		 ОсновнойОборотыДтКт.СчетДт [СчетДт $Счет.ЕПСБУ]
	|		, ОсновнойОборотыДтКт.СчетКт [СчетКт $Счет.ЕПСБУ]
	|		, ОсновнойОборотыДтКт.Валюта [Валюта $Справочник.Валюты]
	|		, ОсновнойОборотыДтКт.СубконтоДт1 [СубконтоДт1 $Субконто]
	|		, ОсновнойОборотыДтКт.СубконтоДт1_вид
	|		, ОсновнойОборотыДтКт.СубконтоДт2 [СубконтоДт2 $Субконто]
	|		, ОсновнойОборотыДтКт.СубконтоДт2_вид
	|		, ОсновнойОборотыДтКт.СубконтоКт1 [СубконтоКт1 $Субконто]
	|		, ОсновнойОборотыДтКт.СубконтоКт1_вид
	|		, ОсновнойОборотыДтКт.СуммаОборот
	|		, ОсновнойОборотыДтКт.ВалютнаяСуммаОборот
	|		, ОсновнойОборотыДтКт.КоличествоОборот
	|	FROM $БИОборотыДтКт.ЕПСБУ(:НачДата, :КонДата ~, ,
	|	INNER JOIN $Справочник.Студенты AS Студенты (NOLOCK) ON (СубконтоДт1 = Студенты.ID) OR (СубконтоКт1 = Студенты.ID),
	|   ,
	|	,
	|	,
	|	,
	|	((СубконтоДт1 = :ВыбСтудент) OR (СубконтоКт1 = :ВыбСтудент)) AND ((СубконтоДт1_Вид = $ВидСубконто.Студенты) or (СубконтоКт1_Вид = $ВидСубконто.Студенты))
	|
	|) AS ОсновнойОборотыДтКт
	|		LEFT OUTER JOIN _1SACCS AS ПланСчетовДт (NOLOCK) ON ОсновнойОборотыДтКт.СчетДт = ПланСчетовДт.ID
	|		LEFT OUTER JOIN _1SACCS AS ПланСчетовКт (NOLOCK) ON ОсновнойОборотыДтКт.СчетКт = ПланСчетовКт.ID
	|	ORDER BY ПланСчетовДт.SCHKOD
	|		, ПланСчетовКт.SCHKOD";

 



В чем как мне кажется я ошибся:
1) Наверное соединение в виртуальной таблице надо делать по подзапросу который возвращает 2 поля: ВидСубконто (Студенты), Студент (идентификатор)
в этом случае выборка виртуальной таблицы будет ограничена не только идентификатором Студента, но и видом субконто (сейчас это вынесено в условие);
2) У меня совсем не получается задать условие по счетам,так как в СчетКт или СчетДт может быть пустой счет, а как установить его в параметр запроса я не знаю Печаль
3) Не подскажите как правильно задать фильтр для Группы счетов? (счет НЗО - группа).
Заранее огромное спасибо!
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRecords
Ответ #1 - 23. Октября 2007 :: 10:46
Печать  
leshik писал(а) 23. Октября 2007 :: 05:34:
1) Наверное соединение в виртуальной таблице надо делать по подзапросу который возвращает 2 поля: ВидСубконто (Студенты), Студент (идентификатор)
в этом случае выборка виртуальной таблицы будет ограничена не только идентификатором Студента, но и видом субконто (сейчас это вынесено в условие);

Скорее условие должно быть вида
Код
Выбрать все
(СубконтоДт1 = :ВыбСтудент) AND (СубконтоДт1_Вид = $ВидСубконто.Студенты) OR (СубконтоКт1 = :ВыбСтудент) AND (СубконтоКт1_Вид = $ВидСубконто.Студенты) 


А что ты хочешь получить: обороты вида Дт/Кт или Счет/КоррСчет?

leshik писал(а) 23. Октября 2007 :: 05:34:
2) У меня совсем не получается задать условие по счетам,так как в СчетКт или СчетДт может быть пустой счет, а как установить его в параметр запроса я не знаю Печаль

СчетДт = $ПустойИд

или

ar.УстановитьТекстовыйПараметр("ВыбСчет", ПолучитьПустоеЗначение("Счет.ЕПСБУ"));

leshik писал(а) 23. Октября 2007 :: 05:34:
3) Не подскажите как правильно задать фильтр для Группы счетов? (счет НЗО - группа).

СчетДт = :СчетНЗО в секции УсловиеСчетаДт

или

ar.УложитьСписокОбъектов(СчетНЗО, "#nzo", "ЕПСБУ"); и
СчетДт IN (SELECT val FROM #nzo) в секции Условие

Если отбор по счетам включен, то эффективнее первый вариант, иначе - второй.
  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRec
Ответ #2 - 23. Октября 2007 :: 14:15
Печать  
Спасибо за оказанное внимание!

Путем опытных заключений было установлено, что при установке отбора и по счету дебета и по счету кредита в ВТ $БИОборотыДтКт происходит наложение фильтра по полям таблицы _1SACSSEL DT и KT (признак дебета и кредита):
Наложение фильтра выглядит следующим образом:
Код
Выбрать все
(СчетДт = :Счет_1)OR (СчетДт = :Счет_2),
	,
(СчетКт = :Счет_1)OR (СчетКт = :Счет_2),
 



Транслируется в следующий код:

Код
Выбрать все
AND ((_1SACCSEL_dt_vt.ACCID = '    M2   ') OR (_1SACCSEL_dt_vt.ACCID = '     0   ') )
 



и добавляется условие:

Код
Выбрать все
		AND (_1SACCSEL_dt_vt.DT = '*')
		AND (_1SACCSEL_dt_vt.KT = '*')
 



Хотя в моем понимании наложение отбора по счетам дебета и кредита должно просто привести к отбору оборотов по указанным счетам.
В моем случае:
Код
Выбрать все
ТестовыйЗапрос.УстановитьТекстовыйПараметр("Счет_1",СчетПоКоду("НЗО"));
ТестовыйЗапрос.УстановитьТекстовыйПараметр("Счет_2", ПолучитьПустоеЗначение("Счет.ЕПСБУ"));
 



Счет "НЗО" может быть как по дебету так и по кредиту....
Подскажите, как установить отбор?
Заранее спасибо!
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRecords
Ответ #3 - 23. Октября 2007 :: 14:59
Печать  
Это ошибка AccountsRecordset. Будет исправлена.
  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRec
Ответ #4 - 23. Октября 2007 :: 15:08
Печать  
Спасибо!
А не подскажешь ориентировочный срок исправления?
(а то завтра хочется клиенту показать)
Готов быть тестером Улыбка
PS:
Насколько я понял из кода класса, там нужно вставить проверки на наличие отбора другой стороне и только в случае отсутствия ставить условие AND
а так - не применять этот отбор вообще Улыбка
И все таки огромное спасибо за такой Класс!
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRec
Ответ #5 - 23. Октября 2007 :: 15:55
Печать  
Обновил репозитарий. Проверяй.

  

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



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRec
Ответ #6 - 23. Октября 2007 :: 16:43
Печать  
Проверил! Улыбка
Теперь такой вопрос:

При указании и счета дебета и счета кредита вот таким образом:
Код
Выбрать все
	|   (СчетДт = :Счет_1),
	|	,
	|(СчетКт = :Счет_1),
 



транслируется в:

Код
Выбрать все
		AND ((_1SENTRY_vt.DTSC0 = '   420   ')
		AND (_1SENTRY_vt.VDTSC0 = 7142) OR (_1SENTRY_vt.KTSC0 = '   420   ')
		AND (_1SENTRY_vt.VKTSC0 = 7142) )

 



Получается что в выборку попадут записи, удовлетворяющие хотя одному из указанных отборов?
  
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRec
Ответ #7 - 23. Октября 2007 :: 18:07
Печать  
И еще один момент:
Не подскажите как прописать соединение в таблице
$БИДвиженияССубконто
так, чтобы в Документ возвращался агрегатный тип данных?
  
Наверх
IP записан
 
leshik
1c++ donor
Отсутствует



Сообщений: 820
Местоположение: Пятигорск
Зарегистрирован: 22. Апреля 2007
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRec
Ответ #8 - 24. Октября 2007 :: 06:06
Печать  
Огромное спасибо за 1С++ и Ваш класс!!
Я со всем разобрался Улыбка
Еще раз спасибо!
  
Наверх
IP записан
 
berezdetsky
1c++ power user
Отсутствует


barba non facit sisadminum

Сообщений: 1986
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Запрос  бухгалтерским итогам (AccountsRec
Ответ #9 - 24. Октября 2007 :: 06:58
Печать  
leshik писал(а) 24. Октября 2007 :: 06:06:
Огромное спасибо за 1С++ и Ваш класс!!
Я со всем разобрался Улыбка
Еще раз спасибо!

Класс

На всякий случай для потомков:  Улыбка

leshik писал(а) 23. Октября 2007 :: 16:43:
При указании и счета дебета и счета кредита вот таким образом:
Код
Выбрать все
	|   (СчетДт = :Счет_1),
	|	,
	|(СчетКт = :Счет_1), 



транслируется в:

Код
Выбрать все
		AND ((_1SENTRY_vt.DTSC0 = '   420   ')
		AND (_1SENTRY_vt.VDTSC0 = 7142) OR (_1SENTRY_vt.KTSC0 = '   420   ')
		AND (_1SENTRY_vt.VKTSC0 = 7142) ) 



Получается что в выборку попадут записи, удовлетворяющие хотя одному из указанных отборов?

В первом блоке кода отбор по счетам, а во втором - по первому субконто. Т.е. первый блок кода не транслируется во второй.

leshik писал(а) 23. Октября 2007 :: 18:07:
И еще один момент:
Не подскажите как прописать соединение в таблице
$БИДвиженияССубконто
так, чтобы в Документ возвращался агрегатный тип данных?

Соединить с _1sjourn по Документ = iddoc и получить оттуда вид документа.
  

пароль как коньяк, чем больше звездочек, тем лучше
Наверх
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать