Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
28 мар 2024, 23:11

Бронирование товаров

Автор comradekite, 27 ноя 2014, 16:23

0 Пользователей и 1 гость просматривают эту тему.

comradekite

Всем привет!
Делаю бронирование товаров из букваря 1С. Оперативный учет. Сваял запрос в консоли, все отлично работает, показывает правильный результат.
В коде отказывается показывать правильный результат. Переделал запрос разными способами, а работать отказывается. Количество забронированного товара не поучает из регистра бронирования.
Гуру помогите понять что происходит.

Спасибо!

"ВЫБРАТЬ
   |   ПродажаТоваровТовары.Номенклатура КАК Номенклатура,
   |   СУММА(ПродажаТоваровТовары.Количество) КАК Количество,
   |   ПродажаТоваровТовары.Ссылка.Склад КАК Склад
   |ПОМЕСТИТЬ ТабДок
   |ИЗ
   |   Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
   |ГДЕ
   |   ПродажаТоваровТовары.Ссылка = &Ссылка
   |   И ПродажаТоваровТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга)
   |
   |СГРУППИРОВАТЬ ПО
   |   ПродажаТоваровТовары.Номенклатура,
   |   ПродажаТоваровТовары.Ссылка.Склад
   |
   |ИНДЕКСИРОВАТЬ ПО
   |   Номенклатура,
   |   Склад
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   ОстаткиНоменклатурыОстатки.Номенклатура,
   |   ОстаткиНоменклатурыОстатки.Склад,
   |   ОстаткиНоменклатурыОстатки.КоличествоОстаток,
   |   ОстаткиНоменклатурыОстатки.СуммаОстаток
   |ПОМЕСТИТЬ ОстНом
   |ИЗ
   |   РегистрНакопления.ОстаткиНоменклатуры.Остатки(
   |         &Момент,
   |         (Номенклатура, Склад) В
   |            (ВЫБРАТЬ
   |               ТабДок.Номенклатура,
   |               ТабДок.Склад
   |            ИЗ
   |               ТабДок КАК ТабДок)) КАК ОстаткиНоменклатурыОстатки
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   БронированиеТоваровОстатки.Номенклатура,
   |   БронированиеТоваровОстатки.Склад,
   |   БронированиеТоваровОстатки.КоличествоЗабронированногоОстаток
   |ПОМЕСТИТЬ ЗабрТов
   |ИЗ
   |   РегистрНакопления.БронированиеТоваров.Остатки(
   |         ,
   |         (Номенклатура, Склад) В
   |            (ВЫБРАТЬ
   |               ТабДок.Номенклатура,
   |               ТабДок.Склад
   |            ИЗ
   |               ТабДок КАК ТабДок)) КАК БронированиеТоваровОстатки
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   ТабДок.Номенклатура,
   |   ТабДок.Количество,
   |   ТабДок.Склад,
   |   ЕСТЬNULL(ОстНом.КоличествоОстаток, 0) КАК КоличествоОстаток,
   |   ЕСТЬNULL(ОстНом.СуммаОстаток, 0) КАК СуммаОстаток,
   |   ЕСТЬNULL(ЗабрТов.КоличествоЗабронированногоОстаток, 0) КАК КоличествоЗабронированного
   |ИЗ
   |   ТабДок КАК ТабДок
   |      ЛЕВОЕ СОЕДИНЕНИЕ ОстНом КАК ОстНом
   |      ПО ТабДок.Номенклатура = ОстНом.Номенклатура
   |      ЛЕВОЕ СОЕДИНЕНИЕ ЗабрТов КАК ЗабрТов
   |      ПО ТабДок.Номенклатура = ЗабрТов.Номенклатура";

дфтын

Запрос избыточный, но верный. показывайте как в коде его получаете
Помог? Нажми - Спасибо :)
skype: Soprov1C

comradekite

Это я уже разбивал его на мелкие части. Для троблшутинга. В первоначальном варианте я связал с ТабДок два регистра, один нормально показывает Остатки номенклатуры, а вот из бронирования не берет остаток.
В коде целиком выглядит вот так

Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |   ПродажаТоваровТовары.Номенклатура КАК Номенклатура,
   |   СУММА(ПродажаТоваровТовары.Количество) КАК Количество,
   |   ПродажаТоваровТовары.Ссылка.Склад КАК Склад
   |ПОМЕСТИТЬ ТабДок
   |ИЗ
   |   Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
   |ГДЕ
   |   ПродажаТоваровТовары.Ссылка = &Ссылка
   |   И ПродажаТоваровТовары.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыТоваров.Услуга)
   |
   |СГРУППИРОВАТЬ ПО
   |   ПродажаТоваровТовары.Номенклатура,
   |   ПродажаТоваровТовары.Ссылка.Склад
   |
   |ИНДЕКСИРОВАТЬ ПО
   |   Номенклатура,
   |   Склад
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   ОстаткиНоменклатурыОстатки.Номенклатура,
   |   ОстаткиНоменклатурыОстатки.Склад,
   |   ОстаткиНоменклатурыОстатки.КоличествоОстаток,
   |   ОстаткиНоменклатурыОстатки.СуммаОстаток
   |ПОМЕСТИТЬ ОстНом
   |ИЗ
   |   РегистрНакопления.ОстаткиНоменклатуры.Остатки(
   |         &Момент,
   |         (Номенклатура, Склад) В
   |            (ВЫБРАТЬ
   |               ТабДок.Номенклатура,
   |               ТабДок.Склад
   |            ИЗ
   |               ТабДок КАК ТабДок)) КАК ОстаткиНоменклатурыОстатки
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   БронированиеТоваровОстатки.Номенклатура,
   |   БронированиеТоваровОстатки.Склад,
   |   БронированиеТоваровОстатки.КоличествоЗабронированногоОстаток
   |ПОМЕСТИТЬ ЗабрТов
   |ИЗ
   |   РегистрНакопления.БронированиеТоваров.Остатки(
   |         ,
   |         (Номенклатура, Склад) В
   |            (ВЫБРАТЬ
   |               ТабДок.Номенклатура,
   |               ТабДок.Склад
   |            ИЗ
   |               ТабДок КАК ТабДок)) КАК БронированиеТоваровОстатки
   |;
   |
   |////////////////////////////////////////////////////////////////////////////////
   |ВЫБРАТЬ
   |   ТабДок.Номенклатура,
   |   ТабДок.Количество,
   |   ТабДок.Склад,
   |   ЕСТЬNULL(ОстНом.КоличествоОстаток, 0) КАК КоличествоОстаток,
   |   ЕСТЬNULL(ОстНом.СуммаОстаток, 0) КАК СуммаОстаток,
   |   ЕСТЬNULL(ЗабрТов.КоличествоЗабронированногоОстаток, 0) КАК КоличествоЗабронированного
   |ИЗ
   |   ТабДок КАК ТабДок
   |      ЛЕВОЕ СОЕДИНЕНИЕ ОстНом КАК ОстНом
   |      ПО ТабДок.Номенклатура = ОстНом.Номенклатура
   |      ЛЕВОЕ СОЕДИНЕНИЕ ЗабрТов КАК ЗабрТов
   |      ПО ТабДок.Номенклатура = ЗабрТов.Номенклатура";
   
   
   
   Если Режим = РежимПроведенияДокумента.Оперативный Тогда         
      Запрос.УстановитьПараметр("Момент", Неопределено);
   Иначе         
      Запрос.УстановитьПараметр("Момент", МоментВремени());
   КонецЕсли;
   
   Запрос.УстановитьПараметр("Ссылка", Ссылка);
   
   РезультатЗапроса = Запрос.Выполнить();
   ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

дфтын

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

comradekite

Вот
https://drive.google.com/file/d/0B_4Kqla2AeXvNTVnYkRkWkZHSk0/view?usp=sharing

Добавлено: 27 ноя 2014, 17:35


В выгрузке не правильные данные. Запрос сработал, а данные с регистра бронирования не попали.

дфтын

ну и чего там смотреть? где етот отчет? опять все увеерны что телепатией все обладают..
Помог? Нажми - Спасибо :)
skype: Soprov1C

comradekite

Сорри, документ Продажа товара, процедура проведения.
При проведении товара хочу вытащить остатки и забронированный товар одним запросом.

дфтын

Нашел
ну запрос работает
посмотрите - РезультатЗапроса.Выгрузить()
все есть. проверяйте.
Алгоритм тоже работает. проверяйте период.
Добавлено: 27 ноя 2014, 17:49


ошибки в том, что вы не понимаете что такое преиод
Помог? Нажми - Спасибо :)
skype: Soprov1C

comradekite

На сколько я понял вы делаете так
РезультатЗапроса.Выгрузить()
Хорошо, какая цифра у вас стоит в поле КоличествоЗабронированного? У меня 0, а должно быть 2.
В конструкторе запросов показывает 2.

Какая версия платформы у вас, может дело в ней?
У меня 1С:Предприятие 8.3 (8.3.5.1248)



дфтын

нет, дело в том, на КАКОЙ ДАТА и Время вы смотрите регистр. у вас по товару бронь появляется позже чем вы проводите документ. т.е. товар на бронь поставился 2го числа, а вы пытаетесь посчитать его на 1 число
Помог? Нажми - Спасибо :)
skype: Soprov1C

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск