Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
05 авг 2021, 20:14

Помогите заполнить табличную часть из Таблицы значений

Автор Сергей Поляков, 03 ноя 2020, 13:45

0 Пользователей и 1 гость просматривают эту тему.

Сергей Поляков

Приветствую.
У меня есть табличная часть документа, и есть таблица значений с идентичными полями, и мне нужно заполнить
документ из таблицы значений, но на каждой итерации цикла заполнять значение поля тем значением, которое нужно мне
Не могу сообразить как правильно сделать, подскажите пжлст.


Процедура ЗаполнитьДокументПоДаннымЗаполнения(ДокументОбъект, ДанныеДляЗаполнения) Экспорт
   
   КолВоСтрок = ДокументОбъект.Сотрудники.Количество();
   
   Для Каждого Строка Из ДанныеДляЗаполнения.Сотрудники Цикл
       ЗаполнитьЗначенияСвойств(ДокументОбъект.Сотрудники.Добавить(), Строка); //данная строка заполняет все значения
       ДокументОбъект.Сотрудники.НомерСправки = 555; //а в этой строке мне нужно как то изменить значение на свое в одном поле
            ДокументОбъект.Сотрудники[0].НомерСправки = 555; //так по идее правильно, обращение идет к строке. Но как получать текущую строку не понятно.
   КонецЦикла;

DmitriyF

Цитата: Сергей Поляков от 03 ноя 2020, 13:45
Приветствую.
У меня есть табличная часть документа, и есть таблица значений с идентичными полями, и мне нужно заполнить
документ из таблицы значений, но на каждой итерации цикла заполнять значение поля тем значением, которое нужно мне
Не могу сообразить как правильно сделать, подскажите пжлст.


Процедура ЗаполнитьДокументПоДаннымЗаполнения(ДокументОбъект, ДанныеДляЗаполнения) Экспорт
   
   КолВоСтрок = ДокументОбъект.Сотрудники.Количество();
   
   Для Каждого Строка Из ДанныеДляЗаполнения.Сотрудники Цикл
       ЗаполнитьЗначенияСвойств(ДокументОбъект.Сотрудники.Добавить(), Строка); //данная строка заполняет все значения
       ДокументОбъект.Сотрудники.НомерСправки = 555; //а в этой строке мне нужно как то изменить значение на свое в одном поле
            ДокументОбъект.Сотрудники[0].НомерСправки = 555; //так по идее правильно, обращение идет к строке. Но как получать текущую строку не понятно.
   КонецЦикла;
Если вам нужно просто загрузить ТЗ в ТЧ то сделайте так
ДокументОбъект.Сотрудники.Загрузить(ДанныеЗаполнения);
Потом уже цикл
Для Каждого Стр из ДокументОбъект.Сотрудники Цикл
    Стр.НоваяСправки = 555;
КонецЦикла

А еще лучше в ТЗ сделайте номера справок и загрузите в ТЧ.

LexaK

команда Загрузить(), читайте СП (синтаксиспомощьник) там много интересного и полезного написано

Процедура ЗаполнитьДокументПоДаннымЗаполнения(ДокументОбъект, ДанныеДляЗаполнения) Экспорт
    ДокументОбъект.Сотрудники.Загрузить(ДанныеДляЗаполнения);
КонецПроцедуры

ответ Понравился? (в смысле пригодился?)

Сергей Поляков

Спасибо за ответы ))
В таблицу значений изначально думаю значения справок не получится добавить.
Что делает обработка:
Есть документ "Справка 2 НДФЛ для передачи в ИФНС", которая заполняет ТЧ сотрудниками по выбранной в документе "Регистрации в налоговом органе".
Регистрации две.
Сначала я заполняю по первой регистрации, заполняется 200 человек, затем
я перевыбираю регистрацию №2 и еще раз заполняю, все что нужно заполняется средствами конфигурации (уже написанные процедуры), но справки так же начинаются с 1,2 и т.д., а мне нужно начиная с 201 (т.е. данные при заполнении я получаю как бы из Табличной части, поэтому в Таблицу значений я их изначально добавить не могу)
а насчет "загрузить()" в СП поищу, спасибо.

LexaK

тогда примерно такой алгоритм

Процедура СформироватьДокумент()

ДанныеДляЗаполнения = Новый массив;
ДанныеДляЗаполнения.Добавить(ПолучитьДанные1()); //получаем первый набор данных
ДанныеДляЗаполнения.Добавить(ПолучитьДанные2()); //получаем второй и т.д.  набор данных

ДокументОбъект = ВашДокументОбъект; //как вы его там получаете?
ДокументОбъект.Сотрудники.Очистить(); //перед перезаполнением очищаем ТЧ
Для каждого НаборДанных Из ДанныеДляЗаполнения Цикл
ЗаполнитьДокументПоДаннымЗаполнения(ДокументОбъект, НаборДанных);
КонецЦикла;

ДокументОбъект.Записать();//?

КонецПроцедуры

Процедура ЗаполнитьДокументПоДаннымЗаполнения(ДокументОбъект, ДанныеДляЗаполнения) Экспорт
Для каждого СтрокаДанных Из ДанныеДляЗаполнения Цикл
//добавляем и заполняем строку
НоваяСтрока = ДокументОбъект.Сотрудники.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаДанных);//сразу все поля заполняет
НоваяСтрока.НомерСправки = НоваяСтрока.НомерСтроки; //номер справки по порядку, как номер строки
КонецЦикла;
КонецПроцедуры
ответ Понравился? (в смысле пригодился?)

Сергей Поляков


Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск