Поиск последнего прихода.

1. FlagmanGK 08.12.12 15:02 Сейчас в теме
Добрый день. Подскажите, как можно быстро найти последние приходы для каждого из элементов номенклатуры.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
9. ivsher 10.12.12 12:08 Сейчас в теме
(1) 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 раз. Так что советую потратить неделю-две времени на изучение прямых запросов. Потраченное на это время, окупится сторицей.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
9. ivsher 10.12.12 12:08 Сейчас в теме
(1) 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 раз. Так что советую потратить неделю-две времени на изучение прямых запросов. Потраченное на это время, окупится сторицей.
2. Flashlike 08.12.12 18:07 Сейчас в теме
для ТИС через регистр партии наличные. если речь идет от ТИС.
Если речь идет о БУХ, там сложнее. через бух итоги, но надо либо задавать большой период, либо постепенно наращивать период, до победного.
3. FlagmanGK 08.12.12 19:08 Сейчас в теме
Прошу прощения. Не правильно описал ситуацию. Конфигурация полностью самописная. В регистрации пишутся цены с привычкой к документу поступления. На данный момент задача решается следующим образом:
Для каждого товара запросом выбираются все документы поступления и из них в цикле ищутся последние. Работает это ОЧЕНЬ долго. И вот хочу совета, как это сделать по правильному
4. dusha0020 1119 08.12.12 19:22 Сейчас в теме
(3) OrenLiTo,
из них в цикле ищутся последние
А про сортировку забыли?
А вообще по полностью самописной конфигурации сказать заочно очень тяжело.
5. GPL 3 08.12.12 19:29 Сейчас в теме
(3) OrenLiTo, я не знаю, как ищутся эти документы
вместо запроса можно выборку документов с обратным порядком использовать
если в базе пользователей не много - будет работать быстрее
6. FlagmanGK 08.12.12 19:40 Сейчас в теме
(5) GPL, сначала выбрать все документы, а потом для каждого товара ходить по стабильным частям этих документов до первого вхождения товара?
8. GPL 3 09.12.12 21:12 Сейчас в теме
(6) OrenLiTo, я не знаю структуры. мне кажется, будет лучше всего, если документ будет оставлять какие-нибудь движения, по которым легче будет их найти
хорошую оптимизацию запроса предложил (7)
10. falcon 12.12.12 21:29 Сейчас в теме
(6) OrenLiTo,
ты начни с того, что ГДЕ тебе это надо показать, ЗАЧЕМ там это надо показать.... и КАКИЕ регистры и справочники присутствуют в системе
7. Pari 09.12.12 17:35 Сейчас в теме
(3) OrenLiTo, запрос выполняется в цикле перебора товаров, для каждого товара отдельно ? Если так, то лучше сформировать список товаров и выполнить запрос один раз по всему списку (запрос с условием вхождения товара в список). Это будет быстрее.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот