base de datos – problema con expresiones regulares, validar rango en php

con una expresion regular que diseñe, la idea es que solo me deje pasar un rango numerico, como el siguiente:
introducir la descripción de la imagen aquí

el codigo que estoy usando es el siguiente

if( empty($datos(RANGO_CUPOS)) ){
        $errorMensaje($key+2)() = "El campo ".$arrayEncabezado(RANGO_CUPOS)." no puede estar vacío";
        $has_error = true;
    }elseif( !preg_match("/^(0-9){1,2}-((0-9){1,2})?+$/", trim($datos(RANGO_CUPOS))) ){
        $errorMensaje($key+2)() = "El campo ".$arrayEncabezado(RANGO_CUPOS)." debe tener la estructura numero - numero";
        $has_error = true;
    } 

mi problema es que me esta dejando pasar cosas como may-15, en la ultima parte no se como hacer la expresion regular de 26-. de antemano gracias por su ayuda.

split – C++ Leer fichero con líneas delimitadas y cargar en array o estructura

Soy nuevo en C++ y tengo un fichero con la siguiente estructura de linea separada por “:”
Mes: Proyecto: importe

Ejemplo:

Enero:ProyectoA:1234.32

Enero:ProyectoB:4321.32

Enero:ProyectoC:2468.32

Febrero:ProyectoD:1357.22

Marzo:ProyectoB:5643.32

Marzo:ProyectoC:-2222.32

Marzo:ProyectoD:2323.32

Quiero cargarlo en un array o en una estructura, me da igual.
De la manera que lo tengo hecho, lo carga de manera extraña. Se que hay funciones como split o strtok que lo hacen, pero no se usarlas correctamente.

El código que he hecho es el siguiente:

#include
#include
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include
#include
#include <assert.h>

using namespace std;

int main () {
fstream ficheroEntrada;
string f_entrada;
string Linea;
int cont = 0; // para contar las lineas de nuestro fichero y asignar memoria

cout << "Dime el nombre del fichero: ";
getline(cin,f_entrada);

// Recorremos el fichero para saber cuantas lineas tiene y // poder
dimensionar la estructura donde meteremos el contenido del fichero
ficheroEntrada.open ( f_entrada.c_str() , ios::in);

if (ficheroEntrada.is_open()) {
    while (! ficheroEntrada.eof() ) {
        getline (ficheroEntrada,Linea);
       cont++;
    }
    ficheroEntrada.close();
}
else cout << "Fichero inexistente o faltan permisos para abrirlo" << endl;  

// Abrimos de nuevo el fichero y lo cargamos en una estructura
ficheroEntrada.open ( f_entrada.c_str() , ios::in); string
matriz_empresa(cont + 1)(3); //le asigno el numero maximo de lineas
que tiene el fichero int cont_linea = 0; int i = 0;

if (ficheroEntrada.is_open()) {
   
    while (! ficheroEntrada.eof() ) {
                     
      getline (ficheroEntrada,Linea,':');
      cout << "Linea: " << Linea << endl;
   
     switch(i){
        case 0:
          matriz_empresa(cont_linea)(i) = Linea;
          cout << "CASE-0: " << cont_linea << "--" << i << endl;
          i++;
          
          //break;
        case 1:
          matriz_empresa(cont_linea)(i) = Linea;
          cout << "CASE-1: " << cont_linea << "--" << i << endl;
          i++;
          
          //break;
        case 2:
          matriz_empresa(cont_linea)(i) = Linea;
          cout << "CASE-2: " << cont_linea << "--" << i << endl;
          i=0;
          cont_linea++;
     }

    }
    ficheroEntrada.close();  
}

return 0;

}

El resultado que me muestra es el siguiente:

Dime el nombre del fichero: Empresa.txt

Linea: Enero

CASE-0: 0–0

CASE-1: 0–1

CASE-2: 0–2

Linea: ProyectoA

CASE-0: 1–0

CASE-1: 1–1

CASE-2: 1–2

Linea: 1234.32

Enero

CASE-0: 2–0

CASE-1: 2–1

CASE-2: 2–2

Linea: ProyectoB

CASE-0: 3–0

CASE-1: 3–1

CASE-2: 3–2

Linea: 4321.32

Enero

CASE-0: 4–0

CASE-1: 4–1

CASE-2: 4–2

Linea: ProyectoC

CASE-0: 5–0

CASE-1: 5–1

CASE-2: 5–2

Linea: 2468.32

Febrero

CASE-0: 6–0

CASE-1: 6–1

CASE-2: 6–2

Linea: ProyectoD

CASE-0: 7–0

CASE-1: 7–1

CASE-2: 7–2

Linea: 1357.22

Marzo

CASE-0: 8–0

exited, segmentation fault

Problema con funciones en Tkinter – Python

antes que todo pido disculpas si no formulo correctamente mi consulta, ya que es la primera vez que hago una por este medio. Dicho esto y yendo al punto, me encuentro realizando un programa con Python, Pytube y Tkinter, el cual consiste en que, según la url que le damos, podemos descargar tanto video como audio, y así también videos individuales como playlist. Este es un fragmento del código:

from tkinter import filedialog
from tkinter import *
import tkinter as tk
import os
import pytube

# Ventana main
ventana = Tk()
ventana.title('akaDownloader')
ventana.minsize(540, 420)
ventana.resizable(0, 0)
ventana.iconbitmap('C:/Users/danie/Desktop/Proyectos Programación/YoutubeDownloader/logo.ico')
ventana.configure(bg='#2E2D2C')

# Ruta default
carpeta_default = "C:/Users/danie/Desktop/Proyectos Programación/YoutubeDownloader/Videos"

# Funciones
def descargar_video_video():
    try:
        video_url = url.get()
        youtube = pytube.YouTube(video_url)
        video = youtube.streams.first()
        titulo = youtube.title
        descarga = video.download(carpeta_default)

        archivo_nuevo = titulo+'.mp4'
        os.chdir(carpeta_default)
        os.rename(descarga, archivo_nuevo)
        notif_descarga.config(fg="green", text="La descarga fue exitosa")
    except Exception as e:
        print(e)
        notif_descarga.config(fg="red", text="No se completó la descarga")

def descargar_video_audio():
    try:
        video_url = url.get()
        youtube = pytube.YouTube(video_url)
        video = youtube.streams.filter(only_audio=True).first()
        titulo = youtube.title
        descarga = video.download(carpeta_default)

        archivo_nuevo = titulo+'.mp3'
        os.chdir(carpeta_default)
        os.rename(descarga, archivo_nuevo)
        notif_descarga.config(fg="green", text="La descarga fue exitosa")
    except Exception as e:
        print(e)
        notif_descarga.config(fg="red", text="No se completó la descarga")

def descargar_playlist_video():
    playlist_url = url.get()
    playlist = pytube.contrib.playlist.Playlist(playlist_url)
    playlist_list = playlist.video_urls
    for videoUrl in playlist_list:
        try:
            yt = pytube.YouTube(videoUrl)
            titulo = yt.title
            video = yt.streams.first()
            descarga = video.download(carpeta_default)

            archivo_nuevo = titulo+'.mp4'
            os.chdir(carpeta_default)
            os.rename(descarga, archivo_nuevo)
            notif_descarga.config(fg="green", text="La descarga fue exitosa")
        except Exception as e:
            print(e)
            notif_descarga.config(fg="red", text="No se completó la descarga")

def descargar_playlist_audio():
    playlist_url = url.get()
    playlist = pytube.contrib.playlist.Playlist(playlist_url)
    playlist_list = playlist.video_urls
    for videoUrl in playlist_list:
        try:
            yt = pytube.YouTube(videoUrl)
            titulo = yt.title
            video = yt.streams.filter(only_audio=True).first()
            descarga = video.download(carpeta_default)

            archivo_nuevo = titulo+'.mp3'
            os.chdir(carpeta_default)
            os.rename(descarga, archivo_nuevo)
            notif_descarga.config(fg="green", text="La descarga fue exitosa")
        except Exception as e:
            print(e)
            notif_descarga.config(fg="red", text="No se completó la descarga")
def cambiar_carpeta_default():
    global carpeta_default
    carpeta_default = filedialog.askdirectory()
    notif_carpeta.config(fg="green", text=carpeta_default)

# Pantalla main
home_label = Label(ventana, text="akaDownloader")
home_label.config(
    fg="red",
    # bg="black",
    bg="#1F1E1D",
    font=("Arial", 20),
    padx=176,
    pady=7
)
home_label.grid(row=0, column=0, columnspan=12)

Label(ventana, text="Descargar video", fg="red", font=("Calibri", 15, "bold"), bg='#2E2D2C').grid(sticky=NW, padx=200, row=3, column = 0)
Label(ventana, text="Ingrese el link del video a descargar", font=("Calibri", 10, "bold"), bg='#2E2D2C', fg='white').grid(sticky=NW, row=4, padx=10, pady=5)
url = StringVar()
Entry(ventana, width=50, textvariable=url).grid(sticky=NW, padx=10, row=5)
# Button(ventana, width=20,text="Download",font=("Calibri",12),command=descargar_video).grid(sticky=NW, row=6, padx=10, pady=5) this
Button(ventana, width=15,text="Descargar video",font=("Calibri",12),command=descargar_video_video).grid(sticky=NW, row=6, padx=10, pady=5)
Button(ventana, width=15,text="Descargar audio",font=("Calibri",12),command=descargar_video_audio).grid(sticky=NW, row=6, padx=150, pady=5)

Label(ventana, text="Descargar playlist", fg="red", font=("Calibri", 15, "bold"), bg='#2E2D2C').grid(sticky=NW, padx=190, row=7)
Label(ventana, text="Ingrese el link de la playlist a descargar", font=("Calibri", 10, "bold"), bg='#2E2D2C', fg='white').grid(sticky=NW, row=8, padx=10, pady=5)
url = StringVar()
Entry(ventana, width=50, textvariable=url).grid(sticky=NW, padx=10, row=9)
# Button(ventana, width=20,text="Download",font=("Calibri",12),command=descargar_playlist_video).grid(sticky=NW, row=10, padx=10, pady=5)
Button(ventana, width=15,text="Descargar video",font=("Calibri",12),command=descargar_playlist_video).grid(sticky=NW, row=10, padx=10, pady=5)
Button(ventana, width=15,text="Descargar audio",font=("Calibri",12),command=descargar_playlist_audio).grid(sticky=NW, row=10, padx=150, pady=5)

#Notification descarga
notif_descarga = Label(ventana,font=("Calibri",12), bg='#2E2D2C')
notif_descarga.grid(sticky=NW, padx=180, pady=1,row=19)

#Choose path
Label(ventana,text="Cambiar carpeta de destino",font=("Calibri", 10, "bold"), bg='#2E2D2C', fg='white').grid(sticky=NW,row=16, padx=10)
Button(ventana,width=15,text="Elegir carpeta",font=("Calibri",12),command=cambiar_carpeta_default).grid(sticky=NW,row=17, padx=10, pady=5)

#Notification Path
notif_carpeta= Label(ventana,font=("Calibri",8), bg='#2E2D2C')
notif_carpeta.grid(sticky=NW,row=18,pady=15, padx=10)

ventana.mainloop()

Así es como se ve el programa

El problema radica en que en cuanto ingreso una url y doy click en cualquier botón para ejecutar una función, por ejemplo, en Descargar video (descargar_video_video), devuelve el siguiente error regex_search: could not find match for (?:v=|/)((0-9A-Za-z_-){11}).*, pero lo curioso es que si pulso todos los demás botones (o sea, ejecuto las demás funciones de descarga), el video/audio se descarga correctamente y el programa funciona como debe ser. Al borrar, por ejemplo el código que refiere a playlist en la UI, las funciones de descarga de video funcionan correctamente, y viceversa si borro el código de video en la UI, las funciones de descarga de playlist funcionan sin problema.

Ya intenté colocando las funciones en un archivo separado, utilizando funciones lambda y también intenté invocar las funciones con parámetro pero no he tenido suerte. Les agradecería su ayuda y disculpen si la pregunta se hizo larga.

filtro – Hacer consultas en base de datos de Django con 2 parámetros

¿Podrían por favor, decirme como hacer una consulta a la base de datos considerando 2 parámetros?

Por ejemplo la siguiente consulta:

objetos=client.objects.filter(user=usuario, password=contrasena)

Me devuelve los objetos que hacen match con user y no a la vez con user y password.

Es decir, debería retornar si en la base de datos hay un usuario con la contrasena “contrasena” y no solo si existe un usuario.

Vi khuẩn HP có chữa được không? Con đường lây nhiễm vi khuẩn HP

90% người đau dạ dày có nhiễm vi khuẩn HP mà không biết. Nhiễm khuẩn HP là nguyên nhân hàng đầu gây nên nhiều bệnh lý về dạ dày và là nguyên nhân hàng đầu gây ung thư dạ dày. Vậy vi khuẩn Hp có chữa được không? Con đường lây nhiễm của loại vi khuẩn này như thế nào?

Vi khuẩn HP là gì?

Helicobacter pylori (HP), trước đây có tên Campylobacter pylori, là một loại xoắn khuẩn gram âm, sống trong lớp nhày trên bề mặt niêm mạc dạ dày. H. Pylori được Robin Warren và Barry Marshall phát hiện thấy năm 1982. Chúng gây ra viêm loét dạ dày tá tràng và ung thư dạ dày.

Nguồn sinh của vi khuẩn HP

Vi khuẩn này ký sinh trong lớp nhày phủ trên bề mặt niêm mạc, lớp dịch này có nhiệm vụ bảo vệ các tế bào niêm mạc khỏi những tạc động từ axit HCl. Không chỉ vậy, vi khuẩn Hp còn có ở miệng, vòm học, dịch dạ dày, hay cả phân của người bệnh.

Vi khuẩn HP sẽ chết ở nhiệt độ bao nhiêu?

Các loại vi khuẩn đều không thể chịu được nhiệt độ cao và có thể bị tiêu diệt ở 100 độ C. Vi khuẩn Hp không phải là ngoại lệ. Nhiệt độ bên trong cơ thể khoảng 37 độ, mức nhiệt này an toàn đối với sự tồn tại của vi khuẩn này. Khi gặp phải môi trường có nhiệt độ cao, với thời gian tiếp xúc lâu, vi khuẩn Hp hoàn toàn bị loại bỏ.Cần lưu ý, vi khuẩn Hp có thể tồn tại trong một khoảng thời gian nhất định ở môi trường ngoài cơ thể. Không chỉ vậy, H.pylori có thể tồn tại được cả trong môi trường nước, đất, không khí hoặc bám vào bất kỳ vật chủ nào khác. Để đảm bảo an toàn, tránh lây nhiễm giữa người với người, chúng ta nên khử trùng các vật dụng như đũa, bát… ở nhiệt độ cao (100 độ C) trong khoảng thời gian ít nhất là 5 phút.

Vi khuẩn HP có lây được không?

Vi khuẩn Hp có chữa được không, có lây truyền không? Qua những thông tin kể trên, chắc chắn chúng ta đã có được câu trả lời cho băn khoăn trên. Vi khuẩn Hp hoàn toàn có thể lây truyền giữa người với người qua nhiều đường lây nhiễm khác nhau. Đặc biệt, hầu hết các gia đình Việt Nam đều có thói quen ăn chung bát như dùng chung bát nước chấm, hay ăn chung bát canh, đĩa thức ăn… thói quen này gián tiếp làm vi khuẩn Hp nhanh chóng lan truyền từ người này sang người khác. Các con đường lây nhiễm của vi khuẩn Hp
Qua đường miệng – miệng: đây là con đường truyền nhiễm chủ yếu của vi khuẩn Hp. Qua việc tiếp xúc với nước bọt hay dịch tiết đường tiêu hóa của người bệnh, vi khuẩn H.pylori sẽ có cơ hội được “di chuyển” dang một môi trường sống mới – đó là cơ thể một người khác. Chính vì vậy, trong một gia đình có người nhiễm vi khuẩn Hp thì những người còn lại đều có nguy cơ rất cao mắc phải loại vi khuẩn này.

Đường phân – miệng: Khuẩn H. Pylori rời khỏi cơ thể qua chất thải rắn rồi phân tán mạnh mẽ vào môi trường. Thói quen ăn uống không hợp vệ sinh an toàn thực phẩm có thể dễ dàng dẫn đến tình trạng nhiễm khuẩn Hp.

Đường lây truyền khác: Ở trường hợp này, bạn có nguy cơ nhiễm khuẩn Hp từ những dụng cụ, thiết bị y tế. Chẳng hạn như, sau khi nội soi người bị nhiễm khuẩn Hp, đầu dò không được khử trùng đúng cách sẽ còn vi khuẩn bám lại. Lúc này, nếu các nhân viên y tế tiếp tục dùng dụng cụ kia để tiến hành chẩn đoán cho người khỏe mạnh, họ sẽ vô tình phát tán vi khuẩn.

Triệu chứng nhiễm vi khuẩn HP

Vi khuẩn HP hoạt động trong dạ dày sẽ làm cho cơ thể xuất hiện hàng loạt các triệu chứng bất thường. Cụ thể đó là các triệu chứng sau:

Cảm giác trướng bụng đầy hơi: Đây là cảm giác phổ biến đối với những người bệnh nhiễm vi khuẩn HP, họ hay thấy đầy hơi, chướng bụng kể cả trước lẫn sau khi ăn.

Đau bụng: Người bệnh nhiễm khuẩn Hp thường có dấu hiệu đau bụng, nhất là đau ở vùng thượng vị. Ngoài cảm giác đau quặn thắt bệnh nhân còn thấy nóng rát, cơn đau khó chịu này xuất hiện ở bất cứ thời điểm nào nhưng thường xảy ra nhiều nhất lúc bụng đói hoặc sau khi dùng bữa.
Nhiễm vi khuẩn HP có chữa được không?

Vi khuẩn Hp hoàn có thể chữa trị được nếu người bệnh được chẩn đoán sớm và điều trị kịp thời. Thông thường, vi khuẩn H.pylori ở giai đoạn đầu chưa tạo ra nhiều thay đổi đối với sức khỏe, các triệu chứng chưa rõ ràng, khiến người bệnh có tâm lý chủ quan. Các chuyên gia cho rằng, nếu được phát hiện sớm và điều trị hiệu quả ngay từ đầu, khả năng chữa khỏi là từ 50%.
Nhưng khi xuất hiện các triệu chứng lâm sàng như ợ hơi, ợ chua, đau bụng, đầy hơi, khó tiêu… Đó là đấu hiệu cho biết đó là thời điểm quan trọng để thực hiện điều trị trước khí những biến chứng nguy hiểm như viêm loét dạ dày, đau dạ dày, teo niêm mạc dạ dày… có thể xảy ra.

Thông thường, khi điều trị vi khuẩn H.pylori, người bệnh sẽ được chỉ định uống một số loại thuốc kháng sinh đặc trị như Amoxicillin, Clarithromycin, Tetracyclin… và được giám sát tình trạng bệnh lý theo định kỳ. Các loại kháng sinh liều cao này có khả năng úc chế vi khuẩn rất mạnh, tuy nhiên lại tiềm ẩn một số tác dụng phụ nguy hại đối với sức khỏe người bệnh nếu sử dụng trong thời gian dài.

Chuyên gia Vitos đưa ra lời khuyên người bệnh nên sử dụng các loại dược phẩm có thành phần từ thiên nhiên để giảm thiểu tối đa tác dụng không mong muốn, vừa hỗ trợ điều trị vừa bổ sung chất dinh dưỡng đẩm bảo sức khỏe thể chất người bệnh. Thực phẩm bảo vệ sức khỏe Dạ dày Vitos thành phần 100% từ thiên nhiên, chiết xuất từ các loại thảo dược như lá khôi tía, trữa ma căn, vo vối rừng, uất kim, nga truật… Quy tình tuyển chọn nghiêm ngặt đạt chuẩn GACP đảm bảo nguồn nguyên liệu đạt chất lượng cao, an toàn với người sử dụng.

.(tagsToTranslate)webmaster forum(t)internet marketing(t)search engine optimization(t)web designing(t)seo(t)ppc(t)affiliate marketing(t)search engine marketing(t)web hosting(t)domain name(t)social media

phpexcel – ¿Como obtener valores numericos grandes correctamente de excel xlsx con php?

En mi app web importo datos a través de archivos .xlsx. El problema lo encuentro cuando importo un campo de tipo numerico (en el excel) que contiene un numero de 17 digitos.
Si el número es 86909203669377500, php me devuelve el valor 86909203669377504. En otros casos llega a devolverme el numero restandole 4 o incluso 8, según por donde quiera la libreria PHPExcel.
Para cargar los ficheros utilizo el siguiente código:

$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
$sheet = $objPHPExcel->getSheet(0);
$valor = $sheet->getCell($columna . $index);

¿Alguien ha tenido un problema parecido?
Trabajo con la versión php 5.3.5

Error con web view 1.0.7 al compilar app en ios con flutter

Obtengo el siguiente error al compilar mi app en ios: /Users/josuevargas/development/flutter/.pub-cache/hosted/pub.dartlang.org/webview_flutter-1.0.7/ios/Classes/FLTWKNavigationDelegate.h:5:9: fatal error: ‘Flutter/Flutter.h’ file not found
#import <Flutter/Flutter.h>

El plugin que utilizo es el siguiente: flutter_widget_from_html: ^0.5.1+5

nodejs – Consultar una ruta de mi backend con react

Tengo una ruta en mi backned que lo unico que hace es redireccionarme a un formulario de spotify asi:

    const ctrl = {}
    ctrl.authentication = (req, res) => {
        const my_client_id = 'b88799f29a3a473fa100004e82650e7d';
        var scopes = 'user-read-private user-read-email';
        res.redirect('https://accounts.spotify.com/authorize' +
          '?response_type=code' +
          '&client_id=' + my_client_id +
          (scopes ? '&scope=' + encodeURIComponent(scopes) : '') +
          '&redirect_uri=' + encodeURIComponent('http://localhost:4000/home'));
    }

module.exports = ctrl;


const express = require('express');
const router = express.Router();
const home = require('../controllers/home')


module.exports  = (app) => {
    
    router.get('/')
    router.get('/authentication', home.authentication)
    

    app.use(router);
}

Ahoa desde mi front con react quiero consultar esa ruta para que se me muestre ese form asi:

import {React, useEffect} from 'react'
import {Link} from 'react-router-dom';

export default function WellcomeMessage() {
    useEffect(() => {
        getAUthenticationForm();
    })

    const getAUthenticationForm = async() => {
        await fetch ('http://localhost:4000/authentication')
    }
    return (
        <div class="row mt-5">
            <div class="col-12 d-flex justify-content-center">
                <div className="card w-25">
                    <div className="card-body p-5">
                        <h2 className="card-title text-center mb-4">Spotify Music is here</h2>
                        <p className="card-text text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent cursus lorem nec quam lobortis efficitur. Proin porttitor, urna sit amet sagittis tincidunt, ipsum nulla pretium ante, ac pretium mi tortor vitae elit. Nam bibendum efficitur nibh, ac vulputate urna pretium at. Nam iaculis, eros eu aliquet dapibus</p>
                        <button className = "btn btn-primary w-100 mt-3">
                            Wannas see more
                        </button>
                    </div>
                </div>
            </div>
        </div>
    )
}

hasta ahora estoy comenzando con react, entonces estoy muy confundido, no se si ahi si se usa fetch, o no porque en si la funcion del backend solo redirecciona, asi como lo tengo muestra localhost 3000 ha sid bloqueado por cors plicy.

Gracias por la ayuda

Subconsulta en SQL con multiples resultados: Subquery returned more than 1 value

Tengo en esta transaccion SQL un inconveniente cuando la subquery trae multiples resultados. Es decir cuando solo trae uno, funciona la aplicacion correctamente, sin embargo cuando arroja mas de un resultado, rompe y el error es: Subquery returned more than 1 value. This is illegal when the subquery follows =, !=, <, <= , >, >=, or when the subquery is used as an expression.

El problema se encuentra en lo que deberia agregar en el primer WHERE, pero no estoy logrando como hacerlo, ya que WHERE EXISTS no funciona.

@Query("SELECT DISTINCT c.id "
            + "FROM Promociones p "
            + "INNER JOIN ProactivoSucursal ps ON ps.promocion.id = p.id AND p.fechaHasta >= GETDATE() AND psmt.fechaHastaSolicitada >= GETDATE() "
            + "INNER JOIN Sucursales s ON psmt.sucursales.id = s.id "
            + "INNER JOIN Comercios c ON s.comercios.id = c.id "
            + "WHERE (SELECT bc.pk.comercio.id FROM BeneficioComercio bc "
                + "INNER JOIN Beneficio b ON bc.pk.beneficio.id = b.id AND b.fechaHasta >= GETDATE() "
                + "WHERE b.promociones.id = ps.promociones.id) = NULL "
            + "AND :idPromociones = p.id"
            
            )