Имя: Пароль:
1C
1С v8
ошибка чтения значения
0 acabra
 
02.08.13
13:40
С чего началась проблема: нужно было написать обработку для БП, которая бы удаляла в некоторых документах из табличных частей строчки с пустыми номенклатурами. Начала делать это запросом. Перепробовала всякие запросы вплоть до самых элементарных. Результат выполнения - ошибка чтения значения.

В ходе подозрений решила просто получить в некую док1 ссылку на документ как  док1 = Документы.ТребованиеНакладная.НайтиПоНомеру("ТФ000000478");
например так.  Ничегошеньки не получает.

Т.е. вообще ни в каком виде не дается

В чем может быть проблема?
1 Beduin
 
02.08.13
13:41
Зачем вам это все?
2 acabra
 
02.08.13
13:43
Затем, что я не пойму, почему ни одно значение из данного документа не хочет получаться. Я никогда такого не видела (опыта мало), сижу верчу со всех сторон..
3 Капитан О
 
02.08.13
13:45
предлагаю лечить мигрень методом отличным от отсечения головы
4 acabra
 
02.08.13
13:46
А если без бесполезных ответов? Я сюда не за сарказмами обращалась
5 Галахад
 
гуру
02.08.13
13:46
Дата нужна.
6 Капитан О
 
02.08.13
13:47
(4) а если начать думать?
7 Crush
 
02.08.13
13:49
(4)
1. Напиши в табло Документы.ТребованиеНакладная.НайтиПоНомеру("ТФ000000478")
2. В синтаксис помощнике почитай про ф-ю НайтиПоНомеру
8 acabra
 
02.08.13
13:50
Вот поверьте, от вашего "а если начать думать?" меня не озарит. Надо понимать, что если я сюда обратилась, то этого недостаточно. Не всем, видимо, как вам, знания и понимание даруются с рождения
9 zmaximka
 
02.08.13
13:54
Документы.ТребованиеНакладная.НайтиПоНомеру("ТФ000000478")
У этой функции есть еще второй параметр. Используй и его
10 zmaximka
 
02.08.13
13:55
кстати, а чего фотку еще никто не попросил?
11 Любопытная
 
02.08.13
13:57
(8) Не ругайся. Жди. Сегодня Пятница. К 20му посту скажут что-нить дельное)
Показывай, что писала.
12 Crush
 
02.08.13
14:00
(11) опытные люди подключились:)
13 Серго62
 
02.08.13
14:01
А у тебя вообще есть документ с таким номером? Если есть, то зайди в него и скопируй номер, а потом вставь его в своей программе в "НайтиПоНомеру". Может там пробелы в номере.
14 acabra
 
02.08.13
14:08
15 acabra
 
02.08.13
14:09
Серго62, именно так и делала
16 acabra
 
02.08.13
14:11
(5) ну предположим, дату я поставила в запросе как дату некоторого документа , все равно таблица значений пустая.

А если мне нужно получить абсолютно все документы?
17 Галахад
 
гуру
02.08.13
14:12
Будем считать, что это (20) :-)
док1 = Документы.ТребованиеНакладная.НайтиПоНомеру("ТФ000000478", текущаядата());
18 George Wheels
 
02.08.13
14:14
(14) В этом месте ещё не выполнился метод .Следующий()
19 acabra
 
02.08.13
14:15
(17) так тоже делала. В значениях Дата, материалы в БыборкеДетальныхЗаписей стоит ошибка чтения значения. ничего не изменилось
20 Галахад
 
гуру
02.08.13
14:17
(19) Покажите код.
21 acabra
 
02.08.13
14:17
(18) а зачем нам следующий?
я отладчиком после Запрос.Выполнить().Выбрать() смотрю результат запроса. Он уже должен быть заполнен
22 Aprobator
 
02.08.13
14:18
Читать внимательнро и до конца. Попытаться понять. В противном случае отойти от компа.
........
ДокументМенеджер.<Имя документа>.НайтиПоНомеру (DocumentManager.<Имя документа>.FindByNumber)
ДокументМенеджер.<Имя документа> (DocumentManager.<Имя документа>)
НайтиПоНомеру (FindByNumber)
Синтаксис:

НайтиПоНомеру(<НомерДокумента>, <ДатаИнтервала>)
Параметры:

<НомерДокумента> (обязательный)

Тип: Число; Строка.
Номер искомого документа. Тип передаваемого значения зависит от установки в конфигураторе представления номера документа.
<ДатаИнтервала> (необязательный)

Тип: Дата.
Дата из интервала, в котором проводится поиск по номеру. Сам интервал определяется как ПЕРИОД УНИКАЛЬНОСТИ номеров документа, в который входит указанная дата. Например, если номера документов уникальны в пределах месяца и задана дата 10 декабря 2001 года, то поиск будет проводиться в интервале с 01 по 31 декабря 2001 года.
Параметр используется для документов с периодической нумерацией.
Возвращаемое значение:

Тип: ДокументСсылка.<Имя документа>; Неопределено.
Ссылка на найденный документ. Если документ не найден, возвращается пустая ссылка на документ.
Если номер не задан (длина = 0), то будет возвращено Неопределено.
Описание:

Осуществляет поиск документа по номеру.

Доступность:

Сервер, толстый клиент, внешнее соединение.
23 acabra
 
02.08.13
14:18
(20) код в одной из картинок. там текст запроса. смотрю на результат запроса. пустой он
24 George Wheels
 
02.08.13
14:20
(23) Выполни .Следующий() и будет тебе счастье.
25 acabra
 
02.08.13
14:20
(24) выполняла. не привалило.
26 Crush
 
02.08.13
14:21
(21) Тогда уж Запрос.Выполнить().Выгрузить()
27 Aprobator
 
02.08.13
14:21
(24) ЕСЛИ ЗАПРОС ПУСТОЙ - сЛЕДУЮЩИЙ ЧЕМ ПОМОЖЕТ ТО?
28 Aprobator
 
02.08.13
14:21
упс - соррь за капс
29 GenAcid
 
02.08.13
14:22
(21) К этому моменту даже Выгрузить() не выполнилось.
30 hhhh
 
02.08.13
14:22
(25) дата почему там бешеная какая-то задается? Нормально дату не судьба задать?
31 Crush
 
02.08.13
14:22
Не могу посмотреть. Ресурс с картиками прикрыт
32 Aprobator
 
02.08.13
14:23

... ГДЕ НАЧАЛОПЕРИОДА(Требование.Дата, ДЕНЬ) = &Дата
33 Галахад
 
гуру
02.08.13
14:24
(23) Формат даты другой:

20020820153309
34 Aprobator
 
02.08.13
14:24
(31) там смотреть нечего.
35 Галахад
 
гуру
02.08.13
14:25
(33) Упс. вот так:

Дата('20020820153309')
36 Aprobator
 
02.08.13
14:25
+(34) обычный код ленивого студента. Кстати, чо неписанные правила форума нарушаем? Фотки то нет.
37 George Wheels
 
02.08.13
14:26
(27) А где видно, что он пустой?
38 Aprobator
 
02.08.13
14:27
(37) мне хватило текст запрроса увидеть.
39 Darky
 
02.08.13
14:28
(37) из "Результат выполнения - ошибка чтения значения. "
40 Crush
 
02.08.13
14:28
Фотку в профиль!
Потом аукцион-конкурс, кто поедет переписывать запрос
41 Aprobator
 
02.08.13
14:29
(39) стандартное сообщение для выборки. Там в параметр запроса передается дата с нулевым временем. Очень немногие документы попадают в 00:00:00.
42 Aprobator
 
02.08.13
14:30
+(91) и условие по дате дурное - правильное в (32).
43 Darky
 
02.08.13
14:31
(41) ага, стандартное...для пустой выборки
44 Aprobator
 
02.08.13
14:33
(43) до выполнения метода следующий (там на первой картинке видно, где остановка сделана, все вполне нормально.
45 Darky
 
02.08.13
14:33
(44) я картинки не смотрел)
46 Aprobator
 
02.08.13
14:34
(45) ах ты тролль )))
47 Crush
 
02.08.13
14:35
(42) "+(91)" новая функция Форум.ПолучитьСообщенияНаДату("02.08.13 16:33")
48 Web00001
 
02.08.13
14:38
Ошибку чтения значения в выборке, получаем, когда выборка не спозиционировалась ни на какой записи. Правильно сказали, надо делать Следующий().
(21) Да ну? Че серьезно? Просто 1С про это не в курсе.
49 Cyberhawk
 
02.08.13
14:38
(49) без фото не взлетит
50 Aprobator
 
02.08.13
14:40
да ладно, чего накинулись? Даме можно скидку сделать. Хотя, учится по форумам с нуля, это надо иметь такую извращенную натуру. Садо мазо - нервно курит в сторонке.
51 Web00001
 
02.08.13
14:42
Судя по всему ТС, таки сумела написать следующий() после слова Выборка() хоть и сопротивлялась упорно.
52 Aprobator
 
02.08.13
14:42
(51) оно там написано и так. Проблема именно в условии запроса была.
53 Aprobator
 
02.08.13
14:46
(4) придется потерпеть. Ибо .... бесплатный сыр.....
54 acabra
 
02.08.13
15:00
короче!

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

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

вот такое резюме. запрос кидать заново не буду. смотреть правда нечего
55 hhhh
 
02.08.13
15:01
(5) если все документы нужно, то дату выкинь. Ну с чего ты взяла, что дата нужна?
56 Галахад
 
гуру
02.08.13
15:02
(54) Вывод не верный. Если нужны все документы, то условие по дате лишнее.
57 acabra
 
02.08.13
15:09
(55) (56) оооооооооооок..............

ВЫБРАТЬ
   ТребованиеНакладнаяМатериалы.Количество,
   ТребованиеНакладнаяМатериалы.СтатьяЗатрат,
   ТребованиеНакладнаяМатериалы.Номенклатура,
   ТребованиеНакладнаяМатериалы.Ссылка.Ссылка
ИЗ
   Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
ГДЕ
   ТребованиеНакладнаяМатериалы.Номенклатура = &ПустаяСтрока



почему в консоли это работает, а в обработке нет? чего не хватает?
58 Crush
 
02.08.13
16:00
Во первых: напиши так

ВЫБРАТЬ
    ТребованиеНакладнаяМатериалы.Количество,
    ТребованиеНакладнаяМатериалы.СтатьяЗатрат,
    ТребованиеНакладнаяМатериалы.Номенклатура,
    ТребованиеНакладнаяМатериалы.Ссылка.Ссылка
ИЗ
    Документ.ТребованиеНакладная.Материалы КАК ТребованиеНакладнаяМатериалы
ГДЕ
    ТребованиеНакладнаяМатериалы.Номенклатура = Значение(Справочник.Номенклатура.ПустаяСсылка)

Во вторых:
Кинь код обработки и напиши цель этого кода
59 Aprobator
 
02.08.13
16:57
(58) цель описана в (0) удалить строчки с пустой номенклатурой.
60 Aprobator
 
02.08.13
16:58
(57) в параметр ПустаяСтрока неправильное значение пишешь.
61 Crush
 
02.08.13
17:14
Уж солнце близилось к закату...

ВЫБРАТЬ различные тн.Ссылка Поместить вт ИЗ Документ.ТребованиеНакладная.Материалы КАК тн
ГДЕ тн.Номенклатура = Значение(Справочник.Номенклатура.ПустаяСсылка);
Выбрать * из Документ.ТребованиеНакладная.Материалы как тн Где Ссылка В (Выбрать Ссылка из вт) Итоги по Ссылка


Рез = Запрос.Выполнить();
ВыбДок = Рез.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);

Пока ВыбДок.Следующий() Цикл
Док = ВыбДок.Ссылка.ПолучитьОбъект();
Док.Материалы.Очистить();
ВыбСтр = ВыбДок.Выбрать();
Пока ВыбСтр.Следующий() Цикл
  ЗаполнитьЗначенияСвойств(Док.Материалы.Добавить(), ВыбСтр);
КонецЦикла;
Док.Записать();
КонецЦикла;

Куда отправлять пиво напишу по результатам
62 Web00001
 
02.08.13
17:21
моя версия, по моему гораздо нагляднее
    Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |    ЧекККМТовары.Ссылка
        |ИЗ
        |    Документ.ЧекККМ.Товары КАК ЧекККМТовары
        |ГДЕ
        |    ЧекККМТовары.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)");
        
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ТаблицаТовары = Выборка.Ссылка.Товары.Выгрузить();
        УдалитьСтроки = ТаблицаТовары.НайтиСтроки(Новый Структура("Номенклатура", Справочники.Номенклатура.ПустаяСсылка()));
        Для Каждого СтрокаТаблицы Из УдалитьСтроки Цикл
            ТаблицаТовары.Удалить(СтрокаТаблицы);            
        КонецЦикла;    
        
        ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ДокОбъект.Товары.Загрузить(ТаблицаТовары);
        ДокОбъект.Записать();
    КонецЦикла;    

тока вот бухгалтерии под рукой нет, но мысль должна быть понятна, уж проще некуда
63 Aprobator
 
02.08.13
18:06
а моя эффективнее )

   Запрос = Новый Запрос(
        "ВЫБРАТЬ
        |    ЧекККМТовары.Ссылка
        |ИЗ
        |    Документ.ЧекККМ.Товары КАК ЧекККМТовары
        |ГДЕ
        |    НЕ ЧекККМТовары.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)");
        
    Выборка = Запрос.Выполнить().Выбрать();
    Пока Выборка.Следующий() Цикл
        ТаблицаТовары = Выборка.Ссылка.Товары.Выгрузить();
        
        ДокОбъект = Выборка.Ссылка.ПолучитьОбъект();
        ДокОбъект.Товары.Загрузить(ТаблицаТовары);
        ДокОбъект.Записать();
    КонецЦикла;    
64 Aprobator
 
02.08.13
18:06
а млин - не косяк страшнейший )
65 Aprobator
 
02.08.13
18:08
короче - суть в том, чтобы сразу считать только те записи в ТЧ документа, которые надо оставить. А там Итоги По Ссылка.
И .... Расписывать лениво )
66 Crush
 
02.08.13
18:12
(65) Так я именно это и написал:)
Но похоже этот новый растворитель мужского коллектива
куда то слился, не отдав мне пива:)
67 Crush
 
02.08.13
18:14
(62) Когда то (может еще в 77) сталкивался с удалением строк из таблицы по номеру строки по возрастанию. Сам понимаешь что за грабли:)
68 Aprobator
 
02.08.13
18:15
(67) в 7 ке даю Только с хвоста обходить. А в 8 - ке массив с ссылками на строки. Лепота.
69 Aprobator
 
02.08.13
18:16
(66) неформатированный код лениво разбирать было )
70 Crush
 
02.08.13
18:16
Можно в запросе получать номера строк, сортировать их по УБЫВАНИЮ и в цикле удалять - это самое быстрое будет, нежели искать строки по значению колонки
71 Crush
 
02.08.13
18:18
(69) Так я его с ходу писал. Конструктора запросов под рукой нет и конфы с товарной накладной тоже:)
72 Aprobator
 
02.08.13
18:19
(70) это уже извращение. Удалять , когда можно сразу запросом только нужное получить.
73 Crush
 
02.08.13
18:23
(72) это достаточно спорно-дискуссионный вопрос:)
Добавится у тебя реквизит ТЧ.. :
1. Запрос переписывать? - лень
2. В запросе оставлять *? - а если конструктор надо запустить? Лень:)
3. Формировать поля запроса по метаданным? - А если в конструктор зайти понадобится, ибо руками лень?
:)))
74 Aprobator
 
02.08.13
18:25
(73) не представляю, чтобы подобное пришлось ежедневно исправлять )
75 acabra
 
02.08.13
19:16
Растворитель не слился, в временно удалился, не дождетесь)

Спасибо всем, кто реально помог вместо дискриминирующего пустого трёпа. Можете тут еще поспорить, я внимательно изучаю)

Завтра попробую это всё - базы под рукой нет
76 Crush
 
02.08.13
19:28
(75) Окажите честь сначала моего пирога отведать в (61) :)
3 строчки запроса нужно причесать конструктором на предмет ошибок
Вернусь в понедельник в ожидании черезмерной благодарности:)
*Только это.. в рабочей базе не делай:)*
77 acabra
 
03.08.13
09:56
промежуточный результат (и он работает). проблема в ссылках. вот.):

Запрос = Новый Запрос;
   Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
               |Материалы.Ссылка
               |ИЗ
               |    Документ.ТребованиеНакладная.Материалы КАК Материалы
               |ГДЕ Материалы.Номенклатура = ЗНАЧЕНИЕ(Справочник.Номенклатура.ПустаяСсылка)";
   Рез = Запрос.Выполнить();
78 Мимохожий Однако
 
03.08.13
10:36
Вместо того, чтобы мучить телепатов, давно бы выложила свою обработку для анализа здесь или по ссылке.
79 Web00001
 
04.08.13
07:34
(77) матрица это таблица чисел, с допущением, что это не совсем таблица и там не числа. Зачем это все? Тебе сказали, что надо делать и куда идти.
80 EugeniaK
 
04.08.13
15:18
Основной вопрос. Где фотка?
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.