Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проверка проведения и задваивание данных в запросе (1с 8.2 УПП 1.3)  (Прочитано 13765 раз)
0 Пользователей и 1 Гость смотрят эту тему.
IssakN
Участник

ru
Offline Offline

« : 07-11-2012 11:53 » 

Добрый день товарищи!
Столкнулся с проблемой задваивания(а то и затраивания) данных в своем отчете.
На один заказ покупателя приходится 2 заказа на производство или 2 реализации товаров и услуг, например,
в результате данные по количеству двоятся и сумма итоговая выводится некорректно.
Подскажите есть ли уже какие-нибудь отработанные методы обхождения этой проблемы?
Заранее очень благодарен.

* Задваивание.JPG (132.69 Кб - загружено 1063 раз.)
Записан
IssakN
Участник

ru
Offline Offline

« Ответ #1 : 13-11-2012 11:04 » 

Доброго дня товарищи.
не первый раз сталкиваюсь в своих отчетах с проблемой проверки на проведение.
Например,(отчет делаю в скд) есть документ ЗаказПокупателя и документ РеализацияТоваровИУслуг;
в отчете связываю их полю ЗаказПокупателя.ссылка и по номенклатуре.
Ставлю отборы ЗаказПокупателяПроведен=истина и РеализацияТоваровИУслугПроведен=истина,
но в этом случае теряю документы которые заказаны, но не проплачены.
А если Реализацию не проверяю, то подтягиваются непроведенные по реализации.
Вот и получается, что проверка нужна, но обрезает мне нужные данные.

Добавлено через 21 минуту и 10 секунд:
Код: (1C v8)
ВЫБРАТЬ
        РеализацияТоваровУслугТовары.Номенклатура КАК НоменклатураРеализация,
        СУММА(ЕСТЬNULL(РеализацияТоваровУслугТовары.Количество, 0)) КАК КоличествоРеализация,
        РеализацияТоваровУслугТовары.ЗаказПокупателя.Ссылка КАК ЗаказПокупателяСсылкаРеализация,
        ЗаказПокупателяТовары.Номенклатура КАК НоменклатураЗаказ,
        ЕСТЬNULL(ЗаказПокупателяТовары.Количество, 0) КАК КоличествоЗаказ,
        ЗаказПокупателяТовары.Ссылка.Ссылка КАК ДокументЗаказ,
        ЗаказПокупателяТовары.Ссылка.Контрагент КАК КонтрагентЗаказ,
        ЗаказПокупателяТовары.Ссылка.Дата КАК ДатаЗаказ,
        ЗаказПокупателяТовары.Ссылка.Проведен КАК ПроведенЗаказ,
        ЕСТЬNULL(РеализацияТоваровУслугТовары.Количество, 0) / ЕСТЬNULL(ЗаказПокупателяТовары.Количество, 0) * 100 КАК ПроцентРезультативности,
        РеализацияТоваровУслугТовары.Ссылка.Проведен,
        РеализацияТоваровУслугТовары.Ссылка.ПометкаУдаления,
        ЕСТЬNULL(ЗаказПокупателяТовары.Количество, 0) КАК Сдано,
        РеализацияТоваровУслугТовары.Ссылка КАК ДокументРеализация
ИЗ
        Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
                ПОЛНОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                ПО ЗаказПокупателяТовары.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
                        И ЗаказПокупателяТовары.Ссылка = РеализацияТоваровУслугТовары.ЗаказПокупателя.Ссылка
ГДЕ
        ЗаказПокупателяТовары.Ссылка.Проведен = ИСТИНА

СГРУППИРОВАТЬ ПО
        РеализацияТоваровУслугТовары.Номенклатура,
        ЗаказПокупателяТовары.Номенклатура,
        РеализацияТоваровУслугТовары.ЗаказПокупателя.Ссылка,
        ЗаказПокупателяТовары.Ссылка.Ссылка,
        ЗаказПокупателяТовары.Ссылка.Контрагент,
        ЕСТЬNULL(РеализацияТоваровУслугТовары.Количество, 0) / ЕСТЬNULL(ЗаказПокупателяТовары.Количество, 0) * 100,
        ЗаказПокупателяТовары.Ссылка.Дата,
        ЗаказПокупателяТовары.Ссылка.Проведен,
        РеализацияТоваровУслугТовары.Ссылка.Проведен,
        РеализацияТоваровУслугТовары.Ссылка.ПометкаУдаления,
        ЕСТЬNULL(ЗаказПокупателяТовары.Количество, 0),
        РеализацияТоваровУслугТовары.Ссылка,
        ЕСТЬNULL(ЗаказПокупателяТовары.Количество, 0)
« Последнее редактирование: 13-11-2012 15:48 от Kivals » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 13-11-2012 15:48 » 

1. Используй тег [code=e1cv8][/code] для кода
2. Вынеси условие проведенности оплаты в связь:
Код: (1C v8)
...
ИЗ
   Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
      ПОЛНОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
      ПО ЗаказПокупателяТовары.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
         И ЗаказПокупателяТовары.Ссылка = РеализацияТоваровУслугТовары.ЗаказПокупателя.Ссылка
         И РеализацияТоваровУслугТовары.Проведен
...
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 13-11-2012 16:03 » 

Наиболее вероятно - неверно написана связь в запросе. Запрос в студию...
П.С. Если будет 2 заказа на производство и 2 реализации - тогда в этом случае вообще учетверится, а если 3+3 - то удевятерится... Улыбаюсь
Записан
IssakN
Участник

ru
Offline Offline

« Ответ #4 : 14-11-2012 04:09 » 

извиняюсь за код.
И премного благодарен за помощь!заработало,хотя я и не думал, что можно так через связь задавать...
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 14-11-2012 05:44 » 

В связи можно задавать очень неожиданные вещи, вплоть до неравенства или сравнения на больше/меньше - это используется достаточно редко, в специфических задачах.
В твоем случае суть в следующем: когда ты просто задаешь связь по параметрам (ссылка + номенклатура) - то у тебя в выборку попадают записи со значениями типа NULL. Вполне естественно - когда ты устанавливаешь потом условие на выборку - NULL-евые записи отсекаются.
Когда ты задаешь константные условия в связи таблиц - это эквиваллентно (с точки зрения отбора данных, но не скорости) тому, что ты сначала отбираешь данные из таблиц по константным условиям и только потом связываешь таблицы по условиям связи.
Записан
IssakN
Участник

ru
Offline Offline

« Ответ #6 : 15-11-2012 04:20 » 

Re: Задваивание данных отчета(1с8.2 УПП 1.3.)
« Ответ #1 : 13-11-2012 16:03 »
Цитировать
Наиболее вероятно - неверно написана связь в запросе. Запрос в студию...
П.С. Если будет 2 заказа на производство и 2 реализации - тогда в этом случае вообще учетверится, а если 3+3 - то удевятерится...

Задваивание(затраивание...), как раз и в этом отчете

* Дублирование.JPG (81.96 Кб - загружено 1116 раз.)
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 15-11-2012 08:31 » 

Тогда самый очевидный вариант - использовать вложенный запрос в группировкой по ключевым полям.
Код: (1C v8)
...
ИЗ
   Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
      ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
          РеализацияТоваровУслугТовары.ЗаказПокупателя.Ссылка КАК ЗаказПокупателя,
          РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура,
          ...,
          СУММА(РеализацияТоваровУслугТовары.Количество) КАК Количество
        ИЗ
          Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
        ГДЕ
          РеализацияТоваровУслугТовары.Ссылка.Проведен
        СГРУППИРОВАТЬ ПО
          РеализацияТоваровУслугТовары.ЗаказПокупателя.Ссылка,
          РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура
      ) КАК РеализацияТоваровУслугТовары
      ПО ЗаказПокупателяТовары.Номенклатура = РеализацияТоваровУслугТовары.Номенклатура
         И ЗаказПокупателяТовары.Ссылка = РеализацияТоваровУслугТовары.ЗаказПокупателя
...
Кстати - а почему полное соединение? Если есть реализации без заказов - тогда наверное нужно использовать в полях что-то типа:
Код: (1C v8)
ЕСТЬNULL(ЗаказПокупателяТовары.Ссылка.Контрагент, Документ.РеализацияТоваровУслуг.Ссылка.Контрагент) КАК Контрагент
А если нету - то правильней будет левое соединение.
Записан
IssakN
Участник

ru
Offline Offline

« Ответ #8 : 15-11-2012 09:54 » 

реализации без заказов нет, а если вдруг есть будет очень странно.
буду пробовать.благодарю.
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 15-11-2012 10:03 » new

Хотя есть еще момент, говорящий за использование "полное соединение": если в реализации может встретиться номенклатура, отсутствующая в заказе.
Но тогда тоже нужно использовать
Код: (1C v8)
ЕСТЬNULL(ЗаказПокупателяТовары.Номенклатура, РеализацияТоваровУслугТовары.Номенклатура) КАК НоменклатураЗаказ,
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines