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

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

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

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

DialogVM

Мы же написали Вам, что мы переписали код, соответственно, он сейчас ничего выдавать не будет!!!

Все что было написано (Шапка) перезаписали в (Номенклатура) посмотрите пожалуйста внимательней код, который опубликован на форуме в последних сообщениях!!!

Что с наименованием Шапка, что с наименование Номенклатура, работает обработка совершенно одинаково, только единственное что изменилось, это обработка начала в этикетке формировать цены, но, цена во всех товарах отображается от первой сформированной цены!!!

Нам что сейчас, обратно все переименовывать в обработке с Номенклатура в Шапку или как!?
Добавлено: 01 авг 2018, 11:30


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

Нашли в Интернете, еще вот такой код:

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


Ilyay, давайте по порядку!

Первое: Как узнать наименование измерений регистра сведений, и как понять, есть ли там измерение Номенклатура!? (по подробней: путь, ссылка)

Второе: Как найти в коде параметр Номенклатура, возможно ли найти стандартным поиском (Ctrl + F), как выглядит ссылка стандартного параметра Номенклатура!? (по подробней: путь, ссылка)

Цитата: Запятая внутри СрезПоследних нужна, чтобы отбор был вторым параметром. Вы убрали отбор, у вас берется первая найденная запись из регистра для любой номенклатуры, поэтому везде одинаковая цена

Третье: Где конкретно нужно поставить запятую!? (по подробней: путь, ссылка, код)

ilyay

I.
1. Открываете конфигуратор.
2. Конфигурация - Открыть конфигурацию (если открыто уже, пункт недоступен)
3. Находите в дереве РегистрыСведений
4. Внутри находите регистр ЦеныНоменклатуры
5. Внутри раскрываете Измерения - интересует, как они называются и какие у них типы (Alt+Enter открывает свойства, свойство Тип) - важно еще, сколько их

II. По ^F найти нельзя. Или в форме посмотреть, или добавить в конце
Сообщить("Номенклатура тип "+ТипЗнч(Номенклатура));
Сообщить("Номенклатура.ОС тип "+ТипЗнч(Номенклатура.ОС));
Сообщить("Номенклатура.Артикул тип "+ТипЗнч(Номенклатура.ОС.Артикул));

Одно из них должно вернуть тип как в измерениях регистра сведений, например СправочникСсылка.Номенклатура
III.
Блок с запросом должен выглядеть так:

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


Где:
ИзмерениеНоменклатура - измерение регистра для Номенклатуры, как оно называется в регистре сведений,
НоменклатураСсылка - ссылка на элемент справочника номенклатура.
Например, если Сообщить("Номенклатура.ОС тип "+ТипЗнч(Номенклатура.ОС)); вернет "Номенклатура.ОС тип СправочникСсылка.Номенклатура", в этом случае перед запросом пишите НоменклатураСсылка = Номенклатура.ОС;

IV.
Если в конце добавите
Сообщить("Количество записей="+Выборка.Количество());
тогда узнаете, сколько записей запрос выбрал. Он должен выбирать одну или ноль, иначе получается несколько цен, значит, нужен дополнительный отбор кроме номенклатуры.

Добавлено: 01 авг 2018, 12:47


Кстати, у вас в запросе используются:
        |    ЦеныНоменклатуры.Номенклатура,
        |    ЦеныНоменклатуры.ТипЦен,
Значит, "ИзмерениеНоменклатура" - это Номенклатура.
Тогда так:
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ДатаСреза, Номенклатура = &ПараметрНоменклатура)
Странно, что у вас возникала ошибка.
Нужно еще устанавливать параметр ТипЦен

DialogVM

Ответ на вопрос №1

По пути: Конфигуратор – Конфигурация – Регистры сведений – ЦеныНоменклатуры – Измерения:

1. ТипЦен / Тип: СправочникСсылка.ТипыЦенНоменклатуры
2. Номенклатура  / Тип: СправочникСсылка.Номенклатура

ilyay

Ответ на вопрос номер 2?

Так как есть измерение ТипЦен, вы какую цену какого типа хотите выводить на печать?

DialogVM

Поставили по Вашей рекомендации вот такой код:

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

Где была заменена строка: с (,Номенклатура = &Номенклатура) на (&ДатаСреза, Номенклатура = &ПараметрНоменклатура), при открытии обработки в программе, выдало ошибку:

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

ilyay

Вы не пропустили строчку:
Запрос.УстановитьПараметр("ДатаСреза", ТекущаяДата()); ?

Или просто сотрите &ДатаСреза из запроса, если у вас нет цен с будущей датой.

DialogVM

Поставили по Вашей рекомендации вот такой код:

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

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

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


Мы же не одним днем живем, конечно будут цены с будущей датой...
Добавлено: 01 авг 2018, 13:47


Вы можете написать код, чтобы ошибок не выдавало!? Очень Вас просим!!!
Добавлено: 01 авг 2018, 13:52


Цитата: Так как есть измерение ТипЦен, вы какую цену какого типа хотите выводить на печать?

Ответ: Актуальную цену установленную в документе Установка цен номенклатуры, Тип цен: Розничная, при том, соответственно у каждого товара своя розничная цена!!!

ilyay


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

В запрос добавил отбор по типу цену по ее наименованию и исправил имя параметра Номенклатура.

Возможно, вместо "ТипЦен.Наименование" нужно будет написать "ТипЦен.Код", смотря где слово "Розничная" хранится, в наименовании или коде этого справочника.

DialogVM

Поставили по Вашей рекомендации вот такой код:

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

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

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


Цитата: Возможно, вместо "ТипЦен.Наименование" нужно будет написать "ТипЦен.Код", смотря где слово "Розничная" хранится, в наименовании или коде этого справочника.

Ответ: Попробуем поиграться или так или так, но с начало нужно, чтобы обработка открывалась в программе...
Добавлено: 01 авг 2018, 14:31


Методом тыка изменили код, убрали строку (Номенклатура = &Номенклатура):

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

В программе обработка открылась, но цены видит сегодня созданную самую первую, вторую сегодня созданную цену не видит и вчера созданную цену не видит!

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

Установка цен номенклатуры:
Товар №1 - 250 руб., цена созданная вчера;
Товар №2 - 350 руб., цена созданная сегодня первая;
Товар №3 - 450 руб., цена созданная сегодня вторая по счету;

Печать этикетки:
Товар №1 - 350 руб.
Товар №2 - 350 руб.
Товар №3 - 350 руб.
Добавлено: 01 авг 2018, 14:34


Методом тыка изменили код, убрали строку (Номенклатура = &Номенклатура), изменили строку (ТипЦен.Код = ""Розничная""):

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

В программе обработка открылась, но цены выставляет на печать все нулевые!!!

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

Установка цен номенклатуры:
Товар №1 - 250 руб., цена созданная вчера;
Товар №2 - 350 руб., цена созданная сегодня первая;
Товар №3 - 450 руб., цена созданная сегодня вторая по счету;

Печать этикетки:
Товар №1 - 0 руб.
Товар №2 - 0 руб.
Товар №3 - 0 руб.
Добавлено: 01 авг 2018, 14:51


ilyay, Вы как ясное солнышко в пасмурную погоду появляетесь на пять минут, ну куда снова пропали, Вы же разработчик, ну помогите нам пожалуйста, уже четвертый день пошел мучений с этой обработкой, что ж за напасть такая, что нам не везет так а!? Может еще есть какие то варианты???

ilyay

Работа у меня. А так здесь есть раздел фриланс. У вас проблема с получением ссылки на номенклатуру. Второй день про это пишу. В параметр передаете неподдерживаемый тип.

Теги:

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

Рейтинг@Mail.ru

Поиск