Заполнение макета добавлением строк при определенных условиях.
Добрый день! Возникла интересная задача до решения которой самостоятельно я, увы, никак не могу дойти. Надеюсь, Вы мне поможете. Итак, есть макет (изображение 1).
В данный макет заполняются определенные события, связанные с этапами закупок (пример на изображении 2). Однако может возникнуть ситуация, когда на один этап закупки на одну дату может быть два события. У меня возникла идея добавить строку (оставив параметр "ЭтапЗакупки" пустым) и заполнить параметр события вторым (третьим или n-ным) событием на эту дату для этого этапа закупки.
Вопрос: Как можно прочитать предыдущую строку табличного документа, куда загружается макет, для того, чтобы понять, был ли заполнен параметр для этого этапа на эту дату? Делаю через
Заранее благодарю!
UPD. Перефразирую немного задачу: если на одну дату для одного этапа закупки существует больше одного события, нужно создавать новую строку в ТабДок, не заполняя параметр "ЭтапЗакупки". Я думаю, нужно прочитать уже заполненную ранее строку, далее сравнить тип закупки предыдущей строки и строки, откуда я беру данные для заполнения. То же самое сделать для даты. Если и то, и другое совпадает, создавать новую строку. Но вот как прочитать предыдущую строку ТабДок?
В данный макет заполняются определенные события, связанные с этапами закупок (пример на изображении 2). Однако может возникнуть ситуация, когда на один этап закупки на одну дату может быть два события. У меня возникла идея добавить строку (оставив параметр "ЭтапЗакупки" пустым) и заполнить параметр события вторым (третьим или n-ным) событием на эту дату для этого этапа закупки.
Вопрос: Как можно прочитать предыдущую строку табличного документа, куда загружается макет, для того, чтобы понять, был ли заполнен параметр для этого этапа на эту дату? Делаю через
Для каждого Параметр из Область.Параметры Цикл
БлаБлаБла;
КонецЦикла;
Заранее благодарю!
UPD. Перефразирую немного задачу: если на одну дату для одного этапа закупки существует больше одного события, нужно создавать новую строку в ТабДок, не заполняя параметр "ЭтапЗакупки". Я думаю, нужно прочитать уже заполненную ранее строку, далее сравнить тип закупки предыдущей строки и строки, откуда я беру данные для заполнения. То же самое сделать для даты. Если и то, и другое совпадает, создавать новую строку. Но вот как прочитать предыдущую строку ТабДок?
Прикрепленные файлы:
![](/upload/forum/upload/433/43325815689ece5264c90feee2139f59.png)
![](/upload/forum/upload/42d/42d171ef8b671bba4dbde743e55f2621.png)
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
Нет. Нефиг сравнивать заполненный табличный документ. Сравнивайте исходные данные перед выводом в макет. Именно там проверяйте количество событий и в зависимости от этого заполняете параметры макета для текущей строки.
Я думаю, нужно прочитать уже заполненную ранее строку, далее сравнить тип закупки предыдущей строки и строки, откуда я беру данные для заполнения.
Нет. Нефиг сравнивать заполненный табличный документ. Сравнивайте исходные данные перед выводом в макет. Именно там проверяйте количество событий и в зависимости от этого заполняете параметры макета для текущей строки.
(4) Т.е. лучше отсортировать таблицу значений "источник" данных по дате и по этапу закупки, брать данные на неделю (ту, что выводится в ТабДок), после чего заливать это всё в массив структур с Ключами "ЭтапЗакупки, ЗакупочнаяПроцедура, Дата", после чего уже сравнивать текущие данные с массивом структур? Или я уже в дебри ударился?
(5) Не знаю, как у вас там называются реквизиты, знаю только что такие проверки надо делать на уровне данных.
Массив структур с ключами? Меня радует, что вы знаете что это такое. Но я даже не знаю, что у вас является источником данных в текущей интерпретации решения, поэтому ничего сказать не могу.
Массив структур с ключами? Меня радует, что вы знаете что это такое. Но я даже не знаю, что у вас является источником данных в текущей интерпретации решения, поэтому ничего сказать не могу.
(6) Источник данных - буферная таблица значений на форме, данные куда попадают из запросов в общем модуле при старте формы. Имена реквизитов по большому счету не имеют никакого значения. После чего все данные, уже собранные на клиенте, распределяются по определенным условиям. Интересно, просто, как понять, относятся ли два (или три, или больше) событий к одному этапу закупки на одну дату... Как это сделать на уровне данных - идей нет, поэтому и пришёл на форум.
(1)
ресурсоемко довольно и тяжело отлаживать.
(1)
как они заполняются? может на этом этапе проще их считать.
Я думаю, нужно прочитать уже заполненную ранее строку, далее сравнить тип закупки предыдущей строки и строки, откуда я беру данные для заполнения.
ресурсоемко довольно и тяжело отлаживать.
(1)
В данный макет заполняются определенные события, связанные с этапами закупок (пример на изображении 2). Однако может возникнуть ситуация, когда на один этап закупки на одну дату может быть два события.
как они заполняются? может на этом этапе проще их считать.
(8)
, где СобытияЗакупок - буферная таблица значений на форме, ТекЭтап - этап закупки, полученный ранее (то, что пишется в параметр макета "ЭтапЗакупки"); а "Понедельник", "Вторник" и т.д. переменные, куда пишутся расчетные даты для шапки макета.
Вот так заполняются данные.
// ... заполняем строку событиями закупок ...
Для каждого СтрокаСобытия Из СобытияЗакупок Цикл
// Проверяем отсутствие даты у задачи
Если СтрокаСобытия.ФактическаяДатаИлиДатаИсполнения <> Дата(1,1,1) Тогда
// Если этап закупки в текущей строке таблицы этапов совпадает с этапом закупки в текущей строке таблицы закупок, тогда...
Если ТекЭтап = СтрокаСобытия.ТипЭтапаЗакупки Тогда
// Связывание даты события с датой на макете
Если СтрокаСобытия.ФактическаяДатаИлиДатаИсполнения = Понедельник Тогда
Строка.Параметры.Событие1 = СтрокаСобытия.ЗначокСпособаЗакупки + " " + СтрокаСобытия.ЗакупочнаяПроцедура; // Записываем значок способа закупки и закупочную процедуру в параметр на дату
Строка.Параметры.РасшифровкаСобытия = СтрокаСобытия.ЗакупочнаяПроцедура; // Устанавливаем расшифровку поля: устанавливаем конкретную ссылку на ЗП
ИначеЕсли СтрокаСобытия.ФактическаяДатаИлиДатаИсполнения = Вторник Тогда
Строка.Параметры.Событие2 = СтрокаСобытия.ЗначокСпособаЗакупки + " " + СтрокаСобытия.ЗакупочнаяПроцедура; // Записываем значок способа закупки и закупочную процедуру в параметр на дату
Строка.Параметры.РасшифровкаСобытия = СтрокаСобытия.ЗакупочнаяПроцедура; // Устанавливаем расшифровку поля: устанавливаем конкретную ссылку на ЗП
ИначеЕсли СтрокаСобытия.ФактическаяДатаИлиДатаИсполнения = Среда Тогда
Строка.Параметры.Событие3 = СтрокаСобытия.ЗначокСпособаЗакупки + " " + СтрокаСобытия.ЗакупочнаяПроцедура; // Записываем значок способа закупки и закупочную процедуру в параметр на дату
Строка.Параметры.РасшифровкаСобытия = СтрокаСобытия.ЗакупочнаяПроцедура; // Устанавливаем расшифровку поля: устанавливаем конкретную ссылку на ЗП
ИначеЕсли СтрокаСобытия.ФактическаяДатаИлиДатаИсполнения = Четверг Тогда
Строка.Параметры.Событие4 = СтрокаСобытия.ЗначокСпособаЗакупки + " " + СтрокаСобытия.ЗакупочнаяПроцедура; // Записываем значок способа закупки и закупочную процедуру в параметр на дату
Строка.Параметры.РасшифровкаСобытия = СтрокаСобытия.ЗакупочнаяПроцедура; // Устанавливаем расшифровку поля: устанавливаем конкретную ссылку на ЗП
ИначеЕсли СтрокаСобытия.ФактическаяДатаИлиДатаИсполнения = Пятница Тогда
Строка.Параметры.Событие5 = СтрокаСобытия.ЗначокСпособаЗакупки + " " + СтрокаСобытия.ЗакупочнаяПроцедура; // Записываем значок способа закупки и закупочную процедуру в параметр на дату
Строка.Параметры.РасшифровкаСобытия = СтрокаСобытия.ЗакупочнаяПроцедура; // Устанавливаем расшифровку поля: устанавливаем конкретную ссылку на ЗП
КонецЕсли; // Конец связывания даты на макете с датой события
// Рисуем разделительную линию перед следующим этапом
Макет.Область("R3C1:R3C8").ГраницаСнизу = ЛинияПослеЭтапа;
КонецЕсли; // Конец связывания этапов закупки
КонецЕсли; // Конец проверки отсутствия даты
КонецЦикла; // Конец обхода буферной таблицы событий закупок
Показать, где СобытияЗакупок - буферная таблица значений на форме, ТекЭтап - этап закупки, полученный ранее (то, что пишется в параметр макета "ЭтапЗакупки"); а "Понедельник", "Вторник" и т.д. переменные, куда пишутся расчетные даты для шапки макета.
Вот так заполняются данные.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот