Доброго времени суток!
Столкнулся с необходимостью проверять табличную часть в документе на актуальность. Данные для этой ТЧ могут измениться с момента заполнения по остаткам из регистров и до момента записи и проведения. Для этого я выгрузил существующую ТЧ в Таблицу значений и так же запросом получил Таблицу значений актуальных данных. Далее я каждую строку моих ТЗ перевожу в структуру для дальнейшего сравнения через ОбщегоНазначения.ДанныеСовпадают. И вот в этот момент когда данные не совпадают мне нужно получить каким то образом текущую строку ТЧ и перезаписать ее например через ЗаполнитьЗначенияСвойств новыми данными.
Проблема именно в получении текущей строки, а именно индекса. Ведь насколько я понимаю с индексом я смогу написать ЗаполнитьЗначенияСвойств(ТЧ[ИндексСтроки], АктуальныеДанные).
Ниже в коде я пытался найти строку нужную мне через НайтиСтроку() и в дальнейшем использовать ее как индекс, но безуспешно. Пробовал я это потому что ранее с помощью этого же метода я мог удалить строку :
фф
Буду рад любой подсказке!
Столкнулся с необходимостью проверять табличную часть в документе на актуальность. Данные для этой ТЧ могут измениться с момента заполнения по остаткам из регистров и до момента записи и проведения. Для этого я выгрузил существующую ТЧ в Таблицу значений и так же запросом получил Таблицу значений актуальных данных. Далее я каждую строку моих ТЗ перевожу в структуру для дальнейшего сравнения через ОбщегоНазначения.ДанныеСовпадают. И вот в этот момент когда данные не совпадают мне нужно получить каким то образом текущую строку ТЧ и перезаписать ее например через ЗаполнитьЗначенияСвойств новыми данными.
Проблема именно в получении текущей строки, а именно индекса. Ведь насколько я понимаю с индексом я смогу написать ЗаполнитьЗначенияСвойств(ТЧ[ИндексСтроки], АктуальныеДанные).
Ниже в коде я пытался найти строку нужную мне через НайтиСтроку() и в дальнейшем использовать ее как индекс, но безуспешно. Пробовал я это потому что ранее с помощью этого же метода я мог удалить строку :
МассивСтрок = Объект.Отправления.НайтиСтроки(Новый Структура("НомерОтправления", Строка.НомерОтправления));
Для каждого СтрокаМассива Из МассивСтрок Цикл
Объект.Отправления.Удалить(СтрокаМассива);
КонецЦикла;
фф
Буду рад любой подсказке!
Выборка = Запрос.Выполнить().Выбрать();
АктуальныеОтправления = Новый Массив();
АктуальныеОтправленияТЗ = Запрос.Выполнить().Выгрузить();
Пока Выборка.Следующий() Цикл
АктуальныеОтправления.Добавить(Выборка.ВнутреннийИДОтправления);
КонецЦикла;
НомерОтправления = "";
ПроверяемыеОтправления = Объект.Отправления.Выгрузить();
КоличествоУдаленных = 0;
Для каждого Строка Из ПроверяемыеОтправления Цикл
Для Каждого СтрокаТЗ ИЗ АктуальныеОтправленияТЗ Цикл
ПараметрыСтрокиСтарой = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Строка);
ПараметрыСтрокиАктуальной = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТЗ);
Если НЕ ОбщегоНазначения.ДанныеСовпадают(ПараметрыСтрокиСтарой , ПараметрыСтрокиАктуальной ) Тогда
ПараметрыОтбора = Новый Структура("ИДОтправления", Строка.ИДОтправления);
СтрокиИсправляемые = Объект.Отправления.НайтиСтроки(ПараметрыОтбора);
//СтрокаИсправляемая = СтрокиИсправляемые[0];
пСтрока = Объект.Отправления.НайтиПоИдентификатору(
Для Каждого СтрокаМассива ИЗ СтрокиИсправляемые Цикл
ЗаполнитьЗначенияСвойств(Объект.Отправления[СтрокаМассива], ПараметрыСтрокиАктуальной );// найти индекс тек строки и заполнить актуальными значениями из запроса!
//КонецЦиКла;
КонецЕсли;
КонецЦикла;
ПоказатьПо теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Вот это не верно. Вы каждую строку таблицы Проверяемые сверяете с каждой строкой Актуальных.
Так у вас ни одна строка не совпадет.
Надо в таблице Актуальных найти нужную строку, и сверять с нужной строкой.
Заполнить можно так:
Для каждого Строка Из ПроверяемыеОтправления Цикл
Для Каждого СтрокаТЗ ИЗ АктуальныеОтправленияТЗ Цикл
ПараметрыСтрокиСтарой = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Строка);
ПараметрыСтрокиАктуальной = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТЗ);
Если НЕ ОбщегоНазначения.ДанныеСовпадают(ПараметрыСтрокиСтарой , ПараметрыСтрокиАктуальной ) Тогда
Для Каждого СтрокаТЗ ИЗ АктуальныеОтправленияТЗ Цикл
ПараметрыСтрокиСтарой = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Строка);
ПараметрыСтрокиАктуальной = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(СтрокаТЗ);
Если НЕ ОбщегоНазначения.ДанныеСовпадают(ПараметрыСтрокиСтарой , ПараметрыСтрокиАктуальной ) Тогда
Вот это не верно. Вы каждую строку таблицы Проверяемые сверяете с каждой строкой Актуальных.
Так у вас ни одна строка не совпадет.
Надо в таблице Актуальных найти нужную строку, и сверять с нужной строкой.
Заполнить можно так:
ПараметрыОтбора = Новый Структура("ИДОтправления", Строка.ИДОтправления);
СтрокиИсправляемые = Объект.Отправления.НайтиСтроки(ПараметрыОтбора);
Для Каждого СтрокаМассива ИЗ СтрокиИсправляемые Цикл
ЗаполнитьЗначенияСвойств(СтрокаМассива, ПараметрыСтрокиАктуальной );
КонецЦиКла;
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот