|
Долгий отчет | ☑ | ||
---|---|---|---|---|
0
Polzovatel
13.11.12
✎
14:56
|
Есть обработка (написанная не мной), формирует отчет МПЗ нормально работал на Бухгалтерия предприятия, редакция 2.0 (2.0.40.9) файловая, но в последующих редакция формирование отчета увеличилась в разы... при замерах производительности данный запрос с 40 сек до 290 сек при формировании за год
Если Счета.Количество() <> 0 Тогда Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Таблица.Субконто1 КАК МПЗ, | Таблица.Субконто2 КАК Склад, | Таблица.Субконто2 КАК Владелец1, | Таблица.Счет, | Таблица.КоличествоОборотДт КАК КоличествоОборотДт, | Таблица.КоличествоОборотКт КАК КоличествоОборотКт, | Таблица.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | Таблица.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт |ИЗ | (ВЫБРАТЬ | ОстаткиИОбороты.Субконто1 КАК Субконто1, | ОстаткиИОбороты.Субконто2 КАК Субконто2, | ОстаткиИОбороты.Счет КАК Счет, | ОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт, | ОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт, | ОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | ОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ,Счет В(&Счет), , " + условия + ") КАК ОстаткиИОбороты) КАК Таблица |"; КонецЕсли; |
|||
1
Fragster
гуру
13.11.12
✎
15:07
|
наверное дело в РАЗРЕШЕННЫЕ.
|
|||
2
Fragster
гуру
13.11.12
✎
15:08
|
а вообще - какой-то странный отчет
|
|||
3
zak555
13.11.12
✎
15:08
|
убрать вложение
|
|||
4
TormozIT
гуру
13.11.12
✎
15:10
|
(1) Проверяется под ролью без RLS. Если дело в RLS, то обычно приведение к типу или отключение лишних выбранных полей помогает.
|
|||
5
TormozIT
гуру
13.11.12
✎
15:11
|
(4) + Если дело в RLS, то в техножурнале будет видна разница между запросами и это часто помогает быстрее понять что нужно сделать для ускорения.
|
|||
6
Polzovatel
13.11.12
✎
15:13
|
У всех пользователей полные прова может вообще убрать РАЗРЕШЕННЫЕ
Но странно что до 2.0.40.9 нормально работал а сейчас очень долго |
|||
7
Polzovatel
13.11.12
✎
15:13
|
(3) убрать вообще или изменить запрос?
|
|||
8
TormozIT
гуру
13.11.12
✎
15:13
|
(0) В виде кода на встроенном языке оптимизацию сложнее делать. Отлови запрос любой консолью и выложи сюда в виде непосредственного текста запроса со значениями параметров.
|
|||
9
zak555
13.11.12
✎
15:14
|
(7) зачем тебе вложение ?
|
|||
10
Polzovatel
13.11.12
✎
15:15
|
(9) я хз не моя обработка...
|
|||
11
Rovan
гуру
13.11.12
✎
15:15
|
(0) итоги регистров рассчитаны ?
|
|||
12
Polzovatel
13.11.12
✎
15:17
|
(11) да все нормально рассчитывает только очень долго
(8) Отлови запрос любой КОНСОЛЬЮ и выложи сюда в виде непосредственного текста запроса со значениями параметров. для меня это пока сложные слова... |
|||
13
zak555
13.11.12
✎
15:20
|
(10) так переписывай всё
|
|||
14
Лефмихалыч
13.11.12
✎
15:21
|
(0) как минимум - четвертый параметр виртуальной таблицы заполни массивом с нужными видами субконто
|
|||
15
Polzovatel
13.11.12
✎
15:25
|
(13) придется переписывать... такие задержки в работе данной обработки не кого не устраивают, думал просто что при обновлениях что то поменялось в регистрах но не нашел ничего нового
(14) Все есть вроде Счета = Новый Массив(); Если сч1001 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01")); КонецЕсли; Если сч1002 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.02")); КонецЕсли; Если сч1003 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.03")); КонецЕсли; Если сч1004 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.04")); КонецЕсли; Если сч1005 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.05")); КонецЕсли; Если сч1006 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.06")); КонецЕсли; Если сч1007 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.07")); КонецЕсли; Если сч1008 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.08")); КонецЕсли; Если сч1009 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.09")); КонецЕсли; Если сч1010 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.10")); КонецЕсли; Если сч1012 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.12")); КонецЕсли; Если сч21 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("21")); КонецЕсли; Если сч41 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")); КонецЕсли; Если сч43 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("43")); КонецЕсли; Если сч07 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("07")); КонецЕсли; Если Счета.Количество() < 1 И (Не сч003) И (Не счМЦ) Тогда Предупреждение("Не выбран счет"); Возврат; КонецЕсли; |
|||
16
Polzovatel
13.11.12
✎
15:27
|
Да я говорю же обработка корректно работала и довольно быстро но после обновления стала тормажить
|
|||
17
Лефмихалыч
13.11.12
✎
15:27
|
(15) чукча-писатель, прочитай внимательно (14)
|
|||
18
Polzovatel
13.11.12
✎
15:29
|
Кстати если база к примеру на моем компе нормально отрабатывает а если на другом компе (локально подключаюсь) задержки в 5 мин при формировании отчета
|
|||
19
Polzovatel
13.11.12
✎
15:32
|
(14) конкретнее можно?
|
|||
20
zak555
13.11.12
✎
15:32
|
(13) после третей запятой идёт четвёртый параметр
|
|||
21
Polzovatel
13.11.12
✎
15:35
|
(20) в загадки какие то играем не легче написать строчку или слово???
Четвертый параметр и после третей запятой идёт четвёртый параметр я понимаю Таблица.Счет так? |
|||
22
Лефмихалыч
13.11.12
✎
15:40
|
(19) внимание, сейчас будет конкретно
РегистрБухгалтерииМенеджер.<Имя регистра бухгалтерии> (AccountingRegisterManager.<Имя регистра бухгалтерии>) Обороты (Turnovers) Синтаксис: Обороты(<НачалоПериода>, <КонецПериода>, <ВидыСубконто>, <ВидыКор.Субконто>, <Отбор>, <Измерения>, <Ресурсы>) Параметры: <НачалоПериода> (необязательный) Тип: Дата; МоментВремени; Граница. Момент времени, начиная с которого необходимо получить обороты. Если параметр не указан, то обороты будут получены начиная с момента ведения базы данных. Если в качестве параметра передана Дата или МоментВремени, то обороты за указанную дату (момент времени) будут включены в результирующую таблицу значений. <КонецПериода> (необязательный) Тип: Дата; МоментВремени; Граница. Момент времени, определяющий конец периода за который необходимо получить обороты. Если параметр не указан, то обороты будут получены до самого позднего движения регистра. Если в качестве параметра передана Дата или МоментВремени, то обороты за указанную дату (момент времени) будут включены в результирующую таблицу значений. <ВидыСубконто> (необязательный) Тип: ПланВидовХарактеристикСсылка.<Имя плана видов характеристик>; Массив; ФиксированныйМассив. Передается ссылка, или массив ссылок, или фиксированный массив ссылок на виды субконто. Виды субконто определяют, какие значения субконто будут доступны по именам "Субконто1", "Субконто2" и т.д. Кроме того, обороты будут посчитаны только по счетам, имеющим заданные виды субконто. Если виды субконто не заданы, то обращение к значениям субконто осуществляется по порядку (индексу), как они определены на соответствующем счете. Параметр не существует, если при конфигурировании для плана счетов не указаны субконто. <ВидыКор.Субконто> (необязательный) <<!!!!! КОНКРЕТНО СЮДА ЧИТАЙ!!!!!<<<< Тип: ПланВидовХарактеристикСсылка.<Имя плана видов характеристик>; Массив; ФиксированныйМассив. Передается ссылка, или массив ссылок, или фиксированный массив ссылок на виды субконто. Виды кор. субконто определяют, какие значения корреспондирующих субконто будут доступны по именам "КорСубконто1", "КорСубконто2" и т.д. Кроме того, обороты будут посчитаны только по кор. счетам, имеющим заданные виды кор. субконто. Если виды кор. субконто не заданы, то обращение к значениям кор. субконто осуществляется по порядку (индексу), как они определены на соответствующем счете. Важно! Имеет смысл только для регистра бухгалтерии с поддержкой корреспонденцией. Для регистра без корреспонденции параметр не существует! Параметр не существует, если при конфигурировании для плана счетов не указаны субконто. <Отбор> (необязательный) Тип: Структура. Структура, содержащая набор значений измерений регистра, по которым надо отбирать итоги. Допустимые значения ключа: Счет, Субконто<Номер>, <Имя измерения>, КорСчет, КорСубконто<Номер>, <Имя измерения>Кор (только для не балансовых измерений). Если параметр не указан, то отбор не используется. <Измерения> (необязательный) Тип: Строка, Неопределено. Список измерений, для которых надо получить обороты. Строка, содержащая имена измерений, разделенных запятыми. Допустимые имена измерений: Счет, Субконто<Номер>, <Имя измерения>, КорСчет, КорСубконто<Номер>, <Имя измерения>Кор. Если параметр не указан или указано Неопределено, то обороты будут сформированы по всем измерениям. Значение по умолчанию: Неопределено. <Ресурсы> (необязательный) Тип: Строка, Неопределено. Список ресурсов, для которых надо получить обороты. Строка, содержащая имена ресурсов, разделенных запятыми. Если параметр не указан или указано Неопределено, то обороты будут сформированы по всем ресурсам. Значение по умолчанию: Неопределено. Возвращаемое значение: Тип: ТаблицаЗначений. В таблице содержатся поля "ОборотДт" и "ОборотКт". Описание: Получает обороты по регистру бухгалтерии на заданный момент. Обороты получаются в разрезе заданных измерений и по заданным ресурсам. В измерения входят счет, субконто, измерения, кор. счет, кор. субконто, кор. измерения. Доступность: Сервер, толстый клиент, внешнее соединение. Примечание: Параметры "Виды субконто" и "Виды кор. субконто" не существуют, если при конфигурировании для плана счетов не указаны субконто. |
|||
23
Polzovatel
13.11.12
✎
15:44
|
(22) вот это конкретнее некуда...Спасибо большое
|
|||
24
Polzovatel
14.11.12
✎
11:30
|
Так и не получилось увеличить скорость выполнения запроса...
В запросе использоваться РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты а так же я не нашел <ВидыКор.Субконто> Важно! Имеет смысл только для регистра бухгалтерии с поддержкой корреспонденцией. Для регистра без корреспонденции параметр не существует! Параметр не существует, если при конфигурировании для плана счетов не указаны субконто. Писал РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ДвиженияИГраницыПериода,Счет В(&Счет), , " + условия + ") КАК ОстаткиИОбороты) КАК Таблица или РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , Движения,Счет В(&Счет), , " + условия + ") КАК ОстаткиИОбороты) КАК Таблица Разницы по времени формирования нет. Подскажи те что еще может быть не так? |
|||
25
НЕА123
14.11.12
✎
11:37
|
(24)
ВЫРАЗИТЬ() не пробовал? |
|||
26
Polzovatel
14.11.12
✎
11:41
|
(25) нет а где использовать?
|
|||
27
НЕА123
14.11.12
✎
11:46
|
(26)
имел ввиду Выразить(Таблица.Субконто2 КАК Справочник.Склады) КАК Склад но, скорее всего не поможет. |
|||
28
Polzovatel
14.11.12
✎
11:48
|
(27) нет не погло
|
|||
29
Polzovatel
14.11.12
✎
11:49
|
не помогло
|
|||
30
Fragster
гуру
14.11.12
✎
11:55
|
Выразить надо во внутреннем запросе
|
|||
31
TormozIT
гуру
14.11.12
✎
11:57
|
По-взрослому, здесь нужно использовать техножурнал, чтобы увидеть, что за запрос SDBL и SQL порождается этим запросом 1С. Далее уже будет понятно где имеет смысл применять ВЫРАЗИТЬ и где прицепляется тяжелый RLS.
|
|||
32
Fragster
гуру
14.11.12
✎
12:01
|
(31) ну, проще, наверное, http://infostart.ru/public/56973/
|
|||
33
TormozIT
гуру
14.11.12
✎
12:09
|
(32) Я это давно уже видел. Если сравнивать с голым техножурналом, то согласен во ряде отношений проще.
Но если взять анализ (трассы) техножурнала из ИР, то выигрывает только наглядным показом плана запроса. Проигрывает отсутствием явной связи выполненного запроса 1С и батча SQL, отсутствием понятных названий таблиц, полей нет, значений параметров, отсутствием возможности построить и проанализировать дерево запроса и др. |
|||
34
Polzovatel
14.11.12
✎
12:10
|
Меня больше смущает что до релиза 2.0.40.10 отчет достаточно быстро формировался а в 2.0.41.4 в разы уменьшилась скорость или простое совпадение
база файловая, права у всех кто работает с отчетом полные |
|||
35
Polzovatel
14.11.12
✎
12:14
|
Может вся процедура поможет
Процедура РасчетЗапроса() Запрос=Новый Запрос(); Отбор = Новый Структура; Таблица = Новый ТаблицаЗначений(); Запрос.УстановитьПараметр("ДатаНач", НачалоДня(ДатаНач)); Запрос.УстановитьПараметр("ДатаКон", КонецДня(ДатаКон)); Счета = Новый Массив(); Если сч1001 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.01")); КонецЕсли; Если сч1002 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.02")); КонецЕсли; Если сч1003 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.03")); КонецЕсли; Если сч1004 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.04")); КонецЕсли; Если сч1005 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.05")); КонецЕсли; Если сч1006 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.06")); КонецЕсли; Если сч1007 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.07")); КонецЕсли; Если сч1008 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.08")); КонецЕсли; Если сч1009 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.09")); КонецЕсли; Если сч1010 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.10")); КонецЕсли; Если сч1012 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("10.12")); КонецЕсли; Если сч21 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("21")); КонецЕсли; Если сч41 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01")); КонецЕсли; Если сч43 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("43")); КонецЕсли; Если сч07 Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("07")); КонецЕсли; Если Счета.Количество() < 1 И (Не сч003) И (Не счМЦ) Тогда Предупреждение("Не выбран счет"); Возврат; КонецЕсли; условия = ""; условия003 = ""; Если Склады.Количество() <> 0 Тогда условия = условия + " И Субконто2 В ИЕРАРХИИ (&Склады) "; Запрос.УстановитьПараметр("Склады",Склады); Если Сч003 Тогда условия003 = условия003 + " И Субконто3 В ИЕРАРХИИ (&Склады) "; Запрос.УстановитьПараметр("Склады",Склады); КонецЕсли; КонецЕсли; Если Материалы.Количество() <> 0 Тогда условия = условия + " И Субконто1 В ИЕРАРХИИ (&Материалы) "; Запрос.УстановитьПараметр("Материалы",Материалы); Если Сч003 Тогда условия003 = условия003 + " И Субконто2 В ИЕРАРХИИ (&Материалы) "; Запрос.УстановитьПараметр("Материалы",Материалы); КонецЕсли; КонецЕсли; Если условия <> "" Тогда условия =Прав(условия,СтрДлина(условия) - 3); КонецЕсли; Если условия003<> "" Тогда условия003 =Прав(условия003,СтрДлина(условия003) - 3); КонецЕсли; Запрос.УстановитьПараметр("Счет",Счета); Если деньги Тогда ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// Если Счета.Количество() <> 0 Тогда Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Таблица.Субконто1 КАК МПЗ, | Таблица.Субконто2 КАК Склад, | Таблица.Субконто2 КАК Владелец1, | Таблица.Счет, | Таблица.СуммаОборотДт КАК СуммаОборотДт, | Таблица.СуммаОборотКт КАК СуммаОборотКт, | Таблица.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт, | Таблица.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт, | Таблица.КоличествоОборотДт КАК КоличествоОборотДт, | Таблица.КоличествоОборотКт КАК КоличествоОборотКт, | Таблица.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | Таблица.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт |ИЗ | (ВЫБРАТЬ | ОстаткиИОбороты.Субконто1 КАК Субконто1, | ОстаткиИОбороты.Субконто2 КАК Субконто2, | ОстаткиИОбороты.Счет КАК Счет, | ОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт, | ОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт, | ОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт, | ОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт, | ОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт, | ОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт, | ОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | ОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ,Счет В(&Счет), , " + условия + ") КАК ОстаткиИОбороты) КАК Таблица |"; КонецЕсли; Если Сч003 Тогда Запрос.УстановитьПараметр("Счет1",ПланыСчетов.Хозрасчетный.НайтиПоКоду("003.01")); Если Счета.Количество() <> 0 Тогда Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ "; КонецЕсли; Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ | Таблица.Субконто2 КАК МПЗ, | Таблица.Субконто3 КАК Склад, | Таблица.Субконто1 КАК Владелец1, | Таблица.Счет, | Таблица.СуммаОборотДт КАК СуммаОборотДт, | Таблица.СуммаОборотКт КАК СуммаОборотКт, | Таблица.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт, | Таблица.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт, | Таблица.КоличествоОборотДт КАК КоличествоОборотДт, | Таблица.КоличествоОборотКт КАК КоличествоОборотКт, | Таблица.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | Таблица.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт |ИЗ | (ВЫБРАТЬ | ОстаткиИОбороты.Субконто1 КАК Субконто1, | ОстаткиИОбороты.Субконто2 КАК Субконто2, | ОстаткиИОбороты.Субконто3 КАК Субконто3, | ОстаткиИОбороты.Счет КАК Счет, | ОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт, | ОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт, | ОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт, | ОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт, | ОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт, | ОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт, | ОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | ОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ,Счет В(&Счет1), , " + условия003 + ") КАК ОстаткиИОбороты) КАК Таблица |"; КонецЕсли; Если СчМЦ Тогда Запрос.УстановитьПараметр("Счет2",ПланыСчетов.Хозрасчетный.НайтиПоКоду("МЦ.05")); Если Счета.Количество() <> 0 Или сч003 Тогда Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ "; КонецЕсли; Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ | Таблица.Субконто1 КАК МПЗ, | Таблица.Субконто2 КАК Склад, | Таблица.Субконто3 КАК Владелец1, | Таблица.Счет, | Таблица.СуммаОборотДт КАК СуммаОборотДт, | Таблица.СуммаОборотКт КАК СуммаОборотКт, | Таблица.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт, | Таблица.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт, | Таблица.КоличествоОборотДт КАК КоличествоОборотДт, | Таблица.КоличествоОборотКт КАК КоличествоОборотКт, | Таблица.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | Таблица.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт |ИЗ | (ВЫБРАТЬ | ОстаткиИОбороты.Субконто1 КАК Субконто1, | ОстаткиИОбороты.Субконто2 КАК Субконто2, | ОстаткиИОбороты.Субконто3 КАК Субконто3, | ОстаткиИОбороты.Счет КАК Счет, | ОстаткиИОбороты.СуммаОборотДт КАК СуммаОборотДт, | ОстаткиИОбороты.СуммаОборотКт КАК СуммаОборотКт, | ОстаткиИОбороты.СуммаНачальныйОстатокДт КАК СуммаНачальныйОстатокДт, | ОстаткиИОбороты.СуммаКонечныйОстатокДт КАК СуммаКонечныйОстатокДт, | ОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт, | ОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт, | ОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | ОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ,Счет В(&Счет2), , " + условия + ") КАК ОстаткиИОбороты) КАК Таблица |"; КонецЕсли; Запрос.Текст = Запрос.Текст + " |ИТОГИ | СУММА(КоличествоОборотДт), | СУММА(КоличествоОборотКт), | СУММА(КоличествоНачальныйОстатокДт), | СУММА(КоличествоКонечныйОстатокДт), | СУММА(СуммаОборотДт), | СУММА(СуммаОборотКт), | СУММА(СуммаНачальныйОстатокДт), | СУММА(СуммаКонечныйОстатокДт) |ПО | ОБЩИЕ, | МПЗ, | Склад"; ///////////////////////////////////////////////////////////////////////////////////////////////// Иначе Если Счета.Количество() <> 0 Тогда Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Таблица.Субконто1 КАК МПЗ, | Таблица.Субконто2 КАК Склад, | Таблица.Субконто2 КАК Владелец1, | Таблица.Счет, | Таблица.КоличествоОборотДт КАК КоличествоОборотДт, | Таблица.КоличествоОборотКт КАК КоличествоОборотКт, | Таблица.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | Таблица.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт |ИЗ | (ВЫБРАТЬ | ОстаткиИОбороты.Субконто1 КАК Субконто1, | ОстаткиИОбороты.Субконто2 КАК Субконто2, | ОстаткиИОбороты.Счет КАК Счет, | ОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт, | ОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт, | ОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | ОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ,Счет В(&Счет), , " + условия + ") КАК ОстаткиИОбороты) КАК Таблица |"; КонецЕсли; Если Сч003 Тогда Запрос.УстановитьПараметр("Счет1",ПланыСчетов.Хозрасчетный.НайтиПоКоду("003.01")); Если Счета.Количество() <> 0 Тогда Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ "; КонецЕсли; Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ | Таблица.Субконто2 КАК МПЗ, | Таблица.Субконто3 КАК Склад, | Таблица.Субконто1 КАК Владелец1, | Таблица.Счет, | Таблица.КоличествоОборотДт КАК КоличествоОборотДт, | Таблица.КоличествоОборотКт КАК КоличествоОборотКт, | Таблица.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | Таблица.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт |ИЗ | (ВЫБРАТЬ | ОстаткиИОбороты.Субконто1 КАК Субконто1, | ОстаткиИОбороты.Субконто2 КАК Субконто2, | ОстаткиИОбороты.Субконто3 КАК Субконто3, | ОстаткиИОбороты.Счет КАК Счет, | ОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт, | ОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт, | ОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | ОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ,Счет В(&Счет1), , " + условия003 + ") КАК ОстаткиИОбороты) КАК Таблица |"; КонецЕсли; Если СчМЦ Тогда Запрос.УстановитьПараметр("Счет2",ПланыСчетов.Хозрасчетный.НайтиПоКоду("МЦ.05")); Если Счета.Количество() <> 0 Или сч003 Тогда Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ "; КонецЕсли; Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ | Таблица.Субконто1 КАК МПЗ, | Таблица.Субконто2 КАК Склад, | Таблица.Субконто3 КАК Владелец1, | Таблица.Счет, | Таблица.КоличествоОборотДт КАК КоличествоОборотДт, | Таблица.КоличествоОборотКт КАК КоличествоОборотКт, | Таблица.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | Таблица.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт |ИЗ | (ВЫБРАТЬ | ОстаткиИОбороты.Субконто1 КАК Субконто1, | ОстаткиИОбороты.Субконто2 КАК Субконто2, | ОстаткиИОбороты.Субконто3 КАК Субконто3, | ОстаткиИОбороты.Счет КАК Счет, | ОстаткиИОбороты.КоличествоОборотДт КАК КоличествоОборотДт, | ОстаткиИОбороты.КоличествоОборотКт КАК КоличествоОборотКт, | ОстаткиИОбороты.КоличествоНачальныйОстатокДт КАК КоличествоНачальныйОстатокДт, | ОстаткиИОбороты.КоличествоКонечныйОстатокДт КАК КоличествоКонечныйОстатокДт | ИЗ | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&ДатаНач, &ДатаКон, , ,Счет В(&Счет2), , " + условия + ") КАК ОстаткиИОбороты) КАК Таблица |"; КонецЕсли; КонецЕсли; Выборка = Запрос.Выполнить().Выгрузить(); Если Выборка.Количество() = 0 Тогда ВидимостьНастроек(Истина); Предупреждение("Склад пуст",10); Возврат; КонецЕсли; Запрос.Текст = ""; Если ПоДокументам Тогда Если СчМЦ Тогда Счета.Добавить(ПланыСчетов.Хозрасчетный.НайтиПоКоду("МЦ.05")); Запрос.УстановитьПараметр("Счет",Счета); КонецЕсли; Если Счета.Количество() <> 0 Тогда Запрос.Текст="ВЫБРАТЬ РАЗЛИЧНЫЕ | ХозрасчетныйОбороты.КоличествоОборотДт Как КоличествоОборотДт, | ХозрасчетныйОбороты.КоличествоОборотКт Как КоличествоОборотКт, | ХозрасчетныйОбороты.СуммаОборотДт Как СуммаОборотДт, | ХозрасчетныйОбороты.СуммаОборотКт Как СуммаОборотКт, | ХозрасчетныйОбороты.Субконто1 Как МПЗ, | ХозрасчетныйОбороты.Субконто2 Как Склад, | ХозрасчетныйОбороты.Счет Как Счет, | ХозрасчетныйОбороты.Регистратор Как Регистратор, | ХозрасчетныйОбороты.Регистратор.Дата Как Момент |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач,&ДатаКон,Регистратор, Счет В(&Счет),,"+условия+") КАК ХозрасчетныйОбороты | Упорядочить по Момент"; КонецЕсли; Если сч003 Тогда Если Счета.Количество() <> 0 Тогда Запрос.Текст = Запрос.Текст + " ОБЪЕДИНИТЬ ВСЕ "; КонецЕсли; Запрос.Текст = Запрос.Текст + "ВЫБРАТЬ РАЗЛИЧНЫЕ | ХозрасчетныйОбороты.КоличествоОборотДт Как КоличествоОборотДт, | ХозрасчетныйОбороты.КоличествоОборотКт Как КоличествоОборотКт, | ХозрасчетныйОбороты.СуммаОборотДт Как СуммаОборотДт, | ХозрасчетныйОбороты.СуммаОборотКт Как СуммаОборотКт, | ХозрасчетныйОбороты.Субконто2 Как МПЗ, | ХозрасчетныйОбороты.Субконто3 Как Склад, | ХозрасчетныйОбороты.Счет Как Счет, | ХозрасчетныйОбороты.Регистратор Как Регистратор, | ХозрасчетныйОбороты.Регистратор.Дата Как Момент |ИЗ | РегистрБухгалтерии.Хозрасчетный.Обороты(&ДатаНач,&ДатаКон,Регистратор, Счет В(&Счет1),,"+условия003+") КАК ХозрасчетныйОбороты | Упорядочить по Момент"; КонецЕсли; ТабДокументы = Запрос.Выполнить().Выгрузить(); КонецЕсли; Если деньги Тогда Макет = ПолучитьМакет("Макет"); Иначе Макет = ПолучитьМакет("Макет1"); КонецЕсли; Если деньги Тогда Итоги = Макет.ПолучитьОбласть("Итоги"); Итоги.Параметры.ИСН = Выборка[0].СуммаНачальныйОстатокДт; Итоги.Параметры.ИСП = Выборка[0].СуммаОборотДт; Итоги.Параметры.ИСР = Выборка[0].СуммаОборотКт;; Итоги.Параметры.ИСК = Выборка[0].СуммаКонечныйОстатокДт;; КонецЕсли; Выборка.Сортировать("Склад,МПЗ,Счет Убыв"); ПолеОтчета = ЭлементыФормы.ПолеОтчета; Заг = Макет.ПолучитьОбласть("Заголовок"); Заг.Параметры.Организация = Справочники.Организации.НайтиПоКоду("000000001").ПолноеНаименование(); Заг.Параметры.ДатаНач = ДатаНач; Заг.Параметры.ДатаКон = ДатаКон; Заг.Параметры.Параметры = ?(Склады.Количество() = 0,"",Строка(Склады))+" "+?(Материалы.Количество() = 0, "",Строка(Материалы)); ПолеОтчета.Вывести(Заг); Шапка = Макет.ПолучитьОбласть("ШапкаТаблицы"); ПолеОтчета.Вывести(Шапка); Склад = ""; МПЗ = ""; Для Каждого Элем Из Выборка Цикл Если Элем.Склад = NULL Или Элем.Счет = NULL Или (Элем.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("003.01") И Элем.Владелец1 = Null) Тогда Продолжить КонецЕсли; Если Склад <> Элем.Склад Тогда СкладСтрока = Макет.ПолучитьОбласть("Склад"); Склад = Элем.Склад; МПЗ = ""; СкладСтрока.Параметры.Склад = Строка(Элем.Склад); ПолеОтчета.Вывести(СкладСтрока); КонецЕсли; Если Элем.Склад <> NULL Тогда Строка = Макет.ПолучитьОбласть("Строка"); МПЗ = Элем.МПЗ; Строка.Параметры.МПЗ = Строка(Элем.МПЗ)+ " [" + СокрЛП(Строка(Элем.МПЗ.Код)) + "]"; Если владелец И ((Элем.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("003.01")) Или (Элем.Счет = ПланыСчетов.Хозрасчетный.НайтиПоКоду("МЦ.05"))) Тогда Строка.Параметры.МПЗ = Строка.Параметры.МПЗ + " {" + Элем.Владелец1 + "}"; КонецЕсли; Строка.Параметры.Ед = СокрЛП(Строка(Элем.МПЗ.БазоваяЕдиницаИзмерения)); Если деньги Тогда Строка.Параметры.Счет = Строка(Элем.Счет); КонецЕсли; Строка.Параметры.КН = Элем.КоличествоНачальныйОстатокДт; Строка.Параметры.КП = Элем.КоличествоОборотДт; Строка.Параметры.КР = Элем.КоличествоОборотКт; Строка.Параметры.КК = Элем.КоличествоКонечныйОстатокДт; Если деньги Тогда Строка.Параметры.СН = Элем.СуммаНачальныйОстатокДт; Строка.Параметры.ЦН = ?(Элем.КоличествоНачальныйОстатокДт = 0, 0, Элем.СуммаНачальныйОстатокДт/Элем.КоличествоНачальныйОстатокДт); Строка.Параметры.СП = Элем.СуммаОборотДт; Строка.Параметры.ЦП = ?(Элем.КоличествоОборотДт = 0, 0, Элем.СуммаОборотДт/Элем.КоличествоОборотДт); Строка.Параметры.СР = Элем.СуммаОборотКт; Строка.Параметры.ЦР = ?(Элем.КоличествоОборотКт = 0, 0, Элем.СуммаОборотКт/Элем.КоличествоОборотКт); Строка.Параметры.СК = Элем.СуммаКонечныйОстатокДт; Строка.Параметры.ЦК = ?(Элем.КоличествоКонечныйОстатокДт = 0, 0, Элем.СуммаКонечныйОстатокДт/Элем.КоличествоКонечныйОстатокДт); КонецЕсли; Если Не ПолеОтчета.ПроверитьВывод(Строка) Тогда ПолеОтчета.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПолеОтчета.Вывести(Строка); КонецЕсли; Если ПоДокументам Тогда //------------------------------------------------------------------------------------------------------------------------------- Отбор.Вставить("МПЗ",Элем.МПЗ); Отбор.Вставить("Склад",Элем.Склад); Отбор.Вставить("Счет",Элем.Счет); Таблица = ТабДокументы.Скопировать(Отбор); Отбор.Очистить(); Для каждого элем1 из Таблица Цикл Док = Макет.ПолучитьОбласть("Документ"); Док.Параметры.Документ = Элем1.Регистратор; Док.Параметры.КП = Элем1.КоличествоОборотДт; Док.Параметры.КР = Элем1.КоличествоОборотКт; Если деньги Тогда Док.Параметры.СП = Элем1.СуммаОборотДт; Док.Параметры.ЦП = ?(Элем1.КоличествоОборотДт = 0, 0, Элем1.СуммаОборотДт/Элем1.КоличествоОборотДт); Док.Параметры.СР = Элем1.СуммаОборотКт; Док.Параметры.ЦР = ?(Элем1.КоличествоОборотКт = 0, 0, Элем1.СуммаОборотКт/Элем1.КоличествоОборотКт); КонецЕсли; Если Не ПолеОтчета.ПроверитьВывод(Док) Тогда ПолеОтчета.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПолеОтчета.Вывести(Док); КонецЦикла; //------------------------------------------------------------------------------------------------------------------------------- КонецЕсли; КонецЦикла; Если деньги Тогда ПолеОтчета.Вывести(Итоги); КонецЕсли; ПолеОтчета.ТолькоПросмотр=Истина; ПолеОтчета.Показать(); КонецПроцедуры |
|||
36
TormozIT
гуру
14.11.12
✎
12:18
|
(35) Еще раз тебе повторяю, что нужен непосредственно запрос 1С со значениями параметров, а не программный код. Ты затрудняешь задачу "помочь тебе".
|
|||
37
TormozIT
гуру
14.11.12
✎
12:20
|
(34) Например это могло произойти из-за добавленного RLS на таблицу, которая (возможно неявно) участвует в запросе. Также возможно изменился (расширился) состав возможных типов субконто, что добавило новых (неявных) соединений во внутренний запрос платформы.
|
|||
38
Fragster
гуру
14.11.12
✎
12:23
|
(33) ну, мы на этих выходных на 8.2 перешли, твою подсистему заценим
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |