![]() |
![]() |
![]() |
|
Ошибка в коде. Результат в неправильном месте. Нужна помощь. | ☑ | ||
---|---|---|---|---|
0
Sefuirotsu
26.08.13
✎
19:40
|
[code]Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ОстаткиТоваров.Записывать = Истина; Движения.ОстаткиТоваров.Очистить(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | МИНИМУМ(ДокТЧ.НомерСтроки) КАК НомерСтроки, | ДокТЧ.Продукция, | СУММА(ДокТЧ.Количество) КАК Количество, | МАКСИМУМ(ЕСТЬNULL(Остатки.КоличествоОстаток, 0)) КАК КоличествоОстаток, | МАКСИМУМ(ЕСТЬNULL(Остатки.СтоимостьОстаток, 0)) КАК СтоимостьОстаток |ИЗ | Документ.Расходная.Товары КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(&МоментВремени, ) КАК Остатки | ПО ДокТЧ.Продукция = Остатки.Продукция |ГДЕ | (НЕ ДокТЧ.Продукция.Услуга) | И (НЕ ДокТЧ.Продукция.Данные) | И ДокТЧ.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ДокТЧ.Продукция"; Запрос.УстановитьПараметр("МоментВремени", МоментВремени() ); Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Если Выборка.Количество > Выборка.КоличествоОстаток Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Не хватает товара """ + Выборка.Продукция + """, из необходимых " + Выборка.Количество + " в наличии осталось только " + Выборка.КоличествоОстаток + "!"; Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки = 2) + "].Количество"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = Истина; Движения.ОстаткиТоваров.Записывать = Ложь; КонецЕсли; Если Отказ Тогда Продолжить; КонецЕсли; Движение = Движения.ОстаткиТоваров.ДобавитьРасход(); Движение.Период = Дата; Движение.Продукция = Выборка.Продукция; Движение.Количество = Выборка.Количество; Движение.Стоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток; КонецЦикла; КонецПроцедуры[/code] Всем доброго времени суток! В форме мне необходимо, чтобы сообщение об ошибке указывало на ячейку с ошибкой (количество 50 000), а, вместо этого, облако указывает на ползунок прокрутки. Бьюсь с этим уже долго и не могу понять, в чем моя ошибка. Нужен свежий взгляд в код :) Большое спасибо за помощь! Вот скрин того, что выходит у меня: [spoiler] [img]http://i053.radikal.ru/1308/e4/b9fe6359084f.jpg[/img] [/spoiler] |
|||
1
Sefuirotsu
26.08.13
✎
19:44
|
Прощу прощение за ошибки в составлении :)
Правильная ссылка на картинку: http://i053.radikal.ru/1308/e4/b9fe6359084f.jpg |
|||
2
banco
26.08.13
✎
19:50
|
(0) (Выборка.НомерСтроки = 2) - что это такое?
|
|||
3
НаборДанных
26.08.13
✎
19:52
|
http://v8.1c.ru/metod/faq2/answer.jsp?id=656
Тут все подробно изложено. Скорее всего у тебя поле формируется как Сообщение.Поле = "Товары["Ложь"].Количество"; - бред, согласись? |
|||
4
Sefuirotsu
26.08.13
✎
20:07
|
(2) Прошу прощения, это я игрался с точкой останова, чтобы понять, правильно ли определяется значение.
Изначальный код с ошибкой был такой: Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки - 1) + "].Количество"; (3) Спасибо, сейчас гляну! |
|||
5
Sefuirotsu
26.08.13
✎
20:21
|
Вот что у меня получается:
1) Я делаю запрос на первую ошибку в списке здесь: "ВЫБРАТЬ | МИНИМУМ(ДокТЧ.НомерСтроки) КАК НомерСтроки, Соответственно, если у меня сразу несколько ошибок, подхватывается строка из самой первой. Например, если я ввожу кол-во товара = 50 тыс для 4 строчки, а у меня там только 1000 в наличии, то, согласно точке останова, значение Выборка.НомерСтроки подхватывается верно, и равно цифре 4. Однако, у меня все-равно облако выскакивает не на 4 строчке, для колонки "Количество", а как на скриншоте. Посмотрел ссылку, и все-равно не могу найти ошибку. Мне кажется, что код у меня верный, но, раз облако глючит, значит, я где-то все-таки ошибаюсь. P.S: Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки) + "].Количество"; или Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки - 1) + "].Количество"; или Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки + 1) + "].Количество"; На ошибку никак не влияет. Меняется только значение Выборка.НомерСтроки, согласно точке останова, но облако не перемещается ни выше, ни ниже... :( |
|||
6
НаборДанных
26.08.13
✎
20:24
|
Сообщение.Поле = "Товары["+4+"].Количество";
Так что будет у тебя? Следующее, напиши версию платформы и собственно в какой среде ты все это запускаешь? |
|||
7
Sefuirotsu
26.08.13
✎
20:33
|
(6) Да, получается так, как ты написал. В случае, если ошибка в 4 строчке.
Версия: 1С:Предприятие 8.2 (8.2.18.61) Среда тоже предприятие, база данных написанная с нуля, без использования каких-либо конфигураций. |
|||
8
Sefuirotsu
26.08.13
✎
20:38
|
Попробовал сделать вот так (согласно ссылке, которую ты мне дал):
Сообщение = Новый СообщениеПользователю; Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки) + "].Количество"; Сообщение.Текст = "Не хватает товара """ + Выборка.Продукция + """, из необходимых " + Выборка.Количество + " в наличии осталось только " + Выборка.КоличествоОстаток + "!"; //Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); В результате облако вообще перестало появляться, а текст сообщения выводится только сбоку, в виде сообщения. |
|||
9
НаборДанных
26.08.13
✎
20:52
|
(8)Ну это ты зря, убрал то установитьданные.
|
|||
10
НаборДанных
26.08.13
✎
20:53
|
Я имел в виду в какой ОС все это у тебя работает, на другом ПК пробовал, может мы тут гадаем над правильным кодом, а та позиционирование гоняет или еще какая магия.
|
|||
11
Sefuirotsu
26.08.13
✎
21:06
|
Конкретно сейчас на ОС: Windows XP SP 3 версия 5.1
сборка 2600.xpsp_sp3_qfe.100427-1650. Гоняю все это на простой, однофайловой базе. Попробовать больше сегодня не на чем, завтра требуется уже готовый код внедрять на работе, так сказать, в "боевых условиях" :) Как вариант, попробую еще другую сборку самой 1С... |
|||
12
Dmitry1c
26.08.13
✎
21:08
|
Спец по платформе. Бедняга.
|
|||
13
Dmitry1c
26.08.13
✎
21:10
|
Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки = 2) + "].Количество";
Попробуй не .Поле, а .ПутьКДанным |
|||
14
Dmitry1c
26.08.13
✎
21:13
|
Нет. Надо так:
Сообщение.ПутьКДанным = "Объект"; Сообщение.Поле = "Товары[" + (Выборка.НомерСтроки = 2) + "].Количество"; Тогда все получится. |
|||
15
НаборДанных
26.08.13
✎
21:18
|
&НаКлиенте
Процедура Команда1(Команда) Сообщение = Новый СообщениеПользователю; Сообщение.Поле = "Объект.ТабличнаяЧасть1[" + 3 + "].Реквизит3"; Сообщение.Текст = "Не хватает товара """ + """, из необходимых " + " в наличии осталось только " + "!"; Сообщение.УстановитьДанные(Объект); Сообщение.Сообщить(); КонецПроцедуры Накидал 1 документ с ТЧ, неужели самому было сложно проверить? Глазастых сегодня не было, ищи отличия в коде. Кстати у меня крутая отрисовка гг, http://screencast.com/t/dPaef6YX |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |