|
v7: ТИС 77. Получить весь товар от контрагента | ☑ | ||
---|---|---|---|---|
0
2S
19.04.17
✎
20:40
|
Назад в будущее...
Как в ТиС оптимальней получить список всех товаров, поступивших от определенного контрагента? Из нужных движений поступления ТМЦ только регистр "Партии наличие", но это регистр остатков. Запрос по документам, имхо не комильфо. И тут я понял, что ТиС забыл...:) Короче, кто подскажет. |
|||
1
Zypse
19.04.17
✎
20:50
|
И что, регистр остатков не может показать обороты?
Только регистр этот обычно большой и тормозной. По документам имхо быстрее всего будет |
|||
2
2S
19.04.17
✎
20:53
|
(1) ну да, наверное, скорость имеет значение.
Мне еще нужно будет связать это с остатками по всем фирмам.... |
|||
3
2S
19.04.17
✎
20:58
|
во, кажется нашел решение
Справочник Партии |
|||
4
HawkEye
19.04.17
✎
21:03
|
(0) запросом выбрать приход по регистру партии
|
|||
5
Злопчинский
19.04.17
✎
21:04
|
(3) неправильно
|
|||
6
Злопчинский
19.04.17
✎
21:05
|
(4) правильно. Только не приход а с кдом операции нужным
|
|||
7
2S
19.04.17
✎
21:05
|
(6) угу, понял
спасибо |
|||
8
NSSerg
19.04.17
✎
21:25
|
Задача звучит как - получение всех товаров из проведенных приходных накладных по заданному поставщику.
После этого фраза в (0) звучит как минимум странно, это как минимум Правильный запрос Запрос=создатьобъект("запрос"); Текстзапроса=" |Период с начдата по кондата; |ОбрабатыватьДокументы проведенные; |Поставщик=Документ.поступлениеТМЦ.контрагент; |условие (Поставщик=выбпоставщик); |Товар=Документ.поступлениеТМЦ.номенклатура; |группировка Товар без групп; |Без итогов;"; Запрос.выполнить(текстзапроса); Пока запрос.группировка()=1 цикл Сообщить(запрос.товар); Конеццикла; |
|||
9
2S
19.04.17
✎
21:28
|
(8) изврат
ТекстЗапроса = "//{{ЗАПРОС(Товары) |Период с ДатаНачала по ДатаКонца; |Номенклатура = Регистр.ПартииНаличие. Номенклатура; |Поставщик = Регистр.ПартииНаличие. Партия.Поставщик; |Фирма = Регистр.ПартииНаличие. Фирма; |ЮрЛицо = Регистр.ПартииНаличие. Фирма.ЮрЛицо; |УпрАналитика = Регистр.ПартииНаличие. Фирма.УпрАналитика; |КодОперации = Регистр.ПартииНаличие. КодОперации; |Группировка Номенклатура без групп; |Условие ( (КодОперации = Перечисление.КодыОпераций.Закупка) или (КодОперации = Перечисление.КодыОпераций.ЗакупкаРозница)); |Условие (Поставщик = ВыбПоставщик); |"//}}ЗАПРОС ; НетОш = 1; // нет ошибок при наложении фильтров Если ВидРазделителя = 1 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "ЮрЛицо",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 2 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 3 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "ЮрЛицо",,,ТекстЗапроса,Загол); КонецЕсли; НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Номенклатура",ВыбТМЦ, "ВыбТМЦ", ТекстЗапроса, Загол, "СвойстваНоменклатуры"); Если НетОш = 0 Тогда Возврат; КонецЕсли; |
|||
10
NSSerg
19.04.17
✎
22:25
|
(8) мало того что утебя в итоге запрос по куче таблиц
То есть он тупо медленней работает, Но и вдобавок ты зачем-то подменил одну задачу другой. То есть мало того что тому кто смотрит твой запрос нужно напрягаться чтоб понять что-же ты хотел получить, но и если например произойдет отказ от регистра партии товаров (от самих партий - например учет по средней) - то отчет просто перестанет работать. |
|||
11
2S
19.04.17
✎
22:28
|
(10) не только лишь все...там все работает по одной таблице
хотя, я не понимаю в чем косяк,но запрос возвращает пустую таблицу. Упростил до нельзя. "//{{ЗАПРОС(тест) |Период с ДатаНачала по ДатаКонца; |Номенклатура = Регистр.ПартииНаличие.Номенклатура; |Группировка Номенклатура без групп; |"//}}ЗАПРОС Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; Пока Запрос.Группировка(1) = 1 Цикл Сообщить(Запрос.Номенклатура); КонецЦикла; не работает и все, запрос выполняется. Честно уже не помню, в чем фишка, надо описывать все измерения и ресурсы? |
|||
12
2S
19.04.17
✎
22:31
|
вот полный код
//Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); Загол = ""; ДатаНачала = ?(ПустоеЗначение(ДатаОтбора) = 1, '01.01.17', ДатаОтбора); ТекстЗапроса = "//{{ЗАПРОС(Товары) |Период с ДатаНачала по ДатаКонца; |Номенклатура = Регистр.ПартииНаличие. Номенклатура; |Поставщик = Регистр.ПартииНаличие. Партия.Поставщик; |Фирма = Регистр.ПартииНаличие. Фирма; |ЮрЛицо = Регистр.ПартииНаличие. Фирма.ЮрЛицо; |УпрАналитика = Регистр.ПартииНаличие. Фирма.УпрАналитика; |КодОперации = Регистр.ПартииНаличие. КодОперации; |Группировка Номенклатура без групп; |Условие ((КодОперации = Перечисление.КодыОпераций.Закупка) или (КодОперации = Перечисление.КодыОпераций.ЗакупкаРозница)); |Условие (Поставщик = ВыбПоставщик); |"//}}ЗАПРОС ; НетОш = 1; // нет ошибок при наложении фильтров Если ВидРазделителя = 1 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Фирма",ВыбРазделитель1,"ВыбРазделитель1",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "ЮрЛицо",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 2 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "ЮрЛицо",ВыбРазделитель2,"ВыбРазделитель2",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "УпрАналитика",,,ТекстЗапроса,Загол); ИначеЕсли ВидРазделителя = 3 Тогда НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "УпрАналитика",ВыбРазделитель3,"ВыбРазделитель3",ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Фирма",,,ТекстЗапроса,Загол); НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "ЮрЛицо",,,ТекстЗапроса,Загол); КонецЕсли; НетОш = НетОш * глФильтрПоПеременнойЗапроса(, "Номенклатура",ВыбТМЦ, "ВыбТМЦ", ТекстЗапроса, Загол, "СвойстваНоменклатуры"); Если НетОш = 0 Тогда Возврат; КонецЕсли; Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; ТаблицаТоваровОтбор = СоздатьОбъект("ТаблицаЗначений"); СписокТоваровОтбор = СоздатьОбъект("СписокЗначений"); Запрос.Выгрузить(ТаблицаТоваровОтбор,,0); ТаблицаТоваровОтбор.Выгрузить(СписокТоваровОтбор,,,1); ТаблицаТоваровОтбор возвращается пустая. Я провел в тестовом режиме 5 документов поступления... |
|||
13
NSSerg
19.04.17
✎
22:31
|
(11) потому что не пишут запрос по регистрам когда нужно получить данные из документов.
Регистры для другого предназначены, поэтому одно из требований запроса по регистрам - наличие функций. Пока не поздно - сделай всё по-человечески, без извоащений. |
|||
14
2S
19.04.17
✎
22:34
|
(13) ты ответил на мой вопрос, спасибо ;)
точно, надо функцию описать |
|||
15
NSSerg
19.04.17
✎
22:35
|
(14) это называется - клинически неисправим.
|
|||
16
2S
19.04.17
✎
22:36
|
(15) вариант с запросом по документам не исключаю.
Если будут тормоза на реальных данных, проведу сравнение. |
|||
17
LazyStranger
19.04.17
✎
22:38
|
в данном примере таблица регистра ничем, имхо, принципиально не отличается от таблицы документов, я бы по документом делал, примерно как в (8)
|
|||
18
Злопчинский
20.04.17
✎
00:33
|
Если типовая конфига - то по регистру. Если нетиповая - то смотреть. По регистру - правильнее, ибо там аккамулируется все., в т.ч. - если пишет вменяемый - и проведение нетиповых документов.
все, как обычно. Кому - татор, а кому - лятор... |
|||
19
GreyK
20.04.17
✎
00:46
|
Меня интересует вопрос: Что топикстартер хочет увидеть в итоге?
Все товары попавшие в приходные документы от контрагента или товары которые есть в остатках по партиям, ну или у (0) есть своя интерпретация вопроса. |
|||
20
Злопчинский
20.04.17
✎
00:52
|
(19) ..трудна и неказиста жизнь топикстартера-программиста...
|
|||
21
NSSerg
20.04.17
✎
01:12
|
(18) можно поподробней?
Чем в регистре аккумулируется "больше всё", чем в приходных накладных? Особенно учитывая задачу - нам нужен товар из приходных наладных по контрагенту. Откуда ты регистре "партии" возмешь поставщика при учете себестоимости "по средней"? |
|||
22
Злопчинский
20.04.17
✎
01:35
|
(21) "приходных наладных..." - их в типовой ТиС как минимум три - Поступление тмц, Поступление ТМЦ розница, Поступление ТМЦ импорт, работая "по документам" - всегда есть шанс "забыть" какой-то вид документов...
работая по регистру - проблем меньше - туда уже все "заскладировано" |
|||
23
Злопчинский
20.04.17
✎
01:35
|
(21) а про "по средней" - это я только и хотел написать в (12) как ошибку
|
|||
24
Злопчинский
20.04.17
✎
01:38
|
(21) частично согласен...
однако хотеть "товары от определенного контрагента" и режим "по средней" у меня плохо в уме складываются... ;-) и сильно имхается что коллега хочет решить какую-то задачу, но подходит через жпс... |
|||
25
NSSerg
20.04.17
✎
01:41
|
(22) Вот и напиши в запросе через запятую три вида документов, если тебе нужны три.
(24) Я не вижу ни малейшей связи между желанием получить матрицу поставщика (получить товар поставляемый определенным поставщиком) и способом расчета себестоимости. Фирмы, которые считают "по средней" не хотят знать кто поставляет конкретный товар, и какой товар поставляет конкретный поставщик? |
|||
26
NSSerg
20.04.17
✎
01:44
|
(24) Я думаю, что и как и в любой другой торговой фирме хотят решить совершенно четкую задачу - узнать какой товар поставляет конкретный поставщик. Это странная задача?
Более того, есть фирмы, которые считают экономические показатели в разрезе поставщиков, и при этом учет "по средней" ну никак этому не мешает, особенно если товар от разных поставщиков не пересекается. |
|||
27
Злопчинский
20.04.17
✎
01:58
|
(25) мне не нужны три вида документов, не нужен один.
мне нужна номенклатура, поставляемая поставщиком и пофиг каким документом это отражено. не проводя аудит системы для каждого конкретного случая получения такого отчета - реально это можно собрать только через регистр. я бы тянул просто - движения с кодом операции по закупу в группировке по документу-регистратору, в обходе группировки по документам тянул бы "документ.контрагент" и фильтровал бы по нему. документ тоже получается задействован, ибо схема по поставщикам в ТиС имхо недоделанная какая-то... любителям пробежаться по документам - тоже можно, проблем не вижу. просто риски чуть выше напороться на какую-нибудь хрень, типа в документе строка номенклатуры с нулевым количеством... или фильтр на проведенность документа забыли поставить.. |
|||
28
Злопчинский
20.04.17
✎
01:59
|
(26) не возражаю... ;-)
|
|||
29
NSSerg
20.04.17
✎
02:03
|
(267) Коды операций могут быть расширены, документ ввода остатков может быть без контрагента, могут потребоваться не все документы поступления, а только одного/нескольких видов и т.д.
Вообще ИМХО горе от ума - простейшую задачу превращают в полный маразм. |
|||
30
NSSerg
20.04.17
✎
02:05
|
(27)
Риски напороться как раз больше когда задачу решают через гланды - вместо того чтоб напрямую взять данные из документов - сами документы собирают через регистр, который предназначен совсем для другого - для расчета себестоимости. |
|||
31
Злопчинский
20.04.17
✎
02:28
|
Непродуктивно.
Работать по документам имеет смысл когда в базе бардак и наваяно хрен знает как без соблюдения логики построения конфиги. Использовать регистр если он подходит для решения задачи - вполне допустимо. Юзать регистр или документы - дело вкуса. Часто и довольно часто юзают документы. Ибо это близко парадигме ручного отчекрыживания |
|||
32
VladZ
20.04.17
✎
07:52
|
(0) Если все приходы прошли по одному виду документов можно и по документам запрос сделать.
|
|||
33
Масянька
20.04.17
✎
08:00
|
Извините, что вмешиваюсь.
А чем не устраивает стандартный "Ведомость по партиям"? |
|||
34
2S
20.04.17
✎
08:24
|
(20) И не говори, изобретать велосипед - дело не простое. (19) Помощник оформления заявок поставщику.
(33) надо реализовать кучу всяких условий + формекс задействовать для юзабилити. Получение матрицы - это неосновной код обработки. Не приставайте к Злопчинскому, матрицу собрал по регистру. Сравнил запросом по документам, разница обработки несущественна. |
|||
35
VladZ
20.04.17
✎
09:46
|
Кстати, если операция разовая можно использовать docprint или regprint.
|
|||
36
NSSerg
20.04.17
✎
10:18
|
(31) когда регистр подходит - это регистр продажи для сбора продаж, но никак не регистр партии для сбора поступлений.
|
|||
37
Злопчинский
20.04.17
✎
14:03
|
(36) изыди, товарищ собрал по регистру ;-)
|
|||
38
aka AMIGO
20.04.17
✎
14:29
|
Регистр партии.. Хотел я тут как-то использовать его в отчете, смотрю - а у дира он пуст..
Спрашиваю, почто не заполняете, отвечает - мне партии без надобностев. Так что использую Регистр Остатков Товаров. А поскольку регПартий не использую в работе - то и не знаю, как он работает, и что из него можно получить.. Вот так: практики нет - остаюсь неграмотным в вопросе :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |