Добрый день. Подскажите, как можно быстро найти последние приходы для каждого из элементов номенклатуры.
---
OrenLiTo, Советую перейти на прямые запросы. Работает в разы быстрее. Вот небольшой пример поиска самой свежей (последней партии) по регистру остатков.
//инициализируем текст прямого параметризированного запроса для получения последней (самой свежей) партии товара на Основном складе
 ТекстЗапросаПоследняяПартия="
 |DECLARE @Tov Char(9)
 |SET @Tov = ?
 |SELECT TOP 1
 | $РегОст.Партия AS [Партия $Документ]
 |FROM
 | $РегистрИтоги.ОстаткиТоваров AS РегОст
 | LEFT JOIN _1SJourn AS Журнал ON
 | Журнал.IDDoc=Right($РегОст.Партия,9)
 |WHERE
 | РегОст.Period = :ДатаТА AND
 | $РегОст.Товар = @Tov AND
 | $РегОст.Склад = :ОснСкл AND
 | $РегОст.ОстатокТовара > 0
 |ORDER BY Журнал.DocNo Desc
 |";
 ЗапросSQLПоследняяПартия = СоздатьОбъект("ODBCRecordset");
 ЗапросSQLПоследняяПартия.УстановитьТекстовыйПараметр("ДатаТА",НачМесяца(ПолучитьДатуТА()));
 ЗапросSQLПоследняяПартия.УстановитьТекстовыйПараметр("ОснСкл",Константа.ОснСклад);
 ЗапросSQLПоследняяПартия.Подготовить(ТекстЗапросаПоследняяПартия);
 ЗапросSQLПоследняяПартия.ДобПараметр(1,14,9,0);
 ЗапросSQLПоследняяПартия.РежимRPC(1);

Регистр остатков имеет 3 измерения: Товар, Склад, Партия. (партия это ссылка на документ прихода). Запрос возвращает ссылку на последний документ прихода по которому имеются остатки на складе. Раньше этот запрос выполнялся стандартными методами 1с. После перехода на прямой запрос ускорение было порядка 10 раз. Так что советую потратить неделю-две времени на изучение прямых запросов. Потраченное на это время, окупится сторицей.
---
OrenLiTo, Советую перейти на прямые запросы. Работает в разы быстрее. Вот небольшой пример поиска самой свежей (последней партии) по регистру остатков.
//инициализируем текст прямого параметризированного запроса для получения последней (самой свежей) партии товара на Основном складе
 ТекстЗапросаПоследняяПартия="
 |DECLARE @Tov Char(9)
 |SET @Tov = ?
 |SELECT TOP 1
 | $РегОст.Партия AS [Партия $Документ]
 |FROM
 | $РегистрИтоги.ОстаткиТоваров AS РегОст
 | LEFT JOIN _1SJourn AS Журнал ON
 | Журнал.IDDoc=Right($РегОст.Партия,9)
 |WHERE
 | РегОст.Period = :ДатаТА AND
 | $РегОст.Товар = @Tov AND
 | $РегОст.Склад = :ОснСкл AND
 | $РегОст.ОстатокТовара > 0
 |ORDER BY Журнал.DocNo Desc
 |";
 ЗапросSQLПоследняяПартия = СоздатьОбъект("ODBCRecordset");
 ЗапросSQLПоследняяПартия.УстановитьТекстовыйПараметр("ДатаТА",НачМесяца(ПолучитьДатуТА()));
 ЗапросSQLПоследняяПартия.УстановитьТекстовыйПараметр("ОснСкл",Константа.ОснСклад);
 ЗапросSQLПоследняяПартия.Подготовить(ТекстЗапросаПоследняяПартия);
 ЗапросSQLПоследняяПартия.ДобПараметр(1,14,9,0);
 ЗапросSQLПоследняяПартия.РежимRPC(1);

Регистр остатков имеет 3 измерения: Товар, Склад, Партия. (партия это ссылка на документ прихода). Запрос возвращает ссылку на последний документ прихода по которому имеются остатки на складе. Раньше этот запрос выполнялся стандартными методами 1с. После перехода на прямой запрос ускорение было порядка 10 раз. Так что советую потратить неделю-две времени на изучение прямых запросов. Потраченное на это время, окупится сторицей.
---
для ТИС через регистр партии наличные. если речь идет от ТИС.
Если речь идет о БУХ, там сложнее. через бух итоги, но надо либо задавать большой период, либо постепенно наращивать период, до победного.
---
Прошу прощения. Не правильно описал ситуацию. Конфигурация полностью самописная. В регистрации пишутся цены с привычкой к документу поступления. На данный момент задача решается следующим образом:
Для каждого товара запросом выбираются все документы поступления и из них в цикле ищутся последние. Работает это ОЧЕНЬ долго. И вот хочу совета, как это сделать по правильному
---
OrenLiTo,из них в цикле ищутся последние А про сортировку забыли?
А вообще по полностью самописной конфигурации сказать заочно очень тяжело.
---
OrenLiTo, я не знаю, как ищутся эти документы
вместо запроса можно выборку документов с обратным порядком использовать
если в базе пользователей не много - будет работать быстрее
---
GPL, сначала выбрать все документы, а потом для каждого товара ходить по стабильным частям этих документов до первого вхождения товара?
---
OrenLiTo, я не знаю структуры. мне кажется, будет лучше всего, если документ будет оставлять какие-нибудь движения, по которым легче будет их найти
хорошую оптимизацию запроса предложил (7)
---
OrenLiTo,
ты начни с того, что ГДЕ тебе это надо показать, ЗАЧЕМ там это надо показать.... и КАКИЕ регистры и справочники присутствуют в системе
---
OrenLiTo, запрос выполняется в цикле перебора товаров, для каждого товара отдельно ? Если так, то лучше сформировать список товаров и выполнить запрос один раз по всему списку (запрос с условием вхождения товара в список). Это будет быстрее.