Присвоить переменной результат запроса 1с
Всем доброго времени суток.
Столкнулся с такой проблемой.
Написал огромный запрос, в нем есть такие строки
|Контрагент = Документ.РеализацияПродукции.Контрагент;
|Грузополучатель = Документ.РеализацияПродукции.Грузополучатель;
И в вот засада, если в документе РеализацияПродукции, не выбран грузополучатель, это означает что он = контрагенту. Но как это обозначить в запросе? А мне очень важно что бы в переменную запроса попало не пустое значение, а именно значение справочника.
Для справки Контрагент и Грузополучатель, это один и тот же справочник.
Помогите пожалуйста.
А если использовать ТаблицуЗначений. И простой перебор документов, то я вспотею её сортировать и перебирать.
Если нет возможности использовать индексированную таблицу даю функцию для непотной сортировки и перебора тз из готовящейся публикации.
исхТЗ - исходная (полная ТЗ)
СтрГруппировок - Строка с порядком и идентификаторами колонок группировки. Например: "ЮМ,РМ,Контрагент,Грузополучатель"
СтрИтогов - Строка с идентификаторами колонок для которых подбиваются итоги групп.
Возвращает ТЗ с группами и итогами по ним.
Для работы функции нужно только сгенерировать строки с группировками и итогами. Полученную таблицу можно сразу выводить. Если ДобУровень = 1 тогда к результирующей ТЗ добавится колонка "Уровень_Группировки" с порядковым номером группы (в ншем примере для ЮМ это 1, РМ=2, Контрагент = 3 и т.д.). Помогает при печати выводить по номеру уровня нужную секцию печатной формы.
И выводит просто данные как если бы указал
В чем проблема и где ошибка??
тут вижу три выхода:
1. обрабатывать результат запроса
2. использовать внешнюю функцию (что грозит большими тормозами при выполнении запроса)
3. использовать 1с++ и прямые запросы
(2) andrewks,
Тормоза в запросе не критичны. Это ежемесячный отчёт, и сколько он будет формироваться особого значения не имеет.
Про 1С ++ и прямые запросы по подробнее плиз если можно.
(3) G.P.,
Вот именно, что запрос дико большой и там дальше берутся условия из грузополучателя, по типу
|ЮМ = Документ.РеализацияПродукции.Грузополучатель.ЮМ;
И дальше идёт накопление итогов по видам отгруженной продукции по ЮМ, Типу продукции и тд., так же присутствует периодичность. К тому же идёт куча группировок. А если не группировать по Грузополучателю и контрагенту, тогда вся суть отчёта теряет смысл.
А если использовать ТаблицуЗначений. И простой перебор документов, то я вспотею её сортировать и перебирать. Да и гибкость отчёта потеряется((
Вообщем засада засад.
Помогите кто чем может.
Уверен есть простое и изящное решение.
А если использовать ТаблицуЗначений. И простой перебор документов, то я вспотею её сортировать и перебирать.
Если нет возможности использовать индексированную таблицу даю функцию для непотной сортировки и перебора тз из готовящейся публикации.
исхТЗ - исходная (полная ТЗ)
СтрГруппировок - Строка с порядком и идентификаторами колонок группировки. Например: "ЮМ,РМ,Контрагент,Грузополучатель"
СтрИтогов - Строка с идентификаторами колонок для которых подбиваются итоги групп.
Возвращает ТЗ с группами и итогами по ним.
Для работы функции нужно только сгенерировать строки с группировками и итогами. Полученную таблицу можно сразу выводить. Если ДобУровень = 1 тогда к результирующей ТЗ добавится колонка "Уровень_Группировки" с порядковым номером группы (в ншем примере для ЮМ это 1, РМ=2, Контрагент = 3 и т.д.). Помогает при печати выводить по номеру уровня нужную секцию печатной формы.
(28) dusha0020,
Спасибо большое, алгоритм просто шикарен. Будет полезен для меня во многих местах. Попробую и в данном случае прикрутить. Посмотрим что получится.
А сейчас постараюсь всё же описать полную задачу отчёта.Может всё таки ошибка кроется в самом начале. И придется всё переделывать.
И так:
Наше предприятие работает с так называемыми ЮнитМенеджерами(ЮМ) и РегиональнымиМенеджерами(РМ). Грубо говоря 1 ЮМ стоит во главе нескольких РМ, как пирамида. Отгружая продукцию тому или иному контрагенту, в этом замешаны ЮМ и РМ. И вот встал вопрос кто из ЮМ и РМ халтурит, а кого можно наградить. И вообще не плохо бы видеть динамику их активности. Причём, контрагенты у нас крупные. И имея главный офис в городе N, у него много филиалов по всей стране, но расчеты идут на главный офис, а доставка уже по филиалам(грузополучатель). Т.Е. ЮМ и РМ привязаны к грузополучателю, а не к главному контрагенту.(вот от сюда сыр бор с грузополучателем). Далее, у нас условно 5 групп номенклатуры. И в отчёте должна быть разбивка по этим видам.
Вот примерный шаблон таблицы
Ну и для ясности ещё и код запроса
В общем вот такая беда.
Ну и стоит учитывать функицонал отчёта. Расшифровки по чему только можно. Итоги по строкам. Ну и детализация при двойном щелчке мыши в таблице. Вплоть до открытия документа отгрузки.
Ещё раз напомню проблему. Работает абсолютно всё, до момента когда в реализации не выбран грузополучатель, тогда идёт группировка по пустому значению ЮМ и РМ. Это не есть хорошо.
Если есть какие идеи выскажите плиз. Очень нужна Ваша помошь.
PS. С 1с++ ИндексированнаяТаблица не работал. Но сейчас постараюсь узнать что это за зверь такой.
PS2. Признаюсь я всего год работаю с 1С. и из них только пол года осознано) Так что сильно не пинайте.
Как присвоить значение переменной?
Ребята извините что не по теме но как мне переменой а присвоить значение 5?
Как присвоить значение переменной, исходя из значения другой переменной?
Всем привет. Нужна помощь. Есть переменная, например "month" которая может принимать значения.
Запрос.Текст = "ВЫБРАТЬ
|ГДЕ
| --------------- = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Переменная);
Выборка= Запрос.Выполнить().Выбрать();
Для вывода в печатную форму.
Для вывода в печатную форму.
ДоговорКонтрагента = что здесь написать?;
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("Основание", ДоговорКонтрагента);
Где:
Документ.КакойТоДокумент соответственно реальный документ которому присваивается имя КакаяТоТаблица
КакоеТоПоле реальное поле твоего документа, которое потом вернётся в виде Выборка.КакоетоЗначение
КакоеТоПолеДва то же реальное поле твоего документа, по которому будет отбор по значению Переменная
как то так, если на пальцах.
Возможны ошибки.
на пальцах: ДогКонтрагента = это набор данных.
ДогКонтрагента.Следующий() получишь очередную строку из запроса
Сообщить(ДогКонтрагента.Наименование )
получишь название
Да не получаю название.Ошибка. Мне в .Параметры. заносить не надо. Мне в переменную итог запроса надо вогнать.
этот вопрос решен. Другой появился. Поле(т.е переменная) выводит не все позиции-начало , концовки нет.
Да не получаю название.Ошибка. Мне в .Параметры. заносить не надо. Мне в переменную итог запроса надо вогнать.
этот вопрос решен. Другой появился. Поле(т.е переменная) выводит не все позиции-начало , концовки нет.
Может вы всё же основы 1С программирования почитаете?
Если уж в код решили залезть.
Хелпером как нибудь воспользуетесь или просто поиском в инете
Проблема выгружает значение не до конца(т.е. Договор № 765 от. ). Где остальная часть. В консоле выводит полностью это поле. В чем может быть проблема?
В том что телепатов на белом свете не существует.
Второй раз говорю. Телепатов нет угадывать где и что у тебя не получается впихнуть по ширине.
Научись скрины делать и сюда выкладывать
Как переменной описанной в программе присвоить значение переменной в Conditional Compilation Arguments?
Kak mozhno peremennij opisanoj v programme prisvoit` znachenie peremennoj v Conditional Compilation.
Присвоить логической переменной T значение true, если значение d-цифра, и значение false в противном случае
Имеется символьная переменная d, присвоить логической переменной T значение true, если значение.
Как php переменной присвоить значение переменной javascript?
есть переменная php как ей присвоить значение переменной javascript?
Переменной Y присвоить значение той переменной, которое находится между двумя другими на числовой оси
Даны три вещественных, не равных между собой числа a, b, c. Переменной Y присвоить значение той.
Создание и работа с запросами (для начинающих)
Сегодня хочу вам рассказать о том, как начать работать с запросами и научиться (конечно постепенно) – работе с запросами в 1С. Тем, кто знаком с запросами MS
SQL будет конечно намного проще.
Итак, давайте откроем конфигуратор и создадим новую внешнюю обработку.
После чего мы получим окошко с нашей обработкой. Давайте приступим непосредственно к экспериментам по запросам, для этого создадим в нашей обработке – новую форму – а для этого в списке (белое поле) выберите Формы – и нажмите (+) Добавить, соглашайтесь со всеми предложенными параметрами формы по умолчанию, и нажимайте готово.
Итак мы создали с вами пустую форму, с кнопками и. В окне с форме выбираем вкладкуи переходим непосредственно к написанию кода, который будет выполнятся при нажатии кнопки выполнить. Для этого находим процедуру КнопкаВыполнитьНажатие(Кнопка)
и пишем следующий код:
Давайте прокомментируем, что мы здесь написали. Мы выбрали запросом все документы «СчетНаОплатуПокупателю». Хочу сразу заметить, что в зависимости от того, в какой конфигурации вы экспериментируете – посмотрите состав документов вашей конфигурации и вместо указанного мною «СчетНаОплатуПокупателю» подставьте любой объект Документ из списка документов вашей конфигурации, желательно чтобы в информационной базе – документы этого типа были созданы, чтобы не получить пустой результат запроса. Также хочу отметить важный момент – если таких документов будет слишком много – то выполнение запроса может затянутся на некоторое время – из-за того, что мы не ограничиваем запрос условиями и выбираем все поля – о чем нам говорит звездочка (*).
Ключевым словом «Выбрать» мы приказываем нашему запросу выбрать все поля(*) (реквизиты документа) из документа «СчетНаОплатуПокупателю».
Важно:
Хочу заметить также, что при написании языка запроса – обращаться к объектам конфигурации следует в единственном, а не во множественном числе. В данном
случае объект Документы в конфигурации (ветка Документы) – в запросе написан Документ. Также к составу документов – мы добираемся через точку(.) – и название документа.
Результат запроса мы получаем в виде таблицы значений, о чем свидетельствует примененный нами метод(параметр) – Выгрузить, то есть сначала мы выполнили
запрос (Выполнить), а уже затем выгрузили результат выполнения запроса в таблицу значений и таблица значений находится в переменной Результат.
Далее сохраняем нашу обработку в файл, для этого нажимаем Файл->Сохранить как и пишем имя файла, для своей обработки я задал имя «ВнешняяОбработка1Демо», чтобы долго не искать обработку можете сохранить ее на рабочий стол, дальше нам придется ее открывать)).
Теперь давайте изучим немного основы отладки. Для этого сейчас на поле рядом с текстом Результат = … дважды щелкните левой клавишей мыши, чтобы появилась красный кружок, у вас должно получиться нечто следующее:
Итак, мы сейчас с вами установили точку останова на строке с результатом, теперь давайте запустим конфигурацию на отладку, нажав клавишу ( F 5) либо кнопку
на панели инструментов:
Теперь в запущенном нами режиме 1С:Предприятия откроем нашу сохраненную обработку Файл->Открыть и найдите то место, куда вы сохраняли файл обработки, выберите его и нажмите открыть. Жмем в нашей обработки кнопку «Выполнить». Если вы все сделали правильно – вы автоматически перейдете в режим конфигуратора и в месте установки нашей точки останова увидите следующее:
На нашем кружке появилась стрелочка – мы перешли в пошаговое выполнение нашего кода, и далее мы увидим самое интересное. Если вы все правильно сделали – сейчас вы сможете получить результат выполнения запроса.
Для наглядного представления запроса сделаем следующее: В верхнем меню конфигуратора находим меню Отладка и выбираем команду Табло.
Внизу окна конфигуратора откроется пустое окошечко ->Табло. В этом окне есть строки, пустые. Дважды щелкните на пустую подсвеченную строку и напишите слово Результат. У вас должно получиться следующее:
Итак, в указанном нами окне мы должны получить результат выполнения нашего кода, а именно сейчас – переменной «Результат», так как мы сейчас еще не выполнили данную строку кода – мы имеем пустое значение и тип данных переменной – «Неопределено».
Давайте сделаем шаг – для выполнения указанной строки кода. Для этого нажмите клавишу , либо в меню Отладка->Шагнуть через…( F 10).
И что же мы видим в нашем Табло:
Мы видим с вами – значение переменной и тип переменной. Теперь также мы можем просмотреть содержание нашей таблицы значений, для этого подведите курсор мыши к полю результат, нажмите правую клавишу мыши и выберите пункт «Показать значение в отдельном окне»
Получаем окно с выбранными нами документами, которые находятся в переменной Результат
Резюмирую:
Вы научились создавать простейший запрос, а также поучаствовали в отладке своего кода и даже посмотрели результат нашего запроса в конфигураторе.
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис google. Но так же подобного рода подход будет работать и с картами сервиса yandex. Во время решения задачи было реш 1С 8.x : Как убрать лидирующие нули в номере Документа (вариант2) 0
Скопировать строку с номером, с лидирующими нулями, в числовом поле (с форматом без групп, без группировки), и вернуть(скопировать) обратно в строковом поле с номером. Возвращает без нулей. COM-подключение к базе 7.7 из 8.2 1С 6
Если код выполняется на стороне клиента, то необходимо наличие базы 7.7 на локальной машине. Пример (На форме объекта присутствует реквизит Таблица(ТаблицаЗначений)): НаКлиенте Процедура Загрузки() ПутьКБазе=" D: ВашаБаза 1с77 " ; Пользователь= Посмотреть все результаты поиска похожих
Еще в этой же категории
Значения NULL ( ЕСТЬ NULL и ЕСТЬNULL()) 48
NULL – отсутствующие значения. Не путать с нулевым значением! NULL – это не число, не равно пробелу, пустой ссылке, Неопределено. NULL – типообразующее значение, т.е. есть тип NULL и единственное значение этого типа. NULL значения появляются в 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Как заполнить табличную часть формы программно? 8
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П 17 правил для составления оптимального ЗАПРОСа к данным базы 1С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ 1C и Google Maps 21
была поставлена задача отображения на географической карте медицинских учреждений. После обзора предлагаемых решений был выбран сервис 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С 44
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ Нарастающий итог в запросе 23
Необходимо использовать левое соединение таблицы с самой собой. ВЫБРАТЬ Обороты.Период, Обороты.Номенклатура, Обороты.Количество ПОМЕСТИТЬ ВТдвижения ИЗ РегистрНакопления.Обороты КАК Обороты ; //////////////////////////////////////////////// Полезные сведения о языке запросов 1С 8.х 22
В статье приведены полезные приемы при работе с запросами 1С v.8.2, а также сведения, которые не так хорошо известны о языке запросов. Я не стремлюсь дать полное описание языка запросов, а хочу остановиться лишь на некоторых моментах, которые для ко Оператор ПОДОБНО 19
ПОДОБНО - Оператор проверки строки на подобие шаблону. Аналог LIKE в SQL. Оператор ПОДОБНО позволяет сравнить значение выражения, указанного слева от него, со строкой шаблона, указанной справа. Значение выражения должно иметь тип строка. Если з Посмотреть все в категории Запросы
Читайте также: