Осуществление движения через запрос
Показывать по
сообщений
- 1
- 2
03.08.2012
16:59
#1
Возникла такая проблема: Нужно, чтобы движения по регистрам было реализовано не перебором табличной части, а выполнением единственного запроса. <br><br>Есть регистр накопления "Остатки Товаров". Измерения: СкладКомпании, Номенклатура. Ресурсы: Остаток. <br>Есть документ, через который осуществляется движение. <br><br>С вариантом перебора табличной части всё просто, но как сделать запросом понять не могу, так как только начал осваивать 1С.
03.08.2012
18:56
#3
Чтобы повысть быстродействие. Задача такая поставлена, но в иннете примеров я найти пока не смог.
03.08.2012
20:00
#4
Покажите результат замера производительности текущего алгоритма. По нему подскажу где можно оптимизировать код.
03.08.2012
20:36
#5
Тут просто задача стоит: "Движения по регистрам должны быть реализованные не перебором табличной части, а выполнением единственного запроса". Когда я спросил: "Зачем так маяться?", мне обьяснили, что при большом кол-ве данных программа, в которой есть табличная часть, будет перебирать большое кол-во значений, и в следствии чего программа будет дольше соображать. В самом модуле документа табличных частей быть не должно, а должны быть только запросы ( в том числе могут быть и по табличным частям).
03.08.2012
23:05
#6
"Подойдет?<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>На форме реквизит склад в шапке, в тч только номенклатура и остаток."
04.08.2012
15:40
#7
Bloodwiser, огромное вам спасибо! Смог разобраться и переписать под свою конфигурацию. Есть такая проблема, что движение осуществилось, но при просмотра регистра все поля пустые, но думаю смогу разобраться. Ещё раз огромное спасибо!
04.08.2012
19:16
#8
Названия измерений/ресурсов регистра не совпадают с названиями в запросе. В синтаксис помошнике смотреть "ЗаполнитьЗначенияСвойств"
05.08.2012
18:49
#9
"Нашел такую проблему. Во время движения, если выбирать значения из табличной части, то всё нормально и движение в регистр осуществляется.<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>Как можно решить данную проблему?"
- 1
- 2
Читают тему
(гостей: 1)