Проверка наличия цены у номенклатуры

10.11.14

Разработка - Запросы

Проверка, есть цена у номенклатуры или нет

  Решил поделиться. Для чего это нужно, скажете вы. Это нужно для формирования отчета “Валовая прибыль”.  Данный код поможет реализовать проверку  "Установки цен номенклатуры" при “Реализации Товаров и Услуг” будет проверяться реализуемая номенклатура.

Если в Документе "Установка цен номенклатуры" не рассчитать цену по номенклатуре, при проведении документа выдаст Служебное сообщения вида “Товар не расценен” указав по какой имена номенклатуре не “Установлена цена номенклатуре” рассчитана. Кому-то может это пригодиться для решения данной задачи.

Конфигуратор - Документы - РеализацияТоваровУслуг - Модуль Обьекта - Процедура Перед Записью

 

 

Если РежимЗаписи = РежимЗаписиДокумента.Проведение Тогда
        Для Каждого Стр Из Товары Цикл         
            Запрос = Новый Запрос ;
            Запрос.Текст = 
                "ВЫБРАТЬ
                |    ЦеныНоменклатурыСрезПоследних.Цена
                |ИЗ
                |    РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
                |ГДЕ
                |    ЦеныНоменклатурыСрезПоследних.Номенклатура = &Номенклатура
                |    И ЦеныНоменклатурыСрезПоследних.ТипЦен = &ТипЦен";

            Запрос.УстановитьПараметр("Номенклатура", Стр.Номенклатура);
            Запрос.УстановитьПараметр ("ТипЦен", ТипЦен); 
            Результат = Запрос.Выполнить ();
            ВыборкаДетальныеЗаписи = Результат.Выбрать ();
                Количество = 0;
            Пока ВыборкаДетальныеЗаписи.Следующий () Цикл
                Количество = Количество + 1;
            КонецЦикла;
            Если Количество = 0 Тогда
                Отказ = Истина;
                Сообщить ("Товар "+ Стр.Номенклатура+" не ресценен ! ! ");
                Возврат; 
КонецЕсли; 
КонецЦикла; 
КонецЕсли;


См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    152668    836    398    

846

Запросы Программист Платформа 1С v8.3 Запросы Конфигурации 1cv8 Бесплатно (free)

Столкнулся с интересной ситуацией, которую хотел бы разобрать, ввиду её неочевидности. Речь пойдёт про использование функции запроса АВТОНОМЕРЗАПИСИ() и проблемы, которые могут возникнуть.

вчера в 18:30    894    XilDen    7    

23

Запросы Программист Запросы Бесплатно (free)

Отлаживая взаимодействие с базой данных, мы регулярно сталкиваемся с зависающими или подозрительно долго выполняющимися обращениями, негативно влияющими на производительность. О том, как в PostgreSQL выявить подозрительные запросы, основываясь на доступной о них информации, расскажем в статье.

16.08.2024    6927    user1840182    5    

28

Математика и алгоритмы Запросы Программист Платформа 1С v8.3 Запросы Бесплатно (free)

Рассмотрим быстрый алгоритм поиска дублей с использованием hash функции по набору полей шапки и табличных частей.

08.07.2024    2121    ivanov660    9    

22

Запросы СКД Программист Стажер Система компоновки данных Россия Бесплатно (free)

Часто при разработке отчетов в СКД возникает ситуация, когда не совсем понятно, почему отчет выводит не те данные, которые нужны, либо не выводит вовсе. Возникает потребность увидеть конечный запрос, который формирует СКД. Как это сделать, рассмотрим в этой статье.

15.05.2024    7341    implecs_team    6    

46

Запросы Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Часто поступают задачи по произвольному распределению общих сумм. После распределения иногда пропадают копейки. Суть решения добавить АвтоНомерЗаписи() в ВТ распределения, и далее используя функции МАКСИМУМ или МИНИМУМ можем положить разницу копеек в первую или последнюю строку знаменателя распределения.

11.04.2024    3217    andrey_sag    10    

35

Запросы СКД Программист Стажер Платформа 1С v8.3 Запросы Система компоновки данных 1С:ERP Управление предприятием 2 Бесплатно (free)

В типовых конфигурациях разработчики компании 1С иногда используют в отчетах, построенных на СКД, такую конструкцию, как "ГДЕ ЛОЖЬ". Такая конструкция говорит о том, что данные в запросе не будут получены совсем. Для чего же нужен тогда запрос?

13.02.2024    7355    KawaNoNeko    23    

26
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ruskiy1 10.11.14 17:59 Сейчас в теме
слабенькая попытка набить рейтинг.
2. ruskiy1 10.11.14 18:01 Сейчас в теме
запрос в цикле особенно порадовал))
Voland36; +1 Ответить
3. TheBear 5 10.11.14 18:45 Сейчас в теме
при проведении документа выдаст Служебное сообщения вида “Товар не расценен”

Конфигуратор - Документы - РеализацияТоваровУслуг - Модуль Обьекта - Процедура Перед Записью

Так при проведении или перед записью?!
И неужели проведется документ с незаполненной ценой? (на скриншоте)
Какой смысл данной процедуры ? Неужели я не могу вводить цену вручную?
4. prost_white_one 8 11.11.14 08:55 Сейчас в теме
(3) TheBear,
ПередЗаписью, можешь ввести цену вручную, но не даст провести документ.
6. TheBear 5 11.11.14 23:21 Сейчас в теме
(4)
ПередЗаписью, можешь ввести цену вручную, но не даст провести документ.

Конфигуратор - Документы - РеализацияТоваровУслуг - Модуль Обьекта - Процедура Перед Записью


Второй вопрос
Я шибко умный пользователь цена на товар есть, а я изменил ее руками - т.е. товар расценен, но цена другая - ломает необходимость вашей проверки !
8. prost_white_one 8 12.11.14 09:14 Сейчас в теме
(6) TheBear, Если я правильно вас понял, вы хотели бы чтобы была проверка Тип цен контроля. Если вам это нужно могу поделиться кодам для конфигурации.
9. nazik 12.11.14 09:31 Сейчас в теме
(8) проблема в том, что ваш велосипед не нужен в принципе. Т.к. механизм контроля 0 цены в документах продажи в системах УТ10.3, КА, УПП - существует, как и контроль продаж ниже определенного типа цен
5. ekaruk 4966 11.11.14 20:05 Сейчас в теме
Решение плохое потому что:
1. Нельзя в таких проверках использовать отдельный запрос на каждую строчку. Должен быть один общий запрос.
2. Не поняла, зачем эти извраты с количеством. Достаточно проверки "Результат.Пустой()"
3. И вообще для этой проверки нафиг не нужна транзакция. Ее нужно выполнять до транзакции в "ОбработкеПроверкиЗаполнения", а не "ПередЗаписью"
4. Хотя бы номер строки вывел бы.
7. prost_white_one 8 12.11.14 09:12 Сейчас в теме
(5) ekaruk, Подскажите пожалуйста, как правильней выглядел бы мой текст. Я только учусь программированию не судите сильно меня.
10. karapuzzzz 63 12.11.14 15:58 Сейчас в теме
(7) в данном случае код должен выглядеть так:
Конфигуратор - Документы - РеализацияТоваровУслуг - Модуль Обьекта - Процедура Перед Записью
// Типовой код. Ничего не трогать.

Если при проверке необходимо проверять на наличие цены в табличной части, то вообще ничего делать не надо. Типовой механизм уже не дает продавать товар по нулевой стоимости (если там не было шаловливых рук).
В случае валовой прибыли данные берутся из регистра "ПродажиОбороты" и "ПродажиСебестоимость". В первый данные передаются из табличной части. Т.е. какая стоимость будет, такая и занесется. Во вторую таблицу данные заносятся при проведении по данным партий товаров на складах. И проверять на установленную цену нет необходимости вообще. Ваш код не решает поставленной задачи.
11. Артано 786 13.11.14 09:54 Сейчас в теме
Солидарен с предыдущими ораторами. На статью не тянет, сам метод написан весьма слабо
12. Артано 786 27.11.14 10:55 Сейчас в теме
Решил сделать доброе дело и показать пример как можно было бы оптимизировать процедуру приведенную в топике. Конечно абстрагируемся от наличия типовых механизмов, просто возьмем существующую проблему в чистом виде.

Взамен прошу соблюдать принцип lurk moar

Запрос = Новый Запрос;
Запрос.УстановитьПараметр("табТовары",Товары.Выгрузить(,"НомерСтроки,Номенклатура,ХарактеристикаНоменклатуры"));
Запрос.УстановитьПараметр("Склад",Склад));
Запрос.УстановитьПараметр("ДатаЦен",Дата));

Запрос.Текст =

"ВЫБРАТЬ
|	ВЫРАЗИТЬ(табТовары.НомерСтроки КАК ЧИСЛО) КАК НомерСтроки,
|	ВЫРАЗИТЬ(табТовары.Номенклатура КАК Справочник.Номенклатура) КАК Номенклатура,
|	ВЫРАЗИТЬ(табТовары.ХарактеристикаНоменклатуры КАК Справочник.ХарактеристикиНоменклатуры) КАК ХарактеристикаНоменклатуры
|ПОМЕСТИТЬ втТовары
|ИЗ
|	&табТовары КАК табТовары
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|ВЫБРАТЬ
|	втТовары.НомерСтроки КАК НомерСтроки,
|	втТовары.Номенклатура,
|	втТовары.ХарактеристикаНоменклатуры
|ИЗ
|	втТовары КАК втТовары
|		ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныАТТ.СрезПоследних(
|				&ДатаЦен,
|				Склад = Склад
|					И номенклатура В
|						(ВЫБРАТЬ
|							втТовары.Номенклатура
|						ИЗ
|							втТовары КАК втТовары)) КАК Цены
|		ПО втТовары.Номенклатура = Цены.Номенклатура
|			И втТовары.ХарактеристикаНоменклатуры = Цены.ХарактеристикаНоменклатуры
|ГДЕ
|	Цены.Номенклатура ЕСТЬ NULL 
|
|УПОРЯДОЧИТЬ ПО
|	НомерСтроки
|;
|
|////////////////////////////////////////////////////////////­////////////////////
|УНИЧТОЖИТЬ втТовары"
;

Если Не РезультатЗапроса.Пустой() Тогда
	Отказ = Истина;
	Выборка = РезультатЗапроса.Выбрать();
	Пока Выборка.Следующий() Цикл
		Сообщить("В строке " + Строка(Выборка.НомерСтроки) + " не задана цена номенклатуры");
	КонецЦикла;
КонецЕсли;
Показать
Оставьте свое сообщение