Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Поиск документов основанных на текущем
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
valera_avp
И снова здрасте!
Опять возникла проблема.
Для поиска документов для которых текущий является основанием использовал поиск по номеру документа, но как выяснилось нумерация документов ведется в пределах года соответственно искать нужно по сочетанию номер дата, сделал следующим образом:
Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    РеализацияТоваровУслуг.Сделка.Номер КАК СделкаНомер1,
            |    ЗаказНаПроизводствоПродукция.Заказ.Номер,
            |    НалоговаяНакладная.Сделка.Номер
            |ИЗ
            |    Документ.НалоговаяНакладная КАК НалоговаяНакладная
            |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            |            ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
            |            ПО (ЗаказНаПроизводствоПродукция.Заказ.Номер = РеализацияТоваровУслуг.Сделка.Номер)
            |        ПО (РеализацияТоваровУслуг.Сделка.Номер = НалоговаяНакладная.Сделка.Номер)
            |ГДЕ
            |    ЗаказНаПроизводствоПродукция.Заказ.Дата = &Дата
            |    И НалоговаяНакладная.Сделка.Дата = &Дата
            |    И РеализацияТоваровУслуг.Сделка.Дата = &Дата";
        Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
        Выборка = Запрос.Выполнить().Выбрать();



неработает, причем если брать без условий то все в порядке (если не считать кучу документов с одинаковыми номерами за разные периоды) Кто нить знает в чем проблема?
logist
А реквизит ДокументОснвоание уже отменили? Этот Ваш запрос найдет всё что угодно, но не то,что надо, выкиньте его, и больше никому не показывайте.
valera_avp
Цитата(logist @ 26.04.13, 16:03) необходимо зарегистрироваться для просмотра ссылки
А реквизит ДокументОснвоание уже отменили? Этот Ваш запрос найдет всё что угодно, но не то,что надо, выкиньте его, и больше никому не показывайте.

в документах РеализацияТоваровУслуг и НалоговаяНакладная документ-основание прописывается в реквизите Сделка, а в документе ЗаказНаПроизводство документ-основание прописывается в табличной части
logist
Цитата(valera_avp @ 26.04.13, 16:14) необходимо зарегистрироваться для просмотра ссылки
в документах РеализацияТоваровУслуг и НалоговаяНакладная документ-основание прописывается в реквизите Сделка, а в документе ЗаказНаПроизводство документ-основание прописывается в табличной части

Ну и? В чем проблема?
valera_avp
проблема в этом
Цитата(valera_avp @ 26.04.13, 15:57) необходимо зарегистрироваться для просмотра ссылки
но как выяснилось нумерация документов ведется в пределах года соответственно искать нужно по сочетанию номер дата


если убираю этот кусок

   |ГДЕ
            |    ЗаказНаПроизводствоПродукция.Заказ.Дата = &Дата
            |    И НалоговаяНакладная.Сделка.Дата = &Дата
            |    И РеализацияТоваровУслуг.Сделка.Дата = &Дата";
        Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);


все работает нормально, но выдает номера документов за весь период и соответственно номера повторяются

может подскажете варианты как отсеять все документы не текущего года создания\проведения
Vofka
Может так?

        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    РеализацияТоваровУслуг.Сделка.Номер КАК СделкаНомер1,
            |    ЗаказНаПроизводствоПродукция.Заказ.Номер,
            |    НалоговаяНакладная.Сделка.Номер
            |ИЗ
            |    Документ.НалоговаяНакладная КАК НалоговаяНакладная
            |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            |            ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
            |            ПО (ЗаказНаПроизводствоПродукция.Заказ.Номер = РеализацияТоваровУслуг.Сделка.Номер)
            |        ПО (РеализацияТоваровУслуг.Сделка.Номер = НалоговаяНакладная.Сделка.Номер)
            |ГДЕ
            |    ЗаказНаПроизводствоПродукция.Заказ.Дата < &Дата
            |    И НалоговаяНакладная.Сделка.Дата < &Дата
            |    И РеализацияТоваровУслуг.Сделка.Дата < &Дата";
        Запрос.УстановитьПараметр("Дата", НачалоГода(ЭтотОбъект.Дата));
        Выборка = Запрос.Выполнить().Выбрать();


ПС. особо не вникал в логику запроса
valera_avp
Не совсем понял конструкцию
 |    И РеализацияТоваровУслуг.Сделка.Дата < &Дата";
        Запрос.УстановитьПараметр("Дата", НачалоГода(ЭтотОбъект.Дата));

но это неважно потому что все равно не работает why.gif
Petre
Все что в "ГДЕ" надо перенести в секцию "ПО", иначе полное соединение превращается во внутреннее.
valera_avp
Цитата(Petre @ 26.04.13, 16:47) необходимо зарегистрироваться для просмотра ссылки
Все что в "ГДЕ" надо перенести в секцию "ПО", иначе полное соединение превращается во внутреннее.

не совсем понял суть можно примерчик
logist
Ребята, я не пойму чего вы привязались к этим номерам? Завтра пойдет сбой номеров и документы не будут совпадать что тогда? Работайте с ДокументОснование.
Petre
Цитата(valera_avp @ 26.04.13, 18:12) необходимо зарегистрироваться для просмотра ссылки
не совсем понял суть можно примерчик

Что-то типо того:
    Запрос = Новый Запрос;
    Запрос.Текст =
            "ВЫБРАТЬ
            |    РеализацияТоваровУслуг.Сделка.Номер КАК СделкаНомер1,
            |    ЗаказНаПроизводствоПродукция.Заказ.Номер,
            |    НалоговаяНакладная.Сделка.Номер
            |ИЗ
            |    Документ.НалоговаяНакладная КАК НалоговаяНакладная
            |        ПОЛНОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            |            ПОЛНОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
            |            ПО (ЗаказНаПроизводствоПродукция.Заказ.Номер = РеализацияТоваровУслуг.Сделка.Номер)
            |                И (ЗаказНаПроизводствоПродукция.Заказ.Дата = &Дата)
            |                И (РеализацияТоваровУслуг.Сделка.Дата = &Дата)
            |        ПО (РеализацияТоваровУслуг.Сделка.Номер = НалоговаяНакладная.Сделка.Номер)
            |            И (РеализацияТоваровУслуг.Сделка.Дата = &Дата)
            |            И (НалоговаяНакладная.Сделка.Дата = &Дата)";
    Запрос.УстановитьПараметр("Дата", ЭтотОбъект.Дата);
    Выборка = Запрос.Выполнить().Выбрать();
valera_avp
Я просто немогу понять что значит
Цитата(logist @ 26.04.13, 17:19) необходимо зарегистрироваться для просмотра ссылки
Работайте с ДокументОснование.

У меня есть документ РеализацияТоваровУслуг у которого в поле Сделка прописано что основанием для этого документа является ЗакакПопупателя, как мне при перепроведении ЗаказПокупателя проверить что на его основании создан документ РеализацияТоваровУслуг и запретить перепроведение документа ЗаказПокупателя!!!
logist
типа такого
// вставить в ОбработкаПроведения заказа
Запрос = Новый Запрос("ВЫБРАТЬ ПЕРВЫЕ 1
                      |    РеализацияТоваровУслуг.Ссылка
                      |ИЗ
                      |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
                      |ГДЕ
                      |    РеализацияТоваровУслуг.Сделка = &ДокументОснование");
Запрос.УстановитьПараметр("ДокументОснование", Ссылка); // Это ссылка на заказ (т.е. текущий док)
Результат = Запрос.Выполнить();
Отказ = Не Результат.Пустой(); // если найдется хоть одна накладная - это вызовет отмену проведения.
valera_avp
Сделал ПОЧТИ так как советовал logist ПОЛУЧИЛОСЬ!!!!
Текст выкладывать небуду, потому что ну ОСЕНЬ СТРАШНЫЙ получился (раскритикуете в пух и прах)
Всем спасибо за участие!!!!
logist
Цитата(valera_avp @ 29.04.13, 11:51) необходимо зарегистрироваться для просмотра ссылки
(раскритикуете в пух и прах)

А почему Вы боитесь критики? Ведь вам укажут на ошибки, которые вы в будущем можете избежать.
Vofka
logist, я на форуме когда-то уже выкладывал это:

logist
Цитата(Vofka @ 29.04.13, 12:47) необходимо зарегистрироваться для просмотра ссылки
я на форуме когда-то уже выкладывал это:

Это понятно, но ведь надо же подсказать человеку, что ничего страшного в этом нет. Тем более человек старается, что-то делает, а не приходит на форум с фразой "напишите мне код".
valera_avp
Ну как-то так
    Если РольДоступна("МенеджерПоПродажам1") Тогда        
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    РеализацияТоваровУслуг.Ссылка,
            |    НалоговаяНакладная.Ссылка КАК Ссылка1,
            |    ЗаказНаПроизводствоПродукция.Ссылка КАК Ссылка2,
            |    ЗаказПокупателя.Ссылка КАК Ссылка3
            |ИЗ
            |    Документ.ЗаказПокупателя КАК ЗаказПокупателя
            |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
            |        ПО (РеализацияТоваровУслуг.Сделка = ЗаказПокупателя.Ссылка)
            |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.НалоговаяНакладная КАК НалоговаяНакладная
            |        ПО (НалоговаяНакладная.Сделка = ЗаказПокупателя.Ссылка)
            |        ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказНаПроизводство.Продукция КАК ЗаказНаПроизводствоПродукция
            |        ПО (ЗаказНаПроизводствоПродукция.Заказ = ЗаказПокупателя.Ссылка)
            |ГДЕ
            |    (ЗаказНаПроизводствоПродукция.Заказ = &Сделка
            |            ИЛИ НалоговаяНакладная.Сделка = &Сделка
            |            ИЛИ РеализацияТоваровУслуг.Сделка = &Сделка)";
        Запрос.УстановитьПараметр("Сделка",ЭтотОбъект.Ссылка);
        Выборка = Запрос.Выполнить().Выбрать();
        
        Если  Выборка.НайтиСледующий(ЭтотОбъект.Ссылка,"Ссылка3")
            Тогда Отказ = Истина;
            Сообщить("Документ является основанием для "
            + Выборка.Ссылка
            + Выборка.Ссылка1
            + Выборка.Ссылка2);
            Сообщить("Перепроведение документа ЗАПРЕЩЕНО!");
        КонецЕсли;
    КонецЕсли;

mamba.gif

logist спасибо за поддержку icon_beer17.gif
valera_avp
И что никто ничего не напишет. Где критика? Или я гений 32541510.gif
Ardi
1.
    Массив = Новый Массив;
    Массив.Добавить(ЭтотОбъект.Ссылка);
    
    ТабСсылок = НайтиПоСсылкам(Массив);
    Для Каждого Ссылка из ТабСсылок Цикл
        Сообщить ("" + СокрЛП(Ссылка[0]) + "  " + СокрЛП(Ссылка[1]));
    КонецЦикла;


2.
    ТекстЗапроса = 
                     "ВЫБРАТЬ
       |    НалоговаяНакладная.Ссылка
       |ИЗ
       |    Документ.НалоговаяНакладная КАК НалоговаяНакладная
       |ГДЕ
       |    НалоговаяНакладная.ДокументОснование = &Сделка
       |
       |ОБЪЕДИНИТЬ ВСЕ
       |
       |ВЫБРАТЬ
       |    РеализацияТоваровУслуг.Ссылка
       |ИЗ
       |    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
       |ГДЕ
       |    РеализацияТоваровУслуг.Сделка = &Сделка"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.