helpf.pro
Регистрация
 +12 
Распечатать

Как в УТ 11.3, в справочник номенклатуры добавить остатки на складах и актуальные цены

Попросил клиент добавить в справочник номенклатуры остатки и цены на текущий момент. Нужно!? Делаем:

1. Открываем форму списка номенклатуры и в свойства СписокНоменклатуры - Настройка списка

Корректируем запрос добавляя выборку по остаткам склада, новый вариант:

Код 1C v 8.3
 ВЫБРАТЬ
СпрНоменклатура.Ссылка КАК Ссылка,
СпрНоменклатура.Код КАК Код,
СпрНоменклатура.Наименование КАК Наименование,
СпрНоменклатура.Артикул КАК Артикул,
СпрНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
СпрНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
СпрНоменклатура.СтавкаНДС КАК СтавкаНДС,
СпрНоменклатура.Родитель,
ВЫБОР
КОГДА СпрНоменклатура.ЕстьТоварыДругогоКачества
ТОГДА 4 + ВЫБОР
КОГДА СпрНоменклатура.ПометкаУдаления
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА СпрНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
ТОГДА 0
ИНАЧЕ 2
КОНЕЦ
ИНАЧЕ ВЫБОР
КОГДА СпрНоменклатура.ПометкаУдаления
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ + ВЫБОР
КОГДА СпрНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
ТОГДА 0
ИНАЧЕ 2
КОНЕЦ
КОНЕЦ КАК ИндексКартинки,
ТоварыНаСкладахОстатки1.ВНаличииОстаток КАК Остаток_Про,
ТоварыНаСкладахОстатки2.ВНаличииОстаток КАК Остаток_Лемм
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(,
Склад =Склад1
) КАК ТоварыНаСкладахОстатки1
ПО (ТоварыНаСкладахОстатки1.Номенклатура = СпрНоменклатура.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(,
Склад =Склад2
) КАК ТоварыНаСкладахОстатки2
ПО (ТоварыНаСкладахОстатки2.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
НЕ СпрНоменклатура.ЭтоГруппа
{ГДЕ
(СпрНоменклатура.Ссылка В
(ВЫБРАТЬ
Сегменты.Номенклатура
ИЗ
РегистрСведений.НоменклатураСегмента КАК Сегменты
ГДЕ
Сегменты.Сегмент =СегментНоменклатуры))}

2. Устанавливаем параметры в Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

Код 1C v 8.3
 СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("Склад1", Справочники.Склады.НайтиПоНаименованию("PRO")); 
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("Склад2", Справочники.Склады.НайтиПоНаименованию("ЛЕММ"));

Цены.Параметры.УстановитьЗначениеПараметра("КонПериода", ТекущаяДата());

Добавляем Динамический список Цены:

В свойствах произвольный запрос:

Код 1C v 8.3
 ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЦеныНоменклатурыСрезПоследних.Номенклатура,
ЦеныНоменклатурыСрезПоследних.ВидЦены,
ЦеныНоменклатурыСрезПоследних.Характеристика,
ЦеныНоменклатурыСрезПоследних.Цена
ИЗ
РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонПериода, ) КАК ЦеныНоменклатурыСрезПоследних

И для списка номенклатуры пропишем обновление цен при активизации строки

Код 1C v 8.3
 	
Цены.Отбор.Элементы.Очистить(); 
НовыйЭлементОтбора = Цены.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); 
ПолеОтбора = Новый ПолеКомпоновкиДанных("Номенклатура"); 
НовыйЭлементОтбора.ЛевоеЗначение = ПолеОтбора; 
НовыйЭлементОтбора.Использование = Истина; 
НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
НовыйЭлементОтбора.ПравоеЗначение = ?(Элемент.ТекущиеДанные <> Неопределено, Элемент.ТекущиеДанные.Ссылка,ВернутьЗначениеНоменклатура());

В результате:

Клиент доволен, а это самое главное )


Если Вам нужна аналогичная настройка, обращайтесь, контакты тут

Разместил:   Версии: | 8.3 |  Дата:   Прочитано: 33532
 +12 
Распечатать
Возможно, вас также заинтересует
Альтернативный перенос остатков между 7.7 и 8.1 (обработкой с ИТС ЗагрузкаДанныхИзТаблДокум) 2
Нашел альтернативный, практически моментальный способ переноса остатков между семерой и восьмерой (так и между восмерками). Не требуется никаких дополнительных усилий, программирования, писания обработок и т.д. и т.п. На ИТС есть обработка под наз
Ввод по строке - поиск по первым символам или в любом месте наименования 6
При разработке конфигурации, для упрощении ввода документов потребовалось настроить ввод номенклатуры по совпадению любой части наименования! В 1С 8.3 по умолчанию настройки справочника номенклатуры такие: При такой настройке, механизм поиска в
Выборка (перебор) элементов справочника 4
// Выбрать( , , , ) Номенклатура = Справочники.Номенклатура; Отбор = Новый Структура("ТипНоменклатуры"); Пусто = Перечисления.ТипыНоменклатуры.ПустаяСсылка(); Отбор.ТипНоменклатуры = Пусто; Выборка = Номенклатура.Выбрать(,,Отбор, "Наимено
Выборка из результата запроса всех вошедших в него значений группировок 4
При обходе результата запроса нередко возникает необходимость получения всех значений группировок внутри какой-либо другой группировки. Такая возможность может понадобиться, например, при выводе кросс отчета. Для обеспечения такой возможности в объек
Выбрать движения, получить выборку записей регистра накопления 2
Пример 1 : //Взаиморасчеты за период, хотя, это лучше выбирать запросом , он в примере 3 Отбор = Новый Структура("Организация", Организация); НаборЗаписей = РегистрыНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Выбрать(ПериодРегистрации, КонецМе
Посмотреть все результаты поиска похожих
Комментарии
DarkDaemon
24.10.2017 02:01Комментарий: 7
DarkDaemon

Доработал под себя. У нас один вид цен и нет характеристик, поэтому удобнее, когда цены отображаются прямо в таблице. Вот как я доработал запрос:

Код 1C v 8.3
 ...
КОНЕЦ КАК ИндексКартинки,
ТоварыНаСкладахОстатки1.ВНаличииОстаток КАК Склад1,
ТоварыНаСкладахОстатки2.ВНаличииОстаток КАК Склад2,
ТоварыНаСкладахОстатки3.ВНаличииОстаток КАК Склад3,
ЦеныНоменклатурыСрезПоследних.Цена КАК Цена
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериода, Склад =Склад1) КАК ТоварыНаСкладахОстатки1
ПО (ТоварыНаСкладахОстатки1.Номенклатура = СпрНоменклатура.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериода, Склад =Склад2) КАК ТоварыНаСкладахОстатки2
ПО (ТоварыНаСкладахОстатки2.Номенклатура = СпрНоменклатура.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(&КонПериода, Склад =Склад3) КАК ТоварыНаСкладахОстатки3
ПО (ТоварыНаСкладахОстатки3.Номенклатура = СпрНоменклатура.Ссылка)
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&КонПериода, ВидЦены =ВидЦены) КАК ЦеныНоменклатурыСрезПоследних
ПО (ЦеныНоменклатурыСрезПоследних.Номенклатура = СпрНоменклатура.Ссылка)
ГДЕ
НЕ СпрНоменклатура.ЭтоГруппа
...

А в процедуре "ПриСозданииНаСервере" в конце прописал

Код 1C v 8.3
 	СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("Склад1", Справочники.Склады.НайтиПоНаименованию("Магазин 1")); 
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("Склад2", Справочники.Склады.НайтиПоНаименованию("Магазин 2"));
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("Склад3", Справочники.Склады.НайтиПоНаименованию("Оптовый склад"));
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ВидЦены", Справочники.ВидыЦен.НайтиПоНаименованию("Розничная"));
СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("КонПериода", ТекущаяДата());


И динамический список "Цены" не нужен )

DarkDaemon
28.09.2017 01:50Комментарий: 6
DarkDaemon

Хех, амперсанд убирается в комментариях....

DarkDaemon
28.09.2017 01:49Комментарий: 5
DarkDaemon

НаписалСклад1 иСклад2 и добавил код в модуль, всё заработало ) Спасибо большущее!

all4cf
27.09.2017 18:53Комментарий: 4
all4cf

DarkDaemon, у вас видимо другой релиз УТ, и нет сегментов,

Используйте свой запрос,просто добавив в него выборку по остаткам

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

Или из нище представлено запроса должно быть понятно какой, это тип. Все же это инструкции для программистов, у которых есть хоть небольшой опыт )

Склад1 и 2 это параметры, они устанавливаются ПриСозданииНаСервере, в запросе кудато пропал символ который обозначает параметр

Код 1C v 8.3
 &наСервере
Функция  ВернутьЗначениеНоменклатура()
Возврат Справочники.Номенклатура.ПустаяСсылка();
КонецФункции
&наСервере
Функция  ВернутьЗначениеСклад()
Возврат Справочники.Склады.ПустаяСсылка();
КонецФункции
DarkDaemon
26.09.2017 04:28Комментарий: 3
DarkDaemon

И еще одно поле не найдено в запросе "СписокНоменклатура"

{(57, 23)}: Поле не найдено "СегментНоменклатуры"

Сегменты.Сегмент =<<?>>СегментНоменклатуры))}

DarkDaemon
26.09.2017 04:26Комментарий: 2
DarkDaemon

Хотелось бы более подробные руководства к действию. Вот что пришлось додумывать:

1) После создания динамического списка Цены, ставим галочку "Произвольный Запрос", тогда появится кнопка "Настройка списка - Открыть"

2) В порядке действий поменять местами "Процедура ПриСозданииНаСервере" и создание динамического списка Цены, иначе конфигуратор выдает ошибку

3) На списке цены надо щелкнуть правой кнопкой и выбрать "Добавить" - "Поле", например "ЦеныНоменклатура" и указать путь к данным "Цены.Номенклатура"

Вопросы:

1) В запросе "СписокНоменклатура" ошибка:

Ошибка получения информации набора данных по причине:

Ошибка в запросе набора данных по причине:

{(37, 13)}: Поле не найдено "Склад1"

Склад = <<?>>Склад1

Как добавить эти поля Склад1, Склад2 к списку "СписокНоменклатура"?

2) При проверке модуля вылазит ошибка "Процедура или функция с указанным именем не определена (ВернутьЗначениеНоменклатура)"

ildary
21.09.2017 14:36Комментарий: 1
ildary

Все работает, вот только надо добавить, что теперь конфигурация стала измененной и при каждом обновлении теперь придется её проверять. Сократить проблемы можно тем, что максимум изменений можно сделать программно, потому что сравнивать код (и переносить его из базы в базу) проще, чем изменения свойств.

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