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

10.11.14

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

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

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

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

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

 

 

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

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


См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    122277    673    389    

716

Для чего используют конструкцию запроса "ГДЕ ЛОЖЬ" в СКД на примере конфигурации 1С:ERP

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

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

13.02.2024    5755    KawaNoNeko    23    

23

Набор-объект для СКД по тексту или запросу

Запросы СКД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Есть список полей в виде текста, или запрос - закидываем в набор СКД.

1 стартмани

31.01.2024    2006    2    Yashazz    0    

29

Запрос 1С copilot

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

Пишем на человеческом языке, что нам надо, и получаем текст запроса на языке 1С. Используются большие языковые модели (LLM GPT) от OpenAI или Яндекс на выбор.

5 стартмани

15.01.2024    6300    31    mkalimulin    25    

50

PrintWizard: поддержка представлений ЗУП в конструкторе

Инструментарий разработчика Запросы Платформа 1С v8.3 Бесплатно (free)

Одной из интересных задач, стоящих в процессе разработки, была поддержка механизма представлений в ЗУП. Но не просто возможность исполнения запросов с ними. Основная проблема была в том, чтобы с ними было удобно работать, а именно: создавать, модифицировать и отлаживать. Кратко о том, что в итоге получилось...

14.12.2023    1749    vandalsvq    7    

29

Объектная модель запроса "Схема запроса" 2

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

Далеко уже не новый тип данных "Схема запроса". Статья о том, как использовать его "попроще". Примеры создания текста запроса с нуля и изменение имеющегося запроса.

06.12.2023    5397    user1923546    26    

43

Начните уже использовать хранилище запросов

HighLoad оптимизация Запросы

Очень немногие из тех, кто занимается поддержкой MS SQL, работают с хранилищем запросов. А ведь хранилище запросов – это очень удобный, мощный и, главное, бесплатный инструмент, позволяющий быстро найти и локализовать проблему производительности и потребления ресурсов запросами. В статье расскажем о том, как использовать хранилище запросов в MS SQL и какие плюсы и минусы у него есть.

11.10.2023    16197    skovpin_sa    14    

98
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 4897 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. Артано 760 13.11.14 09:54 Сейчас в теме
Солидарен с предыдущими ораторами. На статью не тянет, сам метод написан весьма слабо
12. Артано 760 27.11.14 10:55 Сейчас в теме
Решил сделать доброе дело и показать пример как можно было бы оптимизировать процедуру приведенную в топике. Конечно абстрагируемся от наличия типовых механизмов, просто возьмем существующую проблему в чистом виде.

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

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

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

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

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