Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Роли и Права          
zhuk Подменю пользователя
сообщение 07.04.16, 15:47
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 6
Спасибо сказали: 0 раз
Рейтинг: 0

Добрый день. Есть Роль "Менеджер по Продажам" - есть док. Заказ покупателя, на его основании можно создать Док. "Приходный Кассовый Ордер" и "Реализация Товаров и Услуг" в чем проблема, док "Приходный Кассовый Ордер" - создается отлично, а "Реализация Товаров и Услуг" не создается, выбивает ошибку "Неверное имя колонки". Права на Документы стоят одинаковые. В чем может быть проблема? "Упп для Украины" Управляемое приложение. При полных правах все работает отлично. Пытался пройтись отладчиком но не срабатывает Остановка. Текст ошибки - "{Документ.РеализацияТоваровУслуг.МодульОбъекта(1545)}: Ошибка при вызове метода контекста (Свернуть)
ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, КоличествоОстатокОрганизации","КоличествоОстатокПоЗаказу");
по причине:
Неверное имя колонки".
Код

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

    Запрос.Текст = "
    |ВЫБРАТЬ
    |    Остатки.Номенклатура                 КАК Номенклатура,
    |    Остатки.ХарактеристикаНоменклатуры   КАК ХарактеристикаНоменклатуры,
    |    Остатки.ЕдиницаИзмерения             КАК ЕдиницаИзмерения,
    |    Остатки.Цена                         КАК Цена,
    |    Остатки.ПроцентСкидкиНаценки         КАК ПроцентСкидкиНаценки,
    |    Остатки.ПроцентАвтоматическихСкидок  КАК ПроцентАвтоматическихСкидок,
    |    Остатки.УсловиеАвтоматическойСкидки  КАК УсловиеАвтоматическойСкидки,
    |    Остатки.ЗначениеУсловияАвтоматическойСкидки  КАК ЗначениеУсловияАвтоматическойСкидки,
    |    Остатки.СтавкаНДС                    КАК СтавкаНДС,
    |    Остатки.КоличествоОстаток            КАК КоличествоОстаток,
    |    Остатки.СуммаВзаиморасчетовОстаток   КАК СуммаВзаиморасчетовОстаток
    |ПОМЕСТИТЬ ВременнаяТаблицаОстаткиПоЗаказу
    |ИЗ
    |    РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОстатков, ДоговорКонтрагента = &Договор
    |                                                И ЗаказПокупателя = &Сделка
    |" + ?(ТабличнаяЧасть = Товары, "                И СтатусПартии <> &СтатусТары",  "                И СтатусПартии = &СтатусТары") + ") КАК Остатки
    |ГДЕ КоличествоОстаток>0";
    Запрос.Выполнить();
    
    ТекПользователь = глЗначениеПеременной("глТекущийПользователь");
    
    //Условие используется в виртуальной таблице остатков
    УсловиеСклад = "";
    Если мУказаниеСкладовВТЧ Тогда
        Если ЗначениеЗаполнено(ДокументОснование.СкладГруппа)
            И ТипЗнч(ДокументОснование.СкладГруппа) = Тип("СправочникСсылка.ГруппыДоступностиСкладов") Тогда
            ГруппаДоступностиСкладов = ДокументОснование.СкладГруппа;
        Иначе
            ГруппаДоступностиСкладов = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекПользователь, "ГруппаДоступностиСкладов");
        КонецЕсли;
        
        Если ЗначениеЗаполнено(ГруппаДоступностиСкладов) Тогда
            Запрос.УстановитьПараметр("ГруппаДоступностиСкладов", ГруппаДоступностиСкладов);
            
            УсловиеСклад =
                " И Склад В (
                |    ВЫБРАТЬ
                |        ГруппыДоступности.Склад
                |    ИЗ
                |        РегистрСведений.СоставГруппДоступностиСкладов КАК ГруппыДоступности
                |    ГДЕ ГруппыДоступности.ГруппаДоступности = &ГруппаДоступностиСкладов)";    
        КонецЕсли;        
    Иначе
        УсловиеСклад = " И Склад = &Склад";
    КонецЕсли;
    
    УсловиеОстатки = "Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ВременнаяТаблицаОстаткиПоЗаказу)" + УсловиеСклад;
    
    ПревышатьОстаткиОрганизации = УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровОрганизации(Организация);
    
    Если НЕ ПревышатьОстаткиОрганизации Тогда
        УсловиеОстаткиОрганизаций = "Номенклатура В (ВЫБРАТЬ Номенклатура ИЗ ВременнаяТаблицаОстаткиПоЗаказу)";
        ПараметрыУП = ОбщегоНазначения.ПолучитьПараметрыУчетнойПолитикиУпр(?(ЗначениеЗаполнено(Дата), Дата, ТекущаяДата()));
        Если ПараметрыУП <> Неопределено И ПараметрыУП.ВестиУчетТоваровОрганизацийВРазрезеСкладов Тогда
            УсловиеОстаткиОрганизаций = УсловиеОстаткиОрганизаций + УсловиеСклад;
        КонецЕсли;
    КонецЕсли;
    
    Если ТабличнаяЧасть = Товары Тогда //не ломаем стандартное
        Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                       |    Остатки.Номенклатура КАК Номенклатура,
                       |    Остатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                       |    Остатки.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
                       |    Остатки.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
                       |    Остатки.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаХранения,
                       |    Остатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
                       |    Остатки.Номенклатура.ВестиУчетПоСериям КАК ВестиУчетПоСериям,
                       |    Остатки.Цена КАК Цена,
                       |    Остатки.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
                       |    Остатки.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
                       |    Остатки.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
                       |    Остатки.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
                       |    NULL КАК Склад,
                       |    NULL КАК СортировкаПоСкладу,
                       |    Остатки.СтавкаНДС КАК СтавкаНДС,
                       |    Остатки.КоличествоОстаток КАК КоличествоОстатокПоЗаказу,
                       |    Остатки.СуммаВзаиморасчетовОстаток КАК СуммаОстатокПоЗаказу,
                       |    0 КАК ОстатокНаСкладе,
                       |    0 КАК ОстатокРезерваПоСделке,
                       |    0 КАК ОстатокРезерва,
                       |    0 КАК ОстатокКПередаче,
                       |    ВЫБОР
                       |        КОГДА ТЧЗаказа.НомерСтроки ЕСТЬ NULL
                       |            ТОГДА 9999999
                       |        ИНАЧЕ ТЧЗаказа.НомерСтроки
                       |    КОНЕЦ КАК НомерСтрокиЗаказа,
                       |    ТЧЗаказа.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест
                       |ИЗ
                       |    ВременнаяТаблицаОстаткиПоЗаказу КАК Остатки
                       |        ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
                       |            ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
                       |            ЗаказПокупателяТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                       |            ЗаказПокупателяТовары.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,
                       |            МИНИМУМ(ЗаказПокупателяТовары.НомерСтроки) КАК НомерСтроки
                       |        ИЗ
                       |            Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
                       |        ГДЕ
                       |            ЗаказПокупателяТовары.Ссылка = &Сделка
                       |        
                       |        СГРУППИРОВАТЬ ПО
                       |            ЗаказПокупателяТовары.Номенклатура,
                       |            ЗаказПокупателяТовары.ХарактеристикаНоменклатуры,
                       |            ЗаказПокупателяТовары.ЕдиницаИзмеренияМест) КАК ТЧЗаказа
                       |        ПО Остатки.Номенклатура = ТЧЗаказа.Номенклатура
                       |            И Остатки.ХарактеристикаНоменклатуры = ТЧЗаказа.ХарактеристикаНоменклатуры
                       |
                       |ОБЪЕДИНИТЬ ВСЕ
                       |
                       |ВЫБРАТЬ
                       |    ТЧЗаказа.Номенклатура,
                       |    ТЧЗаказа.ХарактеристикаНоменклатуры,
                       |    ТЧЗаказа.Номенклатура.ЕдиницаХраненияОстатков,
                       |    ТЧЗаказа.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент,
                       |    NULL,
                       |    NULL,
                       |    ТЧЗаказа.Номенклатура.ВестиУчетПоСериям,
                       |    0,
                       |    0,
                       |    0,
                       |    NULL,
                       |    NULL,
                       |    ТЧЗаказа.СкладГруппа,
                       |    0,
                       |    ТЧЗаказа.Номенклатура.СтавкаНДС,
                       |    0,
                       |    0,
                       |    ТЧЗаказа.Количество,
                       |    0,
                       |    0,
                       |    0,
                       |    ВЫБОР
                       |        КОГДА ТЧЗаказа.НомерСтроки ЕСТЬ NULL
                       |            ТОГДА 9999999
                       |        ИНАЧЕ ТЧЗаказа.НомерСтроки
                       |    КОНЕЦ,
                       |    ТЧЗаказа.ЕдиницаИзмеренияМест
                       |ИЗ
                       |    (ВЫБРАТЬ
                       |        ЗаказПокупателяТовары.Номенклатура КАК Номенклатура,
                       |        ЗаказПокупателяТовары.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
                       |        ЗаказПокупателяТовары.ЕдиницаИзмеренияМест КАК ЕдиницаИзмеренияМест,
                       |        МИНИМУМ(ЗаказПокупателяТовары.НомерСтроки) КАК НомерСтроки,
                       |        ЗаказПокупателяТовары.Ссылка.СкладГруппа КАК СкладГруппа,
                       |        ЗаказПокупателяТовары.Количество КАК Количество
                       |    ИЗ
                       |        Документ.ЗаказПокупателя.Товары КАК ЗаказПокупателяТовары
                       |    ГДЕ
                       |        ЗаказПокупателяТовары.Ссылка = &Сделка
                       |    
                       |    СГРУППИРОВАТЬ ПО
                       |        ЗаказПокупателяТовары.Номенклатура,
                       |        ЗаказПокупателяТовары.ХарактеристикаНоменклатуры,
                       |        ЗаказПокупателяТовары.ЕдиницаИзмеренияМест,
                       |        ЗаказПокупателяТовары.Ссылка.СкладГруппа,
                       |        ЗаказПокупателяТовары.Количество) КАК ТЧЗаказа";
    Иначе
        Запрос.Текст = "
        |ВЫБРАТЬ РАЗРЕШЕННЫЕ
        |    Остатки.Номенклатура                 КАК Номенклатура,
        |    Остатки.ХарактеристикаНоменклатуры   КАК ХарактеристикаНоменклатуры,
        |    Остатки.ЕдиницаИзмерения             КАК ЕдиницаИзмерения,
        |    Остатки.ЕдиницаИзмерения.Коэффициент КАК Коэффициент,
        |    Остатки.Номенклатура.ЕдиницаХраненияОстатков             КАК ЕдиницаХранения,
        |    Остатки.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК КоэффициентЕдиницыХранения,
        |    Остатки.Номенклатура.ВестиУчетПоСериям КАК ВестиУчетПоСериям,
        |    Остатки.Цена                         КАК Цена,
        |    Остатки.ПроцентСкидкиНаценки         КАК ПроцентСкидкиНаценки,
        |    Остатки.ПроцентАвтоматическихСкидок  КАК ПроцентАвтоматическихСкидок,
        |    Остатки.УсловиеАвтоматическойСкидки  КАК УсловиеАвтоматическойСкидки,
        |    Остатки.ЗначениеУсловияАвтоматическойСкидки  КАК ЗначениеУсловияАвтоматическойСкидки,
        |    NULL                                 КАК Склад,
        |    NULL                                 КАК СортировкаПоСкладу,
        |    Остатки.СтавкаНДС                    КАК СтавкаНДС,
        |    Остатки.КоличествоОстаток            КАК КоличествоОстатокПоЗаказу,
        |    Остатки.СуммаВзаиморасчетовОстаток   КАК СуммаОстатокПоЗаказу,
        |    0                                    КАК ОстатокНаСкладе,
        |    0                                    КАК ОстатокРезерваПоСделке,
        |    0                                    КАК ОстатокРезерва,
        |    0                                    КАК ОстатокКПередаче,
        |    ВЫБОР КОГДА ТЧЗаказа.НомерСтроки ЕСТЬ NULL
        |        ТОГДА 9999999
        |        ИНАЧЕ ТЧЗаказа.НомерСтроки
        |    КОНЕЦ                                КАК НомерСтрокиЗаказа"
        
        + ?(ТабличнаяЧасть = Товары,
        "    , ТЧЗаказа.ЕдиницаИзмеренияМест      КАК ЕдиницаИзмеренияМест", "")
        
        + ?(ТабличнаяЧасть = Товары И НЕ ПревышатьОстаткиОрганизации, "
        |    , ВЫБОР КОГДА ОстаткиОрганизации.КоличествоОстаток ЕСТЬ NULL
        |        ТОГДА 0
        |        ИНАЧЕ ОстаткиОрганизации.КоличествоОстаток
        |    КОНЕЦ КАК КоличествоОстатокОрганизации", "") + "
        |ИЗ
        |    ВременнаяТаблицаОстаткиПоЗаказу КАК Остатки
        
        |" + ?(ТабличнаяЧасть = Товары И НЕ ПревышатьОстаткиОрганизации,
        "ЛЕВОЕ СОЕДИНЕНИЕ
        |    РегистрНакопления.ТоварыОрганизаций.Остатки(&ДатаОстатков,
        |                                 Организация = &Организация %Условие_Качество%
        |                                И " + УсловиеОстаткиОрганизаций + "
        |   ) КАК ОстаткиОрганизации
        |ПО
        |    Остатки.Номенклатура = ОстаткиОрганизации.Номенклатура
        |    И Остатки.ХарактеристикаНоменклатуры = ОстаткиОрганизации.ХарактеристикаНоменклатуры", "") + "
        
        |
        |" + ТекстЗапросаПоТЧЗаказа + "
        |ОБЪЕДИНИТЬ ВСЕ
        |
        |    ВЫБРАТЬ
        |    ОстаткиНаСкладе.Номенклатура                                     КАК Номенклатура,
        |    ОстаткиНаСкладе.ХарактеристикаНоменклатуры                       КАК ХарактеристикаНоменклатуры,
        |    ОстаткиНаСкладе.Номенклатура.ЕдиницаХраненияОстатков             КАК ЕдиницаИзмерения,
        |    ОстаткиНаСкладе.Номенклатура.ЕдиницаХраненияОстатков.Коэффициент КАК Коэффициент,
        |    NULL                                                             КАК ЕдиницаХранения,
        |    NULL                                                             КАК КоэффициентЕдиницыХранения,
        |    ОстаткиНаСкладе.Номенклатура.ВестиУчетПоСериям                      КАК ВестиУчетПоСериям,
        |    0                                                                КАК Цена,
        |    0                                                                КАК ПроцентСкидкиНаценки,
        |    0                                                                КАК ПроцентАвтоматическихСкидок,
        |    NULL                                                             КАК УсловиеАвтоматическойСкидки,
        |    NULL                                                             КАК ЗначениеУсловияАвтоматическойСкидки,
        |    ОстаткиНаСкладе.Склад                                            КАК Склад,
        |    ВЫБОР КОГДА ОстаткиНаСкладе.Склад = &Склад ТОГДА
        |    0
        |    ИНАЧЕ
        |        1
        |    КОНЕЦ                                       КАК СортировкаПоСкладу,
        |    ОстаткиНаСкладе.Номенклатура.СтавкаНДС      КАК СтавкаНДС,
        |    0                                           КАК КоличествоОстатокПоЗаказу,
        |    0                                           КАК СуммаОстатокПоЗаказу,
        |    ОстаткиНаСкладе.КоличествоОстаток           КАК ОстатокНаСкладе,
        |   РезервыОстаткиПоСделке.КоличествоОстаток    КАК ОстатокРезерваПоСделке,
        |   РезервыОстатки.КоличествоОстаток            КАК ОстатокРезерва,
        |   КПередаче.КоличествоОстаток                 КАК ОстатокКПередаче,
        |    ВЫБОР КОГДА ТЧЗаказа.НомерСтроки ЕСТЬ NULL
        |        ТОГДА 9999999
        |        ИНАЧЕ ТЧЗаказа.НомерСтроки
        |    КОНЕЦ                                       КАК НомерСтрокиЗаказа"
        
        + ?(ТабличнаяЧасть = Товары, "
        |    , ТЧЗаказа.ЕдиницаИзмеренияМест             КАК ЕдиницаИзмеренияМест", "")
        
        + ?(ТабличнаяЧасть = Товары И НЕ ПревышатьОстаткиОрганизации, "
        |    , 0                                         КАК КоличествоОстатокОрганизации", "") + "
        |        
        |   ИЗ
        |   // остатки на складе
        |    (ВЫБРАТЬ
        |        Склад КАК Склад,
        |        Номенклатура КАК Номенклатура,
        |        ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |        СУММА(КоличествоОстаток) КАК КоличествоОстаток
        |    ИЗ
        |        (ВЫБРАТЬ
        |            Склад КАК Склад,
        |            Номенклатура КАК Номенклатура,
        |            ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |            КоличествоОстаток КАК КоличествоОстаток
        |        ИЗ
        |            РегистрНакопления.ТоварыНаСкладах.Остатки(&ДатаОстатков, " + УсловиеОстатки + "
        |                                        %Условие_Качество%
        |            )
        |        
        |        ОБЪЕДИНИТЬ ВСЕ
        |
        |        ВЫБРАТЬ
        |            Склад КАК Склад,
        |            Номенклатура КАК Номенклатура,
        |            ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
        |            КоличествоОстаток КАК КоличествоОстаток
        |        ИЗ
        |            РегистрНакопления.ТоварыВРознице.Остатки(&ДатаОстатков, " + УсловиеОстатки + "
        |                                         %Условие_Качество%
        |            )
        |        ) КАК ОстаткиНаСкладе
        |        СГРУППИРОВАТЬ ПО
        |            Склад,
        |            Номенклатура,
        |            ХарактеристикаНоменклатуры
        |    ) КАК ОстаткиНаСкладе
        |    
        |    ЛЕВОЕ СОЕДИНЕНИЕ //Резервы по сделке
        |        РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаОстатков," + УсловиеОстатки + "
        |                                        И ДокументРезерва = &Сделка
        |        ) КАК РезервыОстаткиПоСделке
        |    ПО
        |    ОстаткиНаСкладе.Номенклатура = РезервыОстаткиПоСделке.Номенклатура"
            + ?(ТабличнаяЧасть = Товары, Символы.ПС + "И ОстаткиНаСкладе.ХарактеристикаНоменклатуры = РезервыОстаткиПоСделке.ХарактеристикаНоменклатуры ", "")    
            + ?(мУказаниеСкладовВТЧ, Символы.ПС + "И ОстаткиНаСкладе.Склад = РезервыОстаткиПоСделке.Склад", "")
            + "
        |
        |    ЛЕВОЕ СОЕДИНЕНИЕ
        |        РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаОстатков," + УсловиеОстатки + "
        |                                       И ДокументРезерва <> &Сделка
        |        ) КАК РезервыОстатки
        |ПО
        |    ОстаткиНаСкладе.Номенклатура = РезервыОстатки.Номенклатура"
            + ?(ТабличнаяЧасть = Товары, Символы.ПС + "И ОстаткиНаСкладе.ХарактеристикаНоменклатуры = РезервыОстатки.ХарактеристикаНоменклатуры ", "")    
            + ?(мУказаниеСкладовВТЧ, Символы.ПС + "И ОстаткиНаСкладе.Склад = РезервыОстатки.Склад", "")
            + "
        |ЛЕВОЕ СОЕДИНЕНИЕ // к передаче
        |    РегистрНакопления.ТоварыКПередачеСоСкладов.Остатки(&ДатаОстатков," + УсловиеОстатки + "
        |                                         %Условие_Качество%
        |                                        И СтатусПартии " + ?(ТабличнаяЧасть = Товары, " <> &СтатусТары", " = &СтатусТары") + "
        |    ) КАК КПередаче
        |ПО
        |    ОстаткиНаСкладе.Номенклатура = КПередаче.Номенклатура"
            + ?(ТабличнаяЧасть = Товары, Символы.ПС + "И ОстаткиНаСкладе.ХарактеристикаНоменклатуры = КПередаче.ХарактеристикаНоменклатуры ", "")
            + ?(мУказаниеСкладовВТЧ, Символы.ПС + "И ОстаткиНаСкладе.Склад = КПередаче.Склад", "")
            + "
        |" + СтрЗаменить(ТекстЗапросаПоТЧЗаказа, "Остатки.", "ОстаткиНаСкладе.");
        
    КонецЕсли;
    
    Если ВидОперации <> Перечисления.ВидыОперацийРеализацияТоваров.Брак Тогда
        Запрос.Текст = стрЗаменить(Запрос.Текст,"%Условие_Качество%"," И Качество = ЗНАЧЕНИЕ(Справочник.Качество.Новый) ");
    Иначе
        Запрос.Текст = стрЗаменить(Запрос.Текст,"%Условие_Качество%"," ");
    КонецЕсли;
    
    РезультатЗапроса = Запрос.Выполнить();
    
    // Таблица остатков по заказу по результатам запроса
    ТаблицаПоЗаказу = РезультатЗапроса.Выгрузить();
    ТаблицаПоЗаказу.Сортировать("НомерСтрокиЗаказа возр");
    
    Сч = 0;
    Пока Сч < ТаблицаПоЗаказу.Количество() Цикл
        СтрокаТаблицы = ТаблицаПоЗаказу.Получить(Сч);
        Если СтрокаТаблицы.КоличествоОстатокПоЗаказу = 0 Тогда
            ТаблицаПоЗаказу.Удалить(СтрокаТаблицы);
        Иначе
            Сч = Сч + 1;
        КонецЕсли;
    КонецЦикла;
    
    // Таблица остатков на складах, резервов и т. п.
    ТаблицаПоОстаткам = РезультатЗапроса.Выгрузить();
    Сч = 0;
    Пока Сч < ТаблицаПоОстаткам.Количество() Цикл
        СтрокаТаблицы = ТаблицаПоОстаткам.Получить(Сч);
        Если СтрокаТаблицы.ОстатокНаСкладе <= 0 Тогда
            ТаблицаПоОстаткам.Удалить(СтрокаТаблицы);
        Иначе
            Сч = Сч + 1;
        КонецЕсли;
    КонецЦикла;
    ТаблицаПоОстаткам.Сортировать("СортировкаПоСкладу, ОстатокРезерваПоСделке УБЫВ");
    
    // Нам надо знать сколько на самом деле осталось конкретной номенклатуры
    // с конкретной характеристикой    по данному заказу, поскольку в разрезе цен и скидок
    // остаки могут расходится
    ТаблицаБезЦен = ТаблицаПоЗаказу.Скопировать();
    Если ТабличнаяЧасть = Товары Тогда
        Если ПревышатьОстаткиОрганизации Тогда
            ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры","КоличествоОстатокПоЗаказу");
        Иначе
            ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, КоличествоОстатокОрганизации","КоличествоОстатокПоЗаказу");
        КонецЕсли;
    Иначе
        ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры","КоличествоОстатокПоЗаказу");
    КонецЕсли;
    
    ИмяТабличнойЧасти = Метаданные.НайтиПоТипу(ТипЗнч(ТабличнаяЧасть)).Имя;
    
    ЕстьРеквизитПроцентСкидкиНаценки = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентСкидкиНаценки", Метаданные(), ИмяТабличнойЧасти);
    ПересчитыватьСкидку = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(ТекПользователь, "ПриИзмененииСуммыПересчитыватьСкидку");
    ЕстьРеквизитПроцентАвтоматическихСкидок = ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ПроцентАвтоматическихСкидок", Метаданные(), ИмяТабличнойЧасти);    

    Для каждого СтрокаТаблицы ИЗ ТаблицаБезЦен Цикл
        
        Если ТабличнаяЧасть = Товары Тогда
            Если ПревышатьОстаткиОрганизации Тогда
                ОстатокКоличестваПоЗаказу = СтрокаТаблицы.КоличествоОстатокПоЗаказу;
            Иначе
                ОстатокКоличестваПоЗаказу = Мин(СтрокаТаблицы.КоличествоОстатокПоЗаказу, СтрокаТаблицы.КоличествоОстатокОрганизации);
            КонецЕсли;
        Иначе
            ОстатокКоличестваПоЗаказу = СтрокаТаблицы.КоличествоОстатокПоЗаказу;
        КонецЕсли;
        
        СтруктураПоиска = Новый Структура;
        СтруктураПоиска.Вставить("Номенклатура", СтрокаТаблицы.Номенклатура);
        Если ТабличнаяЧасть = Товары Тогда
            СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", СтрокаТаблицы.ХарактеристикаНоменклатуры);
        КонецЕсли;
        
        СтрокиЗаказа   = ТаблицаПоЗаказу.НайтиСтроки(СтруктураПоиска);
        СтрокиОстатков = ТаблицаПоОстаткам.НайтиСтроки(СтруктураПоиска);
        
        Для Каждого СтрокаЗаказа Из СтрокиЗаказа Цикл
            
            Если ОстатокКоличестваПоЗаказу <= 0 Тогда
                Прервать;
            КонецЕсли;
            
            Если СтрокаЗаказа.КоличествоОстатокПоЗаказу <= 0 Тогда
                Продолжить;
            Иначе
                ОстатокКоличестваПоСтрокеЗаказа = СтрокаЗаказа.КоличествоОстатокПоЗаказу;
            КонецЕсли;
            
            //  Делаем два прохода в первом списываем все резервы по сделке, во втором, если
            //  количество еще не выбрано, то добираем из свободных остатков.
            Для Сч = 1 По 2 Цикл
                
                Если ОстатокКоличестваПоСтрокеЗаказа <= 0 Тогда
                    Продолжить;
                КонецЕсли;
                
                Для каждого СтрокаОстатков Из СтрокиОстатков Цикл
                    
                    Если ОстатокКоличестваПоСтрокеЗаказа <= 0 Тогда
                        Продолжить;
                    КонецЕсли;
                    
                    Если СтрокаОстатков.ОстатокНаСкладе = 0 Тогда
                        Продолжить;
                    КонецЕсли;
                    
                    
                    РезервПоСделке           = ?(СтрокаОстатков.ОстатокРезерваПоСделке = NULL, 0, СтрокаОстатков.ОстатокРезерваПоСделке);
                    РезервПоДругимСделкам    = ?(СтрокаОстатков.ОстатокРезерва         = NULL, 0, СтрокаОстатков.ОстатокРезерва);
                    КПередаче                = ?(СтрокаОстатков.ОстатокКПередаче       = NULL, 0, СтрокаОстатков.ОстатокКПередаче);
                    СвободныйОстатокНаСкладе = Макс(СтрокаОстатков.ОстатокНаСкладе - РезервПоДругимСделкам - КПередаче, 0);
                    
                    КоличествоКСписанию   = ?(Сч = 1, Мин(Макс(СтрокаОстатков.ОстатокНаСкладе-КПередаче,0), РезервПоСделке), Макс(СвободныйОстатокНаСкладе-РезервПоСделке,0));
                    КоличествоКЗаполнению = Мин(КоличествоКСписанию, Мин(ОстатокКоличестваПоЗаказу,  ОстатокКоличестваПоСтрокеЗаказа));
                    
                    Если КоличествоКЗаполнению = 0 Тогда
                        Продолжить;
                    КонецЕсли;
                    
                    ОстатокКоличестваПоЗаказу       = ОстатокКоличестваПоЗаказу       - КоличествоКЗаполнению;
                    ОстатокКоличестваПоСтрокеЗаказа = ОстатокКоличестваПоСтрокеЗаказа - КоличествоКЗаполнению;
                    СтрокаОстатков.ОстатокНаСкладе  = СтрокаОстатков.ОстатокНаСкладе  - КоличествоКЗаполнению;
                    
                    СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
                    
                    СтрокаТабличнойЧасти.Номенклатура = СтрокаОстатков.Номенклатура;
                    
                    Если ТабличнаяЧасть = Товары Тогда
                        Если не ЕстьТоварыСУчетомПоСерии И СтрокаОстатков.ВестиУчетПоСериям Тогда
                            ЕстьТоварыСУчетомПоСерии = истина;
                        КонецЕсли;

                        СтрокаТабличнойЧасти.Количество       = ?(НЕ ЗначениеЗаполнено(СтрокаЗаказа.Коэффициент), 0,
                        КоличествоКЗаполнению * СтрокаЗаказа.КоэффициентЕдиницыХранения / СтрокаЗаказа.Коэффициент);
                        СтрокаТабличнойЧасти.ЕдиницаИзмерения = СтрокаЗаказа.ЕдиницаИзмерения;
                        СтрокаТабличнойЧасти.Коэффициент      = СтрокаЗаказа.Коэффициент;
                        
                        Если ЗначениеЗаполнено(СтрокаЗаказа.ЕдиницаИзмеренияМест) Тогда
                            СтрокаТабличнойЧасти.ЕдиницаИзмеренияМест = СтрокаЗаказа.ЕдиницаИзмеренияМест;
                            ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
                        Иначе
                            ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
                        КонецЕсли;
                        
                        СтрокаТабличнойЧасти.СтавкаНДС                           = СтрокаЗаказа.СтавкаНДС;
                        СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры          = СтрокаОстатков.ХарактеристикаНоменклатуры;

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

            ДобавленКомплект                         = Истина;
        КонецЦикла;
        
        Если ДобавленКомплект Тогда
            УправлениеЗапасами.ЗаполнитьСоставНабораПоОснованию(ЭтотОбъект, ДокументОснование, Истина);
        КонецЕсли;
    КонецЕсли;    

КонецПроцедуры // ЗаполнитьТабличнуюЧастьПоЗаказуПокупателя()


Есть подозрения что В формируемом тексте запроса отсутствует поле "КоличествоОстатокОрганизации" и для пользователя с ограниченными правами ПревышатьОстаткиОрганизации = Ложь, соответственно и свернуть по колонке "КоличествоОстатокОрганизации" вызывает исключение.
Но как это поправить ? Хелп, люди добрые подскажите кто может 09000000.gif


 ! 

Правила, п.3
 


Сообщение отредактировал Vofka - 12.04.16, 16:50

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 16.06.25, 23:05
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!