Как передать запрос в табличную часть 1с
До тех пор, пока на формы бросались динамические списки или таблицы привязывались к регистрам - все было вроде понятно и разработка шла хорошо, но на определенном этапе понадобилось делать выборки и забрасывать результат именно в таблицы. И тут оказалось, что сделать это выгрузкой результата в таблицу невозможно. В результате в коде начало появляться множество функций &НаСервере, которые, по сути, были идентичные. Читабельность кода от этого не повысилась.
В результате мною коллегам был предложен следующий алгоритм.
В общем модуле, который доступен и серверу и управляемой форме (у меня модуль называется ОбщегоНазначенияКлиентСервер) создаем функцию ВыполнитьЗапросВТаблицу. Она будет выполнять полученный запрос, делать обход результата запроса, формировать структуру из каждой строки результата и каждую заполненную структуру добавлять в массив.
&НаСервере
Функция ВыполнитьЗапросВТаблицу ( ЗапросТекст , СтруктураПараметров ) Экспорт
З = Новый Запрос ( ЗапросТекст );
Для каждого Параметр из СтруктураПараметров Цикл
З . УстановитьПараметр ( Параметр . Ключ , Параметр . Значение );
КонецЦикла;
Результат = З . Выполнить (). Выгрузить ();
СтрокаСтруктуры = "" ;
МассивКолонок = Новый Массив ;
Для каждого Рез из Результат . Колонки Цикл
Если НЕ СтрокаСтруктуры = "" Тогда
СтрокаСтруктуры = СтрокаСтруктуры + ", " ;
КонецЕсли;
СтрокаСтруктуры = СтрокаСтруктуры + Рез . Имя ;
МассивКолонок . Добавить ( Рез . Имя );
КонецЦикла ;
МассивСтрок = Новый Массив ;
Для каждого Рез из Результат Цикл
СтруктураСтроки = Новый Структура ( СтрокаСтруктуры );
Для каждого кол из МассивКолонок Цикл
СтруктураСтроки . Вставить ( кол , Рез [ кол ]);
КонецЦикла;
МассивСтрок . Добавить ( СтруктураСтроки );
КонецЦикла;
Возврат МассивСтрок ;
КонецФункции
В управляемой форме нам понадобится одна функция на &НаСервере на всю форму, которая будет вызывать функцию общего модуля и передавать ей параметры, потому что из процедуры или функции &НаКлиенте управляемой формы сделать это не получается.
&НаСервере
Функция ПолучитьДанныеЗапроса ( ТекстЗапроса , СтруктураПараметров )
Возврат ОбщегоНазначенияКлиентСервер . ВыполнитьЗапросВТаблицу ( ТекстЗапроса , СтруктураПараметров );
КонецФункции
Далее нам нужна еще одна процедура на управляемой форме &НаКлиенте, с помощью которой мы будем полученный результат вставлять в таблицу на форме.
&НаКлиенте
Процедура ПоместитьДанныеЗапросаВТаблицу ( ТекстЗапроса , СтруктураПараметров , _ТаблицаПолучатель )
_РезультатЗапроса = ПолучитьДанныеЗапроса ( ТекстЗапроса , СтруктураПараметров );
_ТаблицаПолучатель . Очистить ();
Для каждого Рез из _РезультатЗапроса Цикл
НоваяСтрока = _ТаблицаПолучатель . Добавить ();
ЗаполнитьЗначенияСвойств ( НоваяСтрока , Рез );
КонецЦикла;
КонецПроцедуры
Все. Подготовительная часть закончена. После этого для заполнения таблицы значений на управляемой форме результатом запроса нужно в коде вписать вызов последней процедуры следующим образом:
ТекстЗапроса = "ВЫБРАТЬ . далее текст запроса . " ;
СтруктураПараметров = Новый Структура ( "Параметр1, Параметр2, Параметр3" , ЗначениеПараметра1 , ЗначениеПараметра2 , ЗначениеПараметра3 );
// Будем считать, что на форме есть ТаблицаЗначений с именем НашаТаблица
ПоместитьДанныеЗапросаВТаблицу ( ТекстЗапроса , СтруктураПараметров , НашаТаблица );
Важно: Запрос должен быть составлен таким образом, чтобы возвращаемый результат был структурно идентичен нашей таблице значений, то есть типы значений колонок в результате запроса должны совпадать с типами значений колонок нашей таблицы значений и имена колонок в результате запроса должны совпадать с именами колонок таблицы значений.
Вот такой вот алгоритм. Код разжевывать не буду, по-моему там и так все понятно. Мега-гуру просьба не пинать сильно.
Неоднократно наблюдал и наблюдаю картину когда для отладки запроса его результат выводят в табличный документ. При этом создают макет. Определяют области и параметры и т.п. Ниже показан код с помощью которого можно выводить любой результат запроса в табличный документ не определяя макет.
Специальные предложения
Можно сделать проще, обойтись без всяких циклов и выборок :)
Claus32; GreyTim; nano1c; digorec88; Ignatov_mu; ikalmykia; user1188623; MURzzz; request4t; 1Cynep4eJIoBek; AlexeyK1; frkbvfnjh; adhocprog; unknown181538; denis1590; EMelihoff; AGLux; perepetulichka; Alien_job; azmon; izh; VNSh; Yashazz; bayce; DAnry; pepe; w-divin; + 27 – Ответить (1)Вариант распространенный, но так себе. Если использовать не только для отладки, а например для показа пользователю - достаточно этому пользователю попросить поменять хоть одну колонку - и придется переделывать все заново. Например на вариант (12).А еще проще, как я обычно отлаживаю запросы.
(2) ssn1978, хороший способ если количество строк не очень большое. Еще один способ использовать стандартный конструктор отчетов или обработок - конструктор сам создаст и форму, и код, и макетСпасибо большое за пример, сегодня пригодилось в работе :-)
Кстати одна строчка пропущена, надо бы добавить
А если еще добавить
то даже расшифровка получается, вообще супер удобно
provost_ua; digorec88; unknown181538; perepetulichka; eeeio; sskripatch; kraynev-navi; VachKirp; + 8 – ОтветитьАаааа не экономьте на пробелах!!
jONES1979; Enyel; sskripatch; UPSoft; Steelvan; nihfalck; TeMochkiN; + 7 – ОтветитьВариант без ошибок и с нормальными заголовками
ТД - реквизит формы.
Просмотры 64064
Загрузки 0
Рейтинг 53
Создание 03.01.14 14:47
Обновление 03.01.14 14:47
№ Публикации 249176
Тип файла Нет файла
Конфигурация Не имеет значения
Операционная система Windows
Вид учета Не имеет значения
Доступ к файлу Бесплатно (free)
Код открыт Не указано
См. также
Аналог PIVOT в запросе 1С (как выполнить транспонирование таблицы в запросе 1С) Промо
В статье показывается простой метод реализации аналога оператора PIVOT в запросе 1С без использования соединений.
12.12.2020 4549 Eugen-S 23
СКД: 5 советов, как сделать лучше
Несколько примеров решения задач с использованием разных подходов
27.10.2021 4451 Neti 19
Что за ? в коде, или Секретный оператор в 1С
Инкремент, модуль и прочая магия, которая скрыта под символом "?"
21.10.2021 8344 SeiOkami 41
Полезные примеры СКД, ч.2
Еще несколько примеров решения задач в СКД.
06.04.2021 10855 Neti 8
27.01.2016 85826 Serginio 116
Обзор полезных методов БСП 3.1.4
Библиотека стандартных подсистем (далее - БСП) является частью любой типовой конфигурации, поэтому умение применять готовые процедуры и функции повышает качество разработки и избавляет от написания лишнего кода. К сожалению, не у всех есть время и упорство овладеть всей документацией, поэтому я собрал воедино наиболее популярный функционал.
25.03.2021 41277 rayastar 51
Звуковое управление в 1С 8.3
В данной статье описано создание библиотеки для звукового управления (выполнение команд голосом) для платформы 1С 8.3. Задача была поставлена так, чтобы модуль функционировал непосредственно на клиенте 1С, осуществляя управление формами, и взаимодействовал с интерфейсом.
16.03.2021 7224 velemir 33
Serverless (Faas) в 1С. Создание и вызов Yandex Cloud Functions
"Я не могу просто взять и скопировать код с гитхаба", "у нас 1С микросервисами окружена", "возможностей мало" - частые фразы 1С разработчиков. которым не хватает возможностей платформы в современном мире. Faas, конечно, история не новая, но нас сдерживало 152ФЗ и задержки по пингам. Для того, чтобы действительно использовать в 1С код, к примеру, на Python, надо было приложить усилия. Теперь всё намного проще - берём и используем.
28.12.2020 8951 comol 31
Использование программных перечислений, ч.1: строковые константы Промо
Часто ли у вас возникает необходимость в коде выполнять сравнение на строку?
10.12.2016 41153 unichkin 74
Базовые вещи БСП, которые облегчат жизнь программисту 1С
В данной публикации я опишу полезные процедуры и функции модуля общего назначения библиотеки стандартных подсистем, обязательные к использованию любым программистом 1С.
30.08.2020 20370 quazare 34
[Общий модуль] Динамическое формирование интерфейса
Версия 2.0.0.1 + добавил GitHub
28.08.2020 13046 rpgshnik 74
Форма выбора (подбор) в управляемых формах
Разбор небольших примеров того, как правильно открывать форму выбора (подбора) в управляемых формах, не прибегая к модальным окнам.
08.05.2020 79315 user5300 19
Вспомогательные инструкции в коде 1С Промо
Помогаем редактору кода 1С помогать нам писать и анализировать код.
15.10.2018 36196 tormozit 106
Программная работа с настройками СКД
Нюансы программной работы с настройками системы компоновки данных в отчетах и динамических списках. Обзор всех видов настроек компоновки. Что в каких случаях правильно применять. В качестве примера рассмотрена работа с отборами и группировками.
27.01.2020 66136 ids79 26
[СКД] Программное создание схемы компоновки данных
Сделаем отчет на СКД полностью программно, без использования макета "схема компоновки данных".
15.01.2020 43897 John_d 22
Последовательности событий при проведении документа 1С. Шпаргалка + про формы + про расширения
30.12.2019 35600 kuzyara 38
Оформление и рефакторинг сложных логических выражений Промо
В сложных логических выражениях нередко самому автору спустя какое-то время тяжело разобраться, не говоря уже о других программистах. Предлагаемая методика позволяет повысить наглядность таких выражений путем оформления в виде И-ИЛИ дерева и одновременно выполнять их рефакторинг.
20.09.2012 82905 tormozit 131
Сходство Джаро - Винклера. Нечеткое сравнение строк
В области информатики и статистики сходство Джаро - Винклера представляет собой меру схожести строк для измерения расстояния между двумя последовательностями символов. В публикации рассмотрены некоторые особенности алгоритма, и представлен вариант его реализации на языке 1С.
25.12.2019 8461 brooho 19
22.11.2019 12433 Sibars 19
Полезные процедуры и функции для программиста
Все мы пишем программный код и часто используем процедуры, облегчающие его написание. Ниже приведена выборка таких полезных процедур и функций.
07.10.2019 39842 HostHost 41
Запись значения в поле ввода/формы со срабатыванием события ПриИзменении Промо
Иногда возникает необходимость после записи значения в какое либо поле ввода/формы вызвать для него обработчик события ПриИзменении, а о вызове самого события приходится только мечтать. В этой статье приводится программный способ вызова этого события.
11.07.2007 54503 tormozit 51
Таблица значений. Нюансы
Обзор некоторых аспектов использования общеизвестного инструмента 1С.
01.10.2019 53304 Yashazz 56
[Шпаргалка] Программное создание элементов формы
Программное создание практически всех популярных элементов формы.
06.09.2019 103192 rpgshnik 75
Агрегатные функции СКД, о которых мало кто знает
Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.
05.09.2019 78122 ids79 56
Как сделать из &НаКлиентеНаСервереБезКонтекста почти &НаКлиентеНаСервере Промо
Как сделать метод формы, доступный на клиенте и на сервере одновременно, и сохранить при этом удобство разработки
10.09.2017 51276 tormozit 74
Регистры бухгалтерии. Общая информация
Общая информация о внутреннем устройстве регистров бухгалтерии.
05.09.2019 46821 YPermitin 25
Три костыля. Сказ про фокусы в коде
Три интересных (или странных) костыля в коде, которые могут помочь в повседневных и не очень задачах.
03.09.2019 30253 YPermitin 81
Иерархия без "В ИЕРАРХИИ"
22.08.2019 15097 ildarovich 24
Выгрузка документа по условию Промо
Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий. А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.
25.04.2019 18044 m-rv 3
Отслеживание выполнения фонового задания
Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.
17.08.2019 45345 ids79 22
Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив
Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.
08.08.2019 153246 ids79 75
Фоновое выполнение кода в 1С - это просто
Как легко запускать выполнение в фоне, не прибегая к долгому описанию фоновых процедур.
02.08.2019 61085 avalakh 27
Как прикрутить ГУИД к регистру сведений Промо
. и немного теории обмена данными. В частности, разберем боль всех, кто пишет небанальные обмены данными: как набору записей регистра сведений назначить гуид и далее использовать его в обмене для идентификации этого набора.
16.04.2019 23365 m-rv 18
Разбираемся с параметрами редактирования СКД
Связь по типу, Параметры выбора, Связи параметров выбора
31.07.2019 42063 json 17
СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты
Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.
26.07.2019 106220 ids79 17
Обработчики событий при записи объектов. Зачем и что за чем?
Программисту, имеющему немного опыта на платформе 1С 8.3, бывает сложно разобраться: ПередЗаписью, ПриЗаписи, ПослеЗаписи, на сервере, на клиенте, в модуле формы, в модуле объекта. Эта шпаргалка была создана в процессе обучения и реального опыта с целью разложить всё по полочкам, чтобы было четкое понимание в каком случае какой обработчик нужно использовать и в какой последовательности они запускаются при записи и проведении документов. Данная статья будет полезна в большей степени начинающим разработчикам. Но и опытным позволит освежить информацию, упорядочить её.
Как заполнить табличную часть формы программно? 6
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 20
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1C: Enterprise Development Tools 50
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 22
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 18
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 20
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 1
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: . по причине: Ошибка компоновки данных по причине: Ошибка получени Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" 10
Автоматизация обмена между базами используя обработку " Универсальный обмен данными в формате XML" В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки " Универсальный обме Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 42
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 22
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 18
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Читайте также: