![]() |
|
Задваивание даты документов при выборе иерархии номенклатуры в СКД maxab72, DemonShinji2, Howaitokira, Мультук, Волшебник, DiMel_77, PR, zenik, Fedor-1971, Затейник, Михаил_, Sanchez_22, МаленькийВопросик, программистище, zurge, phabeZ, Михаил Козлов, Жеглофф, toypaul, Gun47, distorter, Homer, dmt, pasha_d, alexxx961503, rozer76, formista2000, maxar, yurikmellon2, zenon46
| ☑ | ||
---|---|---|---|---|
0
Howaitokira
10.10.25
✎
11:08
|
Добрый день. Формирую отчет товаров без движения в СКД. Нахожу документы с максимальной датой на момент формирования отчета, сравниваю даты разных документов и вывожу последний из 2-х документов, после высчитываю количество дней. Проблема в том, что когда я формирую отчет на одну позицию, все рассчитывается верно, когда 2+ все даты, кроме Даты прихода ломаются, и берется дата документа одной из позиций. при этом код у даты прихода и даты остальных идентичный. Не могу понять в чем проблема. Думал может из-за пустых дат, попробовал в выражениях через ЕСТЬNULL исключить это, не помогло, и явно не из-за этого, т.к. и без пустых дат - задваивает
КодВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.Склад КАК Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток ПОМЕСТИТЬ ТоварыНаСкладахОстатки ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура) И ТоварыНаСкладахОстатки.Склад В ИЕРАРХИИ(&Склад) СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура, МАКСИМУМ(ПеремещениеТоваровТовары.Ссылка.Дата) КАК ДатаПеремещение, ПеремещениеТоваровТовары.Ссылка.СкладПолучатель КАК СкладПолучатель, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток ПОМЕСТИТЬ ПеремещениеТоваровТовары ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары ПО (ПеремещениеТоваровТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) И (ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = ТоварыНаСкладахОстатки.Склад) ГДЕ ПеремещениеТоваровТовары.Номенклатура В ИЕРАРХИИ(&Номенклатура) И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель В ИЕРАРХИИ(&Склад) СГРУППИРОВАТЬ ПО ПеремещениеТоваровТовары.Ссылка.СкладПолучатель, ПеремещениеТоваровТовары.Номенклатура, ТоварыНаСкладахОстатки.ВНаличииОстаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ПриобретениеТоваровУслугТовары.Номенклатура КАК Номенклатура, ПриобретениеТоваровУслугТовары.Склад КАК Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток, МАКСИМУМ(ПриобретениеТоваровУслугТовары.Ссылка.Дата) КАК ДатаПриход ПОМЕСТИТЬ ПриобретениеТоваровУслугТовары ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары ПО (ПриобретениеТоваровУслугТовары.Склад = ТоварыНаСкладахОстатки.Склад) И (ПриобретениеТоваровУслугТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) ГДЕ ПриобретениеТоваровУслугТовары.Номенклатура В ИЕРАРХИИ(&Номенклатура) И ПриобретениеТоваровУслугТовары.Ссылка.Склад В ИЕРАРХИИ(&Склад) СГРУППИРОВАТЬ ПО ПриобретениеТоваровУслугТовары.Склад, ПриобретениеТоваровУслугТовары.Номенклатура, ТоварыНаСкладахОстатки.ВНаличииОстаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ОтчетОРозничныхПродажахТовары.Номенклатура КАК Номенклатура, МАКСИМУМ(ОтчетОРозничныхПродажахТовары.Ссылка.Дата) КАК ДатаОтчетОРозничныхПродажах, ОтчетОРозничныхПродажахТовары.Ссылка.Склад КАК Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток ПОМЕСТИТЬ ОтчетОРозничныхПродажахТовары ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ Документ.ОтчетОРозничныхПродажах.Товары КАК ОтчетОРозничныхПродажахТовары ПО (ОтчетОРозничныхПродажахТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) И (ОтчетОРозничныхПродажахТовары.Ссылка.Склад = ТоварыНаСкладахОстатки.Склад) ГДЕ ОтчетОРозничныхПродажахТовары.Номенклатура В ИЕРАРХИИ(&Номенклатура) И ОтчетОРозничныхПродажахТовары.Ссылка.Склад В ИЕРАРХИИ(&Склад) СГРУППИРОВАТЬ ПО ОтчетОРозничныхПродажахТовары.Номенклатура, ОтчетОРозничныхПродажахТовары.Ссылка.Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ЧекККМТовары.Номенклатура КАК Номенклатура, МАКСИМУМ(ЧекККМТовары.Ссылка.Дата) КАК ДатаЧекККМ, ЧекККМТовары.Ссылка.Склад КАК Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток ПОМЕСТИТЬ ЧекККМТовары ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЧекККМ.Товары КАК ЧекККМТовары ПО (ЧекККМТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) И (ЧекККМТовары.Ссылка.Склад = ТоварыНаСкладахОстатки.Склад) ГДЕ ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура) И ТоварыНаСкладахОстатки.Склад В ИЕРАРХИИ(&Склад) СГРУППИРОВАТЬ ПО ЧекККМТовары.Номенклатура, ЧекККМТовары.Ссылка.Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТоварыНаСкладахОстатки.Склад КАК Склад, ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток, ПеремещениеТоваровТовары.ДатаПеремещение КАК ДатаПеремещение, ОтчетОРозничныхПродажахТовары.ДатаОтчетОРозничныхПродажах КАК ДатаОтчетОРозничныхПродажах, ЧекККМТовары.ДатаЧекККМ КАК ДатаЧекККМ, ПриобретениеТоваровУслугТовары.ДатаПриход КАК ДатаПриход, ВЫБОР КОГДА ЕСТЬNULL(ЧекККМТовары.ДатаЧекККМ, ДАТАВРЕМЯ(2020, 1, 1)) > ЕСТЬNULL(ОтчетОРозничныхПродажахТовары.ДатаОтчетОРозничныхПродажах, ДАТАВРЕМЯ(2020, 1, 1)) ТОГДА ЧекККМТовары.ДатаЧекККМ ИНАЧЕ ОтчетОРозничныхПродажахТовары.ДатаОтчетОРозничныхПродажах КОНЕЦ КАК ДатаПоследнейПродажи, ВЫБОР КОГДА ЕСТЬNULL(ПриобретениеТоваровУслугТовары.ДатаПриход, ДАТАВРЕМЯ(2020, 1, 1)) > ЕСТЬNULL(ПеремещениеТоваровТовары.ДатаПеремещение, ДАТАВРЕМЯ(2020, 1, 1)) ТОГДА ПриобретениеТоваровУслугТовары.ДатаПриход ИНАЧЕ ПеремещениеТоваровТовары.ДатаПеремещение КОНЕЦ КАК ДатаПоследнегоПоступления, РАЗНОСТЬДАТ(ВЫБОР КОГДА ЕСТЬNULL(ЧекККМТовары.ДатаЧекККМ, ДАТАВРЕМЯ(2020, 1, 1)) > ЕСТЬNULL(ОтчетОРозничныхПродажахТовары.ДатаОтчетОРозничныхПродажах, ДАТАВРЕМЯ(2020, 1, 1)) ТОГДА ЧекККМТовары.ДатаЧекККМ ИНАЧЕ ОтчетОРозничныхПродажахТовары.ДатаОтчетОРозничныхПродажах КОНЕЦ, &Период, ДЕНЬ) КАК КоличествоДнейСПоследнейПродажи, РАЗНОСТЬДАТ(ВЫБОР КОГДА ЕСТЬNULL(ПриобретениеТоваровУслугТовары.ДатаПриход, ДАТАВРЕМЯ(2020, 1, 1)) > ЕСТЬNULL(ПеремещениеТоваровТовары.ДатаПеремещение, ДАТАВРЕМЯ(2020, 1, 1)) ТОГДА ПриобретениеТоваровУслугТовары.ДатаПриход ИНАЧЕ ПеремещениеТоваровТовары.ДатаПеремещение КОНЕЦ, &Период, ДЕНЬ) КАК КоличествоДнейСПоследнегоПоступления ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ ПриобретениеТоваровУслугТовары КАК ПриобретениеТоваровУслугТовары ПО (ПриобретениеТоваровУслугТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) И (ПриобретениеТоваровУслугТовары.Склад = ТоварыНаСкладахОстатки.Склад), ПеремещениеТоваровТовары КАК ПеремещениеТоваровТовары, ОтчетОРозничныхПродажахТовары КАК ОтчетОРозничныхПродажахТовары, ЧекККМТовары КАК ЧекККМТовары |
|||
1
Fedor-1971
10.10.25
✎
11:07
|
(0) Запрос сам изобретал или ИИ помог?
|
|||
2
Мультук
гуру
10.10.25
✎
11:18
|
1) Если вы программист, то
Вы не умеете писать запросы (курсы, книги) Вы не умеет писать запросы для 1С (курсы, книги) ВЫ не знаете СКД Всё это прекрасно видно хотя бы из этого запроса (см ниже) 2) Если вы мимопроходил -- наймите программиста Код ВЫБРАТЬ ТоварыНаСкладахОстатки.Номенклатура КАК Номенклатура, ТоварыНаСкладахОстатки.Склад КАК Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток ПОМЕСТИТЬ ТоварыНаСкладахОстатки ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки КАК ТоварыНаСкладахОстатки ГДЕ ТоварыНаСкладахОстатки.Номенклатура В ИЕРАРХИИ(&Номенклатура) И ТоварыНаСкладахОстатки.Склад В ИЕРАРХИИ(&Склад) СГРУППИРОВАТЬ ПО ТоварыНаСкладахОстатки.Номенклатура, ТоварыНаСкладахОстатки.Склад, ТоварыНаСкладахОстатки.ВНаличииОстаток |
|||
3
Howaitokira
10.10.25
✎
11:18
|
Пишу запросы сам, извиняюсь только учусь, недавно вошел в эту сферу. Без ИИ (1)
|
|||
4
Волшебник
10.10.25
✎
11:20
|
(2) Правильно так:
ВЫБРАТЬ Т.Номенклатура КАК Номенклатура, Т.Склад КАК Склад, Т.ВНаличииОстаток КАК ВНаличииОстаток ПОМЕСТИТЬ ТоварыНаСкладахОстатки ИЗ РегистрНакопления.ТоварыНаСкладах.Остатки(&Дата, Номенклатура В ИЕРАРХИИ(&Номенклатура) И Склад В ИЕРАРХИИ(&Склад)) КАК Т |
|||
5
Мультук
гуру
10.10.25
✎
11:36
|
(0)
0)Всё же курсы по SQL https://sql-academy.org/ru Интерактивный тренинг от простого к сложному https://sql-academy.org/ru/trainer 1) Что такое товары без движения? Ваша формулировка ? Например: Те у которых ЕСТЬ остатки, НО ПРИХОД или РАСХОД за последний квартал равен нулю ? 2) Почему для ПриобретениеТоваровУслугТовары есть связка с ТоварыНаСкладахОстатки А вот для ПеремещениеТоваровТовары, ОтчетОРозничныхПродажахТовары, ЧекККМТовары нет ? ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ ПриобретениеТоваровУслугТовары КАК ПриобретениеТоваровУслугТовары ПО (ПриобретениеТоваровУслугТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) И (ПриобретениеТоваровУслугТовары.Склад = ТоварыНаСкладахОстатки.Склад), ПеремещениеТоваровТовары КАК ПеремещениеТоваровТовары, ОтчетОРозничныхПродажахТовары КАК ОтчетОРозничныхПродажахТовары, ЧекККМТовары КАК ЧекККМТовары |
|||
6
Fedor-1971
10.10.25
✎
11:45
|
(3) тогда мелкие пояснения по запросу:
ВЫБРАТЬ ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура, МАКСИМУМ(ПеремещениеТоваровТовары.Ссылка.Дата) КАК ДатаПеремещение, ПеремещениеТоваровТовары.Ссылка.СкладПолучатель КАК СкладПолучатель, ТоварыНаСкладахОстатки.ВНаличииОстаток КАК ВНаличииОстаток ПОМЕСТИТЬ ПеремещениеТоваровТовары ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары ПО (ПеремещениеТоваровТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) И (ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = ТоварыНаСкладахОстатки.Склад) // вот это уже лишнее: ГДЕ ПеремещениеТоваровТовары.Номенклатура В ИЕРАРХИИ(&Номенклатура) И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель В ИЕРАРХИИ(&Склад) // т.к. ты соединяешь с уже отобранными данными СГРУППИРОВАТЬ ПО ПеремещениеТоваровТовары.Ссылка.СкладПолучатель, ПеремещениеТоваровТовары.Номенклатура, ТоварыНаСкладахОстатки.ВНаличииОстаток по общей логике: - Отчёт не ограничен периодом - получил остатки (на текущий момент - оно точно так надо?) - зачем-то, начинаешь выбирать документы (возьми обороты ТоварыНаСкладах с детализацией до регистратора - в Периоде у тебя будет дата движения, в Регистраторе - ссылка на документ, склад и номенклатуру ограничь как в (4)) вот тут: ИЗ ТоварыНаСкладахОстатки КАК ТоварыНаСкладахОстатки ЛЕВОЕ СОЕДИНЕНИЕ ПриобретениеТоваровУслугТовары КАК ПриобретениеТоваровУслугТовары ПО (ПриобретениеТоваровУслугТовары.Номенклатура = ТоварыНаСкладахОстатки.Номенклатура) И (ПриобретениеТоваровУслугТовары.Склад = ТоварыНаСкладахОстатки.Склад), ПеремещениеТоваровТовары КАК ПеремещениеТоваровТовары, ОтчетОРозничныхПродажахТовары КАК ОтчетОРозничныхПродажахТовары, ЧекККМТовары КАК ЧекККМТовары у тебя только одно Левое соединение, а остальные выборки тупо собираются как Объединить все, потому даты при нескольких номенклатурах лепятся для всех сразу |
|||
7
Волшебник
10.10.25
✎
11:46
|
(6) Это вовсе не Объединить, а декартово произведение таблиц
|
|||
8
Fedor-1971
10.10.25
✎
11:56
|
(7) Это понятно, но ТС так яснее будет
|
|||
9
Howaitokira
10.10.25
✎
12:11
|
(5)(6) Большое Вам спасибо, сколько смотрел код так и не заметил, что в конце не у всех стоит левое соединение. Не знаю как здесь отправить скрин. Пытался сделать отчет по виду этого https://infostart.ru/1c/reports/1219281/
Да хочу видеть товар с остатками по складу согласно регистру, Отдельно видеть дату последнего прихода (приобретение или перемещение) и дату последней продажи (отчет о продажах или чек) а так же видеть сколько дней прошло с последней продажи/прихода до выбранного периода, и поставить отбор по последней продажи (например 7, 30... дней) Лишние условия убрал. Период выставлен в параметре (на выбранную дату пользователем) Все делал через временные таблицы и связи, один из знакомых показал и сказал так отчеты работают быстрее, да и все стандартные отчеты конфигурации в фирме так построены. Попробую отдельно сделать отчет через Регистратор ТоварыНаСкладах. Еще раз Спасибо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |