8.х УФ: Как получить остатки по товарам и записать их в ТЗ?

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

  1. TopicStarter Overlay
    belbuh
    Online

    belbuh Новичок в 1С

    Регистрация:
    18 июл 2013
    Сообщения:
    46
    Симпатии:
    2
    Баллы:
    4
    Дано: Управляемое приложение, БП 3.0, платформа 8.2.19, толстый клиент

    Задача проста: получить остатки по 10 счету по выбранному складу и отобразить на форме ТЗ с результатом запроса.

    У меня запрос возвращает пустой результат. Проверял в консоли.
    Я в УФ пока вообще не разбираюсь, мне бы принцип работы понять и для образца что-нибудь заиметь...

    вот как сделал я:

    Код:
     Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("НачПериода", Дата);
    Запрос.УстановитьПараметр("КонПериода", Дата);
    Счет10 = ПланыСчетов.Хозрасчетный.НайтиПоКоду("10")
    Запрос.УстановитьПараметр("Счет10",Счет10);
    СчетМЦ = ПланыСчетов.Хозрасчетный.НайтиПоКоду("МЦ.02");
    Запрос.УстановитьПараметр("СчетМЦ",СчетМЦ);
    Запрос.УстановитьПараметр("Организация",Организация);
    Запрос.УстановитьПараметр("Склад",Склад);
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    | Остатки.Счет КАК Счет,
    | Остатки.Субконто1 КАК Номенклатура,
    | Остатки.Субконто1.Родитель КАК Родитель,
    | Остатки.Субконто1.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
    | Остатки.КоличествоКонечныйОстатокДТ КАК Количество,
    | Остатки.СуммаКонечныйОстатокДт КАК Сумма
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.ОстаткиИОбороты(&НачПериода,&КонПериода,,,(Счет В (&Счет10)) ИЛИ (Счет=&СчетМЦ),,Организация = &Организация)
    |КАК
    | Остатки
    |ГДЕ
    | Остатки.Субконто2 = &Склад
    |УПОРЯДОЧИТЬ ПО
    | Остатки.Субконто1.Наименование";
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    новаястрока = ТЗ.Добавить();
    новаястрока.ТЗНоменклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    новаястрока.ТЗКоличество = ВыборкаДетальныеЗаписи.Количество;
    //...
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = ВыборкаДетальныеЗаписи.Номенклатура.Наименование;
    Сообщение.Сообщить();
    КонецЦикла;
    

    Вложения:

  2. NcSteel
    Offline

    NcSteel Опытный в 1С

    Регистрация:
    29 окт 2013
    Сообщения:
    78
    Симпатии:
    0
    Баллы:
    26
    1. Судя по запросу взята не та виртуальная таблица. Следовало взять таблицу "Остатки".
    2. Счет В (&Счет10) заменить на Счет В ИЕРАРХИИ (&Счет10).
    3. Заменить"Остатки.Субконто1" на "Выразить(Остатки.Субконто1 как Справочник.Номенклатура)"
    4. Заменить "Остатки.Субконто1.Родитель" на "Выразить(Остатки.Субконто1 как Справочник.Номенклатура).Родитель"
    5. Заменить "Остатки.Субконто1.ЕдиницаИзмерения" на "Выразить(Остатки.Субконто1 как Справочник.Номенклатура).ЕдиницаИзмерения"
    6. Все что в секции "ГДЕ" перенести в параметры виртуальной таблицы!

    Так же я бы сделал через динамический список с произвольным запросом. Проверь запрос с изменениями и отпишитесь!
  3. TopicStarter Overlay
    belbuh
    Online

    belbuh Новичок в 1С

    Регистрация:
    18 июл 2013
    Сообщения:
    46
    Симпатии:
    2
    Баллы:
    4
    Спасибо Вам большое!
    Я исправил некоторые ошибки и получил результат запроса.
    Ниже будет рабочий код для всех остальных.

    Простите за дурацкие вопросы, но они таки возникли.

    в какое именно место вписать условие на склад?

    а что это вообще такое и в чем разница?

    Но самый главный вопрос: вот мы получили результат запроса. Дальше через форму мы можем, например, удалить строку ТЗ.
    А потом на основе этой ТЗ мы захотели заполнить ТабЧасть какого-то дока.
    Насколько мне известно, тут есть нюансы. Я имею ввиду, что прибегают к таким функциям как РеквизитФормыВЗначение() и ЗначениеВРеквизитФормы().
    Можете что-то сказать хотя бы в двух словах?


    Код:
     Запрос.Текст = "ВЫБРАТЬ
    | ХозрасчетныйОстатки.Счет КАК Счет,
    | ХозрасчетныйОстатки.Субконто1 КАК Номенклатура,
    | Выразить(ХозрасчетныйОстатки.Субконто1 как Справочник.Номенклатура).Родитель КАК Родитель,
    | Выразить(ХозрасчетныйОстатки.Субконто1 как Справочник.Номенклатура).ЕдиницаИзмерения КАК ЕдИзм,
    | ХозрасчетныйОстатки.КоличествоОстаток КАК Количество,
    | ХозрасчетныйОстатки.СуммаОстаток КАК Сумма
    |ИЗ
    | РегистрБухгалтерии.Хозрасчетный.Остатки(&ДатаОстатков, Счет В ИЕРАРХИИ (&Счет10), ,Организация=&Организация) КАК ХозрасчетныйОстатки
    |ГДЕ
    | ХозрасчетныйОстатки.Субконто3=&Склад";
    
    Результат = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = Результат.Выбрать();
    
    Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
    новаястрока = ТЗ.Добавить();
    новаястрока.Счет = ВыборкаДетальныеЗаписи.Счет;
    новаястрока.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
    новаястрока.Родитель = ВыборкаДетальныеЗаписи.Родитель;
    новаястрока.ЕдиницаИзмерения = ВыборкаДетальныеЗаписи.ЕдИзм;
    новаястрока.Количество = ВыборкаДетальныеЗаписи.Количество;
    новаястрока.Сумма = ВыборкаДетальныеЗаписи.Сумма;
    КонецЦикла;

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