8.х Ошибка в критерии отбора

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем prog_22, 28 фев 2014.

  1. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Добрый день!

    УТ 10.3

    В критерии отбора "Документы по контрагенту"(Общие-критерии отбора) хочу добавить статью движения денежных средств из документа "Приходный кассовый ордер"

    В форме списка добавил колонку "СтатьяДДС" С типом значения "ДокументСсылка.ПриходныйКассовыйОрдер"

    Далее сделал изменения в процедуре(где \\ мои добавления):

    Код:
    Процедура ЗаполнитьТабличнуюЧасть()
      
        СсылкаНаВыделенныйЭлемент = ?(ЭлементыФормы.Список.ТекущиеДанные = Неопределено,
                                      Неопределено, ЭлементыФормы.Список.ТекущиеДанные.Ссылка);
      
        // Если не выбран Контрагент, то запрос делать смысла не имеет
        Если НЕ ЗначениеЗаполнено(Контрагент) Тогда
            Сообщить("Не указан Контрагент", СтатусСообщения.Внимание);
            Возврат;
        КонецЕсли;
      
        Список.Очистить();
      
        Таблица = ПолныеПрава.ПолучитьВыборкуПоКритериюОтбора("ДокументыПоКонтрагенту", Контрагент);
        КэшПоТипамДокументов = Новый Соответствие;
      
        Для Каждого СтрокаТаблицы ИЗ Таблица Цикл
            МетаданныеДокумента = СтрокаТаблицы.Ссылка.Метаданные();
            ИмяДокумента = МетаданныеДокумента.Имя;
          
            Если ЗначениеЗаполнено(ОтборПоТипуДокумента) Тогда
                Если ОтборПоТипуДокумента <> ИмяДокумента Тогда
                    Продолжить;
                КонецЕсли;
            КонецЕсли;
          
            СинонимДокумента = МетаданныеДокумента.Синоним;
          
            ДополнитьКэшМетаданных(МетаданныеДокумента, ИмяДокумента);
          
            СтруктураТипа = КэшПоТипамДокументов[ИмяДокумента];
            Если СтруктураТипа = Неопределено Тогда
                СтруктураТипа = Новый Структура("Синоним, МассивСсылок", СинонимДокумента, Новый Массив);
                КэшПоТипамДокументов.Вставить(ИмяДокумента, СтруктураТипа);
            КонецЕсли;
            СтруктураТипа.МассивСсылок.Добавить(СтрокаТаблицы.Ссылка);      
        КонецЦикла;
      
        ЕСли КэшПоТипамДокументов.Количество() = 0 ТОгда
            Возврат;
        КонецЕсли;
      
        ТекстЗапросаНачало = "ВЫБРАТЬ РАЗРЕШЕННЫЕ * ИЗ (";
        ТекстЗапросаКонец = ") КАК ПодчиненныеДокументы УПОРЯДОЧИТЬ ПО ПодчиненныеДокументы.Дата";
        Запрос = Новый Запрос;
        Для Каждого КлючИЗначение ИЗ КэшПоТипамДокументов Цикл
            РекСуммаДокумента =
             ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.Сумма[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.Сумма[КлючИЗначение.Ключ],
               "NULL");
          
            РекВалютаДокумента =
             ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.Валюта[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.Валюта[КлючИЗначение.Ключ],
               "NULL");
          
            РекВидОперации =
             ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.ВидОперации[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.ВидОперации[КлючИЗначение.Ключ],
               "NULL");
          
            РекОрганизация =
             ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.Организация[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.Организация[КлючИЗначение.Ключ],
               "NULL");
          
            РекОтветственный =
             ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.Ответственный[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.Ответственный[КлючИЗначение.Ключ],
               "NULL");
          
            РекИнформация =
             ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.Информация[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.Информация[КлючИЗначение.Ключ],
               "NULL");
             
             \\добавил
    РекСтатья =
             ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.СтатьяДвиженияДенежныхСредств[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.СтатьяДвиженияДенежныхСредств[КлючИЗначение.Ключ],
               "NULL");
           \\конец
          
            Запрос.Текст = Запрос.Текст + ?(Запрос.Текст = "", "
                        |ВЫБРАТЬ ", "
                        |ОБЪЕДИНИТЬ ВСЕ
                        |ВЫБРАТЬ") + "
                        |Дата, Номер, Ссылка, Проведен, ПометкаУдаления, """ + КлючИЗначение.Значение.Синоним + """ КАК ВидДокумента,
                        |" + РекСуммаДокумента  + " КАК СуммаДокумента,
                        |" + РекВалютаДокумента + " КАК ВалютаДокумента,
                        |" + РекВидОперации     + " КАК ВидОперации,
                        |" + РекОрганизация     + " КАК Организация,
                        |" + РекОтветственный   + " КАК Ответственный,
                        |" + РекИнформация      + " КАК Информация
                        |" + РекСтатья          + " КАК Статья  \\добавил
    
                        |ИЗ Документ." + КлючИЗначение.Ключ + "
                        |ГДЕ Ссылка В (&" + КлючИЗначение.Ключ + ")";
                      
            Запрос.УстановитьПараметр(КлючИЗначение.Ключ, КлючИЗначение.Значение.МассивСсылок);
        КонецЦикла;
      
        Запрос.Текст = ТекстЗапросаНачало + Запрос.Текст + ТекстЗапросаКонец;
      
        Выборка = Запрос.Выполнить().Выбрать();
        Пока Выборка.Следующий() Цикл
            НоваяСтрока = Список.Добавить();
            НоваяСтрока.Ссылка = Выборка.Ссылка;
            НоваяСтрока.Дата = Выборка.Дата;
            НоваяСтрока.Номер = Выборка.Номер;
            НоваяСтрока.Вид = Выборка.ВидДокумента;
            НоваяСтрока.ВидОперации = Выборка.ВидОперации;
            НоваяСтрока.СуммаДокумента = Выборка.СуммаДокумента;
            НоваяСтрока.ВалютаДокумента = Выборка.ВалютаДокумента;
            НоваяСтрока.Организация = Выборка.Организация;
            НоваяСтрока.Ответственный = Выборка.Ответственный;
            НоваяСтрока.Информация = Выборка.Информация;
            НоваяСтрока.Статья = Выборка.Статья;  \\ добавил
            НоваяСтрока.Проведен = Выборка.Проведен;
            НоваяСтрока.ПометкаУдаления = Выборка.ПометкаУдаления;
            Если ЗначениеЗаполнено(СсылкаНаВыделенныйЭлемент) И
                 СсылкаНаВыделенныйЭлемент = НоваяСтрока.Ссылка Тогда
                ЭлементыФормы.Список.ТекущаяСтрока = НоваяСтрока;
            КонецЕсли;
        КонецЦикла;
    
    При открытии из справочника контрагенты Перейти-Документы по контрагенту ошибка

    Код:
    {КритерийОтбора.ДокументыПоКонтрагенту.Форма.ФормаСписка.Форма(97)}: Поле объекта не обнаружено (СтатьяДвиженияДенежныхСредств)
             РекСтатья = 
    Что не так делаю,подскажете?
  2. Svb
    Offline

    Svb Опытный в 1С Команда форума

    Регистрация:
    12 янв 2011
    Сообщения:
    980
    Симпатии:
    19
    Баллы:
    29
    у переменной мКэшСоответствийРеквизитов в момент выполнения
    Код:
    ?(ЗначениеЗаполнено(мКэшСоответствийРеквизитов.СтатьяДвиженияДенежныхСредств[КлючИЗначение.Ключ]),
               мКэшСоответствийРеквизитов.СтатьяДвиженияДенежныхСредств[КлючИЗначение.Ключ],
               "NULL")
    отсутствует поле СтатьяДвиженияДенежныхСредств

    Соответственно, надо добиться, чтобы она была в этом "кеше"...
  3. TopicStarter Overlay
    prog_22
    Offline

    prog_22 Опытный в 1С

    Регистрация:
    31 окт 2012
    Сообщения:
    171
    Симпатии:
    0
    Баллы:
    26
    Код:
    Процедура ДополнитьКэшМетаданных(МетаданныеДокумента, ИмяДокумента)
        РеквизитыДокумента = мКэшРеквизитовДокумента[ИмяДокумента];
        Если РеквизитыДокумента = Неопределено Тогда
            РеквизитыДокумента = Новый Соответствие;       
            РеквизитыДокумента.Вставить("СуммаДокумента", МетаданныеДокумента.Реквизиты.Найти("СуммаДокумента") <> Неопределено);
            РеквизитыДокумента.Вставить("ВалютаДокумента", МетаданныеДокумента.Реквизиты.Найти("ВалютаДокумента") <> Неопределено);       
            РеквизитыДокумента.Вставить("ВидОперации", МетаданныеДокумента.Реквизиты.Найти("ВидОперации") <> Неопределено);   
            РеквизитыДокумента.Вставить("Организация", МетаданныеДокумента.Реквизиты.Найти("Организация") <> Неопределено);   
            РеквизитыДокумента.Вставить("Ответственный", МетаданныеДокумента.Реквизиты.Найти("Ответственный") <> Неопределено);   
            РеквизитыДокумента.Вставить("Информация", МетаданныеДокумента.Реквизиты.Найти("Информация") <> Неопределено);
            РеквизитыДокумента.Вставить("СтатьяДвиженияДенежныхСредств", МетаданныеДокумента.Реквизиты.Найти("СтатьяДвиженияДенежныхСредств") <> Неопределено);
            мКэшРеквизитовДокумента.Вставить(ИмяДокумента, РеквизитыДокумента);
        КонецЕсли;   
    
    Тут я поправил.. Пробовал еще в колонке,которую добавлял на форме добавлять к типу ДокументСсылка.ПриходныйКассовыйОрдер тип значений СправочникСсылка.ДвиженияДенежныхСредств, ну вообщем не помогает,все равно та же ошибка
  4. Annie
    Offline

    Annie Опытный в 1С Команда форума

    Регистрация:
    10 фев 2010
    Сообщения:
    949
    Симпатии:
    23
    Баллы:
    29
    Также необходимо добавить в процедуре ЗаполнитьСоответствиеРеквизитов() следующий код
    Пример для одного документа
    Код:
    //За циклом
    мКэшСоответствийРеквизитов.Вставить("СтатьяДвиженияДенежныхСредств", Новый Соответствие);
        мКэшСоответствийРеквизитов["СтатьяДвиженияДенежныхСредств"].Вставить("ПриходныйКассовыйОрдер", "СтатьяДвиженияДенежныхСредств");
    
    prog_22 нравится это.

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