8.х Соединение двух регистров в отчете СКД

Тема в разделе "Отчеты и обработки для "1С:Предприятие 8"", создана пользователем prog_22, 11 ноя 2013.

  1. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Добрый вечер!

    Не получается соединить 2 регистра(УПП)

    Необходимо вывести из Регистра Сведений "ЗаказыПокупателя" номенклатуру(проводка док-та ЗаказПокупателя) и рядом из Регистра Сведений Свободные остатки(проводка док-та Отчет пр-ва за смену)

    делаю так:

    Код:
    ВЫБРАТЬ
    СвободныеОстатки.Номенклатура.Наименование,
    ЗаказыПокупателей.Номенклатура.Ссылка
    ИЗ
    РегистрНакопления.ЗаказыПокупателей КАК ЗаказыПокупателей
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки КАК СвободныеОстатки
    ПО ЗаказыПокупателей.Номенклатура.Наименование = СвободныеОстатки.Номенклатура.Ссылка
    но поля пустые..
  2. nickpugachev
    Offline

    nickpugachev Профессионал в 1С Команда форума

    Регистрация:
    28 май 2012
    Сообщения:
    3.266
    Симпатии:
    131
    Баллы:
    104
    ПО ЗаказыПокупателей.Номенклатура=СвободныеОстатки.Номенклатура

    и работать надо не с записями регистров, они вам ничего не дадут хорошего, а с виртуальными таблицами остатков
    итого будет
    Код:
    ВЫБРАТЬ
    ЗаказыПокупателейОстатки.Номенклатура,
    СвободныеОстаткиОстатки.КоличествоОстаток КАК Количество
    ИЗ
    РегистрНакопления.ЗаказыПокупателей.Остатки КАК ЗаказыПокупателейОстатки
    ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки КАК СвободныеОстаткиОстатки
    ПО ЗаказыПокупателейОстатки.Номенклатура = СвободныеОстаткиОстатки.Номенклатура
  3. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Ну раз используетет виртуальные таблицы то Остатки, то хорошим тном принято так же указывать на какую дату беруться остатки.
  4. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    с этим разобрался..спасибо!

    Вот теперь мучает другое:

    нужно проверить условие: если в ОПЗС номенклатуры по позиции больше, чем в связанном с ним Заказе на производство, не давать проводить документ

    Пишу так:

    Код:
    Запрос=Новый Запрос;
    Запрос.Текст = "
    |ВЫБРАТЬ
    | ЗаказНаПроизводствоПродукция.Количество КАК Кол,
    | ОтчетПроизводстваЗаСменуПродукция.Количество КАК Количество1   
    |ИЗ
    | Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
    |  ПОЛНОЕ СОЕДИНЕНИЕ Документ.ОтчетПроизводстваЗаСмену.Продукция КАК ОтчетПроизводстваЗаСменуПродукция
    |  ПО ЗаказНаПроизводствоПродукция.Номенклатура = ОтчетПроизводстваЗаСменуПродукция.Номенклатура
    |";
    Результат = Запрос.Выполнить();   
    
    ВыборкаКол = Результат.Выбрать(ОбходРезультатаЗапроса.Прямой);
    КолЗАКАЗ = Строка(ВыборкаКол.Количество);  
    
    ВыборкаКол1 = ВыборкаКол.Выбрать(ОбходРезультатаЗапроса.Прямой);
    КолОПЗС = Строка(ВыборкаКол1.Количество);
    
    Если КолОПЗС > КолЗАКАЗ Тогда Сообщить ("невозможно проведение документа!");
    КонецЕсли;
    
    но при точке останова на Результат = Запрос.Выполнить(); даёт ложь. Я пробовал делать и в обработке проведения ОПЗС и в событии "приИзменении" количества в табл части ОПЗС
  5. alexburn
    Offline

    alexburn Модераторы Команда форума Модератор

    Регистрация:
    5 янв 2009
    Сообщения:
    14.781
    Симпатии:
    509
    Баллы:
    204
    Нужно использовать ВыборкаКол.Следующий(), если нужна "одноразовая" выборка.
  6. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    ну и езе пару вопросов.
    0. Сейчас в запросе вы проверяете все документы ОПЗС и все ЗАКАЗЫ и говорит еесли во всех заказ и Во всех отчетах количество не совпадает то текущий док не проводить.
    1. В запросе вы нигде не проверяете на проведнность документа или его пометку на удаление.
    2. затем попробуйте в заказе одну номенклатуру разбить на 2 строки , а в ОПЗС на одну и посмотрите что будет
    3. Номенклатура так же может выпускаться в разрезе характеристик - вам без разницы это не будет по характеристика выпускаться?
    4. Аналогичная ситуация со спецификациями...
  7. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Если я буду использовать цикл ВыборкаКол.Следующий() то я не пойму, как мне из ВЫБОРКАКОЛ1 ПОТОМ ВЫТАЩИТЬ ИНФОРМАЦИЮ..

    0. да, так и есть.. но как мне связать конкретный заказ с конкретным опзс в запросе? в структуре подчиненности они друг за другом следуют
    1. Я пока просто тестил, как я понимаю это делается С ПОМОЩЬЮ ГДЕ
    2. Дубли строк?Не представляю зачем это нужно..
    3.Без характеристики
    4.Спецификация заполняется из заказа на производство, и я убрал возможность изменения её
  8. Draco
    Offline

    Draco Модераторы Команда форума Модератор

    Регистрация:
    28 окт 2009
    Сообщения:
    13.647
    Симпатии:
    948
    Баллы:
    204
    Тогда сначал выгрузить В ТЗ и взять из нее первую строку, а потом уже можете с выборкой работать.
    У Вас этот код где выполняется в ОПЗС скорее всего тогда уже долно было быть в условии ГДЕ Документ.ОтчетПроизводстваЗаСмену.Продукция.Ссылка=&Ссылка, где ссылка - это ссылка на текущий док
    А насчет заказов, то если я не ошибаюсь то при формировани ОПЗС в ТЧ продукция в поле "ВЫПУСК" указывается заказ на производство на основании которого идет выпуск. вот и связывайте

    Дубли строк
    ну представьте что у Вас есть 3 заказа на производство одной номенклатуры по 3 разным спецификациям и их выпускают в один день - я же могу это оформить одним документом ОПЗС это выпуск - у меня в этом документе будет 3 строки с тремя одинаковыыми номенклатурами но т.к заказы разные и спецификации то это будет 3 разных строки.

Поделиться этой страницей