Осуществление движения через запрос

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

Читают тему

(гостей: 1)

Быстрый переход