Версия для печати темы (https://pro1c.org.ua/index.php?s=80e0e9a9a331421ade695c503491b07f&showtopic=61725)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 7.7 _ Как создать ссылку на определенную строку ТаблицыЗначений? 1с 7.7 конф 7.7.003

Автор: ZUBR 22.09.20, 17:12

ЗДРАВСТВУЙТЕ!

Есть кусок программы примерно такой

            Пока Расх.ПолучитьДокумент()=1 Цикл
    ...........................................................................................................................................................................                                                    
            ТЗ.НоваяСтрока();
            Если ((НачДата1<=Расх.ДатаВыд)и(Расх.ДатаВыд<= КонДата1) Тогда
                ТЗ.ДатаДок = Расх.ДатаДок;
                .................................................................................................................................................................................
                                .....................................................................................................................................................................................
                ИначеЕсли   (Расх.СтатусЗаказа=Перечисление.Статусы.АКС)и(ПустаяСтрока(Расх.Модель)=0) Тогда  
                    ТЗ.СуммаАкс = Расх.Итог("СуммаСНДС");                
                    ....................................................................

                                         А=ТЗ.ТекущаяСтрока();                    // ЗАПОМИНАЕМ СТРОКУ И ПРИСВАИВАЕМ ЕЕ ПЕРЕМЕННОЙ А

                    ТЗ.ВыбратьСтроки();
                    Пока ТЗ.ПолучитьСтроку()=1 Цикл
                        Если (ТЗ.ЗАКАЗ=Расх.НомерЗаказа) Тогда
                                  ТЗ.СуммаАкс =  Расх.Итог("СуммаСНДС");
                                       ............................................................................
                        КонецЕсли;  
                    КонецЦикла;

                    ТЗ.ВыбратьСтроки();

                    ТЗ.ПолучитьСтроку(А);                   //ПЫТАЕМСЯ ПОЛУЧИТЬ СТРОКУ А

                        Если (ТЗ.ЗАКАЗ=Расх.НомерЗаказа)и(ТЗ.СТАТУС=Перечисление.Статусы.АКС)  Тогда  
                            ТЗ.К=К;
                        КонецЕсли;
                                            .......................................................................................................................


Суть в том, что в определенном месте цикла мне надо запомнить строку ТЗ, чтобы потом ее вызвать без поиска и цикла и произвести в ней некоторые изменения.
Синтакс выдает ошибку что при выполнении ТЗ.ПолучитьСтроку(А); слишком много параметров.
Как мне это сделать? Где ошибка? Спасибо!)

Автор: denis84 22.09.20, 17:28

ZUBR @ Сегодня, 18:12 * ,
Добрый день. ТЗ.ПолучитьСтроку() используется без параметров и показывает( получает) строки ТЗ.

Автор: andrew76 22.09.20, 18:40

Цитата(ZUBR @ 22.09.20, 20:12) *
Суть в том, что в определенном месте цикла мне надо запомнить строку ТЗ, чтобы потом ее вызвать без поиска и цикла и произвести в ней некоторые изменения.


ПолучитьСтрокуПоНомеру(<?>);
Синтаксис:
ПолучитьСтрокуПоНомеру(<НомерСтроки>)
Назначение:
Получить строку таблицы значений по номеру. Указанная строка становится текущей.
Параметры:
<НомерСтроки> - номер строки, на которую следует переместиться.

ТЗ.ПолучитьСтрокуПоНомеру(<?>);



Вдогонку :

ТЗ.ВыбратьСтроки();  //эта строчка лишняя скорее всего

ТЗ.ПолучитьСтрокуПоНомеру(А);                   //ПЫТАЕМСЯ ПОЛУЧИТЬ СТРОКУ А

Если (ТЗ.ЗАКАЗ=Расх.НомерЗаказа)и(ТЗ.СТАТУС=Перечисление.Статусы.АКС)  Тогда  
       ТЗ.К=К;
КонецЕсли;


Автор: ZUBR 22.09.20, 21:34

andrew76 @ Сегодня, 19:40 * ,
Не работает. Выскакивает ошибка
ТЗ.ПолучитьСтрокуПоНомеру(А);
{Отчет.Оплата.Форма.Модуль(135)}: Номер за пределами значения!
Как получить номер строки?
У меня так:

А=ТЗ.ТекущаяСтрока();

И в этом случае выскакивает вышеуказанная ошибка...

Автор: andrew76 23.09.20, 4:33

Посмотрите в отладчике значение переменной А.Может лучше эту переменную
вычислять принудительно : А=А+1 ?

Автор: Sharzem 23.09.20, 8:56

ZUBR @ Вчера, 17:12 * ,
Намагання в циклах знаходити потрібне значення - несінитниця.
Ваш код:

А=ТЗ.ТекущаяСтрока();// ЗАПОМИНАЕМ СТРОКУ И ПРИСВАИВАЕМ ЕЕ ПЕРЕМЕННОЙ А
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Если (ТЗ.ЗАКАЗ=Расх.НомерЗаказа) Тогда
        ТЗ.СуммаАкс =  Расх.Итог("СуммаСНДС");
    КонецЕсли;
КонецЦикла;

Можете замінити на:
    лпНомерЗаказа = Расх.НомерЗаказа;
    лпНомерИскомойСтроки = "";
    Если ТЗ.НайтиЗначение(лпНомерЗаказа,лпНомерИскомойСтроки,"ЗАКАЗ") = 1 Тогда
        //Якщо потрібно вставити в поточну (нову) строку, використовуєте:
        ТЗ.СуммаАкс = Расх.Итог("СуммаСНДС");
        //Але якщо потрібно вставити в лпНомерИскомойСтроки, потрібно:
        ТЗ.УстановитьЗначение(лпНомерИскомойСтроки,"СуммаАкс",Расх.Итог("СуммаСНДС"));
    КонецЕсли;

При використанні метода НоваяСтрока(), ТекущаяСтрока() = "" і визначати її потрібно за допомогою ТЗ.НомерСтроки або ТЗ.КоличествоСтрок().
Позиціонування через ПолучитьСтрокуПоНомеру() може спрацьовувати не вірно, оскільки в процесі обробки даних може відбуватися "зміщення"
(як приклад, видалення стрічок) і ТекущаяСтрока() вже <> КоличествоСтрок().
Користуйтеся методами НайтиЗначение(), ПолучитьЗначение() та УстановитьЗначение(). Уявляйте собі що у Вас не 200 стрічок та 200 документів,
а по 200 000 тих і тих, тоді модель ВыбратьСтроки() и Пока ПолучитьСтроку() = 1 Цикл використовуватимете лише тільки один раз.

Автор: ZUBR 01.10.20, 21:57

Sharzem @ 23.09.20, 9:56 * ,
в рядку

лпНомерЗаказа = Расх.НомерЗаказа;

лп ставити обов'язково? Тобто, обовязково писати лпНомерЗаказа, чи можна просто НомерЗаказа?

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua