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