Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
14 дек 2024, 21:42

Где можно почитать инфу про эту задачу

Автор Nosferatu112, 17 янв 2023, 17:41

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

                                 Изменение реквизитов документа
На базе: конфигураций 1С:УТ, 1С:КА
Назначение: Установка цены номенклатуры в табличной части Товары документа Поступление товаров и услуг.

Вариант исполнения: Внешняя обработка

Описание: Создать внешнюю обработку, которая позволит установить новую цену (старая цена * 1,5) в табличной части Товары документа Поступление товаров и услуг (только проведенные документы). Форма обработки предусматривает возможность отбора документов Поступления товаров и услуг в зависимости от указанного периода, Контрагента, Номенклатура (номенклатура, Группа номенклатуры, Список номенклатуры), Минимальное и Максимальное значение старой цены номенклатуры (в табличной части для номенклатуры Помидоры установлена цена 100 рублей, Мин значение =150, Максимальное значение = 200, в этом случае отбор по номенклатуре не должен отработать). Для возможности выбора корректировки документов Поступления товаров и услуг на форме обработки предусмотреть табличную часть: Отметка – тип Булево; Документ поступления – Тип ДокументСсылка.ПоступлениеТоваровиУслуг. Изначально эта табличная часть заполняется отобранными документами, удовлетворяющим условиям выше. При установленной отметке Истина и выполнении действия пользователя (нажатие кнопки - Выполнить), если существует хотя бы один документ для изменения, пользователю выводится Предупреждение о согласии изменить данные (Выбор ответа – Да, Нет). В случае согласия, производятся изменения документа или документов с последующим перепроведением документа или документов.

Есть вот такая задача собственно вопрос вот какой кто может подсказать где прочитать инфу что бы решить её или может кто может объяснить как решить её. Я хочу просто разабраться в ней сам но не могу понять где читать

Максим75

1. Создаешь в обработке табличную часть с реквизитами Отметка (тип Булево) и Документ поступления (тип нужного документа). На форму все это кино кидаешь.
2. Первый запрос на заполнение табличной части формы. Запрос к табличной части документа Поступление товаров и услуг с условиями по периоду (дата документа между ДатаНач и ДатаКон), только проведенные (условие Ссылка.Проведен = ИСТИНА, ссылка доступна из табличной части дркумента, ссылка и должна выводиться в таблицу), условия по контрагенту (доступен из реквизита ссылка.контрагент), по номенклатуре, группе номенклатуре, списку номенклатуре, ну и главное чтобы цена попадала в диапазон. В запросе получаешь список документов и им заполняешь таблицу для выбора (отметка).
3. Непосредственно обработка документов:
обходить в цикле документы из табличной части, если отметка стоит, то обрабатываешь документ. Тут варианты обработки могут быть различны: или запросом по конкретному документу или через объект, выбираешь конкретный документ, выборка по табличной части и проверка каждой строки табличной части на соответствие всем условиям, если все гуд - меняешь цену. После всего этого записываешь документ и проводишь (в процедуре Записать есть возможность выбрать режим записи).

ну как то так, если кратко.

Nosferatu112


Nosferatu112

Максим75, Так я крайне долго старался решить эту чертову задачу но чёт у меня ни фига не получаеться есть  более конкретные мысли по этой задаче прям для максимально тупых объяснение если не сложно

Максим75

Nosferatu112, вот чуть ниже есть обсуждение очень похожей задачи
тема: Изменение табличной части выбранных пользователем документов

там уже обработка для заполнения документов есть, доки заполняются.
может есть смысл спросить там у автора, может поделится обработкой.

Nosferatu112

Максим75, Я впринципе наконец то понял как решить задачу Единственно не могу правильно сформулировать вопрос для гугла может вы подскажите как сделать параметры поиска не жёсткими, тоесть если выбрана только номенклатура а остальное нет что бы нашлись все доки по номенклатуре потому что сейчас при неуказании чего либо не ищеться ни чего
Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ
        |    ПриобретениеТоваровУслугТовары.Ссылка КАК ДокументПоступления
        |ИЗ
        |    Документ.ПриобретениеТоваровУслуг.Товары КАК ПриобретениеТоваровУслугТовары
        |ГДЕ
        |    ПриобретениеТоваровУслугТовары.Ссылка.Проведен = ИСТИНА
        |    И ПриобретениеТоваровУслугТовары.Номенклатура = &Номенклатура
        |    И ПриобретениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент
        |    И ПриобретениеТоваровУслугТовары.Ссылка.Дата МЕЖДУ &ДатНач И &ДатКон
        |    И ПриобретениеТоваровУслугТовары.Цена МЕЖДУ &МинЦен И &МаксЦен";
   
    Запрос.УстановитьПараметр("ДатНач", Объект.Период.ДатаНачала);
    Запрос.УстановитьПараметр("ДатКон", Объект.Период.ДатаОкончания);
    Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
    Запрос.УстановитьПараметр("МинЦен", Объект.МинЦен);
    Запрос.УстановитьПараметр("МаксЦен", Объект.МаксЦен);
    Запрос.УстановитьПараметр("Номенклатура", Объект.Номенклатура);
   
   
    РезультатЗапроса = Запрос.Выполнить().Выгрузить();
    КорректировкаЦен.Загрузить(РезультатЗапроса);
   
   
   
    Элементы.КорректировкаЦен.Видимость = КорректировкаЦен.Количество() > 0;
    Выборка = РезультатЗапроса.Добавить();

Максим75

Nosferatu112,

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

Если ЗначениеЗаполнено(Объект.Контрагент) тогда
ТекстЗапроса=ТекстЗапроса+"
|    И ПриобретениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент";
Запрос.УстановитьПараметр("Контрагент", Объект.Контрагент);
КонецЕсли;

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

Потом Запрос.Текст=ТекстЗапроса;
и выполнение запроса.

мог где-то в синтаксисе налажать. Можно перед выполнением вывести сам текст запроса в сообщение и посмотреть на его синтаксис. если все гуд, тогда уже закоментировать вывод текста и дальше грузить в запрос и обходить результаты выборки.

есть еще такое понятие, как необязательные параметры в запросе, знаю как на СКД их делать, а вот в обычном запросе они работают или нет - не силен. Это такие параметры, которые через фигурные скобки прописаны в условии ГДЕ (либо в параметрах виртуальных таблиц). Вот они начинают работать только когда заполнены. Погуглите, может поможет разобраться.

Nosferatu112


antoneus

или так

ГДЕ
   ВЫБОР КОГДА &Контрагент = Значение(Справочник.Контрагенты.ПустаяСсылка)
       ТОГДА ИСТИНА
       ИНАЧЕ ПриобретениеТоваровУслугТовары.Ссылка.Контрагент = &Контрагент
   КОНЕЦ

....

Запрос.УстановитьПараметр("Контрагент", Контрагент);

Максим75

antoneus, о, спасибочки, прикольный вариант. возьму на вооружение.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск