|
Как правильно написать, чтобы ИНАЧЕ отрабатывало правильно | ☑ | ||
---|---|---|---|---|
0
KIraA
27.07.17
✎
07:03
|
Добрый день. Вот запрос...при условии если номенклатура не найдена отрабатывает правильно, а при ИНАЧЕ данные по количеству не садятся. Подскажите как правильно написать?
"ВЫБРАТЬ | ПеремещениеТоваровТовары.Ссылка.СсылкаНаХранилищеСмет, | ПеремещениеТоваровТовары.Номенклатура, | СУММА(ПеремещениеТоваровТовары.Количество) КАК Количество, | ПеремещениеТоваровТовары.Ссылка.СкладОтправитель, | ПеремещениеТоваровТовары.Ссылка.СкладПолучатель |ИЗ | Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары |ГДЕ | ПеремещениеТоваровТовары.Ссылка.СсылкаНаХранилищеСмет = &СсылкаНаХранилищеСмет | И ПеремещениеТоваровТовары.Ссылка.СкладОтправитель = &СкладОтправитель | И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = &СкладПолучатель | И ПеремещениеТоваровТовары.Ссылка.Проведен | |СГРУППИРОВАТЬ ПО | ПеремещениеТоваровТовары.Номенклатура, | ПеремещениеТоваровТовары.Ссылка.СсылкаНаХранилищеСмет, | ПеремещениеТоваровТовары.Ссылка.СкладОтправитель, | ПеремещениеТоваровТовары.Ссылка.СкладПолучатель" ; Запрос.УстановитьПараметр("СсылкаНаХранилищеСмет",Объект.Ссылка); Запрос.УстановитьПараметр("СкладОтправитель",Справочники.Склады.НайтиПоНаименованию("Основной склад")); Запрос.УстановитьПараметр("СкладПолучатель",Объект.СкладТехника); рез = запрос.Выполнить().Выгрузить(); Данные = Объект.Товары.Выгрузить(); Для каждого стр Из рез Цикл СтрокаТЗ = Данные.Найти(стр.Номенклатура, "Номенклатура"); Если СтрокаТЗ = Неопределено Тогда стрТч = Объект.Товары.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; иначе стрТч = Данные.Найти(стр.Номенклатура, "Номенклатура"); стрТч.КолФ = стр.Количество; КонецЕсли; КонецЦикла; |
|||
1
Amra
27.07.17
✎
07:05
|
В Иначе опять пытаетесь найти строку с номенклатурой, зная что не нашли ее? Добавляйте строку в ТЗ, а не ищите
|
|||
2
zvial
27.07.17
✎
07:05
|
СтрокаТЗ = Данные.Найти(стр.Номенклатура, "Номенклатура");
Если СтрокаТЗ = Неопределено Тогда СтрокаТЗ = Объект.Товары.Добавить(); СтрокаТЗ.Номенклатура = стр.Номенклатура; КонецЕсли; СтрокаТЗ.КолФ = стр.Количество; |
|||
3
Альбатрос
27.07.17
✎
07:07
|
Правильно соединить данные тч с перемещениями в запросе.
|
|||
4
Amra
27.07.17
✎
07:07
|
Чот я еще не проснулся)
|
|||
5
Альбатрос
27.07.17
✎
07:08
|
иначе
стрТч = Данные.Найти(стр.Номенклатура, "Номенклатура"); стрТч.КолФ = стр.Количество; а вот тут чо, ошибки не выскакивает? |
|||
6
KIraA
27.07.17
✎
07:09
|
zvial....Ошибка ((({Документ.СБ_Смета.Форма.ФормаДокумента.Форма(63)}: Значение не является значением объектного типа (КолФ)
СтрокаТЗ.КолФ = стр.Количество; |
|||
7
KIraA
27.07.17
✎
07:10
|
Альбатрос нет не выскакивает
|
|||
8
Альбатрос
27.07.17
✎
07:11
|
(7) Врешь
|
|||
9
Альбатрос
27.07.17
✎
07:11
|
Должна быть такая же как в (6)
|
|||
10
Альбатрос
27.07.17
✎
07:12
|
а не, это я туплю
|
|||
11
KIraA
27.07.17
✎
07:13
|
Так как правильно? Вроде элементарный запрос, а не работает
|
|||
12
zvial
27.07.17
✎
07:13
|
А, проглядел. У вас вообще что и где ищется то?
Возможно, СтрокаТЗ = Данные.Найти(стр.Номенклатура, "Номенклатура"); должно выглядеть как СтрокаТЗ = Объект.Товары.Найти(стр.Номенклатура, "Номенклатура"); ? Ну и смотрите куда реквизит КолФ делся ) |
|||
13
Альбатрос
27.07.17
✎
07:13
|
СтрокаТЗ = Данные.Найти(стр.Номенклатура, "Номенклатура");
Если СтрокаТЗ = Неопределено Тогда стрТч = Объект.Товары.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; иначе СтрокаТЗ .КолФ = стр.Количество; КонецЕсли; |
|||
14
zvial
27.07.17
✎
07:14
|
(12) Для чего ТЧ объекта выгружать в ТЗ Данные?
|
|||
15
Альбатрос
27.07.17
✎
07:14
|
И это, ты учитывай, что Данные это отдельная ТЗ, а не ТЧ документа
|
|||
16
Альбатрос
27.07.17
✎
07:15
|
СтрокаТЗ = Объект.Товары.Найти(стр.Номенклатура, "Номенклатура");
Если СтрокаТЗ = Неопределено Тогда стрТч = Объект.Товары.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; иначе СтрокаТЗ .КолФ = стр.Количество; КонецЕсли; |
|||
17
Альбатрос
27.07.17
✎
07:15
|
вот так короче
|
|||
18
KIraA
27.07.17
✎
07:17
|
{Документ.Смета.Форма.ФормаДокумента.Форма(57)}: Метод объекта не обнаружен (Найти)
СтрокаТЗ = Объект.Товары.Найти(стр.Номенклатура, "Номенклатура"); |
|||
19
KIraA
27.07.17
✎
07:20
|
zvial....Мне в смету при открытии нужно получить данные по всем документам перемещения
|
|||
20
Альбатрос
27.07.17
✎
07:26
|
(18) Объект.Товары что такое?
|
|||
21
zvial
27.07.17
✎
07:27
|
(18) Объект.Товары какой тип имеет?
|
|||
22
KIraA
27.07.17
✎
07:30
|
Это таблица Товары в Смете, в ней есть колонки (Номенклатура и КолФ), номенклатура уже заполнена, нужно при открытии заполнить автоматически КолФ из документов перемещения на складе
|
|||
23
1dvd
27.07.17
✎
07:31
|
таблица - понятие растяжимое... Скорее всего, табличная часть
|
|||
24
KIraA
27.07.17
✎
07:31
|
ДаДа)) табличная часть
|
|||
25
Альбатрос
27.07.17
✎
07:34
|
(24) Не вяжется это с (18)
|
|||
26
Альбатрос
27.07.17
✎
07:34
|
(24) Показывай скрин из отладчика
|
|||
27
zvial
27.07.17
✎
07:36
|
(25) Ага, у ТабличнаяЧасть метод Найти(<Значение>, <Колонки>) имеется.
|
|||
28
KIraA
27.07.17
✎
07:40
|
Данные = Объект.Товары;
{Документ.СБ_Смета.Форма.ФормаДокумента.Форма(57)}: Метод объекта не обнаружен (Найти) СтрокаТЗ = Данные.Найти(стр.Номенклатура,"Номенклатура"); |
|||
29
KIraA
27.07.17
✎
07:41
|
Скрин? Это куда и как?
|
|||
30
1dvd
27.07.17
✎
07:41
|
Сообщить(ТипЗнч(Объект.Товары));
|
|||
31
1dvd
27.07.17
✎
07:42
|
(29) http://savepic.ru/
|
|||
32
Адинэснег
27.07.17
✎
07:45
|
засунь в ВТ свою таблицу и обработай в запросе
|
|||
33
KIraA
27.07.17
✎
07:54
|
||||
34
KIraA
27.07.17
✎
07:55
|
Адинэснег...."я не волшебник, я только учусь..." это обо мне))) Если не сложно поподробнее.
|
|||
35
1dvd
27.07.17
✎
07:55
|
(33) отладчиком пользуемся, а про SHIFT-F9 не слышали?
|
|||
36
KIraA
27.07.17
✎
07:57
|
1dvd да так вроде тоже понятно, не?
|
|||
37
1dvd
27.07.17
✎
07:58
|
(36) нет, я так и не понял какой тип у Данные и Объект.Товары
|
|||
38
KIraA
27.07.17
✎
08:01
|
Объект.Товары это табличная часть, а Данные = Объект.Товары.Выгрузить();
|
|||
39
1dvd
27.07.17
✎
08:03
|
(38) Ложь
|
|||
40
KIraA
27.07.17
✎
08:14
|
1dvd может удаленно ко мне подключитесь?)))
|
|||
41
1dvd
27.07.17
✎
08:16
|
(40) Ага, щаз... У меня на работе всё закрыто
|
|||
42
1dvd
27.07.17
✎
08:16
|
(40) выполни (30)
|
|||
43
Dvoe4nik
27.07.17
✎
08:16
|
(0) МассивСтрок= Данные.НайтиСтроки(Новый структура("Номенклатура",стр.Номенклатура));
Если МассивСтрок.количество =0 Тогда стрТч = Объект.Товары.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; иначе ДЛя каждого строкамассива из МассивСтрок цикл строкамассива.КолФ = стр.Количество; Конеццикла; КонецЕсли; ИМхо возможно несколько строк имеется в "Данные" |
|||
44
KIraA
27.07.17
✎
08:16
|
чЁ делать то?
|
|||
45
Dvoe4nik
27.07.17
✎
08:21
|
(44) , перед циклом напиши (40) а цикл закоментируй, и посмотри что скажет
|
|||
46
Dvoe4nik
27.07.17
✎
08:22
|
(45) *(30)
|
|||
47
Pentosh
27.07.17
✎
08:24
|
(44) а вам что надо то?
Вам вроде уже ответ в (16) написали, а если ошибку действительно кидает на "Найти" (что странно, ибо метод у ТЧ такой есть и синтаксис у вас правильный), тогда выгрузите данные из ТЧ в ТЗ, работайте с ТЗ (ищите и добавляйте в него строки в случае если не находит номенклатуру), а затем загрузите данные обратно в ТЧ (предварительно ее очистив). |
|||
48
zvial
27.07.17
✎
08:25
|
(43) Найти все равно бы отработал. Синтаксической ошибки не вывалило бы. Ну и Найти в любом случае находит первую строку
|
|||
49
1dvd
27.07.17
✎
08:25
|
(47) она и так в ТЗ выгрузила уже, а метода "найти" нет
|
|||
50
KIraA
27.07.17
✎
08:27
|
Для каждого стр Из рез Цикл
МассивСтрок= Данные.НайтиСтроки(Новый структура("Номенклатура",стр.Номенклатура)); Если МассивСтрок.Количество() =0 Тогда стрТч = Объект.Товары.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; иначе ДЛя каждого строкамассива из МассивСтрок цикл строкамассива.КолФ = стр.Количество; Сообщить(ТипЗнч(Объект.Товары)); Конеццикла; КонецЕсли; КонецЦикла; Сообщения: ДанныеФормыКоллекция ДанныеФормыКоллекция |
|||
51
Dvoe4nik
27.07.17
✎
08:29
|
(50) реквизитформыВЗначение("Объект").товары.выгрузить;
|
|||
52
Dvoe4nik
27.07.17
✎
08:29
|
*данные= (51) попробуй так
|
|||
53
KIraA
27.07.17
✎
08:34
|
Dvoe4nik...всю строчку правильно не напишите?)) и куда точно воткнуть?
|
|||
54
Dvoe4nik
27.07.17
✎
08:38
|
(53) )))))
Вместо Данные = Объект.Товары.Выгрузить(); Поставить: Данные = РеквизитФормыВЗначение("Объект").товары.выгрузить(); |
|||
55
Dvoe4nik
27.07.17
✎
08:40
|
посмотреть что скажет Сообщить(ТипЗнч(Данные));
|
|||
56
Dvoe4nik
27.07.17
✎
08:41
|
(53) и вообще, порядочные люди сразу признаются что у них: ОФ или УФ))))
|
|||
57
KIraA
27.07.17
✎
08:44
|
рез = запрос.Выполнить().Выгрузить();
Данные = РеквизитФормыВЗначение("Объект").Товары.выгрузить(); Для каждого стр Из рез Цикл МассивСтрок= Данные.НайтиСтроки(Новый структура("Номенклатура",стр.Номенклатура)); Если МассивСтрок.Количество() =0 Тогда стрТч = Объект.Товары.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; иначе ДЛя каждого строкамассива из МассивСтрок цикл строкамассива.КолФ = стр.Количество; Конеццикла; КонецЕсли; КонецЦикла; Результата нет ((((. УФ у меня вроде)) |
|||
58
KIraA
27.07.17
✎
08:48
|
С 2000 БКИ 1
Бумага офисная А 4 2 Кабель КСПВ 4х0,5 мм 20 по консоли вот данные, в таблицу прилетает только 2я строчка, так как ее в списке нет, остальные есть |
|||
59
Pentosh
27.07.17
✎
08:51
|
(58) а вы какого поведения ожидаете?
|
|||
60
Dvoe4nik
27.07.17
✎
08:53
|
(58) стрТч = Объект.Товары.Добавить(); замените на
стрТч = Данные.Добавить(); а в конце процедуры напишите |
|||
61
Dvoe4nik
27.07.17
✎
08:54
|
ЗначениеВРеквизитФормы(Данные,"Товары");
|
|||
62
KIraA
27.07.17
✎
09:01
|
рез = запрос.Выполнить().Выгрузить();
Данные = РеквизитФормыВЗначение("Объект").Товары.выгрузить(); Для каждого стр Из рез Цикл МассивСтрок= Данные.НайтиСтроки(Новый структура("Номенклатура",стр.Номенклатура)); Если МассивСтрок.Количество() =0 Тогда стрТч = Данные.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; иначе ДЛя каждого строкамассива из МассивСтрок цикл строкамассива.КолФ = стр.Количество; Конеццикла; КонецЕсли; КонецЦикла; ЗначениеВРеквизитФормы(Данные,"Товары"); {Документ.СБ_Смета.Форма.ФормаДокумента.Форма(66)}: Ошибка при вызове метода контекста (ЗначениеВРеквизитФормы) ЗначениеВРеквизитФормы(Данные,"Товары"); по причине: Недопустимое значение параметра (параметр номер '2') |
|||
63
KIraA
27.07.17
✎
09:05
|
А вот вариант через Ж... работает, но так априоре не правильно....
Для каждого стр Из рез Цикл СтрокаТЗ = Данные.Найти(стр.Номенклатура,"Номенклатура"); Если СтрокаТЗ = Неопределено Тогда стрТч = Объект.Товары.Добавить(); стрТч.Номенклатура = стр.Номенклатура; стрТч.КолФ = стр.Количество; КонецЕсли; КонецЦикла; Для каждого стр Из Объект.Товары Цикл СтрокаТЗ = рез.Найти(стр.Номенклатура,"Номенклатура"); Если СтрокаТЗ = Неопределено Тогда иначе стр.КолФ = СтрокаТЗ.Количество; КонецЕсли; КонецЦикла; |
|||
64
KIraA
27.07.17
✎
09:26
|
Больше подсказок не будет?((( Оставлять через Ж?...
|
|||
65
Dvoe4nik
27.07.17
✎
09:27
|
(62) еще вариант -Объект.Товары.Загрузить(Данные);
|
|||
66
Dvoe4nik
27.07.17
✎
09:28
|
вместо ЗначениеВРеквизитФормы(Данные,"Товары");
|
|||
67
dezss
27.07.17
✎
09:28
|
(64) Напиши задачу, тогда можно будет помочь.
Иначе отрабатывает правильно. Отрабатывает именно так, как и написано в коде. Значит, написано неправильно, а чтобы подсказать как правильно, нужна формулировка задачи. |
|||
68
KIraA
27.07.17
✎
09:56
|
Dvoe4nik.....Вот так ЗАРАБОТАЛООООООООО!!!!
Спасибо огромное ВСЕМ кто не остался равнодушен и поучаствовал в решении моей проблемы!!! Где тут плюсики нажать, для поднятия Вашего рейтинга?))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |