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

Как назначить кодом цену номенклатуры в конфигурации 1С Бухгалтерия 8

Автор DialogVM, 31 июл 2018, 14:13

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

DialogVM

Здравствуйте! У нас торговая точка, используем программу 1С: Бухгалтерия 8, редакция 3.0 (базовая). Создаем внешнюю обработку печати этикетки для данной конфигурации. Внешняя обработка почти готова, есть сложность вывода кодом цены номенклатуры в этикетке!

В макете этикетки четыре части!
1.   Организация: Работает, выводит в этикетку правильно!
2.   Артикул и Номенклатура: Работает, выводит в этикетку правильно!
3.   Штрихкод (картинка ШК): Работает, выводит в этикетку правильно!
4.   Цена: Не работает, выводит (Цена: Цена руб. за шт), выводит без цены, с текстом Цена, хотя в Номенклатуре цена назначена!

В макете в графе Цена, прописан Шаблон:  <Цена: [Цена] руб. за шт>

В модуле прописано:

Область.Параметры.Цена = "Цена: " + СокрЛП(Метаданные.РегистрыСведений.ЦеныНоменклатуры.Ресурсы.Цена) + " руб. за шт";

Подскажите пожалуйста, что мы делаем не так, и как правильно прописать код, чтобы автоматически подхватывало цену номенклатуры, и ставило ее в этикетку при печати! Этикетка в программе открывается без ошибок, только с пустой ценой! Мучаемся уже третий день, ничего не получается, помогите пожалуйста!

ilyay

Чтобы получить значение цены, нужно сделать запрос к регистру сведений с отбором по измерениям в срезе последних. Из ресурса Цена полученных записей значение устанавливаете.

Примерно так, если в регистре сведений только одно измерение и он периодический.

Запрос = Новый Запрос("Выбрать т.Цена из РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,Номенклатура = &Номенклатура) как т");
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Выборка = Запрос.Выполнить().Выбрать();
Цена = ?(Выборка.Следующий(), Выборка.Цена, 0);
Область.Параметры.Цена = Цена; // числовое значение присваивается




DialogVM

Здравствуйте! Вставили Ваш код в модуль по рекомендации, вышла вот такая ошибка:

{ВнешняяОбработка.ВПФ_ПечатьЭтикеток.МодульОбъекта(792,51)}: Переменная не определена (Номенклатура)
        Запрос.УстановитьПараметр("Номенклатура", <<?>>Номенклатура); (Проверка: Сервер)

ilyay

Вы написали: "Артикул и Номенклатура: Работает, выводит в этикетку правильно!"
Ссылку на номенклатуру установите в параметр.

DialogVM

По поводу Номенклатуры и Артикула, код:

Область.Параметры.Артикул = "Артикул: " + СокрЛП(Шапка.ОС.Артикул) + ", " + СокрЛП(Шапка.ОС.Наименование) + Символы.ПС + "";

2. Артикул и Номенклатура: Работает, выводит в этикетку правильно!

Ваш код изменили:

Запрос = Новый Запрос("Выбрать т.Цена из РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,Номенклатура = &Номенклатура) как т");
        Запрос.УстановитьПараметр("Номенклатура", Шапка.ОС.Номенклатура);
        Выборка = Запрос.Выполнить().Выбрать();
        Цена = ?(Выборка.Следующий(), Выборка.Цена, 0);
        Область.Параметры.Цена = Цена; // числовое значение присваивается

При печати этикетки, уже в самой программе, выходит ошибка: Поле объекта не обнаружено (Номенклатура)

ilyay

Ссылка на номенклатуру, я так полагаю, это Шапка.ОС
А ошибка из-за того, что на регистре измерение по-другому называется, а не Номенклатура. А если у вас несколько измерений, тогда будет цена некорректно получаться, потому что отбор надо по всем измерениям накладывать.

Я с этой конфигурацией не работаю, не знаю что у вас там.

DialogVM

Еще раз изменили Ваш код:

Запрос = Новый Запрос("Выбрать т.Цена из РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,Номенклатура = &Номенклатура) как т");
        Запрос.УстановитьПараметр("Номенклатура", Шапка.ОС.Артикул);
        Выборка = Запрос.Выполнить().Выбрать();
        Цена = ?(Выборка.Следующий(), Выборка.Цена, 0);
        Область.Параметры.Цена = Цена; // числовое значение присваивается

Этикетка в программа стала открываться без ошибок, но в этикетке написано!

Цена: 0 руб. за шт

Хотя в карточке Номенклатуры указа Цена продажи: 250 руб.

Может еще кто подскажет, подскажите кто знает пожалуйста!!!

ilyay

Шапка.ОС.Артикул - сомневаюсь, что это номенклатура.
Если добавить в конец кода эти строки, что выводится?
Сообщить(ТипЗнч(Шапка.ОС.Артикул));
Сообщить(ТипЗнч(Шапка.ОС));
Сообщить(Выборка.Количество());


DialogVM

ilyay, мы переписали код:

Область.Параметры.Артикул = "Артикул: " + СокрЛП(Номенклатура.ОС.Артикул) + ", " + СокрЛП(Номенклатура.ОС.Наименование) + Символы.ПС + "";
      Область.Параметры.Цена = "Цена " + СокрЛП(Метаданные.РегистрыСведений.ЦеныНоменклатуры.Ресурсы.Цена) + " руб. шт";
      Запрос = Новый Запрос("Выбрать т.Цена из РегистрСведений.ЦеныНоменклатуры.СрезПоследних(,Номенклатура = &Номенклатура) как т");
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
        Выборка = Запрос.Выполнить().Выбрать();
      Цена = ?(Выборка.Следующий(), Выборка.Цена, 0.00);
        Область.Параметры.Цена = Цена; // числовое значение присваивается

При открытии обработки в программе, выдает ошибку:

{{1, 80}}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
Выбрать т.Цена из РегистрСведений.ЦеныНоменклатуры.СрезПоследних(Номенклатура<<?>>= &Номенклатура) как т

Если код изменить вот так:

Область.Параметры.Артикул = "Артикул: " + СокрЛП(Номенклатура.ОС.Артикул) + ", " + СокрЛП(Номенклатура.ОС.Наименование) + Символы.ПС + "";
      Область.Параметры.Цена = "Цена " + СокрЛП(Метаданные.РегистрыСведений.ЦеныНоменклатуры.Ресурсы.Цена) + " руб. шт";
      Запрос = Новый Запрос("Выбрать т.Цена из РегистрСведений.ЦеныНоменклатуры.СрезПоследних как т");
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
        Выборка = Запрос.Выполнить().Выбрать();
      Цена = ?(Выборка.Следующий(), Выборка.Цена, 0.00);
        Область.Параметры.Цена = Цена; // числовое значение присваивается

Обработка в программе открывается, все в этикетке печатается, только во всех печатях этикетки выводится первая сформированная цена в Установке цен номенклатуры, то есть цены не соответсвуют номенклатурам!!!
Добавлено: 31 июл 2018, 20:30


Получается так, что если в коде оставить эту строку: (,Номенклатура = &Номенклатура), то тогда обработка в программе не открывается, выдает вышеуказанную ошибку, если данную строку из кода убрать, обработка в программе открывается, но, при печати этикетки, в самой этикетки выводится первая установленная цена, другие цены не видит, наверно не срабатывает срез цен, мы так понимаем! Что еще подскажите!?
Добавлено: 31 июл 2018, 20:44


Пример печати этикетки!

Установка цен Номенклатуры:
Товар №1 - цена 250 руб.
Товар №2 - цена 350 руб.
Товар №3 - цена 450 руб.

Печать этикетки:
Товар №1 - цена 250 руб.
Товар №2 - цена 250 руб.
Товар №3 - цена 250 руб.

То есть, разный товар, а цена выставляется от первой установленный цены, указанной в документе Установка цен Номенклатуры, в разном товаре при печати этикетки видна только первая установленная цена!

ilyay

Что выдают те три "Сообщить()"? Вы не написали.
Напишите, как называются измерения регистра сведений. Похоже, там нет измерения "Номенклатура".
Что вы устанавливаете в параметр Номенклатура? Должна быть ссылка на номенклатуру.
Запятая внутри СрезПоследних нужна, чтобы отбор был вторым параметром. Вы убрали отбор, у вас берется первая найденная запись из регистра для любой номенклатуры, поэтому везде одинаковая цена.

Теги:

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

Рейтинг@Mail.ru

Поиск