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

10.11.14

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

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

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

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

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

 

 

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

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


См. также

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

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    184510    1027    403    

967

Обновление 1С Запросы Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

06.02.2025    2193    17    XilDen    26    

36

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

В статье приведена удобная возможность отладки исполняемого запроса динамического списка.

03.12.2024    5712    artemusII    11    

23

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

Увидел cheatsheet по SQL и захотелось нарисовать подобное, но про запросы.

18.10.2024    13110    sergey279    18    

66

Запросы Программист Платформа 1С v8.3 Запросы 1C:Бухгалтерия Бесплатно (free)

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

11.10.2024    8203    XilDen    36    

90

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

Работая с типовыми отчетами в конфигурациях «Зарплата и управление персоналом, редакция 3», «Зарплата и кадры государственного учреждения, редакция 3» и подобных, в схемах компоновки данных можно встретить конструкции запросов, которые обращаются к некоторым виртуальным таблицам.

20.08.2024    3184    PROSTO-1C    0    

23

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

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

16.08.2024    10790    user1840182    5    

29
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 9 11.11.14 08:55 Сейчас в теме
(3) TheBear,
ПередЗаписью, можешь ввести цену вручную, но не даст провести документ.
6. TheBear 5 11.11.14 23:21 Сейчас в теме
(4)
ПередЗаписью, можешь ввести цену вручную, но не даст провести документ.

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


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

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

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

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

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

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

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