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

Таблица значений

Автор Nosferatu112, 29 мая 2023, 15:32

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

Nosferatu112

Всем привет, у меня есть функция которая собирает инфу и возвращает ТЗ
я присваиваю переменной эту функцию
Изменение = ТаблицаИзменений(Источник, Событие).Колонки.Номенклатура;
ИзменениеКол = ТаблицаИзменений(Источник, Событие).Колонки.Количество;
Далее я вставляю переменную в оповещение
ОписаниеИзменений = ОписаниеИзменений + "Изменен состав товаров" + Изменение + ИзменениеКол;И получаю оповещение
"Изменен состав товаров"КолонкаТаблицыЗначенийКолонкаТаблицыЗначений
Как вытащить информацию с этой ТЗ?

Nosferatu112

Я так же пытался сделать так но тогда он становиться не КолонкойТЗ а Массивом
Изменение = ТаблицаИзменений(Источник, Событие).ВыгрузитьКолонку("Номенклатура");

LexaK

Nosferatu112, зачем какие то выгрузки? сразу обходите в цикле ТЗ и выводите Сообщение
примерно так
ИзменениеТЗ = ТаблицаИзменений(Источник, Событие);
Для каждого лкСтр Из ИзменениеТЗ Цикл
Сообщить("Изменен состав товаров: " + лкСтр.Номенклатура + ", кол: " + лкСтр.Количество);
КонецЦикла;
если помогло нажмите: Спасибо!

Nosferatu112

LexaK, Объясняю про выгрузки, с таким кодом сообщение будет выглядить так что людям не нравиться
ЗаказКлиента 0К-00000134 от 30.03.2023
Изменен состав товаров Вода Зеркало Мира 19л
Изменен состав товаров Вода Мира 19л
Изменен состав товаров Вода Здоровье Мира 19л
Я сделал вид сообщения по другому вот код
Если СведенияОПолучателе.Товары_ЕстьИзменения Тогда

Если Не ПустаяСтрока(ОписаниеИзменений) Тогда
ОписаниеИзменений = СокрЛП(ОписаниеИзменений) + Символы.ПС;
КонецЕсли;
ОписаниеИзменений = ОписаниеИзменений + "Изменен состав товаров";

ОписаниеИзменений = ОписаниеИзменений + Символы.ПС + "Было";
Для Каждого Элемент Из Было Цикл

ОписаниеИзменений = ОписаниеИзменений + Символы.ПС + Элемент.Номенклатура + ". " + Элемент.Количество + " шт";

КонецЦикла;

ОписаниеИзменений = ОписаниеИзменений + " Стало";
Для Каждого Элемент Из Стало Цикл

ОписаниеИзменений = ОписаниеИзменений + Символы.ПС + Элемент.Номенклатура + ". " + Элемент.Количество + " шт";

КонецЦикла;

КонецЕсли;

Вот так выглядит сообщение

ЗаказКлиента 0К-00000134 от 30.03.2023
Изменен состав товаров
Было
Вода Зеркало Мира 19л. 55 шт
Кофе молотый Lavazza Oro (Лавацца Оро) ж/б 250 г. 20 шт
Стало
Вода Зеркало Мира 19л. 10 шт
Кофе молотый Lavazza Oro (Лавацца Оро) ж/б 250 г. 5 шт
Но и это им нето что надо блин

Как привести сообщение к такому виду может подскажете?
ЗаказКлиента ДВ-00009780 от 29.05.2023
Изменен состав товаров
Вода Зеркало Мира 19л. Было/Стало - 55 шт / 10 шт
Кофе молотый Lavazza Oro (Лавацца Оро) ж/б 250 г. Было/Стало 20 шт / 5 шт

Nosferatu112

LexaK, Я уже создавал тему с таким вот кодом вы давали там совет
Функция РазницаТаблицЗначенийБыло(Таблица0, Таблица1, Измерения = "") Экспорт
   
ВсеКолонки = "";

Для Каждого Колонка Из Таблица0.Колонки Цикл
ВсеКолонки = ВсеКолонки + ", " + Колонка.Имя
КонецЦикла;

ВсеКолонки = Сред(ВсеКолонки, 2);

Таблица = Таблица1.Скопировать();   

Таблица.Колонки.Добавить("_Знак_", Новый ОписаниеТипов("Число"));

Таблица.ЗаполнитьЗначения(1, "_Знак_");

Для Каждого Строка Из Таблица0 Цикл
ЗаполнитьЗначенияСвойств(Таблица.Добавить(), Строка);
КонецЦикла;

Таблица.Колонки.Добавить("_Счет_");
Таблица.ЗаполнитьЗначения(1, "_Счет_");

Таблица.Свернуть(ВсеКолонки, "_Знак_, _Счет_");

Ответ = Таблица.Скопировать(Новый Структура("_Счет_", 1), ВсеКолонки + ", _Знак_");
ОтветБыло = Ответ.Скопировать(Новый Структура("_Знак_", 0), ВсеКолонки);
Если Не ПустаяСтрока(Измерения) Тогда
Ответ.Сортировать(Измерения);
КонецЕсли;

Возврат ОтветБыло;
   
КонецФункции
Предположим я верну этой фнкцией Ответ и в ТЗ попадут и товары до изменения и после как их разграничить что бы привести сообщение у тому виду который я описал выше

LexaK

Nosferatu112, странный какой-то подход, выводить сообщения об изменениях.
в основном такие задачи решают с помощью отчетов.
можете сделать его Внешним отчетом, связать его со своим документом (БСП)
на форме документа появится кнопка Сформировать отчет Об изменениях.
(если сделаете его с помощью СКД то пользователи сами смогут рулить настройками)

так как вы решаете эту задачу, ни кто не делает, поэтому и подсказок так мало.
 
если помогло нажмите: Спасибо!

Nosferatu112

LexaK, Вся проблема в том что это оповещения в Телеграм и они отпровляються в момент проведения Зоказа клиента поэтому я и решаю так, я бы с радостью просто сделал отчет в СКД

LexaK

Nosferatu112, ааа, вот примерный код формирования сообщения сразу из 2-х ТЗ,
(при условии что количество строк совпадает, но можно доработать под разное)
Если СведенияОПолучателе.Товары_ЕстьИзменения Тогда
                   
    Если Не ПустаяСтрока(ОписаниеИзменений) Тогда
        ОписаниеИзменений = СокрЛП(ОписаниеИзменений) + Символы.ПС;
    КонецЕсли;
    ОписаниеИзменений = ОписаниеИзменений + "Изменен состав товаров";
   
    //ОписаниеИзменений = ОписаниеИзменений + Символы.ПС + "Было";
лкПоз = 0;
    Для Каждого Элемент Из Было Цикл
        лкСтр = Стало[лкПоз];
лкПоз = лкПоз  + 1;
        ОписаниеИзменений = ОписаниеИзменений + Символы.ПС
+ Элемент.Номенклатура + ". было/стало " + Элемент.Количество + " шт / "
+ лкСтр.Количество + " шт";
       
    КонецЦикла;
   
   
КонецЕсли;
если помогло нажмите: Спасибо!

Теги:

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

Рейтинг@Mail.ru

Поиск