|
Почему не изменяется номер строки в цикле? | ☑ | ||
---|---|---|---|---|
0
program345
09.03.15
✎
11:01
|
доброго дня!
есть код модуля объекта: // Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Для каждого Строка Из Движения.ОстаткиТоваров Цикл Если День(Строка.Период)<>День(ТекущаяДата()) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Дата строки ТЧ № " + (строка.НомерСтроки+1)+ " должна быть текущей!"; Сообщение.Поле = "Движения.ОстаткиТоваров[Строка.НомерСтроки].Период"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = истина; КонецЕсли; КонецЦикла; КонецПроцедуры // в табличной части 5 строк, на каждом витке цикла Строка.НомерСтроки = 0, почему? П.С. табличная часть есть только в форме дока, как таблица движений (это документ универсальных корректировок движений). |
|||
1
palpetrovich
09.03.15
✎
11:17
|
(0) а Движения есть в этот момент?
|
|||
2
Naumov
09.03.15
✎
11:18
|
Потому что тот, кто писал это движение в регистр НомерСтроки не записал.
|
|||
3
program345
09.03.15
✎
11:21
|
(1) да, есть
|
|||
4
program345
09.03.15
✎
11:22
|
(2) номерстроки есть в движении
|
|||
5
ColonelAp4u
09.03.15
✎
11:25
|
(4) а если тупо в цикле написать Строка.НомерСтроки=Строка.НомерСтроки+1;
|
|||
6
program345
09.03.15
✎
11:32
|
(5) //
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Строчка = 0; Для каждого Строка Из Движения.ОстаткиТоваров Цикл Если День(Строка.Период)<>День(ТекущаяДата()) Или Не ЗначениеЗаполнено(Строка.Номенклатура) Или Не ЗначениеЗаполнено(Строка.Количество) Или Не ЗначениеЗаполнено(Строка.Цена) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Дата строки ТЧ № " + (Строчка+1)+ " должна быть текущей!"; Сообщение.Поле = "Движения.ОстаткиТоваров[Строчка].Период"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = истина; //Сообщить("дата табл части не явл тек, или не заполнено поле номенклатура, количество, цена!!! "); КонецЕсли; Строчка=Строчка+1; КонецЦикла; КонецПроцедуры // так на строчку которая нужна все равно не встает https://yadi.sk/d/_7fewxrvf83qi |
|||
7
GROOVY
09.03.15
✎
11:35
|
Перед записью, скорее всего движений то еще нет.
|
|||
8
GROOVY
09.03.15
✎
11:36
|
И, строки в движениях не всегда равны строкам в ТЧ документа.
Может автор перепутал коллекции для обхода? |
|||
9
program345
09.03.15
✎
11:49
|
(8) так табличная часть есть только в форме документа...
|
|||
10
GROOVY
09.03.15
✎
11:55
|
(9) Да ладно?!
|
|||
11
RomanYS
09.03.15
✎
12:04
|
Косяк, который бросился в глаза:
зачем "(строка.НомерСтроки+1)"? НомерСтроки уже начинается с единицы. а вот индекс надо получать так [Строка.НомерСтроки-1]. ЗЫ. Возможно это не решает вопрос в (0). |
|||
12
MishaD
09.03.15
✎
13:05
|
Меня ещё смущает, что переменная называется, как функция
|
|||
13
фобка
09.03.15
✎
13:12
|
(12) "строка"? Это нормально, компилятор хавает
|
|||
14
фобка
09.03.15
✎
13:13
|
(9) таб часть относится к объекту, на форме ДанныеФормыКоллекция
|
|||
15
program345
09.03.15
✎
15:15
|
//
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Для каждого Строка Из Движения.ОстаткиТоваров Цикл Если День(Строка.Период)<>День(ТекущаяДата()) Или Не ЗначениеЗаполнено(Строка.Номенклатура) Или Не ЗначениеЗаполнено(Строка.Количество) Или Не ЗначениеЗаполнено(Строка.Цена) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Дата строки ТЧ № " + (Движения.ОстаткиТоваров.индекс(строка)+1)+ " должна быть текущей!"; УказательСтроки = Движения.ОстаткиТоваров.индекс(строка); Сообщение.Поле = "Движения.ОстаткиТоваров[4].Период"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = истина; //Сообщить("дата табл части не явл тек, или не заполнено поле номенклатура, количество, цена!!! "); КонецЕсли; КонецЦикла; КонецПроцедуры //когда индекс указываешь явно работает, а вот так // Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Для каждого Строка Из Движения.ОстаткиТоваров Цикл Если День(Строка.Период)<>День(ТекущаяДата()) Или Не ЗначениеЗаполнено(Строка.Номенклатура) Или Не ЗначениеЗаполнено(Строка.Количество) Или Не ЗначениеЗаполнено(Строка.Цена) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Дата строки ТЧ № " + (Движения.ОстаткиТоваров.индекс(строка)+1)+ " должна быть текущей!"; УказательСтроки = Движения.ОстаткиТоваров.индекс(строка); Сообщение.Поле = "Движения.ОстаткиТоваров[УказательСтроки].Период"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = истина; //Сообщить("дата табл части не явл тек, или не заполнено поле номенклатура, количество, цена!!! "); КонецЕсли; КонецЦикла; КонецПроцедуры //нет.. странно.. |
|||
16
program345
09.03.15
✎
17:57
|
решено, так робит:
// Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Для каждого Строка Из Движения.ОстаткиТоваров Цикл Если День(Строка.Период)<>День(ТекущаяДата()) Или Не ЗначениеЗаполнено(Строка.Номенклатура) Или Не ЗначениеЗаполнено(Строка.Количество) Или Не ЗначениеЗаполнено(Строка.Цена) Тогда Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Дата строки ТЧ № " + (Движения.ОстаткиТоваров.индекс(строка)+1)+ " должна быть текущей!"; УказательСтроки = Движения.ОстаткиТоваров.индекс(строка); Сообщение.Поле = "Движения.ОстаткиТоваров.Получить(УказательСтроки).Период"; Сообщение.УстановитьДанные(ЭтотОбъект); Сообщение.Сообщить(); Отказ = истина; Сообщить("дата табл части не явл тек, или не заполнено поле номенклатура, количество, цена!!! "); КонецЕсли; КонецЦикла; КонецПроцедуры // |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |