Новости для бухгалтера, бухучет, налогообложение, отчетность, ФСБУ, прослеживаемость и маркировка, 1С:Бухгалтерия

Вход или Регистрация

Показывать по 10 20 40 сообщений
Новая тема Ответить
Письмо в техподдержку 1С
[1С:Бухгалтерия 8]

Вопрос с запросом

Dsident
читатель
офлайн
Дата регистрации: 14.09.2010
Сообщений: 195
Пост №1
 
11.01.2012 08:26

"Написал простенький запрос:<br> <br><br><pre> Запрос = Новый Запрос;            Запрос.Текст =            "ВЫБРАТЬ            | ХозрасчетныйОстатки.КоличествоОстаток КАК Количество            |ИЗ            | РегистрБухгалтерии.Хозрасчетный.Остатки(&Период, , , ) КАК ХозрасчетныйОстатки            |ГДЕ            | ХозрасчетныйОстатки.Субконто1.Ссылка = &Номенклатура            | И ХозрасчетныйОстатки.Субконто2.Ссылка = &Склад            | И ХозрасчетныйОстатки.Счет = &Счет";            Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);            Запрос.УстановитьПараметр("Склад", Склад);            Запрос.УстановитьПараметр("Период", Дата);            Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01"));            ТЗ = Запрос.Выполнить().Выгрузить(); </pre><br><br> <br>Его задача - найти количественный остаток конкретной номенклатуры на указанную дату на указанном складе.<br> <br>Оно работает, но очень уж долго. Подскажите пожалуйста, как можно оптимизировать этот запрос, с целью сокращения времени его выполнения? Или нужно было писать по другому?"

Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20952
Пост №2
 
11.01.2012 09:48

Про параметры виртуальной таблицы что нибудь слышал?

Dsident
читатель
офлайн
Дата регистрации: 14.09.2010
Сообщений: 195
Пост №3
 
11.01.2012 10:11

"у меня там период задан *смущенно<br>То есть мысль в том, чтобы запихнуть туда все остальные параметры?<br> <br>Смотрим:<br>Субконто - у нас отбор по видам субконто, в рамках конкретной задачи, ИМХО, не нужно;<br>УсловиеСчета - выражение типа Булево, условие отбора счёта. Вот тут у меня вопрос - как записать такое условие? *чешет в затылке<br>Условие - произвольное выражение, возвращающее значение типа Булево. Опять же.... Как?<br> <br>Если не трудно - напишите, пожалуйста, пару примеров, чтобы я увидел, и больше не приставал с вопросами"

Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20952
Пост №4
 
11.01.2012 10:20

"<pre>// Вставить содержимое обработчика.<br> Запрос = Новый Запрос;<br>            Запрос.Текст =<br>            "ВЫБРАТЬ<br>            | ХозрасчетныйОстатки.КоличествоОстаток КАК Количество<br>            |ИЗ<br>            | РегистрБухгалтерии.Хозрасчетный.Остатки(<br>            |            &Период,<br>            |            Счет В ИЕРАРХИИ (&Счет),<br>            |            ,<br>            |            Субконто1 В ИЕРАРХИИ (&Номенклатура)<br>            |             И Субконто2 В ИЕРАРХИИ (&Склад)) КАК ХозрасчетныйОстатки";<br>            Запрос.УстановитьПараметр("Номенклатура", СтрокаТЧ.Номенклатура);<br>            Запрос.УстановитьПараметр("Склад", Склад);<br>            Запрос.УстановитьПараметр("Период", Дата);<br>            Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.ТоварыНаСкладе);<br>            ТЗ = Запрос.Выполнить().Выгрузить(); </pre>"

Dsident
читатель
офлайн
Дата регистрации: 14.09.2010
Сообщений: 195
Пост №5
 
11.01.2012 10:42

Спасибо, добрый человек!<br>Запомнил, записал)

Денис (САМАРА)
читатель
офлайн
Дата регистрации: 09.04.2008
Сообщений: 8351
Пост №6
 
11.01.2012 14:41

1. Почему проявляется пренебрежение к отбору по виду субконто? Его зря что ли придумали?<br>2. Судя по "СтрокаТЧ.Номенклатура" остатки нужно получать для всех товаров в табличной части, а не перебором строк каждый раз "дергать" таблицы регистров бух.учета.

Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20952
Пост №7
 
11.01.2012 15:38

- Если заранее известен счет, то явным определением порядка субконто можно пренебречь<br> - Попросили оптимизировать запрос, а не всю задачу.

Dsident
читатель
офлайн
Дата регистрации: 14.09.2010
Сообщений: 195
Пост №8
 
11.01.2012 18:29

в цикле получили остаток по конкретной номенклатуре - сравнили с количеством в ТЧ - если больше - то записываем в новую ТЗ1, дальше будем разбираться. Если =< - то нормально, пропускаем.<br>Получили новую ТЗ1. Теперь надо посмотреть, на каких складах есть остатки? Снова запрос и снова в цикл. Понятно, что запрос тут точно такой же, и повторяется столько раз, сколько у нас складов, но я не очень представляю, как можно использовать один запрос в данной задаче.<br>То, что нашлось (причем, элементы из ТЗ1, естественно, могут находиться на разных складах), записываем в ТЗ2, и на её основе делаем документы перемещения товаров, а то, чего на складах нет - делаем поступление.<br>Вот такая задачка.<br> <br>А как по другому? И будет ли это производительнее?

Prikum
активный пользователь
офлайн
Дата регистрации: 18.02.2002
Сообщений: 20952
Пост №9
 
11.01.2012 19:19

Тебе говорят, что не надо писать быдлокодом, формировать запрос в цикле, это не комильфо!

Dsident
читатель
офлайн
Дата регистрации: 14.09.2010
Сообщений: 195
Пост №10
 
11.01.2012 19:44

Не комильфо... не надо кричать, как умею, так и пишу. Главное - работает же, хоть и с вашей помощью.. Щас поеду домой, подумаю над оптимизацией.<br>Я еще не придумал другой алгоритм.<br>а у вас есть варианты?

Показывать по 10 20 40 сообщений

Читают тему:

Быстрый переход
Для технических специалистов
  • Книга жалоб и предложений по работе сайта
  • Для технических специалистов
  • Представление регламентированной отчетности
  • Говорильня
  • Бухгалтерский учет: обсуждаем проекты нормативных актов и рекомендаций по ведению учета от БМЦ
  • Новый порядок применения ККТ (онлайн кассы с передачей сведений в ФНС)
  • Интернет-конференция: Оформление командировок по новым правилам
  • МАРКИРОВКА
  • ЕГАИС
  • Учет, налогообложение, автоматизация