8.х Внешний отчет

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

  1. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    как у вас сделано, то можно в запрос добавить параметр вашу номенклатуру. Но если у вас регистр периодический (скорее всего) то можно и без запроса обойтись функцией СрезПоследних (описание посмотрите в синтаксис-помошнике)

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

    это правильно говорит, стр - это у вас элемент массива спсНоменклатуры, запрос у вас только присутствует в коде и нигде не выполняется, а вы поля выборки используете - нестыковка
  2. TopicStarter Overlay
    Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Т.е. как я понимаю мне нужно делать еще один цикл?
  3. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    вы сначала делаете отбор по видуноменклатуры, затем у вас запрос, который выбирает все аналоги по всей номенклатуре (сдается мне, что раз вы ранее сделали отбор, то аналоги нужны именно по отобранной номенклатуре - следовательно надо редактировать запрос), Запрос у вас чисто текст - он не выполняется у вас. После всех манипуляций вы делаете цикл по отобранной таблице номенклатуры и выводите ее + хотите, чтобы программа телепатически поняла, что ей надо взять аналоги из невыполненного запроса.

    Это так я ваш кусок кода вижу. Кажется вы немного запутались. Давайте вы не опираясь на ваш код расскажите что в принципе вы тут хотели изобразить
  4. TopicStarter Overlay
    Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Есть внешний отчет который делает разузлование номенклатуры. Писал его не я. Теперь нужно в этот отчет добавить еще одно поле Аналоги.
    Вполне вероятно правильнее будет функцию переписать?
    Код:
    Функция ПолучитьМатериалыНаВыпускПоСпецификации(Номенклатура, табл, количество, исхСпецификация) Экспорт
    состояние("Обработка даных по узлу " +  Номенклатура);
    Если исхСпецификация.Пустая() тогда
    Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(Номенклатура,,ДатаСпецификации);
    иначе
    Спецификация = исхСпецификация;
    КонецЕсли;
    Если Спецификация = Неопределено тогда
    Возврат "";
    КонецЕсли;
    Отбор = Новый Структура();
    исхтабл = УправлениеПроизводством.ПолучитьМатериалыПоСпецификации(Спецификация, количество, Отбор, ДатаСпецификации, Ложь);
    Если  исхтабл = Неопределено Тогда
    возврат "";
    иначе
    Для каждого стр из исхтабл Цикл
    номен = стр.Номенклатура;
    Если не ОстановитьРазузлование(номен, стр) тогда
    ПолучитьМатериалыНаВыпускПоСпецификации(Номен, табл, стр.Количество, Справочники.СпецификацииНоменклатуры.ПустаяСсылка());
    Иначе
    ст = табл.Добавить();
    ст.Номенклатура    = Номен;
    ст.ВидНоменклатуры = Номен.Родитель;
    ст.ЕдИзм		   = стр.ЕдиницаИзмерения;
    ст.Количество	  = стр.Количество;
    КонецЕсли;
    КонецЦикла;
    Возврат "";
    КонецЕсли;
    КонецФункции //
    
    А потом используя ее уже аналог будет легко вывести?
  5. TopicStarter Overlay
    Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Хотя я смотрю не позволит эта функция вывести нужную информацию. Она получает только данные для разузлования.
  6. Tiger86
    Offline

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

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    мне так кажется или ваша функция на возврат всегда "" выдает? ну да ладно... у вас тут формируется таблица "табл" номенклатуры как я поняла и уже для нее надо аналоги найти. Если так, то, учитывая, что регистр у вас периодический и вывести надо последние, то в самом выводе я бы добавила сразу поиск аналогов и вывод. Представьте код вывода в отчет как он есть, без ваших поправок
  7. TopicStarter Overlay
    Vitalik85
    Offline

    Vitalik85 Опытный в 1С

    Регистрация:
    29 мар 2011
    Сообщения:
    147
    Симпатии:
    0
    Баллы:
    26
    Код:
    Функция ПолучитьМатериалыНаВыпускПоСпецификации(Номенклатура, табл, количество, исхСпецификация) Экспорт
    состояние("Обработка даных по узлу " +  Номенклатура);
    Если исхСпецификация.Пустая() тогда
    Спецификация = УправлениеПроизводством.ОпределитьСпецификациюПоУмолчанию(Номенклатура,,ДатаСпецификации);
    иначе
    Спецификация = исхСпецификация;
    КонецЕсли;
    Если Спецификация = Неопределено тогда
    Возврат "";
    КонецЕсли;
    Отбор = Новый Структура();
    исхтабл = УправлениеПроизводством.ПолучитьМатериалыПоСпецификации(Спецификация, количество, Отбор, ДатаСпецификации, Ложь);
    Если  исхтабл = Неопределено Тогда
    возврат "";
    иначе
    Для каждого стр из исхтабл Цикл
    номен = стр.Номенклатура;
    Если не ОстановитьРазузлование(номен, стр) тогда
    ПолучитьМатериалыНаВыпускПоСпецификации(Номен, табл, стр.Количество, Справочники.СпецификацииНоменклатуры.ПустаяСсылка());
    Иначе
    ст = табл.Добавить();
    ст.Номенклатура    = Номен;
    ст.ВидНоменклатуры = Номен.Родитель;
    ст.ЕдИзм		   = стр.ЕдиницаИзмерения;
    ст.Количество	  = стр.Количество;
    КонецЕсли;
    КонецЦикла;
    Возврат "";
    КонецЕсли;
    КонецФункции
    
    Процедура КнопкаВыполнитьНажатие(Кнопка)
    Таблица = Новый ТаблицаЗначений;
    Таблица.Колонки.Добавить("Номенклатура");
    Таблица.Колонки.Добавить("ВидНоменклатуры");
    Таблица.Колонки.Добавить("ЕдИзм");
    Таблица.Колонки.Добавить("Количество");
    КолПлан=?(КоличПлан=0,1,КоличПлан);
    ПолучитьМатериалыНаВыпускПоСпецификации(НоменклатурнаяПозиция, Таблица, КолПлан, ИсхСпецификация);
    Таблица.Свернуть("Номенклатура,ВидНоменклатуры,едизм","Количество");
    Таблица.Сортировать("Номенклатура,едизм");
    ТАблВидовНом = Таблица.Скопировать();
    ТАблВидовНом.Свернуть("ВидНоменклатуры");
    ТАблВидовНом.Сортировать("ВидНоменклатуры");
    Макет = ЭтотОбъект.ПолучитьМакет("Накладная");
    ТабДок = Новый ТабличныйДокумент;
    ТабДок.ЭкземпляровНаСтранице=0;
    Область = Макет.ПолучитьОбласть("Заголовок");
    Область.Параметры.текстшапки = "Сводные нормы расхода по " + НоменклатурнаяПозиция + " на дату " + Формат(ДатаСпецификации, "ДФ=""дд.ММ.гггг""");
    ТабДок.Вывести(Область);
    таблицаСоответствий = ИнициализироватьтаблицуСоответствий();
    состояние("Идет вывод результата!");
    Для каждого стрВидов Из ТАблВидовНом Цикл
    Область = Макет.ПолучитьОбласть("Группа");
    Область.Параметры.Код	   = стрВидов.ВидНоменклатуры.Код;
    Область.Параметры.Группа    = стрВидов.ВидНоменклатуры;
    ТабДок.Вывести(Область);
    Отбор = Новый Структура("ВидНоменклатуры");
    Отбор.ВидНоменклатуры = стрВидов.ВидНоменклатуры;
    спсНоменклатуры = Таблица.НайтиСтроки(Отбор);
    Для каждого стр Из спсНоменклатуры Цикл
    Область = Макет.ПолучитьОбласть("Строка");
    Область.Параметры.Номенклатура = стр.Номенклатура;
    Область.Параметры.ПолнНаименование = стр.Номенклатура.НаименованиеПолное;
    Область.Параметры.Код		  = стр.Номенклатура.Код;
    Область.Параметры.Количество   = стр.Количество;
    Область.Параметры.Единица	  = стр.едизм;
    Область.Параметры.ХрЕдиница    = стр.Номенклатура.ЕдиницаХраненияОстатков;
    Область.Параметры.ВидНоменклатуры = стр.Номенклатура.ВидНоменклатуры;
    НайденнаяСтрока = таблицаСоответствий.Найти(стр.Номенклатура, "Объект");
    ТабДок.Вывести(Область);
    КонецЦикла;
    КонецЦикла;
    ТабДок.Вывести(Макет.ПолучитьОбласть("Подвал"));
    ТабДок.ТолькоПросмотр = Истина;
    ТабДок.Показать("Резузлованная");
    КонецПроцедуры
    

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