Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > 1С: Проблемы и решения > Хранение временной информации в базе |
Автор: ^D^ima 25.09.19, 07:03 |
Есть задача - построение отчетов из Битрикс 24. С помощью рест апи буду получать данные. Данные в json Собственно вопрос: 1 Для построения встроенных запросов данные должны быть сохранены в базе, или достаточно только в форме? 2 если на первый вопрос ответ нет, то как мне данные актуализировать? Т.е. я по кнопке загружаю таблицу, далее мне нужно как-то актуализировать базу. Возможен ли вариант использования временных таблиц, которые после закрытия базы удаляются? Не будут ли временные таблицы забивать базу(рост размера файла)? 3 Если ответ на первый вопрос да, то как мне лучше данные вставлять в форму(управляемое приложение)? По сути там будет около 7-10 связанных по ИД элемента справочников, или документов, если в справочнике нет табличных частей. |
Автор: evGenius 25.09.19, 07:14 |
В объект обработки или отчета можно добавить реквизит - таблицу значений с колонками заданных типов. По идее в запросе можно использовать параметры-таблицы, так что данные можно передать в запрос. Ну и этот реквизит можно будет отобразить на форме. После закрытия обработки или отчета все реквизиты очистятся. |
Автор: ^D^ima 25.09.19, 08:23 |
evGenius В конструкторе запросов нет таблиц значений с формы. Опять-же не ясно как связывать эти таблицы(и нужно ли вообще) или ты что-то другое имеешь в виду? ![]() |
Автор: kosten 25.09.19, 08:51 |
Таблицу передавай, как параметр запроса. Добавлено ВЫБРАТЬ * ИЗ &таб |
Автор: ^D^ima 25.09.19, 08:55 |
kosten при этом конструктор запросов не будет работать? |
Автор: Rust 25.09.19, 08:58 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТЗ.Код КАК Код, | ТЗ.Наименование КАК Наименование |ИЗ | &ТаблицаФормы КАК ТЗ"; Запрос.УстановитьПараметр("ТаблицаФормы", РеквизитФормыВЗначение("Реквизит1")); как то так. |
Автор: kosten 25.09.19, 09:08 |
А что ты от него хочешь? Поля твоей таблицы он знать не будет - сам все пропишешь. Связи с другими таблицами может позволит сделать. |
Автор: ^D^ima 25.09.19, 09:48 |
Конструктор не ошибается по крайней мере ![]() Концептуально понял. Как таблицы растащить по страницам? |
Автор: kosten 25.09.19, 09:53 |
что? |
Автор: ^D^ima 25.09.19, 10:14 |
На управляемой форме 10 табличных частей в разных закладках |
Автор: kosten 25.09.19, 10:21 |
И в чем проблема? |
Автор: evGenius 25.09.19, 10:44 |
Добавляешь на форму вкладки и в каждую таскаешь мышкой таблицы из дерева свойств. |
Автор: ^D^ima 25.09.19, 13:56 |
А как я отчеты к своим табличным формам своей обработки привяжу? ![]() Я имею в виду компоновку данных, объект отчеты в конфигурации |
Автор: Rust 26.09.19, 04:51 |
Можно компоновке данных указать что данные для отчета нужно брать из таблицы значений. |
Автор: evGenius 26.09.19, 07:24 |
Цитата Rust @ Можно компоновке данных указать что данные для отчета нужно брать из таблицы значений. В данном случае только так, да. Либо делать отчет не на СКД. |
Автор: ^D^ima 26.09.19, 14:40 |
Цитата Rust @ Можно компоновке данных указать что данные для отчета нужно брать из таблицы значений. Можно пример? Добавлено Под данными отчета имеется в виду запрос? Мне нужно через запрос, для гибкого построения отчетов |
Автор: Rust 27.09.19, 04:46 |
Цитата ^D^ima @ Под данными отчета имеется в виду запрос? Мне нужно через запрос, для гибкого построения отчетов ну я так понял что ты заполняешь табличную часть обработки (или таблицу значений в обработке) данными из битрикса, а потом строишь по ним отчет, при этом тебе не надо хранить данные в базе? во вложении простой пример как построить отчет по данным таблицы значений ![]() |
Автор: ^D^ima 27.09.19, 07:37 |
Rust Спасибо! Несколько вопросов: 1 ВнешнийНаборДанных = Новый Структура("ПримерТаблицыЗначений", ТЗ); Это означает ли что ТЗ должна полностью повторять структуру данных ПримерТаблицыЗначений или наоборот? Т.е. если у моей ТЗ есть какой-то реквизит, должен ли он быть в ПримерТаблицыЗначений? 2 Если у меня несколько ТЗ, я предположим их перенес в наборы данных компоновки, как построить SQL запрос в результирующий наборы данных? Или нужно Сделать SQL запросы напрямую из ТЗ в каую-то результирующую ТЗ, а потом ее переложить в набор данных компоновки для дальнейшей визуальной обработки? |
Автор: Rust 27.09.19, 08:05 |
Цитата ^D^ima @ Это означает ли что ТЗ должна полностью повторять структуру данных ПримерТаблицыЗначений или наоборот? 1. Да. Таблицы должны быть идентичны. Данные в компоновку ты передаешь из таблицы значений, эту таблицу значений представляешь системе компоновки как "набор данных - объект", и в этом наборе данных описываешь что именно лежит в передаваемой таблице значений. 2. Здесь как тебе удобнее. Можешь получить из битрикса сразу результирующую таблицу и в системе компоновки работать именно с одной большой таблицей. Но это может быть затратно. Например может быть вариант отчета где нужны данные только одной таблицы и тебе незачем тянуть еще данные из остальных таблиц (тут я про битрикс). Я бы разбил получаемые данные на несколько наборов, связал их через Связи наборов данных, а потом через настройки вариантов отчетов формировал нужные отчеты. При этом СКД сама будет строить запросы исходя из настроек варианта отчета. По пункту 2 не могу точно что-то посоветовать, просто высказал свое имхо, т.к. не знаю какие данные у тебя есть и какие отчеты будешь формировать. Все зависит от входящих данных из битрикса. Добавлено Оффтоп. Уже много лет работаю с 1С, но с битриксом так ни разу и не сталкивался. Хоть и интегрировал кучу совершенно разных систем с 1С ![]() Добавлено Цитата ^D^ima @ Если у меня несколько ТЗ, я предположим их перенес в наборы данных компоновки, как построить SQL запрос в результирующий наборы данных? В случае работы с набором данных - объект тебе не надо писать запросы. Ты просто описываешь поля таблицы на закладке Наборы данных, в модуле объекта отчета подсовываешь СКД свои данные в виде таблицы значений, на закладке Настройки формируешь внешний вид твоего отчета, и все. СКД дальше все сделает сама. Твоя задача только описать какую таблицу ты передашь СКД, передать ей таблицу и указать СКД как должен выглядеть твой отчет. |
Автор: ^D^ima 27.09.19, 10:27 |
Rust 1 Из битрикса REST API запросами не вытянуть итоговые данные, только по таблицам(т.к. это облачный портал, нет доступа к базе данных напрямую. есть ещё стандартная оьработка по синхронизации, но она далеко не все данные передает) 2 Исходя из ограничений п.1. придется вначале дергать таблицы, потом в Результирующую ТЗ SQLэм формировать нужные данные и уже потом подставлять результирующую ТЗ в компоновку. Да и как понимаю так просто не поработать с ТЗ в запросе - нужно создавать временную таблицу там |
Автор: Rust 27.09.19, 11:30 |
Цитата ^D^ima @ потом в Результирующую ТЗ SQLэм формировать нужные данные и уже потом подставлять результирующую ТЗ в компоновку. А почему бы не сделать несколько "наборов данных - объект", по количеству таблиц, получаемых из битрикса, и работать в СКД сразу с этими наборами данных? Имхо, обрабатывать запросами таблицы значений, чтобы получить другую таблицу значений лишнее. |
Автор: ^D^ima 27.09.19, 11:46 |
Цитата Rust @ "наборов данных - объект", по количеству таблиц, получаемых из битрикса, и работать в СКД сразу с этими наборами данных? А как к ним применить SQL запрос? Добавлено <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Запрос = новый Запрос; Запрос.Текст= "ВЫБРАТЬ | Подразделение.ИД КАК ИД, | Подразделение.Наименование КАК Наименование |ПОМЕСТИТЬ Временная |ИЗ | &Подразделение КАК Подразделение ; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Временная.ИД КАК ИД, | Временная.Наименование КАК Наименование |ИЗ | Временная КАК Временная"; Запрос.УстановитьПараметр("Подразделение",ТаблицаПодразделения); Выборка = запрос.Выполнить().Выбрать(); Что он хочет от меня? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> {Обработка.ОКГ_Битрикс24.Форма.Форма.Форма(155)}: Ошибка при вызове метода контекста (Выполнить) Выборка = запрос.Выполнить().Выбрать(); по причине: {(6, 2)}: Неверные параметры "Подразделение" <<?>>&Подразделение КАК Подразделение по причине: {(6, 2)}: Неверные параметры "Подразделение" <<?>>&Подразделение КАК Подразделение ТаблицаПодразделения через вычислить выражение определяется |
Автор: Rust 27.09.19, 12:18 |
а зачем? в СКД есть несколько наборов данных - набор данных запрос, набор данных объект и набор данных объединение. Запрос используется в наборе данных запрос. Набор данных объект - ты "рисуешь" и заполняешь или подсовываешь готовый объект сам. Объединение - для объединения нескольких наборов в один. Пример выше с получением данных запросом из таблицы значений в твоей задаче можно не использовать, вместо него используй в СКД набор данных объект и подсовывай в объект нужную таблицу значений. Можно конечно и с запросами заморочиться, но это уже наверное дело вкуса. Добавлено видимо неверно формируется таблица значений. у меня твой пример вот в таком виде работает <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ТаблицаПодразделения = Новый ТаблицаЗначений; ТаблицаПодразделения.Колонки.Добавить("ИД", Новый ОписаниеТипов("Строка")); ТаблицаПодразделения.Колонки.Добавить("Наименование", Новый ОписаниеТипов("Строка")); НоваяСтрока = ТаблицаПодразделения.Добавить(); НоваяСтрока.ИД = "123"; НоваяСтрока.Наименование = "Наименование строки"; Запрос = новый Запрос; Запрос.Текст= "ВЫБРАТЬ | Подразделение.ИД КАК ИД, | Подразделение.Наименование КАК Наименование |ПОМЕСТИТЬ Временная |ИЗ | &Подразделение КАК Подразделение ; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Временная.ИД КАК ИД, | Временная.Наименование КАК Наименование |ИЗ | Временная КАК Временная"; Запрос.УстановитьПараметр("Подразделение",ТаблицаПодразделения); Выборка = Запрос.Выполнить().Выгрузить(); В переменной Выборка в итоге оказывается сформированная таблица значений Добавлено Посмотри в отладчике что у тебя вот в этой строке Запрос.УстановитьПараметр("Подразделение", ТаблицаПодразделения) в переменной ТаблицаПодразделения |
Автор: ^D^ima 27.09.19, 12:42 |
Я ТЗ с реквизитами накидываю на форму, ДанныеФормыКоллекция |
Автор: Rust 27.09.19, 12:51 |
тогда поможет <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ТаблицаПодразделения = РеквизитФормыВЗначение("ТутИмяТаблицыНаФорме"); |
Автор: ^D^ima 27.09.19, 14:25 |
А это что за х-ня? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Запрос.Текст= "ВЫБРАТЬ | Подразделение.ИД КАК ПодразделениеИД, | Подразделение.Наименование КАК ПодразделениеНаименование, | Сотрудники.ИД КАК СотрудникиИД, | Сотрудники.ФИО КАК ФИО, | Сотрудники.ИДПодразделения КАК ИДПодразделения |ПОМЕСТИТЬ Временная |ИЗ | &Подразделение КАК Подразделение, | &Сотрудники КАК Сотрудники |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | Временная.ПодразделениеИД КАК ПодразделениеИД, | Временная.ПодразделениеНаименование КАК ПодразделениеНаименование, | Временная.СотрудникиИД КАК СотрудникиИД, | Временная.ФИО КАК ФИО, | Временная.ИДПодразделения КАК ИДПодразделения |ИЗ | Временная КАК Временная"; Запрос.УстановитьПараметр("Подразделение",РеквизитФормыВЗначение("ТаблицаПодразделения")); Запрос.УстановитьПараметр("Сотрудники",РеквизитФормыВЗначение("ТаблицаСотрудники")); <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> {Обработка.ОКГ_Битрикс24.Форма.Форма.Форма(166)}: Ошибка при вызове метода контекста (Выполнить) Выборка = запрос.Выполнить().Выбрать(); по причине: При выборе данных из объекта в запросе не могут присутствовать соединения и объединения по причине: При выборе данных из объекта в запросе не могут присутствовать соединения и объединения Я хочу все таблицы запихнуть во временную и следующим вложенным запросом брать оттуда данные Добавлено Или каждую ТЗ в отдельную временную таблицу засунуть? ![]() ![]() ![]() ![]() |
Автор: Rust 28.09.19, 07:36 |
Да. Кстати, временную таблицу тоже нельзя соединить с выборкой из таблицы значений. Получишь ошибку <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> по причине: Содержимое объекта данных может быть выбрано только во временную таблицу Поэтому каждую таблицу значений заносишь в отдельную временную таблицу и дальше манипулируешь данными как тебе надо. |
Автор: ^D^ima 01.10.19, 11:00 |
Долбанный неразрывный пробел ![]() ![]() ![]() |
Автор: Rust 01.10.19, 11:07 |
это ты еще быстро разобрался. |
Автор: ^D^ima 01.10.19, 11:54 |
Как такой формат привести к формату даты 1С? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 2019-02-01T03:00:00+03:00 |
Автор: kosten 01.10.19, 12:47 |
Из json получаешь? |
Автор: ^D^ima 01.10.19, 13:08 |
kosten да Добавлено Я вначале поле сделал дата\время, но туда из JSONа ничего не переходит, сделал строку |
Автор: kosten 01.10.19, 13:20 |
Кури функцию ПрочитатьJSON. У нее один из аргументов - это имена свойств с типом дата. Она нормально сделает перевод в нужный формат. <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ПрочитатьJSON(ЧтениеJSON,, "ДатаЗапроса", ФорматДатыJSON.ISO) |
Автор: ^D^ima 01.10.19, 21:23 |
kosten <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> ФорматДатыJSON.ISO – формат вида: “ГГГГ-ММ-ДДTЧЧ:ММ:ССZ”, Например: “2009-02-15T00:00:00Z”. ФорматДатыJSON.JavaScript – формат вида : “1234656000000”. ФорматДатыJSON.Microsoft – Формат вида: “/Date(123456000000)/”. Вот такой и выходит формат, а мне нужно в обычный ДЛФ=ДВ Добавлено Пока сделал по старинке <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> СтрЗаменить( Лев(Т1Итем.DEADLINE, 10),"-","") |
Автор: Rust 02.10.19, 07:43 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Сериализатор = Новый СериализаторXDTO(ФабрикаXDTO); Результат = Сериализатор.XMLЗначение(Тип("Дата"), СокрЛП("2019-02-01T03:00:00+03:00")); В переменной Результат у нас получается 01.02.2019 5:00:00 ФабрикаXDTO в типовых уже есть. Пример обработки во вложении ![]() Добавлено А это уже можно обработать при помощи Формата |
Автор: ^D^ima 02.10.19, 09:23 |
Rust Спасибо, проверю. Возник такой вопрос - как в ТЗ отображать нули? Но умолчанию они не видны, а нужны. Не заполнено и ноль разные вещи, неясно как там где 0, ставить 0, где пусто ничего. |
Автор: Rust 02.10.19, 09:55 |
В свойствах поля поставь Формат Представление нуля 0 Смотри скриншот ![]() |
Автор: ^D^ima 02.10.19, 10:06 |
Почему тогда в ТЗ попадает 0 если переменная Неопределено??? Т.е. я получаю JSON, и если какая-то переменная Неопределено, то он туда ставит 0??? Или для ТЗ 0 и неопределено одно и то-же? Добавлено Можно конечно строку сделать, но потом будет запутка что нужно к числу преобразовывать, забудешь и понеслось |
Автор: Rust 02.10.19, 10:20 |
Какого типа реквизит на форме? Если числового, то он не может быть Неопределено. Добавлено это лишние костыли |
Автор: ^D^ima 02.10.19, 10:31 |
Числового У меня в запросе такие строки: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> | МАКСИМУМ(ОтгрузкаПоМесяцам.Январь) КАК Январь, | МАКСИМУМ(ОтгрузкаПоМесяцам.Февраль) КАК Февраль, | МАКСИМУМ(ОтгрузкаПоМесяцам.Март) КАК Март, | МАКСИМУМ(ОтгрузкаПоМесяцам.Апрель) КАК Апрель, | МАКСИМУМ(ОтгрузкаПоМесяцам.Май) КАК Май, | МАКСИМУМ(ОтгрузкаПоМесяцам.Июнь) КАК Июнь, | МАКСИМУМ(ОтгрузкаПоМесяцам.Июль) КАК Июль, | МАКСИМУМ(ОтгрузкаПоМесяцам.Август) КАК Август, | МАКСИМУМ(ОтгрузкаПоМесяцам.Сентябрь) КАК Сентябрь, | МАКСИМУМ(ОтгрузкаПоМесяцам.Октябрь) КАК Октябрь, | МАКСИМУМ(ОтгрузкаПоМесяцам.Ноябрь) КАК Ноябрь, | МАКСИМУМ(ОтгрузкаПоМесяцам.Декабрь) КАК Декабрь И в Число они все как нули встают(и пустые значения и нули). Получается если числовая колонка не может быть пустой, то задача не решается без ухода в другой формат |
Автор: Rust 02.10.19, 10:57 |
Числовой тип не может быть Неопределено, будет 0. Цитата ^D^ima @ Получается если числовая колонка не может быть пустой, то задача не решается без ухода в другой формат опиши задачу и желаемый результат, потом можно подумать как получить нужный результат |
Автор: ^D^ima 02.10.19, 14:06 |
Ничего Сотрудники ставят процент отгрузки задачи, она может быть и 0, это отражается в ТЗ |
Автор: ^D^ima 03.10.19, 12:38 |
Как можно в запросе обыграть такую ситуацию: В параметрах запроса я задаю данные для отбора в запросе(например дата), которые участвует в секции где <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> | Календарь.Сотрудник КАК КалендарьСотрудник, | Календарь.ДатаНачала КАК КалендарьДатаНачала, | Календарь.ДатаКонца КАК КалендарьДатаКонца, | Календарь.Сделка КАК КалендарьСделка, | Календарь.Длительность КАК КалендарьДлительность |ПОМЕСТИТЬ ВременнаяКалендарь |ИЗ | &Календарь КАК Календарь |ГДЕ | Календарь.ДатаНачала >= &КалендарьДатаНачала | И Календарь.ДатаКонца <= &КалендарьДатаКонца |; | Как мне сделать так, чтобы если параметр запроса не задан, то этот параметр игнорируется в запросе. Если я например не выбрал сотрудника и не передал его как парметр, то запрос формировал бы не по конкретному сотруднику данные, а по всем. Я понимаю что некоторые данные можно фильтровать прямо в итоговой ТЗ, куда запрос передает данные, но некоторые(например дата по которой отбираются данные), так не сделать. |
Автор: Rust 03.10.19, 12:51 |
Цитата ^D^ima @ Как мне сделать так, чтобы если параметр запроса не задан, то этот параметр игнорируется в запросе. Как то так <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Запрос = Новый Запрос; ТекстЗапроса = "ВЫБРАТЬ | Номенклатура.Код КАК Код, | Номенклатура.Наименование КАК Наименование, | Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения |ИЗ | Справочник.Номенклатура КАК Номенклатура |{УсловиеВЗапросе"; НуженОтбор = ЗначениеЗаполнено(ЭлементНоменклатура); Если НуженОтбор Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{УсловиеВЗапросе}", "Где Номенклатура.Ссылка = &СсылкаНаЭлемент"); Запрос.УстановитьПараметр("СсылкаНаЭлемент", ЭлементНоменклатура); Иначе ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "{УсловиеВЗапросе}", ""); КонецЕсли; Запрос.Текст = ТекстЗапроса; |
Автор: ^D^ima 03.10.19, 13:02 |
Rust Хакерство какое-то ![]() Почему это не прокатывает? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> |ГДЕ | ВЫБОР | КОГДА Календарь.ДатаНачала = ДАТАВРЕМЯ(0001,01,01,0,0,0) | ИЛИ Календарь.ДатаКонца = ДАТАВРЕМЯ(0001,01,01,0,0,0) | ТОГДА ИСТИНА | ИНАЧЕ Календарь.ДатаНачала >= &КалендарьДатаНачала | И Календарь.ДатаКонца <= &КалендарьДатаКонца | КОНЕЦ Календарь.ДатаНачала это реквизит на форме дата время |
Автор: Rust 03.10.19, 13:14 |
Ничего не понял. Приведи весь запрос Добавлено наверное так? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> |ГДЕ | ВЫБОР | КОГДА Календарь.ДатаНачала = ДАТАВРЕМЯ(0001,01,01,0,0,0) ИЛИ Календарь.ДатаКонца = ДАТАВРЕМЯ(0001,01,01,0,0,0) | ТОГДА ИСТИНА | ИНАЧЕ | ВЫБОР | КОГДА Календарь.ДатаНачала >= &КалендарьДатаНачала И Календарь.ДатаКонца <= &КалендарьДатаКонца | ТОГДА ЛОЖЬ | КОНЕЦ | КОНЕЦ |
Автор: kosten 03.10.19, 13:22 |
В запросах не видно реквизиты формы. |
Автор: ^D^ima 03.10.19, 13:24 |
я слепой лошара так конечно ![]() <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> |ГДЕ | ВЫБОР | КОГДА &КалендарьДатаНачала = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) | ИЛИ &КалендарьДатаКонца = ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) | ТОГДА ИСТИНА | ИНАЧЕ Календарь.ДатаНачала >= &КалендарьДатаНачала | И Календарь.ДатаКонца <= &КалендарьДатаКонца | КОНЕЦ |
Автор: kosten 03.10.19, 13:53 |
^D^ima, ты уже нашел консоль запросов? |
Автор: ^D^ima 03.10.19, 13:57 |
Как отловить событие ТЗ формы при программном создании элемента ЭлементТаблицы = ТаблицаКалендарь.Добавить(); или ЗначениеВРеквизитФормы(ЗначениеИзФайла("c:\ТаблицаКалендарь.txt"),"ТаблицаКалендарь"); Я хочу при добавлении элемента в таблицу помещать данные в выпадающий список. Добавлено А что с нее толку-то? немного быстрее поможет писать код |
Автор: Rust 04.10.19, 07:35 |
Если нет возможности вызывать обновление списка во всех местах кода где добавляется новый элемент таблицы, то я бы сделал так: добавил в таблицу какой-нибудь невидимый на форме реквизит Булево, для новой строки в таблице значений выставлял его Истина. Как только строка добавляется в выпадающий список - выставить в таблице Ложь. Потом используя ПодключитьОбработчикОжидания проверять таблицу значений на наличие строк с реквизитом Истина. Если есть такие - добавляешь в список и т.д. Описанный метод может вызвать подвисание если элементов в таблице много. Более изящного метода пока не приходит в голову |
Автор: ^D^ima 04.10.19, 13:00 |
Rust Я уже понял что проще добавлять в местах заполнения таблицы, т.к. обработчики реагируют на ручные операции. |