Имя: Пароль:
1C
1С v8
СКД. Как-то криво передается параметр.
,
0 Lenka_Boo
 
13.02.14
11:23
Делался внешний отчетик для ЗУПа. На базе вот этого шаблона: http://infostart.ru/public/127639/
Потребовалось возможность исключать из отчета доки корректировки налогов и взносов (по желанию)
Добавляю в запрос условие: "&БезКорректировок = ЛОЖЬ"
В консоли отчетов ("Произвольные отчеты" в ЗУПе) все отлично отрабатывает.

Добавляю во внешний отчет реквизит с типом Булево (+ галку на форму)
Передаю в СКД вместе с датами:
...
    Попытка
        ДатаКон                             = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1];
        ДатаКон.Значение                     = КонецДня(ДатаОкончания);
        ДатаКон.Использование                 = Истина;
    Исключение
        #Если Клиент Тогда
            Сообщить("Ошибка установки конечной даты!");    
        #КонецЕсли
    КонецПопытки;
    
    Попытка
        ОтключениеКорректировок                             = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[2];
        ОтключениеКорректировок.Значение                     = БезКорректировок;
        ОтключениеКорректировок.Использование                 = Истина;
    Исключение
        #Если Клиент Тогда
            Сообщить("Ошибка установки параметра исключения корректировок");    
        #КонецЕсли
    КонецПопытки;
...

В СКД параметру тоже задаю тип Булево.

Вылезает такая ошибка:

{Форма.ФормаОтчета.Форма(86)}: Ошибка при вызове метода контекста (Вывести)
    ПроцессорВывода.Вывести(ПроцессорКомпановкиДанных);
по причине:
Ошибка вывода результата
по причине:
Ошибка при выводе результата
по причине:
Ошибка получения данных
по причине:
Ошибка создания набора данных "Запрос"
по причине:
Ошибка при исполнении запроса набора данных
по причине:
{(70, 22)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И &БезКорректировок <<?>>= ЛОЖЬ

Что не так? Где еще с этим параметром поколдовать?
1 Wobland
 
13.02.14
11:27
параметры искать принято, а не брать по конкретному адресу
2 Wobland
 
13.02.14
11:28
Настройки=КомпоновщикНастроек.ПолучитьНастройки(); // Получаем настройки отчета
    ПараметрНачалоПериода=Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
    Если ПараметрНачалоПериода<>Неопределено И ПараметрНачалоПериода.Использование Тогда
        НачалоПериода=ПараметрНачалоПериода.Значение.Дата;
    КонецЕсли;
3 Lenka_Boo
 
13.02.14
12:38
Извини, не очень понимаю при чем тут получение даты из СКД.

Даты в этом шаблоне я не трогала. Они там как есть и прекрасно работают.
4 Wobland
 
13.02.14
12:40
хорошо. а кто там такой хитрый сидит на третьей позиции у параметров? ОтключениеКорректировок что ли? точно-точно?
5 Lenka_Boo
 
13.02.14
12:44
(4) Да. Отладчиком проверяла.
На 1 и 2 - даты.
6 Lenka_Boo
 
13.02.14
12:47
+(5) Изначально даты так в модуле формы шаблона были забиты.
Я просто уже не знаю в каком месте значение в параметр еще передать.
7 Wobland
 
13.02.14
12:51
(5) то есть, ты в параметр про дату пихаешь истину, а в желаемый параметр ничего?
8 Lenka_Boo
 
13.02.14
12:56
(7) Это конкретно в какой строчке я пихаю Истину в параметр про дату? Там:

    //Обработаем период (то что было и я не трогала)
    Попытка
        ДатаНач                             = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[0];
        ДатаНач.Значение                     = НачалоДня(ДатаНачала);
        ДатаНач.Использование                 = Истина;
    Исключение
        #Если Клиент Тогда
            Сообщить("Ошибка установки начальной даты!");    
        #КонецЕсли
    КонецПопытки;
    
    Попытка
        ДатаКон                             = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[1];
        ДатаКон.Значение                     = КонецДня(ДатаОкончания);
        ДатаКон.Использование                 = Истина;
    Исключение
        #Если Клиент Тогда
            Сообщить("Ошибка установки конечной даты!");    
        #КонецЕсли
    КонецПопытки;
    
    //Обработаем МОЙ параметр (то что я добавила)
    Попытка
        ОтключениеКорректировок                             = КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы[2];
        ОтключениеКорректировок.Значение                     = БезКорректировок;
        ОтключениеКорректировок.Использование                 = Истина;
    
    Исключение
        #Если Клиент Тогда
            Сообщить("Ошибка установки параметра исключения корректировок");    
        #КонецЕсли
    КонецПопытки;
9 Wobland
 
13.02.14
12:59
лишь предположение. никто не знает, кто у тебя на третьем месте
ОтключениеКорректировок.Значение                     = БезКорректировок;
10 Lenka_Boo
 
13.02.14
13:09
Ну хорошо.
Сделала через поиск

        ОтключениеКорректировок     = Настройки.ПараметрыДанных.Элементы.Найти("БезКорректировок");
        Если ОтключениеКорректировок <> Неопределено И ОтключениеКорректировок.Использование = Истина Тогда
            ОтключениеКорректировок.Значение                     = БезКорректировок;    
        КонецЕсли;    

Та же самая ошибка.
11 Wobland
 
13.02.14
13:12
угу. а нашлось?
12 Lenka_Boo
 
13.02.14
13:15
(11) Да. И присвоилось.
Но дальше...
13 Lenka_Boo
 
13.02.14
13:16
Сразу после ввода параметров идет:

    Настройки                     = КомпоновщикНастроек.Настройки;

    СхемаКомпановкиДанных         = ПолучитьМакет("Макет");
    
    КомпоновщикНастроек.ЗагрузитьНастройки(Настройки);
    Настройки                     = КомпоновщикНастроек.Настройки;
    КомпановщикМакета            = Новый КомпоновщикМакетаКомпоновкиДанных;
    ДанныеРасшифровки            = Новый ДанныеРасшифровкиКомпоновкиДанных;
    МакетКомпановки                = КомпановщикМакета.Выполнить(СхемаКомпановкиДанных,Настройки,ДанныеРасшифровки);
    
    ПроцессорКомпановкиДанных   = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпановкиДанных.Инициализировать(МакетКомпановки,,ДанныеРасшифровки, Истина);
    
    ЭлементыФормы.Результат.Очистить();
    ДокументРезультат             = ЭлементыФормы.Результат;
    ПроцессорВывода                = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпановкиДанных);
14 Lenka_Boo
 
13.02.14
13:18
Нафига столько раз повторяется строчка
Настройки                     = КомпоновщикНастроек.Настройки; ?

И почему даты в параметрах СКД сохраняются, а мой параметр сбрасывается.
15 Lenka_Boo
 
13.02.14
13:19
+(13) Это все в одной процедуре.
16 Wobland
 
13.02.14
13:20
ищи сама. эталон:

Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка=Ложь;

    НачалоПериода='00010101';
    КонецПериода=ТекущаяДата();
    Настройки=КомпоновщикНастроек.ПолучитьНастройки(); // Получаем настройки отчета
    ПараметрНачалоПериода=Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
    Если ПараметрНачалоПериода<>Неопределено И ПараметрНачалоПериода.Использование Тогда
        НачалоПериода=ПараметрНачалоПериода.Значение.Дата;
    КонецЕсли;
    ПараметрКонецПериода=Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
    Если ПараметрКонецПериода<>Неопределено И ПараметрКонецПериода.Использование Тогда
        КонецПериода=КонецДня(ПараметрКонецПериода.Значение.Дата);
    КонецЕсли;
    
    Результат=ПолучитьРезультат(НачалоПериода, КонецПериода);

    ДанныеРасшифровки=Новый ДанныеРасшифровкиКомпоновкиДанных; // Создаём данные расшифровки
    КомпоновщикМакета=Новый КомпоновщикМакетаКомпоновкиДанных; // Создаём компоновщик макета
    // Инициализируем макет компоновки, используя схему компоновки данных
    // и созданные ранее настройки и данные расшифровки
    СхемаКомпоновкиДанных=ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    МакетКомпоновки=КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);

    // Скомпонуем результат
    ПроцессорКомпоновки=Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, Новый Структура("Результат", Результат), ДанныеРасшифровки);

    ДокументРезультат.Очистить();

    // Выводим результат в табличный документ
    ПроцессорВывода=Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
17 bvb
 
13.02.14
13:30
Я правильно понимаю проблема с передечей параметра ?
Сначала нужно его наблюдать визуально :

1. Нужно вывести на форму отчета (если она есть, если нет сделать)  
КомпоновщикНастроек.Настройки.ПараметрыДанных
и
КомпоновщикНастроек.Настройки.Отбор

2. Вывести эту галку в параметры сняв признак "Ограничение доступности"
18 bvb
 
13.02.14
13:31
А устанавливать и читать можно так
Функции для модуля отчета :
Функция ПолучитьЗначениеПараметра (НазваниеПараметра)  Экспорт
    
    Для  Каждого Элемент ИЗ КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы Цикл
        
        Если  Строка(Элемент.Параметр) = НазваниеПараметра Тогда
            
            Возврат Элемент.Значение;
            
        КонецЕсли;
    КонецЦикла;
    
КонецФункции    

Процедура УстановитьЗначениеПараметра (НазваниеПараметра, ЗначениеПараметра) Экспорт

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

Написано кривовато но работает...
19 Lenka_Boo
 
13.02.14
15:23
Б****!
Можно смеяться.
У меня на параметре галка "Доступен список значений" почему-то встает автоматом когда запрос правлю.

Всем спасибо! :)
2 + 2 = 3.9999999999999999999999999999999...