Колонки "цена" и "кол-во" в списке номенклатуры

Внимание! Данный форум является модерируемым.
Для получения к нему доступа необходимо зарегистрироваться или авторизоваться на сайте.

Страницы: 1
RSS
Колонки "цена" и "кол-во" в списке номенклатуры
 
Здравствуйте. Искал в гугле, не нашел, читал книжки - не понял. В общем - прошу помочь разобраться.
Появилась необходимость в том, чтобы в списке номенклатуры появились 2 новый колонки, цена и кол-во, причем цена чтобы бралась именно розничная.
Вот что я сделал для реализации цены:
  • Открыл конфигуратор
  • Справочники->номенклатура
  • добавил реквизит "цена"
  • в форму списка добавил колонку, ее элемент указываю - "поле ввода"
  • на поле ввода вешаю код
Программировать на 1с пока не умею, код искал в интернете, но ни один вариант не подошел, все время выдает ошибки в коде.
Подскажите как решить проблему, что почитать вкратце, чтобы понять как получить значения, и как их отобразить.

Вот на мой взгляд самый близкий к правде пример, вот только он не работает тоже :cry:
Код
Функция ПолучитьЦенуНоменклатурыПоТипуЦен(Дата, ТипЦен, НаименованиеТовара) Экспорт

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

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

Выборка = Запрос.Выполнить().Выбрать();

Пока Выборка.Следующий() Цикл
НайденнаяЦена = Выборка.Цена;
КонецЦикла;

Возврат НайденнаяЦена;

КонецФункции


Еще не уверен в том, на какое событие вешать код.

ПС: я понимаю что чайнику сразу все не втолковать, но если вопрос сложный, направьте меня на хорошую литературу, я сейчас читаю 1с программирование как 2х2, очень уж запутанно она написана.
 
Так привязать функцию к выводу в списке можно было только в 7-ке. В 8-ке нужно использовать ПриВыводеСтроки а лучше ПриПолученииДанных
 
Цитата
Евгений Шульц пишет:
Так привязать функцию к выводу в списке можно было только в 7-ке. В 8-ке нужно использовать ПриВыводеСтроки а лучше ПриПолученииДанных
Выходит что код неверен?
Я так понял, что нужно на событие поля ввода "ПриПолученииДанных" повесить некую связь колонки с данными из регистра.
 
Добрый день.
Все правильно сказали. Лучше всего это делать в обработчике СписокПриПолученииДанных. Сделать по аналогии с выводом ШК номенклатуры. Там уже есть в качестве примера.
Попутно пара вопросов.
1. Зачем надо было добавлять реквизит справочника? Не нужен он в этом случае.
2. Запрос по получению цены не будет работать для случаев:
- Цена задана для единиц измерения или характеристик
- Тип цен розничный является расчетным.
Ну и надо понимать, что такой сервис как вывод цены в список серьезно нагрузит систему. К тому же цена получается точечными запросами для каждой строки.
 
Цитата
Александр Яблочкин пишет:
Добрый день.

Все правильно сказали. Лучше всего это делать в обработчике СписокПриПолученииДанных. Сделать по аналогии с выводом ШК номенклатуры. Там уже есть в качестве примера.

Попутно пара вопросов.

1. Зачем надо было добавлять реквизит справочника? Не нужен он в этом случае.

2. Запрос по получению цены не будет работать для случаев:

- Цена задана для единиц измерения или характеристик

- Тип цен розничный является расчетным.

Ну и надо понимать, что такой сервис как вывод цены в список серьезно нагрузит систему. К тому же цена получается точечными запросами для каждой строки.
Здравствуйте.
В принципе, ход решения теперь понятен, спасибо.
Отвечаю на вопросы:
1. Это я в поисковиках вычитал, сам не понял зачем такие сложности, мол суть в том, что в этот реквизит будут записаны данные из регистра, и уже реквизит должен связываться с колонкой, передавая ей данные.
2.1. Аналитика учета цен по номенклатуре.
2.2. Вот это я не знаю где смотреть, но думаю что он не расчетный, даже уверен в этом.
Цитата
Ну и надо понимать, что такой сервис как вывод цены в список серьезно нагрузит систему. К тому же цена получается точечными запросами для каждой строки.
Нагрузка системы, согласен, дел неблагодарное, но хотелось бы попробовать, ведь если будет терпимо, то будем использовать. А вот то что цена выходит точечными запросами, Вы меня неприятно удивили, так как смысл данной манипуляции в том, чтобы менеджер сразу же видел цену и остатки нужной номенклатуры и ближайших к ней позиций.
 
Цитата
Владимир Алексеев пишет:
А вот то что цена выходит точечными запросами, Вы меня неприятно удивили, так как смысл данной манипуляции в том, чтобы менеджер сразу же видел цену и остатки нужной номенклатуры и ближайших к ней позиций.
Нет, вопрос не в том что показывать цену или нет. Цену лучше получать для всех нужных позиций номенклатуры, которые будут выводится одним запросом (выгрузит список номенклатуры в запрос из параметра ОформленияСтрок). И уже из результатов запроса получать цены/остатки.
Еще подсказки по поводу оптимизации.
1. Прежде чем получать/выводить цену проверить а отображается ли данная колонка. Если нет, то и не делать ничего.
2. Цены/остатки можно закешировать в переменной какой либо (в таблице значений). Получать их оттуда. А вот если в ТЗ не нашлось, то уже тянуть из базы.
 
Цитата
Владимир Алексеев пишет:
Нагрузка системы, согласен, дел неблагодарное, но хотелось бы попробовать, ведь если будет терпимо, то будем использовать. А вот то что цена выходит точечными запросами, Вы меня неприятно удивили, так как смысл данной манипуляции в том, чтобы менеджер сразу же видел цену и остатки нужной номенклатуры и ближайших к ней позиций.
А форма подбора чем не устроила то?
Или на худой конец АРМ
 
Цитата
Евгений Шульц пишет:
А форма подбора чем не устроила то?
Или на худой конец АРМ
Ну, я то не против, но менеджерам нужна цена/остатки в колонке списка номенклатуры.

Вот, получилось как то так из того кода что нашел склеить.
Код
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл
Если ЭлементыФормы.Список.Колонки.ЦенникРозницы.Видимость тогда
         номка = элемент.значение;
         ТипЦнк = Справочники.ТипыЦен.НайтиПоНаименованию("Розничная");
         запрос = новый запрос("выбрать
         |   ценыноменклатуры.цена,
         |   ценыноменклатуры.валюта
         |из
         |   регистрсведений.цены как ценыноменклатуры
         |где
         |   ценыноменклатуры.типцен = &ТипЦнк
         |   И ЦеныНоменклатуры.Номенклатура = &номка ");
         запрос.УстановитьПараметр("ТипЦнк", ТипЦнк);
         запрос.УстановитьПараметр("Номенклатура", номка);
         ЦННК = запрос.Выполнить().Выгрузить();
         колво = ЦННК.Количество();
         если колво > 1 тогда
            ЦННКАА = ЦННК[0].цена;
         иначе
            ЦННКАА = 0;
         конецесли;
         этаформа.ЭлементыФормы.Список.Колонки.ЦенникРозницы = ЦННКАА;
      конецесли;
КонецЦикла;
КонецПроцедуры

вот только пишет при открытии справочника ошибку:
Код
{Справочник.Номенклатура.Форма.ФормаСписка(663)}: Ошибка при вызове метода контекста (Выполнить)
         ЦННК = запрос.Выполнить().Выгрузить();
по причине:

по причине:
{(8, 36)}: Не задано значение параметра "номка"
И ЦеныНоменклатуры.Номенклатура = <<?>>&номка
 
Цитата
Владимир Алексеев пишет:
Ну, я то не против, но менеджерам нужна цена/остатки в колонке списка номенклатуры.
Так там так и есть. Просто вверху надо будет выбрать тип цены и склад по которому будут выводиться остаток.
а тут лучше так
Код
Процедура СписокПриПолученииДанных(Элемент, ОформленияСтрок)
Для Каждого ОформлениеСтроки из ОформленияСтрок Цикл
Если ЭлементыФормы.Список.Колонки.ЦенникРозницы.Видимость тогда
         номка = ЭлементыФормы.Список.ТекущиеДанные.Ссылка;
         ТипЦнк = Справочники.ТипыЦен.НайтиПоНаименованию("Розничная");
         запрос = новый запрос("выбрать
         |   ценыноменклатуры.цена,
         |   ценыноменклатуры.валюта
         |из
         |   регистрсведений.цены как ценыноменклатуры
         |где
         |   ценыноменклатуры.типцен = &ТипЦнк
         |   И ЦеныНоменклатуры.Номенклатура = &номка ");
         запрос.УстановитьПараметр("ТипЦнк", ТипЦнк);
         запрос.УстановитьПараметр("Номенклатура", номка);
         ЦННК =0;
Выборка=Запрос.Выполнить.Выбрать();
Если Выборка.Следующий() Тогда
ЦННК=Выборка.Цена
КонецЕсли;

ОформлениеСтроки.Ячейки.ЦенникРозницы.УстановитьТекст(ЦННК);

КонецЦикла;
КонецПроцедуры
 
Евгений, использовал Ваш код, но та же ошибка про значение параметра "номка", может это изи за того что я СписокПриПолученииДанных повесил на событие НачалоВыбора?
Цитата
Так там так и есть. Просто вверху надо будет выбрать тип цены и склад по которому будут выводиться остаток.
Честно говоря, 1с начал изучать с месяца 2 назад, до этого только слышал про него :) , в связи с этим не обладаю пока знаниями не только нюансов,  но и некоторых лучших путей решения задач, и т.д. Честно скажу, не понял как мне может помочь АРМ, при входе в эту панель открывается окно с настройкой прав. А по поводу формы подбора... Вы предлагаете создать такую форму в справочнике номенклатуры и использовать менеджерам ее?
 
Цитата
Владимир Алексеев пишет:
Евгений, использовал Ваш код, но та же ошибка про значение параметра "номка", может это изи за того что я СписокПриПолученииДанных повесил на событие НачалоВыбора?
НачалоВыбора тут вообще не причем. Надо на получение данных.
С запросом лучше так
Код
ВЫБРАТЬ
   ЦеныСрезПоследних.Цена
ИЗ
   РегистрСведений.Цены.СрезПоследних(
         ,
         ТипЦен = &ТипЦнк
            И Номенклатура = &номка) КАК ЦеныСрезПоследних

Ругается 1С по идеи на то что параметр не установили.

Цитата
Честно скажу, не понял как мне может помочь АРМ, при входе в эту панель открывается окно с настройкой прав. А по поводу формы подбора... Вы предлагаете создать такую форму в справочнике номенклатуры и использовать менеджерам ее?
АРМ можно переключить. Есть кнопка сменить внутри АРМ переключить интерфейс. Там АРМов много. Форма подбора можно открыть нажав на кнопку подбор в документе допустим реализация. Там уже все сделано до вас.
 
Цитата
Евгений Шульц пишет:
|   И ЦеныНоменклатуры.Номенклатура = &номка ");
);
Ну а в запросе параметр такой "интересный" есть. На правильный исправить надо.
Насчет подбора. Во всех документах с ТЧ товаров есть кнопка подбора. Там уже есть вывод цен, остатков ...
 
Цитата
Александр Яблочкин пишет:
Ну а в запросе параметр такой "интересный" есть. На правильный исправить надо.
Насчет подбора. Во всех документах с ТЧ товаров есть кнопка подбора. Там уже есть вывод цен, остатков ...
Ну да переменные смешно называются да и в запросе лучше использовать виртуальную таблицу.
Но если честно то я не понял вообще, наверное как и вы зачем это колонка нужна когда во всех необходимых местах и так все подсвечено и показано. А при прокрутки несколькими сотрудниками списка номенклатуре при установки цен в позицией 2 000 на серваке будет просто ад кромешный. Тормозить будет так что мало не покажется.
 
Ну, переменные смешные, это так, для собственного усваивания более продуктивного :)
СВ запросах в будущем попытаюсь использовать виртуальную таблицу, спасибо за совет, пригодится, так как этот запрос - мой первый в 1с запрос.
Вот про тормоза в системе вы говорите все верно, их надо избегать, учитывая тот факт что и так система не шибко блещет скоростью. Но, увы, функцию отбора менеджеры бракуют. Им не хочется ничего нигде не сортировать, ни вводить, кроме номера каталожного. Им нужно чтобы когда клиент звонит, менеджер открывал бы 1с, заходил бы в справочник номенклатуры, а там уже чтобы рядом с каждой позицией были цены и остатки для их удобства. Нет, не чтобы отбирать нужный диапазон цен, а чтобы не нажимать внизу табличной части на вкладки цены и остатки.
Вот вам и ответ зачем надо: чтобы не нажимать на вкладки цены и остатки.
Естественно, что если все так плохо с тормозами будет, придется им отказаться от этой чудо идеи :)
 
Ну вот так у меня в древней версии выглядит арм

По моему удобнее
 
Цитата
По моему удобнее
Согласен с Вами!  Более того, тормоза начались ощутимые, даже с 1 запущенным пользователем.
А вот АРМ действительно удобно, не подозревал о его наличии и возможностях, сказывается отсутствие опыта.
Огромное спасибо вам Александр и Евгений, мне очень помогли ваши советы.
 
не совсем удобно, а  как аналоги смотреть ?
 
Мы решили подобную проблему переключения вкладок через комментарий в справочнике номенклатура. Там по умолчанию отображается основная цена продажи, мы поменяли ее на розничную. В итоге видим и остатки и цену(правда для данной позиции:( ) одновременно.
Страницы: 1
Читают тему
Поддержка отраслевых решений «1С-Рарус»
Услуги 1С