![]() |
![]() |
![]() |
|
v7: ТиС Запрос по последней дате продажи контрагенту. | ☑ | ||
---|---|---|---|---|
0
goneman
08.09.15
✎
09:30
|
Уважаемые специалисты, подскажите пожалуйста алгоритм запроса для отбора последней продажи контрагенту в типовой "Торговля и Склад".
|
|||
1
ДенисЧ
08.09.15
✎
09:32
|
выбрать первые 1 период
из РегистрНакопления.Продажи где контрагент = &контра упорядочить по период убыв |
|||
2
goneman
08.09.15
✎
09:35
|
Это же для 8-ки код?
|
|||
3
Fedor-1971
08.09.15
✎
09:51
|
(0) максимальная дата накладной с условием, Контрагент=Нужному?
Посмотри в конфигу, если есть оборотный регистр задолженности, можно попробовать опереться на него - то же тебе написали в (2) в формате 8 (для 7 как-нить идею придётся приспособить самостоятельно). Если установлена компонента Бух.учёт - проводки по 62 счёту. |
|||
4
aka AMIGO
08.09.15
✎
09:53
|
Черный Запрос на докиПрихода, ДатаДок с условием на Контрагента
выгрузить Запрос в ТЗ, отсортировать по "-ДатаДок" Если я всё правильно написал - первая строка ТЗ - искомый док прихода |
|||
5
dk
08.09.15
✎
09:54
|
что-то типа
Рег = СоздатьОбъек("Рег.Продажи") Рег.УстановитьзначениеФильтра(...) Рег.ОбратныйПорядок Рег.ВыбратьДвижения() Рег.ПолучитьДвижение Сообщить(Рег.Документ) |
|||
6
aka AMIGO
08.09.15
✎
09:56
|
Можно через Рег.ОстаткиТМЦ
|
|||
7
Масянька
08.09.15
✎
09:59
|
(6) По-моему, лучше все-таки через ПартииНаличие.
|
|||
8
aka AMIGO
08.09.15
✎
10:06
|
(7) Да, это - правильнее.. Но у меня в конфе "Торговля" не используются партии, написал, что роднее :)
Именно "Торговля", а не ТиС :) Образца 2000-го года.. правда, от неё теперь осталось одно название, превратилась в "Склад и Производство" :) |
|||
9
Масянька
08.09.15
✎
10:13
|
(8) Я как-то (работая во франче) наткнулась на Торговлю...
Одно название осталось... Там столько было всего реализовано... При чем - с умом, оптимально, читабельно... Классный программист делал :) |
|||
10
goneman
08.09.15
✎
10:44
|
Получился такой запрос:
"//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |Без итогов; |ТекущийДокумент = Регистр.Покупатели.КредДокумент.ТекущийДокумент; |Контрагент = Регистр.Покупатели.Договор.Владелец.ТекущийЭлемент; |ДатаПродажи = Регистр.Покупатели.КредДокумент.ДатаДок; |КодОперации = Регистр.Покупатели.КодОперации; |Сумма = Регистр.Покупатели.СуммаРуб; |Функция ПриходСумма = Приход(Сумма); |Группировка ТекущийДокумент; |Группировка ДатаПродажи; |Условие(Контрагент в ВыбКонтрагент); |Условие(КодОперации = Перечисление.КодыОпераций.Продажа); |"//}}ЗАПРОС Но "ДатаПродажи" не выгружается в ТаблицуЗначений. |
|||
11
aka AMIGO
08.09.15
✎
10:46
|
(10) Запрос.Выгрузить(ТЗ,1 - примерно так написал?
СМ в СП |
|||
12
goneman
08.09.15
✎
10:49
|
(11) Вот так:
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; Иначе ТабЗнач = СоздатьОбъект("ТаблицаЗначений"); Запрос.Выгрузить(ТабЗнач); ТабЗнач.ВыбратьСтроку(); КонецЕсли; |
|||
13
aka AMIGO
08.09.15
✎
10:50
|
Запрос.Выгрузить(ТабЗнач,1);
посмотри в синтакс-помощнике аргументы ф-ции "Выгрузить" |
|||
14
Масянька
08.09.15
✎
10:53
|
Извините, что вмешиваюсь, но - зачем выгружать?
Обработать запрос, не? |
|||
15
goneman
08.09.15
✎
10:56
|
Все дополнительные переменные стали выгружаться, кроме "ДатаПродажи".
:-) |
|||
16
goneman
08.09.15
✎
10:58
|
(14) Надо найти последнюю продажу, нужен анализ даты, а она в переменную "ДатаПродажи" не попадает.
|
|||
17
aka AMIGO
08.09.15
✎
10:58
|
(14) хмык, нормально вмешиваешься :) это просто один из предложенных вариантов, больше ничего особенного :)
Обработать запрос, (15)Выгрузив запрос, добавь в ТабЗнач поле "ДатаДок", и в цикле записать туда из ТекущийДокумент ДатуДок После этого можно сортировать :) |
|||
18
Масянька
08.09.15
✎
11:00
|
(16) Во, нашла...
ПартииНаличие = СоздатьОбъект("Регистр.ПартииНаличие"); ТаблОстатков = СоздатьОбъект("ТаблицаЗначений"); ПартииНаличие.УстановитьЗначениеФильтра("Номенклатура", ВыбЗнач, 1); ПартииНаличие.ВыгрузитьИтоги(ТаблОстатков,1,1); ТаблОстатков.Свернуть("Партия","Количество,СуммаУпр"); ТаблОстатков.Сортировать("Партия+"); КолВоСтрок = ТаблОстатков.КоличествоСтрок(); ТаблОстатков.ВыбратьСтроки(); Если КолВоСтрок <> 0 Тогда ТаблОстатков.ПолучитьСтрокуПоНомеру(КолВоСтрок); Док = ТаблОстатков.Партия.ПриходныйДокумент; Иначе Док = ""; КонецЕсли; Только тут я последний приход беру. |
|||
19
goneman
08.09.15
✎
11:05
|
(17) Как-то громоздко, наверное так и сделаю, но просто хочется понять, почему дата не попадает в запрос.
|
|||
20
Масянька
08.09.15
✎
11:06
|
(19) Слышь, ты, блин... На свой код посмотри...
|
|||
21
goneman
08.09.15
✎
11:09
|
(20) "Громоздко" - это про заполнение колонки в таблице значений циклом.
А что не так в моем коде? |
|||
22
Масянька
08.09.15
✎
11:12
|
(21) Пардон... Показалось, что ты про мой сказал... Еще раз - пардон.
В твоем - строчек много :))))) |
|||
23
Ёпрст
гуру
08.09.15
✎
11:13
|
(10) хреновый запрос, и в чорном запросе нет атрибутов у реквизитов с типом <неопределенный вид>/<неопределенный тип>
+ такой запрос не эффективен и медленный. + смотреть продажи в регистре Покупатели, не верно |
|||
24
Ёпрст
гуру
08.09.15
✎
11:14
|
(21) всё
|
|||
25
aka AMIGO
08.09.15
✎
11:14
|
(21) ну, это выполняется мгновенно.
Делай код, чтоб красиво было :) Пригодится в будущем :) |
|||
26
Ёпрст
гуру
08.09.15
✎
11:15
|
быстрее будет только прямой запрос или хотя бы (5)
|
|||
27
Ёпрст
гуру
08.09.15
✎
11:16
|
(18) какое отношение остатки по партиям имеют к последней продаже по клиентосу - загадка
|
|||
28
goneman
08.09.15
✎
11:16
|
(24) Хорошо, пусть всё не правильно, а как тогда правильно?
Задача проста - найти последнюю продажу конкретному контрагенту. |
|||
29
Ёпрст
гуру
08.09.15
✎
11:25
|
(28) если не умеешь писать прямой запрос - см (5)
|
|||
30
goneman
08.09.15
✎
11:32
|
(29) попробовал, как в (5), но там нет информации о документе продажи.
|
|||
31
goneman
08.09.15
✎
11:34
|
(29) Беру свои слова обратно, надо писать - Рег.ТекущийДокумент()
:-) |
|||
32
goneman
08.09.15
✎
12:02
|
Итоговый вариант получился такой:
Рег = СоздатьОбъект("Регистр.Продажи"); Рег.УстановитьзначениеФильтра("Покупатель", ВыбКонтрагент); Рег.ОбратныйПорядок(1); Рег.ВыбратьДвижения(НачДата, КонДата,); Если Рег.ПолучитьДвижение() = 1 Тогда Сообщить("" + Рег.ТекущийДокумент().ДатаДок); КонецЕсли; Простенько и со вкусом. Всем большое спасибо. :-) |
|||
33
Chameleon1980
08.09.15
✎
21:43
|
всю ветку не читал, но вроде при выборе запроса параметр №2 - направление нет?
Группировка(<?>,) Синтаксис: Группировка(<Группировка>,<Направление>) Назначение: Получить следующее значение выборки Запроса Возвращает: 1 - если получено следующее значение выборки запроса, 0 - иначе. Параметры: <Группировка> - выражение, содержащее номер или имя группировки. <Направление> - необязательный параметр. Число: 1 - выборка значений группировки по возрастанию; -1 (минус единица) - выборка значений группировки по убыванию. Значение по умолчанию: 1. и запрос с условием нужным |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |