8.х Выборка данных "Регистр Накопления"

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

  1. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Добрый вечер!
    Имеется запрос, по которому я получаю данные регистра:

    Код:
    ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ ПЕРВЫЕ 10000
    |	ДокументРег.Регистратор КАК Регистратор
    |ИЗ
    |	РегистрНакопления.ТоварыОрганизации КАК ДокументРег
    |ГДЕ
    |	ДокументРег.Период >= &ДатаНач
    |	И ДокументРег.Период <= &ДатаКон";
    
    в этой выборке имеется пустая строка ("Неопередено"), скорее всего она туда попала после сбоя в базе.
    Как мне отловить эту строку, этим методом у меня не получается:
    Код:
    Если ТипЗнч(Выборка.Регистратор) = Тип("Неопределено") тогда
    Сообщить("Пустая строка");
    конецЕсли;
    
    Спасибо за советы!!!
  2. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Там не неопределено, а битая ссылка.

    Определяется через ПолучитьОбъект();
  3. vitaly_mnpz
    Offline

    vitaly_mnpz Опытный в 1С

    Регистрация:
    15 фев 2009
    Сообщения:
    267
    Симпатии:
    0
    Баллы:
    26
    А откуда уверенность, что Неопределено? А не Документы.ТакойтоДокумент.ПустаяСсылка() ?
    Попробуйте проверять на ЗначениеЗаполнено()
  4. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Регистратор не может быть пустой ссылкой :)
  5. vitaly_mnpz
    Offline

    vitaly_mnpz Опытный в 1С

    Регистрация:
    15 фев 2009
    Сообщения:
    267
    Симпатии:
    0
    Баллы:
    26
    Да, только если она не битая. А если мы видим знакомое <Объект не найден>, то там пустая ссылка
  6. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Дело в том что, эта строка регистра с данными вообще пустая, и нет <Объект не найден>.
    Если просмотреть в отладчике, то у Выборка.Регистратор Тип значения "Неопределено"
  7. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Проверь ее через Пустая() и получишь ЛОЖЬ :)
    Битая ссылка не является пустой.

    Проверить можно так:

    Код:
    Выборка.Регистратор.ПолучитьОбъект();
    
    Посмотри, что он тебе вернет и все станет понятно.
  8. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Вот что он возвращает,

    {(1)}: Значение не является значением объектного типа (ПолучитьОбъект)

    Может как нибудь можно будет эту строку удалить вообще?
  9. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Можно. Надо получить набор записей и удалить по индексу строку.
  10. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Как мне получить этот набор записей, а именно эту строку, если у меня все значения по колонкам в этой строке имеют тип "Неопределено"?
  11. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Код:
    НаборЗаписей = РегистрыНакопления.ТоварыОрганизаций.СоздатьНаборЗаписей();
    НаборЗаписей.Прочитать();
    
  12. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Я создаю этот набор записей, но мне то необходимо сделать ОТБОР, а по какому признаку я его буду делать, если у меня все значения "Неопределено", кроме Активность = Ложь и ВидДвижения = Приход.

    Код:
    НДСПартТов=РегистрыНакопления.НДСПартииТоваров;
    НабЗап = НДСПартТов.СоздатьНаборЗаписей();
    НабЗап.Прочитать();
    НабЗап.Удалить(1);
    НабЗап.Записать();
    
    Если выгружать в ТЗ, то эта строка стоит на первом месте.

    НабЗап.Удалить(1) - выдает ошибку:
    Ошибка при вызове метода контекста (Удалить): Недопустимое значение параметра (параметр номер "1")

    Помогите, ничего не получается сделать с этой записью, а мне необходимо её удалить.
  13. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Если строка первая - то это индекс 0, а не 1
  14. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Я чего вообще не понимаю, он у меня даже при 0 выдал ошибку. Вообщем вот мой код
    Код:
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    НДСПартииТоваров.Период,
    |    НДСПартииТоваров.Регистратор КАК Регистратор,
    |    НДСПартииТоваров.НомерСтроки КАК НомерСтроки,
    |    НДСПартииТоваров.Активность,
    |    НДСПартииТоваров.ВидДвижения,
    |    НДСПартииТоваров.Организация,
    |    НДСПартииТоваров.Номенклатура,
    |    НДСПартииТоваров.Поставщик,
    |    НДСПартииТоваров.СчетФактура,
    |    НДСПартииТоваров.СтавкаНДС,
    |    НДСПартииТоваров.ДокументОприходования,
    |    НДСПартииТоваров.Количество,
    |    НДСПартииТоваров.Стоимость,
    |    НДСПартииТоваров.НДС
    |ИЗ
    |    РегистрНакопления.НДСПартииТоваров КАК НДСПартииТоваров";
    
    Результат = Запрос.Выполнить();
    ТЗ = Результат.Выгрузить();
    Для каждого строка из ТЗ цикл
    если строка.Активность = Ложь Тогда
    ЦЦ=РегистрыНакопления.НДСПартииТоваров;
    НабЗап = ЦЦ.СоздатьНаборЗаписей();
    НабЗап.Прочитать();
    НабЗап.Удалить(0);
    НабЗап.Записать();
    конецесли
    конеццикла;
    
    
    Как мне удалить эту строку битую из регистра наколения, даже если эта строка находится не на первом месте?
    Как мне найти индекс этой строки?
  15. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    А нафига запрос-то лепил?
  16. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    находил строку эту, она одна единственная у которой Активность ложь. Если есть варианты я буду рад выслушать. Подскажите, как это сделать по другому.
    И спасибо большой за помощь
  17. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Получи просто набор записей - не нужно делать никаких запросов.
    Далее перебирай набор и находи ненужное и именно эту строку удаляй.
  18. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Вот, как я получаю набор:
    1 способ:
    Код:
    ЦЦ=РегистрыНакопления.НДСПартииТоваров;
    НабЗап = ЦЦ.СоздатьНаборЗаписей();
    НабЗап.Прочитать();
    
    
    
    Ничего не возвращает!!!
    2 способ:
    Код:
    ЦЦ=РегистрыНакопления.НДСПартииТоваров;
    НабЗап = ЦЦ.СоздатьНаборЗаписей();
    НабЗап.Прочитать();
    для каждого запись из НабЗап цикл
    заполнитьзначениясвойств(ТЗ.Добавить(), запись);
    конецЦикла;
    
    
    ТЗ нужна, чтобы убедится в количество строк. И опять ничего нет!!!

    Решение может быть такое
    Код:
    НаборЗаписей = РегистрыНакопления.НДСПартииТоваров.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.ЧтоТо1 = ЧтоТо1;
    НаборЗаписей.Прочитать();
    //делаем что надо
    НаборЗаписей.Записать(Истина, Истина);
    
    
    
    Вообще не понимаю как с этим набором работать. Тогда вопрос, по чему делать отбор если строка, которая мне нужна пустая во всех значениях колонок строки?
  19. BabySG
    Offline

    BabySG Администраторы Команда форума Администратор

    Регистрация:
    10 июн 2007
    Сообщения:
    11.853
    Симпатии:
    12
    Баллы:
    29
    Так, пойдем другим путем - сделай НА КОПИИ ТиИ и посмотри, что тебе скажут
  20. TopicStarter Overlay
    ANDRE
    Offline

    ANDRE Опытный в 1С

    Регистрация:
    12 мар 2008
    Сообщения:
    456
    Симпатии:
    0
    Баллы:
    26
    Что такое ТиИ?
    Если это обычная копи Управление Торговлей, то я там и делаю

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