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

как сравнить текущую ячейку с предыдущей в табличном поле?

Автор mila1231, 20 июн 2016, 07:17

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

mila1231

Не могу сообразить, как сохранить значение предыдущей ячейки и в дальнейшем его сравнить с текущем значением ячейки.

cska-fanat-kz

Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

LexaK

программируете событие формы-таблицы при активизации ячейки, вот простой пример, без учета смены колонки,

&НаКлиенте
Процедура тзДанныеПриАктивизацииЯчейки(Элемент)

Если Элемент.ТекущиеДанные = Неопределено Тогда
//не выбрана строка, выходим
Возврат;
КонецЕсли;

лкТекЗнач = Элемент.ТекущиеДанные[СтрЗаменить(Элемент.ТекущийЭлемент.Имя,Элемент.Имя,"")]; // текущее значение выбранной ячейки

//глПредыдущееЗначение - "Условно глобальная" переменная для хранения предыдущего значения ячейки
//Если ЗначениеЗаполнено(глПредыдущееЗначение) Тогда
Если глПредыдущееЗначение = Неопределено Тогда
//предыдущего значения еще нет, ни чего не делаем
Иначе
//есть предыдущее значение, выполняем нужные действия
// <ваш код> например:
Сообщить("Старое значеение: " + глПредыдущееЗначение + " ,новое значение: " + лкТекЗнач);
КонецЕсли;
//запоминаем текущее значение
глПредыдущееЗначение = лкТекЗнач;

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

если помогло нажмите: Спасибо!

mila1231

моё предположение было такое...
Перем ПредДата  ;

Процедура ОсновныеДействияФормывыдача(Кнопка)
ТекДанные = ЭлементыФормы.Таблица.ТекущиеДанные;

для каждого ТекДанные из таблица цикл

Если формат(Текданные.дата_приемки, "ДЛФ=Д") > Формат(ПредДата, "ДЛФ=Д") тогда

Док = Документы.Выдача_СИ.СоздатьДокумент();
        Док.Дата = текущаяДата();
Стр = док.приборы.Добавить();

для каждого стр из док.Приборы цикл
        стр.Тип_СИ = ТекДанные.Тип_СИ;
        Стр.Заводской_Номер = ТекДанные.Номер_прибора;

        конеццикла;
         док.Записать();
        конецЕсли;
ПредДата = ТекДанные.дата_приемки;
конецЦикла;


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


Задача такая создавать документ и в него записывать все строки, у которых дата одна и также(т.е в табличное поле документа несколько строк записывается), для другой даты создавать следующий документ.Предположение напрочь не работает, вернее документы то создаются, но не одним документом, а несколькими. Может взглядом скажите где не так?

LexaK

так совсем по другому выглядит ваша задача, вот один из путей ее решения
1.отсортируйте исходную таблицу с данными по колонке дата - Дата_Приемки
2.при переборе в цикле проверяете смену даты, если дата изменилась, записываете/создаете документа
вот небольшой пример кода, который еще надо доработать. надеюсь что справитесь

Процедура тестСоздатьДокумент(Кнопка)

лкТекДата = 0;
лкДок = 0;
таблица.Сортировать("дата_приемки");
Для каждого лкСтр Из таблица Цикл

Если лкТекДата <> НачалоДня(лкСтр.дата_приемки) Тогда
//произошла смена даты
Если лкДок <> 0 Тогда
//есть незаписанный докумен, записываем его
Попытка
лкДок.Записать(РежимЗаписиДокумента.Проведение);
Исключение
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
КонецПопытки;
КонецЕсли;

//запоминаем новую дату
лкТекДата <> НачалоДня(лкСтр.дата_приемки);

//Создаем новый документ. заполняем шапку документа
лкДок = Документы.Выдача_СИ.СоздатьДокумент();
лкДок.Дата = текущаяДата();
лкДок.Отвсетственный = ПараметрыСеанса.ТекущийПользователь; //пример
//и т.д. ...

КонецЕсли;

//заполняем табличную часть документа
лкСтрДок = лкДок.Приботы.Добавить();
лкСтрДок.Тип_СИ = лкСтр.Тип_СИ;
лкСтрДок.Заводской_Номер = лкСтр.Номер_прибора;
лкСтрДок.Количество = 1; //пример
//и т.д. ...

КонецЦикла;

Если лкДок <> 0 Тогда
//есть незаписанный докумен, записываем его
Попытка
лкДок.Записать(РежимЗаписиДокумента.Проведение);
Исключение
лкОшибка = ОписаниеОшибки();
Сообщить(лкОшибка);
КонецПопытки;
КонецЕсли;

КонецПроцедуры
если помогло нажмите: Спасибо!

mila1231


Теги:

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

Рейтинг@Mail.ru

Поиск