Добрый день. Есть Роль "Менеджер по Продажам" - есть док. Заказ покупателя, на его основании можно создать Док. "Приходный Кассовый Ордер" и "Реализация Товаров и Услуг" в чем проблема, док "Приходный Кассовый Ордер" - создается отлично, а "Реализация Товаров и Услуг" не создается, выбивает ошибку "Неверное имя колонки". Права на Документы стоят одинаковые. В чем может быть проблема? "Упп для Украины" Управляемое приложение
(1) Zhuk1234, возможно у вас в сообщении есть кнопка подробнее с текстом ошибки!
И она уже скажет, что у вас не так!
Если у вас проблема с правами, то зайдите в ТЖ и посмотрите есть нарушение прав, когда вы эту операцию будете совершать!
(5) Zhuk1234,
Ошибка явно где-то в коде. Может не хватать прав у роли на какую-нибудь таблицу и как следствие не создается коллекция значений с нужными колонками. Кнопки "Подробнее" нет из-за недостаточности прав роли "Менеджер по Продажам". Указание на строку в коде с ошибкой нужно смотреть в журнале регистрации.
(5) Zhuk1234, так зайдите в конфигуратор под полными правами, а отладку запустите от имени нужного пользователя. Место где происходит ошибка уже известно.
а в отладке посмотреть когда ошибка вылазит нет возможности? у меня такое когда то было в конфигурации Розница - забыли колонку какую то по НДС добавить. Ещё можно позвонить и спросить у разработчиков у всех ли такая ошибка или это только у вас - а потом уже искать выход , как правильно лучше когда ошибку исправят обновлением , так надёжней и без "костылей"
В конфигураторе включить Отладка - Остановка по ошибке - [v] Останавливаться по ошибке,
создать проблемный документ на основании и вывалиться в отладчик на строку с ошибкой?
Скорее всего это будет процедура ОбработкаЗаполнения модуля объекта Реализация товаров и услуг.
(10) v3rter, все верно, в обработку заполнения посылает, но почему тогда с полными правами все ок? не совсем понятно что делать Ошибка "{Документ.РеализацияТоваровУслуг.МодульОбъекта(1545)}: Ошибка при вызове метода контекста (Свернуть)
ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, КоличествоОстатокОрганизации","КоличествоОстатокПоЗаказу");
по причине:
Неверное имя колонки"
это таблица значений или это табличная часть документа?
суда по названию это скорее таблицаЗначение. Может поглядеть по коду где она создается и заполняется, и это наведет на мысль
Открыть в отладчике табло, добавить в него ТаблицаБезЦен и посмотреть по F2 ее содержимое перед ошибкой - какой колонки не хватает.
Скорее всего это КоличествоОстатокОрганизации. Возможно, у менеджера нет прав на эту организацию.
(14) v3rter, извиняюсь, глупый вопрос, но отладку правильно делать так? http://1cprogrammistu.ru/193-otladka-klientskogo-prilozheniya-v-1s-predpriyatii.html делаю, но остановок нет, сразу ошибка выскакивает и с неё можно перейти в конфигуратор. Соответственно не могу просмотреть значение ТаблицаБезЦен или может вы знаете где можно еще почитать об отладке в таком режиме? скиньте пжл ссылку ,почитал справку но тоже смутно понятно или обработку создать нужно ?
(17) Xershi, Тем что я просто права добавил и появилась кнопка перейти в конфигуратор по ошибке, а сама отладка ничего не показывает и не дает ,вообще не ясно работает ли она, а процедура очень велика ...
Процедура ЗаполнитьТабличнуюЧастьПоЗаказуПокупателяУпр(ТабличнаяЧасть, ДокументОснование) Экспорт
Запрос = Новый Запрос;
Если ТабличнаяЧасть = Товары Тогда
ТекстЗапросаПоТЧЗаказа = "
|ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмеренияМест, минимум(НомерСтроки) КАК НомерСтроки
| ИЗ Документ.ЗаказПокупателя.Товары
| ГДЕ Ссылка = &Сделка
| Сгруппировать по Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмеренияМест) КАК ТЧЗаказа
|ПО Остатки.Номенклатура = ТЧЗаказа.Номенклатура И Остатки.ХарактеристикаНоменклатуры = ТЧЗаказа.ХарактеристикаНоменклатуры";
Иначе
ТекстЗапросаПоТЧЗаказа = "
|ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Номенклатура, минимум(НомерСтроки) КАК НомерСтроки
| ИЗ Документ.ЗаказПокупателя.ВозвратнаяТара
| ГДЕ Ссылка = &Сделка
| Сгруппировать по Номенклатура) КАК ТЧЗаказа
|ПО Остатки.Номенклатура = ТЧЗаказа.Номенклатура";
КонецЕсли;
ДатаОстатков = ОбщегоНазначения.ПолучитьДатуОстатков(ЭтотОбъект);
Запрос.УстановитьПараметр("Договор", ДоговорКонтрагента);
Запрос.УстановитьПараметр("Сделка", Сделка);
Запрос.УстановитьПараметр("Склад", Склад);
Запрос.УстановитьПараметр("СтатусТары", Перечисления.СтатусыПартийТоваров.ВозвратнаяТара);
Запрос.УстановитьПараметр("Организация", Организация);
Запрос.УстановитьПараметр("ДатаОстатков", ДатаОстатков);
//Формирование временной таблицы
МенеджерВременныхТаблиц = новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВременныхТаблиц;
ЕстьТоварыСУчетомПоСерии = ложь;
Запрос.Текст = "
|ВЫБРАТЬ
| Остатки.Номенклатура КАК Номенклатура,
| Остатки.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
| Остатки.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Остатки.Цена КАК Цена,
| Остатки.ПроцентСкидкиНаценки КАК ПроцентСкидкиНаценки,
| Остатки.ПроцентАвтоматическихСкидок КАК ПроцентАвтоматическихСкидок,
| Остатки.УсловиеАвтоматическойСкидки КАК УсловиеАвтоматическойСкидки,
| Остатки.ЗначениеУсловияАвтоматическойСкидки КАК ЗначениеУсловияАвтоматическойСкидки,
| Остатки.СтавкаНДС КАК СтавкаНДС,
| Остатки.КоличествоОстаток КАК КоличествоОстаток,
| Остатки.СуммаВзаиморасчетовОстаток КАК СуммаВзаиморасчетовОстаток
|ПОМЕСТИТЬ ВременнаяТаблицаОстаткиПоЗаказу
|ИЗ
| РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаОстатков, ДоговорКонтрагента = &Договор
| И ЗаказПокупателя = &Сделка
|" + ?(ТабличнаяЧасть = Товары, " И СтатусПартии <> &СтатусТары", " И СтатусПартии = &СтатусТары") + ") КАК Остатки
|ГДЕ КоличествоОстаток>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 Тогда
Продолжить;
КонецЕсли;
НоваяСтрока = Товары.Добавить();
НоваяСтрока.Номенклатура = Выборка.Номенклатура;
НоваяСтрока.ХарактеристикаНоменклатуры = Выборка.ХарактеристикаНоменклатуры;
НоваяСтрока.СерияНоменклатуры = Выборка.СерияНоменклатуры;
НоваяСтрока.ЕдиницаИзмерения = Выборка.ЕдиницаИзмерения;
НоваяСтрока.ЕдиницаИзмеренияМест = Выборка.ЕдиницаИзмеренияМест;
НоваяСтрока.Коэффициент = Выборка.Коэффициент;
НоваяСтрока.Количество = ОстатокКоличестваПоЗаказу;
НоваяСтрока.ПроцентСкидкиНаценки = Выборка.ПроцентСкидкиНаценки;
НоваяСтрока.ПроцентАвтоматическихСкидок = Выборка.ПроцентАвтоматическихСкидок;
НоваяСтрока.УсловиеАвтоматическойСкидки = Выборка.УсловиеАвтоматическойСкидки;
НоваяСтрока.ЗначениеУсловияАвтоматическойСкидки = Выборка.ЗначениеУсловияАвтоматическойСкидки;
НоваяСтрока.СтавкаНДС = Выборка.СтавкаНДС;
НоваяСтрока.Сумма = Ценообразование.ПересчитатьЦенуПриИзмененииФлаговНалогов(
МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Выборка.Сумма, Выборка.ВалютаДокумента, ВалютаДокумента,
Выборка.КурсДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета),
Выборка.КратностьДокумента, ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета)),
Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры,
Выборка.СуммаВключаетНДС,
УчитыватьНДС,
СуммаВключаетНДС,
Ценообразование.ПолучитьСтавкуНДС(НоваяСтрока.СтавкаНДС));
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(НоваяСтрока, ЭтотОбъект);
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(НоваяСтрока, ЭтотОбъект);
ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(НоваяСтрока, ЭтотОбъект);
НоваяСтрока.СпособСписанияОстаткаТоваров = Перечисления.СпособыСписанияОстаткаТоваров.СоСклада;
НоваяСтрока.Качество = Справочники.Качество.Новый;
НоваяСтрока.Склад = Выборка.Склад;
НоваяСтрока.КлючСтроки = Выборка.КлючСтроки;
НоваяСтрока.ЗаказПокупателя = Сделка;
ДобавленКомплект = Истина;
КонецЦикла;
Если ДобавленКомплект Тогда
УправлениеЗапасами.ЗаполнитьСоставНабораПоОснованию(ЭтотОбъект, ДокументОснование, Истина);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
(15) Zhuk1234,
Ошибка "{Документ.РеализацияТоваровУслуг.МодульОбъекта(1545)}: Ошибка при вызове метода контекста (Свернуть)
ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, КоличествоОстатокОрганизации","КоличествоОстатокПоЗаказу");
по причине:
Неверное имя колонки
..что означает, что нет прав на какую-то из колонок: "Номенклатура, ХарактеристикаНоменклатуры, КоличествоОстатокОрганизации"
Номенклатура точно есть, т.к. заказ работает, остается = ХарактеристикаНоменклатуры, КоличествоОстатокОрганизации
Если ТабличнаяЧасть = Товары Тогда //не ломаем стандартное
В формируемом тексте запроса отсутствует поле "КоличествоОстатокОрганизации"
Далее в коде:
Если ПревышатьОстаткиОрганизации Тогда
ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры","КоличествоОстатокПоЗаказу");
Иначе
ТаблицаБезЦен.Свернуть("Номенклатура, ХарактеристикаНоменклатуры, КоличествоОстатокОрганизации","КоличествоОстатокПоЗаказу");
КонецЕсли;
для пользователя с ограниченными правами ПревышатьОстаткиОрганизации = Ложь, соответственно и свернуть по колонке "КоличествоОстатокОрганизации" вызывает исключение.
(34) kasper076, Нашел способ как это обойти, по хорошему бить за такое нужно но ничего другого не смог придумать, что скажете ? :) Добавил такой кусочек и Убрал Ограничение На склады
(39) kasper076, Я снова к вам, все таже тема и тежи док, суть вопроса вот в чем, при полных правах при создании "РеализацииТоваровИУслуг" на основании Заказа покупателя - таб часть тянется отлично а при не полных не тянется вообще. В Ролях Разрешение есть на реквизиты и таб.части все проверил, в чем бага может быть ? Magic..
Если ТабличнаяЧасть = Товары Тогда
Если ПревышатьОстаткиОрганизации Тогда
ОстатокКоличестваПоЗаказу = СтрокаТаблицы.КоличествоОстатокПоЗаказу;
Иначе
ОстатокКоличестваПоЗаказу = Мин(СтрокаТаблицы.КоличествоОстатокПоЗаказу, СтрокаТаблицы.КоличествоОстатокОрганизации);
КонецЕсли;
Иначе
ОстатокКоличестваПоЗаказу = СтрокаТаблицы.КоличествоОстатокПоЗаказу;
КонецЕсли;
Показать
Вот проблема!
У вас в запросе, колонка появляется когда есть товар и НЕ ПревышатьОстаткиОрганизации.
Это скорее косяк разрабов!
(22) Zhuk1234, чисто логически: менеджеру не должно быть разрешено ПревышатьОстаткиОрганизации правильно? соответственно надо заменить на
ПревышатьОстаткиОрганизации = ложь; // в идеале завернуть в условие проверки на доступные права и роли..
можно посмотреть что там в общем модуле пишут , поставить обход по какому то условию. Или там может вообще галочка где то , или закомментировать но тогда не только у менеджера появятся права. Хотя всё таки ошибка скорее типовая наверное потом исправят , потому что не должно в конфигуратор отправлять по ошибке. Можно написать если пользователь такой то и обойти это услоив или роль такая то .