Имя: Пароль:
1C
1С v8
Долгий отчет
,
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 перешли, твою подсистему заценим