Версия для печати темы (https://pro1c.org.ua/index.php?s=b12328b9218a1f257ab2db0eaf553507&showtopic=60255)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как вытянуть значения измерений из регистра ? (1c 7.7.027)

Автор: andrew76 14.07.20, 17:26

Добрый вечер !

Имеется регистр ТовЗапас (товарный запас) со следующими измерениями и ресурсами :
Измерения : Товар,Склад,Мол,Контрагент.
Ресурсы : Количество,Стоимость.
Как в нижеуказанной процедуре вывести в секции "Cтрока" значение измерений Склад и Мол?


Процедура Сформировать()
СпТов=СоздатьОбъект("Справочник.Материалы");
Рег=СоздатьОбъект("Регистр.ТовЗапас");
Таб=СоздатьОбъект("Таблица");
ИтогСк=0;
ИтогГР=0;
колстр=1;
Сптов.ПорядокКодов();
Сптов.НайтиПоКоду(СокрЛП(Склад.Код));
ТС=Сптов.ТекущийЭлемент();
сптов.ИспользоватьДату(ДатаПер);
сптов.ИспользоватьРодителя(ТС);
Если ПустаяСтрока(Грмат.код)=0 Тогда
    СпТов.ВыбратьЭлементыПоРеквизиту("ГруппаМатериалов",Грмат);
иначе
    СпТов.ВыбратьЭлементы();
конецЕсли;    
Рег.ВременныйРасчет();
РассчитатьРегистрыНа(ДатаПер);
Таб.ВывестиСекцию("Шапка");
Если Сжато=2 тогда
        Таб.ВывестиСекцию("Графы");
иначе
        Таб.ВывестиСекцию("ШапкаГр");
КонецЕсли;    
СпТов.ПолучитьЭлемент();
Группа=СпТов.ГруппаМатериалов;
Таб.ВывестиСекцию("Группа");
ост=Рег.СводныйОстаток(СпТов.код,Склад,,,"Количество");    
ИтогГр=ИтогГр+ост*Сптов.цена;
ИтогСк=ИтогСк+ост*Сптов.цена;
Если Сжато=2 тогда
    если ост> спТов.нормазапдень тогда
           Таб.ВывестиСекцию("Строка");   //как здесь из регистра прочитать значения измерений Склад и МОЛ ?
    конецесли;
    колстр=колстр+1;
КонецЕсли;    
Пока СпТов.ПолучитьЭлемент()>0 Цикл
Если СпТов.ПометкаУдаления()=0 тогда
    Если Группа<>спТов.ГруппаМатериалов тогда
        если итоггр>0 тогда
            Таб.ВывестиСекцию("ИтогГР");
        конецесли;
        колстр=колстр+1;
        Если колстр>63 тогда
            таб.НоваяСтраница();
            Таб.ВывестиСекцию("Графы");
            колстр=0;
        конецесли;    
        ИтогГР=0;
        Таб.ВывестиСекцию("Группа");
    конецЕсли;
    ост=Рег.СводныйОстаток(СпТов.код,Склад,,,"Количество");    
    ИтогГр=ИтогГр+ост*Сптов.цена;
    ИтогСк=ИтогСк+ост*Сптов.цена;
    Если Сжато=2 тогда
        если ост> спТов.нормазапдень тогда
                Таб.ВывестиСекцию("Строка");  //как здесь из регистра прочитать значения измерений Склад и МОЛ ?
        конецесли;
        КонецЕсли;    
конецЕсли;    
    Группа=спТов.ГруппаМатериалов;
КонецЦикла;    
Таб.ВывестиСекцию("ИтогГР");
Если ПустаяСтрока(Грмат.код)=1  тогда
    Таб.ВывестиСекцию("ИтогСк");
КонецЕсли;    


Таб.ТолькоПросмотр(1);
    Таб.Опции(0, 0, 5,0 ,,"ОСВР");
    Таб.ОбластьПечати(2);
    Таб.ПовторятьПриПечатиСтроки(3,3);
    Таб.ПараметрыСтраницы(1,,,,,,,,, 1);
    Таб.Показать("", "");

Автор: denis84 14.07.20, 18:19

andrew76 @ Сегодня, 18:26 * ,
Добрый день! Сформулируйте еще раз! Вы хотите получить данные из регистра? А справочников материалов зачем Вам? Сама задача в чем заключается? Вообще можно запросом к регистру все это получить

Автор: andrew76 14.07.20, 18:50

denis84 @ Сегодня, 21:19 * ,

отчет не мной писан,времени особо нет разбираться,но нужно.Да,нужно получить остатки из регистра :

ост=Рег.СводныйОстаток(СпТов.код,Склад,,,"Количество");

Нужно в строчку вывести номенклатурный номер,цену,количество,сумму,наименование склада,мол(мат.отв.лицо)
Как можно это сделать запросом ?

Автор: denis84 14.07.20, 19:18

andrew76 @ Сегодня, 18:26 * ,
Если в Вашу процедуру вписывать, то по -моему можно так

Склад = рег.склад;
МОЛ = рег.МОЛ
Таб.ВывестиСекцию("Строка");


склад и мол - это выражения на печатной форме в секции "строка".

Запросом можно, напишу позже. опробуйте этот вариант пока.

Автор: andrew76 14.07.20, 19:43

denis84 @ Сегодня, 22:18 * ,

Склад=Рег.Склад;


выводится пустая строка

andrew76 @ Сегодня, 22:33 * ,

наверное после применения метода СводныйОстаток,это не работает

ост=Рег.СводныйОстаток(СпТов.код,Склад,,,"Количество");

Автор: denis84 14.07.20, 20:00

andrew76 @ Сегодня, 20:43 * ,
Надо вспоминать))

ОстаткиТоваров.Количество = ОстТоваров.Остаток(Фирма,ТекТов,Склад,"ОстатокТовара");
        
ОстаткиТоваров.Количество = ОстТоваров.СводныйОстаток(Фирма,ТекТов,,"ОстатокТовара");


А вот пример в виде запроса, как получить остатки и обороты товаров по складам

//*******************************************
Процедура Сформировать()
    Запр = СоздатьОбъект("Запрос");
    Таб = СоздатьОбъект("Таблица");
    ПечФорма = "ТаблицаШир_НеБУ";
    Таб.ИсходнаяТаблица(ПечФорма);

    ТекстЗапр = "";
    Заг = "";
    Заг1 = "";
    Заг2 = "";

    ПозицияОтчета = ДатаПо;
        
    ТекстЗапр = "
    |Период с ДатаС по ДатаПо;
    |Фир = Регистр.Остатки.Фирма;
    |Скл = Регистр.Остатки.МестоХранения;
    |ТМЦ = Регистр.Остатки.ТМЦ;";
    |Док = Регистр.Остатки.ТекущийДокумент;
    |Кво = Регистр.Остатки.ОстатокТовара;;
    |Условие (Фир = выбФирма);";
    |Условие (Скл в ВыбСклад);
    |Условие (Скл.Тип = Перечисление.ТипыМестХранения.Склад);
    |Условие (ТМЦ в ВыбТМЦ);
    |Группировка Скл;
    |Группировка ТМЦ упорядочить по ТМЦ.Код без групп;
    |Функция НОКво = НачОст(Кво);
    |Функция КОКво = КонОст(Кво);
    |Функция ПКво = Приход(Кво);
    |Функция РКво = Расход(Кво);";
    Если ВыбТМЦ.РазмерСписка() = 0 Тогда
        Заг1 = Заг1 + "По всім ТМЦ. ";
    Иначе
        Заг1 = Заг1 + "По ТМЦ зі списку: " + ВыбТМЦ.ВСтрокуСРазделителями() + ". ";
    КонецЕсли;
    Если ВыбСклад.Выбран() = 0 Тогда
        Заг2 = Заг2 + "По всім складам.";
    Иначе
        Заг2 = Заг2 + "По складу " + СокрЛП(ВыбСклад.ИсторическоеНаименование.Получить(ДатаПо)) + ".";
    КонецЕсли;

    Если Запр.Выполнить(ТекстЗапр) = 0 Тогда
        Возврат;
    КонецЕсли;

    Таб.ВывестиСекцию("Шапка");
    Пока Запр.Группировка("Скл") = 1 Цикл
        Таб.ВывестиСекцию("Скл");
        текНом = 0;
        Пока Запр.Группировка("ТМЦ") = 1 Цикл
            Если Запр.ТМЦ.Выбран() = 0 Тогда
                Продолжить;
            КонецЕсли;
            Если Запр.ТМЦ.ЭтоГруппа() = 1 Тогда
            Иначе
                текНом = текНом + 1;
                УчЦена = Запр.ТМЦ.УчетнаяЦена.Получить(ДатаПо);
                Таб.ВывестиСекцию("ТМЦ");
            КонецЕсли;
        КонецЦикла;
        
        Если Запр.Скл.ЭтоГруппа() = 0 Тогда
            Таб.ВывестиСекцию("ИтСклад");
            ИтКво = ИтКво + текНом;
            текНом = 0;
        КонецЕсли;
    КонецЦикла;
    Таб.ВывестиСекцию("Итог");
    Таб.Опции(0,0,Таб.ВысотаСекции("Шапка"),0);
    Таб.ТолькоПросмотр(1);    
    Таб.ПараметрыСтраницы(2,95,,3,3,3,3,,,,,);
    Таб.Показать("Оборотка ТМЦ по складам");
КонецПроцедуры

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua