Имя: Пароль:
1C
 
Почему не изменяется номер строки в цикле?
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)+ " должна быть текущей!";
            УказательСтроки = Движения.ОстаткиТоваров.индекс(строка);
            Сообщение.Поле = "Движения.ОстаткиТоваров.Получить(УказательСтроки).Период";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();
            Отказ = истина;
            Сообщить("дата табл части не явл тек, или не заполнено поле номенклатура, количество, цена!!! ");
        КонецЕсли;
    
    
        
    КонецЦикла;
    
КонецПроцедуры
//
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn