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

Заполнение табличной части результатом запроса

Автор S#4, 04 июл 2024, 14:35

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

S#4

имеется данный код Процедура Кнопка1Нажатие(Элемент)
СЗ = Новый СписокЗначений; 
Для каждого Значение Из Перечисления.КодыОперацийПартииТоваров Цикл
    СЗ.Добавить(Значение);
            КонецЦикла;

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

Запрос.УстановитьПараметр("ДатаНачала",ЭтотОбъект.ДатаОтчета());
Запрос2.УстановитьПараметр("ДатаНачала",ЭтотОбъект.ДатаОтчета());
//Запрос2.УстановитьПараметр("ДатаНачала",НачалоДня(ТекущаяДата()));
//Запрос2.УстановитьПараметр("ДатаНачала",НачалоГода(ТекущаяДата()));   
Запрос2.УстановитьПараметр("КодОперации",СЗ);     


Выборка1 = Запрос. Выполнить().Выбрать();
Выборка = Запрос2.Выполнить().Выбрать();


Пока Выборка1.Следующий() Цикл
    Строка = ЭтотОбъект.АнализСкладскихЗапасов.Добавить();
    Строка.Комментарий = Выборка1.Комментарий;
    Строка.ТекущаяПотребность = Выборка1.ТекущаяПотребность;
    Строка.ИзбыточныйЗапас = Выборка1.ИзбыточныйЗапас;
    Строка.Оборачиваемость = Выборка1.ПериодСписания;
    Строка.ПотребностьОтЦеха = Выборка1.ПотребностьОтЦеха;
    Строка.СуммаНаКонецПериода = Выборка1.СуммаНаКонецПериода;
    Строка.КоличествоНаКонецПериода = Выборка1.КоличествоНаКонецПериода;
    //Строка.Номенклатура.ЦеноваяГруппа = ЦеноваяГуппа.Номенклатура;
КонецЦикла;

Пока Выборка.Следующий() Цикл
    НоваяСтрока = ЭтотОбъект.АнализСкладскихЗапасов.Добавить();
    //НоваяСтрока.КоличествоНаКонецПериода = Выборка.Количество2;
    //НоваяСтрока.СуммаНаКонецПериода = Выборка.Стоимость2;   
КонецЦикла;


КонецПроцедуры
Как правильно заполнить табличную часть и почему выдает криво дату?

LexaK

S#4,
Цитироватьи почему выдает криво дату?
криво, где?

в каком месте кода, по вашему - Не правильная/кривая дата?
если помогло нажмите: Спасибо!

S#4

LexaK, ругается на это ЭтотОбъект.ДатаОтчета как это правильно прописать?

LexaK

S#4, у вас так написано
Запрос2.УстановитьПараметр("ДатаНачала",ЭтотОбъект.ДатаОтчета());
это
ЭтотОбъект.ДатаОтчета() - это обращение к функции!!!

может вы имели ввиду обращение к реквизиту документа? тогда надо так

Запрос2.УстановитьПараметр("ДатаНачала",ЭтотОбъект.ДатаОтчета ); //без внутренних скобок
если помогло нажмите: Спасибо!

S#4

LexaK, а с заполнением табличной части все в порядке?

LexaK

S#4, заполнение ТЧ я делаю так (всего одна команда)
ЭтотОбъект.АнализСкладскихЗапасов.Загрузить(Запрос. Выполнить().Выгрузить());

(только имена колонок и типы должны совпадать)
если помогло нажмите: Спасибо!

S#4

LexaK, Подскажите как заполнить "оборачиваемость" без добавления еще одного параметра ?

LexaK

S#4, Строка.Оборачиваемость = Выборка1.ПериодСписания;просто в запросе измените алиас ПериодСписания на Оборачиваемость
и оно заполнится автоматически (при загрузке)!
если помогло нажмите: Спасибо!

S#4

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

Запрос.УстановитьПараметр("ДатаНачала",ЭтотОбъект.ДатаОтчета);
Запрос2.УстановитьПараметр("ДатаНачала",ЭтотОбъект.ДатаОтчета);
//Запрос2.УстановитьПараметр("ДатаНачала",НачалоДня(ТекущаяДата()));
//Запрос2.УстановитьПараметр("ДатаНачала",НачалоГода(ТекущаяДата()));   
Запрос2.УстановитьПараметр("КодОперации",СЗ);     


Выборка1 = Запрос. Выполнить().Выбрать();
Выборка = Запрос2.Выполнить().Выбрать();

//ЭтотОбъект.АнализСкладскихЗапасов.Загрузить(Запрос. Выполнить().Выгрузить());
Пока Выборка1.Следующий() Цикл
Строка = ЭтотОбъект.АнализСкладскихЗапасов.Добавить();
Строка.Комментарий = Выборка1.Комментарий;
Строка.ТекущаяПотребность = Выборка1.ТекущаяПотребность;
Строка.ИзбыточныйЗапас = Выборка1.ИзбыточныйЗапас;
Строка.Оборачиваемость = Выборка1.Оборачиваемость;
Строка.ПотребностьОтЦеха = Выборка1.ПотребностьОтЦеха;
Строка.СуммаНаКонецПериода = Выборка1.СуммаНаКонецПериода;
Строка.КоличествоНаКонецПериода = Выборка1.КоличествоНаКонецПериода;
Строка.ЦеноваяГруппа = Выборка1.ЦеноваяГруппа;
Строка.Номенклатура = Выборка1.Номенклатура;
Строка.ЕдИзмерения = Выборка1.ЕдИзм;
   
КонецЦикла;


//ЭтотОбъект.АнализСкладскихЗапасов.Загрузить(Запрос2. Выполнить().Выгрузить());
Пока Выборка.Следующий() Цикл   
НоваяСтрока = ЭтотОбъект.АнализСкладскихЗапасов.Добавить();
НоваяСтрока.КоличествоНаКонецПериода = Выборка.Количество2;
НоваяСтрока.СуммаНаКонецПериода = Выборка.Стоимость2;
НоваяСтрока.Номенклатура = Выборка.Номенклатура2;
                                                                                                     
КонецЦикла;

LexaK

S#4, теперь самое время познакомиться/освоить отладчик!
под ним можно пройти свой код по шагам, отслеживая значения переменных и тд

и в будущем вам очень пригодится умение пользоваться отладчиком!
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск