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


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Пытаюсь въехать в прямые запросы
06. Февраля 2019 :: 14:23
Печать  
1sqlite ТиС
Примитивный запрос по номенклатуре с отбором по артикулу работает:

Код (SQL)
Выбрать все
	ТекстЗапроса="SELECT
	|code Код,
	|id [Товар $Справочник.Номенклатура]
	|FROM Справочник_Номенклатура as Товары
	|WHERE isfolder=2 and ismark = ''
	|AND Товары.Артикул=:ВыбАртикул";

	Запрос.Подставлять("ВыбАртикул", ВыбАртикул);
	//Запрос.Подставлять("ВыбСвойство", ВыбСвойство);
 



Как добавить условия, чтобы входили только те товары у которых ОсновноеСвойство.ЗначениеСвойства=ВыбСвойство и БазоваяЕдиница.ШтрихКод было не пусто и не пробелы?
Я так понимаю, что надо джойнить таблицы подчинённых справочников, но до реализации въехать не получается.
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Пытаюсь въехать в прямые запросы
Ответ #1 - 07. Февраля 2019 :: 06:56
Печать  
Набросал в блокноте, так что не гарантирую работоспособность, но мысль должна быть понятна:

     ТекстЗапроса="
     |SELECT
     |  Товары.code Код,
     |  Товары.id [Товар $Справочник.Номенклатура]
     |FROM
     |  Справочник_Номенклатура as Товары
     |  join Справочник_Свойства as Свойства
     |  on Товары.ОсновноеСвойство = Свойства.id
     |  join Справочник.Единицы as Единицы
     |  on Товары.БазоваяЕдиница = Единицы.id
     |WHERE
     |  Товары.isfolder=2
     |  and NOT Товары.ismark = '*'
     |  and Товары.Артикул=:ВыбАртикул
     |  and Свойства.ЗначениеСвойства = :ВыбСвойство
     |  and NOT trim(Единицы.ШтрихКод) = ''
     |";
  
Наверх
 
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Пытаюсь въехать в прямые запросы
Ответ #2 - 07. Февраля 2019 :: 09:50
Печать  
Спасибо! Всё получилось.

Код (SQL)
Выбрать все
SELECT
		|Товары.id [Товар $Справочник.Номенклатура],
		|Единицы.ШтрихКод ШтрихКод
		|FROM Справочник_Номенклатура AS Товары
		|JOIN Справочник_СвойстваНоменклатуры AS Свойства
		|	ON Товары.ОсновноеСвойство = Свойства.id
		|JOIN Справочник_Единицы AS Единицы
		|	ON Товары.БазоваяЕдиница = Единицы.id
		|WHERE Товары.isfolder=2 AND NOT Товары.ismark = '*'
		|AND Товары.Артикул=:ВыбАртикул
		|AND +Свойства.ЗначениеСвойства = :ВыбСвойство
		|AND NOT TRIM(ШтрихКод) ='' 



Что интересно, если не подавить индекс по Свойства.ЗначениеСвойства, то запрос выполняется десятки секунд  Ужас а так единицы мсек.

И ещё, интересно есть какая-нибудь принципиальная разница между NOT Товары.ismark = '*' и  Товары.ismark = '' или Товары.ismark <> '*' ?

  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Пытаюсь въехать в прямые запросы
Ответ #3 - 07. Февраля 2019 :: 10:21
Печать  
"..то запрос выполняется десятки секунд.." - да с этим беда иногда бывает. Djelf говорил что sqlite просто не знает какие индексы там в DBF, так как данные получаются через движок 1С. Приходилось иногда с инексами поиграть.

"..принципиальная разница между NOT Товары.ismark = '*' и  Товары.ismark = '' или Товары.ismark <> '*' .." - есть. Там может неразрывный пробел быть.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Пытаюсь въехать в прямые запросы
Ответ #4 - 07. Февраля 2019 :: 13:44
Печать  
Тут проблема не в индексе, проблема скорее всего в планировщике.

JOIN это по факту INNER JOIN, а при INNER JOIN планировщик sqlite может перестроить запрос по своему усмотрению, в данном случае видимо планировщик посчитал, что поскольку в таблице свойства меньше строк, нужно сначала обработать ее, а потом уже присоединить номенклатуру.
Но в стандартной ТиС или Комплексной у Номенклатура.ОсновноеСвойство нет индекса и тут запрос и зависает...
Отключение поиска по индексу ЗначениеСвойства перестраивает план на поиск сначала по Номенклатуре.

Точно узнать это можно с помощью EXPLAIN QUERY PLAN ТекстЗапроса

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

  
Наверх
www  
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Пытаюсь въехать в прямые запросы
Ответ #5 - 07. Февраля 2019 :: 14:44
Печать  
Спасибо Вам большое за внимание!
Также я тут на sqlite.org вычитал, что
Цитата:
The "CROSS JOIN" join operator produces the same result as the "INNER JOIN", "JOIN" and "," operators, but is handled differently by the query optimizer in that it prevents the query optimizer from reordering the tables in the join.

т.е. можно использовать CROSS JOIN?
И, насколько я понимаю, при LEFT JOIN нужно будет дополнительное условие по левойым таблицеам?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Пытаюсь въехать в прямые запросы
Ответ #6 - 08. Февраля 2019 :: 04:55
Печать  
Arbuz писал(а) 07. Февраля 2019 :: 14:44:
Спасибо Вам большое за внимание!
Также я тут на sqlite.org вычитал, что
Цитата:
The "CROSS JOIN" join operator produces the same result as the "INNER JOIN", "JOIN" and "," operators, but is handled differently by the query optimizer in that it prevents the query optimizer from reordering the tables in the join.

т.е. можно использовать CROSS JOIN?
И, насколько я понимаю, при LEFT JOIN нужно будет дополнительное условие по левойым таблицеам?


В твоем запросе кросс не нужен, и дополнительные условия по левому соединению не нужны.
Сделаешь такие запросы - увидишь сам что да как получается и когда нужны дополнительные условия.
Да, и с кроссом поосторожнее - сожрет всю память и вылетит Подмигивание
  
Наверх
www  
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Пытаюсь въехать в прямые запросы
Ответ #7 - 09. Октября 2019 :: 15:04
Печать  
Ещё такой вопрос, этот запрос отрабатывает без проблем
Код (SQL)
Выбрать все
	|SELECT П.*
	|FROM (
	|
	|SELECT
	|   Рег.Номенклатура [Номенклатура :Справочник.Номенклатура]
	|   ,Рег.Склад [Склад :Справочник.Склады]
	|   ,SUM(Рег.НачОст) [НачОст $Число]
	|   ,SUM(Рег.Приход) [Приход $Число]
	|   ,SUM(Рег.Расход) [Расход $Число]
	|   ,SUM(Рег.НачОст+Рег.Приход-Рег.Расход) [КонОст $Число]
	|FROM
	|	(
	|	SELECT
	|	  Итоги.Номенклатура Номенклатура
	|     ,Итоги.Склад Склад
	|		,Итоги.Количество НачОст
	|		,0 Приход
	|		,0 Расход
	|	FROM
	|		[РегистрИтоги.ОстаткиТМЦ] as Итоги
	|
	|	WHERE
	|		Итоги.period = :ПредПериод
	|   UNION ALL
	|	SELECT
	|		 Движения.Номенклатура
	|       ,Движения.Склад
	|		,Движения.Количество * (1 - Движения.debkred * 2)
	|		,0
	|		,0
	|	FROM
	|		[Регистр.ОстаткиТМЦ] AS Движения
	|   -- это расскоментить, если нет галки
	|   INNER Join [Журнал] Жур ON Жур.iddoc = Движения.iddoc and Жур.date BETWEEN :НачПериод And :КонПериод
	|	--WHERE --это если есть галка быстрая обработка движений
	|	--	 Движения.date BETWEEN :НачПериод And :КонПериод
	|	UNION ALL
	|	SELECT
	|		 Движения2.Номенклатура
	|       ,Движения2.Склад
	|		,0
	|		,Движения2.Количество*(1-Движения2.Debkred)
	|		,Движения2.Количество*Движения2.Debkred
	|	FROM
	|		[Регистр.ОстаткиТМЦ] Движения2
	|   INNER JOIN [Журнал] Жур2 ON Жур2.iddoc = Движения2.iddoc and Жур2.date BETWEEN :Дата1 And :Дата2
	|
	|
	|
	|	--WHERE --это если есть галка быстрая обработка движений
	|	--	Движения2.date BETWEEN :Дата1 And :Дата2
	|) Рег
	|
	|GROUP BY Рег.Номенклатура,Рег.Склад
	|
	|
	|) П
 



но только я делаю первой строкой
Код (SQL)
Выбрать все
	|SELECT П.Номенклатура 


валится no such column П.Номенклатура
что я делаю не так?

вообще я хочу попробовать сваять что-то типа стандартного отчёта по партиям ТиСа для понимания сути. Может у кого есть такой чтобы посмотреть?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Пытаюсь въехать в прямые запросы
Ответ #8 - 09. Октября 2019 :: 17:23
Печать  
Вот что ты делаешь не так

Arbuz писал(а) 09. Октября 2019 :: 15:04:
Код (SQL)
Выбрать все
	|SELECT П.*
	|FROM (
	|SELECT
	|   Рег.Номенклатура [Номенклатура :Справочник.Номенклатура]
 




Во внутреннем запросе типизации быть не должно.
Типизация это преобразование текстового представления ссылки в базе в саму ссылку на объект 1С. Это допустимо только в первом селекте.
Почему работает SELECT П.* прямо вот так "на вскидку" не скажу, но могу предположить что планировщик просто выкидывает этот селект из запроса.
Т.е. должно быть вот так:

Код (SQL)
Выбрать все
	|SELECT П.Номенклатура [Номенклатура :Справочник.Номенклатура]
	|FROM (
	|SELECT
	|   Рег.Номенклатура Номенклатура
 



  
Наверх
www  
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Пытаюсь въехать в прямые запросы
Ответ #9 - 11. Октября 2019 :: 12:06
Печать  
Спасибо, по типизации я понял.

Теперь в свете того
Arbuz писал(а) 09. Октября 2019 :: 15:04:
вообще я хочу попробовать сваять что-то типа стандартного отчёта по партиям ТиСа для понимания сути
, как мне получить выборку по движениям регистра с максимальной детализацией и итогами по группировкам? т.е. я могу конечно поставить в моём примере в SELECT по движениям
Код (SQL)
Выбрать все
|		,Жур2.IDDOCDEF||Движения2.IDDOC 

и получить детализацию по документам, но естественно едет вся логика подсчёта остатков, кроме НачОст. Я так полагаю, это надо курить оконные функции?
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Пытаюсь въехать в прямые запросы
Ответ #10 - 11. Октября 2019 :: 15:21
Печать  
Arbuz писал(а) 11. Октября 2019 :: 12:06:
Я так полагаю, это надо курить оконные функции?

Нет, почему? До их появления все можно было рассчитать в ИТЗ.
Т.е. выгружаем сырые данные без группировки в ИТЗ, группируем ИТЗ, рекурсивно обходим подчиненные узлы и дозаполняем колонки по нужному алгоритму. Не очень сложно в реализации и не сильно медленно.
С оконными функциями должно быть значительно быстрее, но придется мосх разогреть, как на их написание запроса, так и на вывод отчета.
Я, честно говоря, пока нарисовал только один такой запрос, полюбовался и засунул его в пыльный угол  Очень довольный
Может как то потом...
  
Наверх
www  
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Пытаюсь въехать в прямые запросы
Ответ #11 - 15. Октября 2019 :: 11:43
Печать  
поскольку, всё же, очень хочется вникнуть хотя бы до момента когда в голове уже не будет каша из неясностей и предположений, и понятна будет область возможностей, то... малость разогрел мосх и из предыдущего запроса по регистру остатки сваял вот это:

Код (SQL)
Выбрать все
	|SELECT
	|	Т.Номенклатура [Номенклатура :Справочник.Номенклатура]
	|	,Т.Фирма [Фирма :Справочник.Фирмы]
	|	,Т.Склад [Склад :Справочник.Склады]
	|	,Т.НачОст [НачОст :Число.15.5]
	|	,Т.Приход [Приход :Число.15.5]
	|	,Т.Расход [Расход :Число.15.5]
	|	,Т.КонОст [КонОст :Число.15.5]
	|	,Т.Документ [Документ :Документ]
	|FROM (
	|
	|
	|SELECT
	|   Рег.Номенклатура Номенклатура
	|   ,Рег.Фирма Фирма
	|	,Рег.Склад Склад
	|	,CASE Рег.Документ
	|	WHEN '     ПодИтог' THEN
	|		Рег.НачОст
	|	ELSE
	|		SUM(Рег.НачОст) OVER(PARTITION BY Рег.Склад, Рег.Номенклатура ORDER BY Рег.Документ ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING)
	|	END AS НачОст
	|	,CASE Рег.Документ
	|	WHEN '     ПодИтог' THEN
	|		SUM(Рег.Приход) OVER(PARTITION BY Рег.Склад, Рег.Номенклатура)
	|	ELSE
	|		Рег.Приход
	|	END AS Приход
	|	,CASE Рег.Документ
	|	WHEN '     ПодИтог' THEN
	|		SUM(Рег.Расход) OVER(PARTITION BY Рег.Склад, Рег.Номенклатура)
	|	ELSE
	|		Рег.Расход
	|	END AS Расход
	|	,CASE Рег.Документ
	|	WHEN '     ПодИтог' THEN
	|		SUM(Рег.НачОст) OVER(PARTITION BY Рег.Склад, Рег.Номенклатура)
	|	ELSE
	|		SUM(Рег.НачОст) OVER(PARTITION BY Рег.Склад, Рег.Номенклатура ORDER BY Рег.Документ ROWS UNBOUNDED PRECEDING)
	|	END AS КонОст
	|	,Рег.Документ
	|FROM
	|	(
	|	SELECT
	|		Итоги.Номенклатура Номенклатура
	|		,Итоги.Фирма Фирма
	|		,Итоги.Склад Склад
	|		,Итоги.Количество НачОст
	|		,0 Приход
	|		,0 Расход
	|		,'     ПодИтог' Документ
	|	FROM
	|		[РегистрИтоги.ОстаткиТМЦ] AS Итоги
	|
	|	WHERE
	|		Итоги.PERIOD = :ПредПериод
	|   UNION ALL
	|	SELECT
	|		Движения.Номенклатура
	|     	,Движения.Фирма
	|		,Движения.Склад
	|		,Движения.Количество * (1 - Движения.DEBKRED * 2)
	|		,0
	|		,0
	|		,'     ПодИтог'
	|	FROM
	|		[Регистр.ОстаткиТМЦ] AS Движения
	|   -- это расскоментить, если нет галки
	|   INNER JOIN [Журнал] Жур ON Жур.IDDOC = Движения.IDDOC AND Жур.DATE BETWEEN :НачПериод AND :КонПериод
	|	--WHERE --это если есть галка быстрая обработка движений
	|	--	 Движения.DATE BETWEEN :НачПериод AND :КонПериод
	|	UNION ALL
	|	SELECT
	|		Движения2.Номенклатура
	|		,Движения2.Фирма
	|		,Движения2.Склад
	|		,Движения2.Количество * (1 - Движения2.DEBKRED * 2)
	|		,Движения2.Количество *( 1-Движения2.DEBKRED)
	|		,Движения2.Количество * Движения2.DEBKRED
	|		,Жур2.IDDOCDEF||Движения2.IDDOC
	|	FROM
	|		[Регистр.ОстаткиТМЦ] Движения2
	|	INNER JOIN [Журнал] Жур2 ON Жур2.IDDOC = Движения2.IDDOC AND Жур2.DATE BETWEEN :Дата1 AND :Дата2
	|	--WHERE --это если есть галка быстрая обработка движений
	|	--	Движения2.DATE BETWEEN :Дата1 AND :Дата2
	|) Рег
	|
	|
	|) Т
	|WHERE NOT (Т.Расход = 0) OR NOT (Т.Приход = 0)
	|GROUP BY Т.Номенклатура, Т.Фирма, Т.Склад, Т.Документ
 



Я понимаю, что несколько не оптимально накладывать условия приход/расход и перегруппировывать во внешнем запросе, но это просто экспериментально и, что удивительно, практически не влияет на время выполнения даже для больших выборок. Ну и сомнительна идея с добавлением сущности ПодИтог, но это тоже просто проба.

Работает очень быстро раз в 20-70 быстрее чОрных запросов.

Сразу вопрос: как типизировать Т.Документ, чтобы были и ссылки на документы, и осталась строка '    ПодИтог'?

добавлено: увидел, что в оконных группировках не хватает Фирмы.
добавлено: также понял, что повторяющиеся окна можно описать через WINDOW. Никак не могу найти понятный и более менее полный учебник/доку по SQL без упора на MSSQL. Дока на sqlite.org очень удобна, но очень лаконична, что весьма ограничивает её для меня.
  
Наверх
 
IP записан
 
Djelf
God Member
*****
Отсутствует


Ubuntu + wine@etersoft
+ 1C 7.7

Сообщений: 634
Местоположение: Питер
Зарегистрирован: 02. Ноября 2007
Пол: Мужской
Re: Пытаюсь въехать в прямые запросы
Ответ #12 - 15. Октября 2019 :: 16:37
Печать  
Зачёт! Это Минус/Минус/Тонна кода.

А что мешает вытащить IDDOC в дополнение к ПодИтог?
Ну, если нельзя где то вытащить и IDDOCDEF, можно еще LEFT JOIN  с Журналом сделать по IDDOC и IDDOCDEF = NULL (в предварительном запросе). IDDOC же уникален в пределах одной базы. Вроде как то так...

По документации гугли "postgresql windows functions", sqlite ориентировано именно на этот диалект.
Что-то возможно не работает, например FILTER, заработало совсем недавно, в последней, 30й версии.
  
Наверх
www  
IP записан
 
Arbuz
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 60
Зарегистрирован: 06. Февраля 2019
Re: Пытаюсь въехать в прямые запросы
Ответ #13 - 24. Октября 2019 :: 10:58
Печать  
Собственно, как я и говорил, мне нужен отчёт по партиям, но со складами, покупателями и ценой продажи.
По аналогии с запросом по остаткам делаю по партиям.
Код (SQL)
Выбрать все
	|	SELECT
	|		Движения2.Номенклатура [Номенклатура :Справочник.Номенклатура]
	|		,Движения2.LINENO NOДв
	|		--,Продажи.LINENO NOПр
	|		,Движения2.Фирма [Фирма :Справочник.Фирмы]
	|		,Движения2.МОЛ [МОЛ :Справочник.ФизЛица]
	|		--,ОстаткиТМЦ.Склад [Склад :Справочник.Склады]
	|		,Партии.Поставщик [Поставщик :Справочник.Контрагенты]
	|		--,Продажи.Покупатель [Покупатель :Справочник.Контрагенты]
	|		,Движения2.Количество * (1 - Движения2.DEBKRED * 2) Движение
	|		,Движения2.Количество * (1-Движения2.DEBKRED) Приход
	|		,Движения2.Количество * Движения2.DEBKRED Расход
	|		,Движения2.СуммаУпр
	|		,Движения2.Партия [Партия :Справочник.Партии]
	|		,Движения2.ДатаПартии
	|		,Движения2.СтатусПартии [СтатусПартии :Перечисление.СтатусыПартии]
	|		--,Продажи.Себестоимость
	|		--,Продажи.Продстоимость
	|		,Жур2.IDDOCDEF||Движения2.IDDOC [Документ :Документ]
	|
	|	FROM
	|		[Регистр.ПартииНаличие] Движения2
	|	INNER JOIN [Журнал] Жур2 ON Жур2.IDDOC = Движения2.IDDOC AND Жур2.DATE BETWEEN :Дата1 AND :Дата2
	|	LEFT JOIN [Справочник.Партии] Партии ON Партии.ID = Движения2.Партия --AND Партии.PARENTEXT = Движения2.Номенклатура
	|	--LEFT JOIN [Регистр.ОстаткиТМЦ] ОстаткиТМЦ ON ОстаткиТМЦ.IDDOC = Движения2.IDDOC AND ОстаткиТМЦ.Номенклатура = Движения2.Номенклатура
	|	--LEFT JOIN [Регистр.Продажи] Продажи ON Продажи.IDDOC = Движения2.IDDOC AND Продажи.Номенклатура = Движения2.Номенклатура AND Продажи.Поставщик = Партии.Поставщик
	|	--WHERE --это если есть галка быстрая обработка движений
	|	--	Движения2.DATE BETWEEN :Дата1 AND :Дата2
	|	ORDER BY Движения2.Номенклатура, Движения2.Партия, Движения2.LINENO
 


вот так всё прекрасно, джойню справочник партии - всё хорошо. Только начинаю джойнить регистры, что продаж, что остатков - время выполнения запроса вырастает на порядок.
План запроса:
Код
Выбрать все
7  SCAN TABLE Журнал AS Жур2 VIRTUAL TABLE INDEX 1:ACDATETIM;    14 !" 0
13 SCAN TABLE Регистр.ПартииНаличие AS Движения2 VIRTUAL TABLE INDEX 0:IDLINE;    10 !  0p nHyd!    
18 SCAN TABLE Справочник.Партии AS Партии VIRTUAL TABLE INDEX 0:IDD;    10 !  0p nHyd! %k8
25 SCAN TABLE Регистр.ОстаткиТМЦ AS ОстаткиТМЦ VIRTUAL TABLE INDEX 0:IDLINE;    15 !  0p nHy$40t  Q  HB `8
33 SCAN TABLE Регистр.Продажи AS Продажи VIRTUAL TABLE INDEX 0:IDLINE;    20 !  0p nHy$40d  !%$9 @, 
86 USE TEMP B-TREE FOR ORDER BY 


ничего, правда, мне здесь непонятно.
Что я делаю не так? Или так и должно быть? Может мой подход в корне не верный?
  
Наверх
 
IP записан
 
Sserj
Junior Member
**
Отсутствует


1C++ rocks!

Сообщений: 77
Зарегистрирован: 25. Октября 2010
Re: Пытаюсь въехать в прямые запросы
Ответ #14 - 24. Октября 2019 :: 12:56
Печать  
Если у регистра поставить флажок Быстрая обработка движений то ничего джойнить не надо будет DateTimeIDDOC будет уже в самом регистре.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: [1] 2 
ОтправитьПечать