8.х Расшифровка в СКД. Получить параметры.

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

  1. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Не не забыл, просто пока некогда :(
  2. nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Я наблюдаю :D
  3. nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Просто царь, я буду периодично напоминать. Т.к. эта тема очень интересна мне. У меня уже 2 отчета не доделаны из-за этого...
  4. Kc93
    Offline

    Kc93 Опытный в 1С

    Регистрация:
    27 фев 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    У меня получилось только вывести номенклатуру, количество и документы движения в табличном документе при клике на количестве по форме скд
  5. nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Код, мне нужен код :sm_upset:
  6. Kc93
    Offline

    Kc93 Опытный в 1С

    Регистрация:
    27 фев 2012
    Сообщения:
    190
    Симпатии:
    0
    Баллы:
    26
    Код:
    Функция ПолучитьЗначениеПредыдущейОбласти(ИмяОбласти)
    
    Возврат ЭлементыФормы.Результат.ПолучитьОбласть("R" + Сред(ИмяОбласти,2,Найти(ИмяОбласти,"C")-2) + "C3").ТекущаяОбласть.Текст;
    
    КонецФункции
    

    Код:
    Функция ВыборЗаказаПоставщикам()
    Возврат "ВЫБРАТЬ
    | ЗаказыПоставщикамСкладОстатки.Номенклатура.Наименование КАК Номенклатура,
    | ЗаказыПоставщикамСкладОстатки.Склад,
    | ЗаказыПоставщикамСкладОстатки.КоличествоОстаток КАК Количество,
    | ЗаказыПоставщикамСкладОстатки.ЗаказПоставщику КАК Регистратор,
    | ЗаказПоставщикуТовары.СрокИсполнения
    |ИЗ
    | РегистрНакопления.ЗаказыПоставщикамСклад.Остатки КАК ЗаказыПоставщикамСкладОстатки
    |  ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПоставщику.Товары КАК ЗаказПоставщикуТовары
    |  ПО ЗаказыПоставщикамСкладОстатки.ЗаказПоставщику = ЗаказПоставщикуТовары.Ссылка
    |   И ЗаказыПоставщикамСкладОстатки.Номенклатура = ЗаказПоставщикуТовары.Номенклатура
    |ГДЕ
    | ЗаказыПоставщикамСкладОстатки.Номенклатура.Наименование = &Номенклатура
    | И ЗаказыПоставщикамСкладОстатки.Склад = &Склад
    | И ЗаказыПоставщикамСкладОстатки.КоличествоОстаток > 0
    |
    |СГРУППИРОВАТЬ ПО
    | ЗаказыПоставщикамСкладОстатки.Склад,
    | ЗаказыПоставщикамСкладОстатки.ЗаказПоставщику,
    | ЗаказыПоставщикамСкладОстатки.Номенклатура.Наименование,
    | ЗаказыПоставщикамСкладОстатки.КоличествоОстаток,
    | ЗаказПоставщикуТовары.СрокИсполнения";
    
    КонецФункции // ВыборЗаказаПоставщикам()
    


    Код:
    Процедура РезультатОбработкаРасшифровки(Элемент, Расшифровка, СтандартнаяОбработка)
    
    Если ДанныеРасшифровки.Элементы.Получить(Расшифровка).ПолучитьПоля().Найти("ТоварыВПути") <> Неопределено Тогда
    ЗапросЗаказаПоставщикам(Элемент, Расшифровка, СтандартнаяОбработка);
    КонецЕсли;
    
    
    КонецПроцедуры
    

    Код:
    Процедура ЗапросЗаказаПоставщикам(Элемент, Расшифровка, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь;
    
    // Создадим, заполним и покажем в новом табличном документе:
    ПечатныйДокумент = Новый ТабличныйДокумент;
    
    Макет = ПолучитьМакет("ЗаявкиИЗаказы");
    
    //выведем шапку
    ОбластьМакетаШапка = Макет.ПолучитьОбласть("Шапка");
    ПечатныйДокумент.Вывести(ОбластьМакетаШапка);
    
    // выведем табличную часть
    ОбластьМакетаСтрока = Макет.ПолучитьОбласть("Строка");
    Запрос = Новый Запрос;
    Запрос.Текст = ВыборЗаказаПоставщикам();
    Запрос.УстановитьПараметр("Номенклатура", ПолучитьЗначениеПредыдущейОбласти(Элемент.ТекущаяОбласть.Имя));// нужно получить значение соседней области, чтобы расшифровать
    СписокЭлементов = КомпоновщикНастроек.Настройки.Отбор.Элементы;
    Для каждого Элемент из СписокЭлементов Цикл
    Если Элемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Склад") Тогда
    Склад = Элемент.ПравоеЗначение;
    Запрос.УстановитьПараметр("Склад", Склад);
    КонецЕсли;
    
    КонецЦикла;
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    Пока Выборка.Следующий() Цикл
    ОбластьМакетаСтрока.Параметры.Номенклатура = Выборка.Номенклатура;
    ОбластьМакетаСтрока.Параметры.СрокИсполнения = Выборка.СрокИсполнения;
    ОбластьМакетаСтрока.Параметры.Регистратор = Выборка.Регистратор;
    ОбластьМакетаСтрока.Параметры.Количество = Выборка.Количество;
    ПечатныйДокумент.Вывести(ОбластьМакетаСтрока);
    КонецЦикла;
    
    ПечатныйДокумент.ТолькоПросмотр = Истина;
    ПечатныйДокумент.Показать();
    Конецпроцедуры
    
    Может вы сможете переделать на открытие в новой форме отчета?
  7. nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Вопрос все еще открыт...
  8. nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Вопрос закрыт.
    Код:
    // В процедуре ОбработкаРасшифровки. В этот массив записываются нужные значения. Думаю не нужно рассписывать как их получить из массива.
    МассивПолейРасшифровки  = ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровки);
    
    // Функция добавляет родителя к полю компоновки данных.
    // ................................................................................
    Функция ДобавитьРодителей(ЭлементРасшифровки, ТекущийОтчет, МассивПолейРасшифровки, ВключатьРесурсы = Ложь) Экспорт
    
    Если ТипЗнч(ЭлементРасшифровки) = Тип("ЭлементРасшифровкиКомпоновкиДанныхПоля") Тогда
    Для каждого Поле Из ЭлементРасшифровки.ПолучитьПоля() Цикл
    ДоступноеПоле = ПолучитьДоступноеПолеПоПолюКомпоновкиДанных(Новый ПолеКомпоновкиДанных(Поле.Поле), ТекущийОтчет);
    Если ДоступноеПоле = Неопределено Тогда
    Продолжить;
    КонецЕсли;
    Если Не ВключатьРесурсы И ДоступноеПоле.Ресурс Тогда
    Продолжить;
    КонецЕсли;
    МассивПолейРасшифровки.Добавить(Поле);
    КонецЦикла;
    КонецЕсли;
    Для каждого Родитель Из ЭлементРасшифровки.ПолучитьРодителей() Цикл
    ДобавитьРодителей(Родитель, ТекущийОтчет, МассивПолейРасшифровки, ВключатьРесурсы);
    КонецЦикла;
    
    КонецФункции
    
    // Возвращает доступное поле по полю компоновки.
    // ................................................................................
    Функция ПолучитьДоступноеПолеПоПолюКомпоновкиДанных(ПолеКомпоновкиДанных, ОбластьПоиска) Экспорт
    
    Если ТипЗнч(ПолеКомпоновкиДанных) = Тип("Строка") Тогда
    ПолеПоиска = Новый ПолеКомпоновкиДанных(ПолеКомпоновкиДанных);
    Иначе
    ПолеПоиска = ПолеКомпоновкиДанных;
    КонецЕсли;
    
    Если ТипЗнч(ОбластьПоиска) = Тип("КомпоновщикНастроекКомпоновкиДанных")
    ИЛИ ТипЗнч(ОбластьПоиска) = Тип("ДанныеРасшифровкиКомпоновкиДанных")
    ИЛИ ТипЗнч(ОбластьПоиска) = Тип("НастройкиВложенногоОбъектаКомпоновкиДанных") Тогда
    Возврат ОбластьПоиска.Настройки.ДоступныеПоляВыбора.НайтиПоле(ПолеПоиска);
    Иначе
    Возврат ОбластьПоиска.НайтиПоле(ПолеПоиска);
    КонецЕсли;
    
    КонецФункции
    
    // Возвращает массив, по которому следует расшифровать отчет.
    // ................................................................................
    Функция ПолучитьМассивПолейРасшифровки(Расшифровка, ДанныеРасшифровки, ТекущийОтчет = Неопределено, ВключатьРесурсы = Ложь) Экспорт
    
    МассивПолейРасшифровки = Новый Массив;
    
    Если ТипЗнч(Расшифровка) <> Тип("ИдентификаторРасшифровкиКомпоновкиДанных") 
    И ТипЗнч(Расшифровка) <> Тип("ДанныеРасшифровкиКомпоновкиДанных") Тогда
    Возврат МассивПолейРасшифровки;
    КонецЕсли;
    
    Если ТекущийОтчет = Неопределено Тогда
    ТекущийОтчет = ДанныеРасшифровки;
    КонецЕсли;
    
    // Добавим поля родительских группировок
    ДобавитьРодителей(ДанныеРасшифровки.Элементы[Расшифровка], ТекущийОтчет, МассивПолейРасшифровки, ВключатьРесурсы);
    
    Количество = МассивПолейРасшифровки.Количество();
    Для Индекс = 1 По Количество Цикл
    ОбратныйИндекс = Количество - Индекс;
    Для ИндексВнутри = 0 По ОбратныйИндекс - 1 Цикл
    Если МассивПолейРасшифровки[ОбратныйИндекс].Поле = МассивПолейРасшифровки[ИндексВнутри].Поле Тогда
    МассивПолейРасшифровки.Удалить(ОбратныйИндекс);
    Прервать;
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    
    // Добавим отбор, установленный в отчете
    Для каждого ЭлементОтбора Из ТекущийОтчет.Настройки.Отбор.Элементы Цикл
    Если Не ЭлементОтбора.Использование Тогда
    Продолжить;
    КонецЕсли;
    МассивПолейРасшифровки.Добавить(ЭлементОтбора);
    КонецЦикла;
    
    Возврат МассивПолейРасшифровки;
    
    КонецФункции
    
  9. nbIpKuH_BaH9I
    Online

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.987
    Симпатии:
    398
    Баллы:
    104
    Лично у меня остался вопрос по расшифровке в СКД только один. Не получается получить всю строку, т.е. значения из всех ячеек строки. Т.е. я тыкаю не на заказчика, а на любое число справа. И надо получить самого заказчика.
  10. Kisner
    Offline

    Kisner

    Регистрация:
    5 фев 2015
    Сообщения:
    1
    Симпатии:
    0
    Баллы:
    1
    Столкнулся с аналогичной проблемой. Ответ на свой вопрос найти смогли?
Похожие темы
  1. mhl
    Ответов:
    3
    Просмотров:
    867
Загрузка...

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