Хранение цены закупки

1. user992694 30.10.18 12:40 Сейчас в теме
Приветствую всех.
Занимаюсь изучением программирование/конфигурирования в 1с и возник такой вопрос.

Ситуация следующая что есть некая мифическая организация купи/продай. И есть необходимость хранить цену закупки, для формирования цены продажи. Цену закупки решил хранить в непериодическом РС. т.к. одна и та же номенклатура может быть закуплена в разное время то и стоимость закупки может быть разная. Для решения данного вопроса решил внести еще одно измерение, партия. Итого регистр имеет два измерения "Номенклатура" и "Партия" и ресурс "Цена закупки". Вроде бы все хорошо, но при формировании документа продажи нужно указать номенклатуру и партию. И вот тут возникает проблема.
Собственно вопросы:
1. корректна ли вообще такая структура работы или же изначально идея плохая.
2. как получить перечень партий для данной номенклатуры, что бы оператор выбрал ту партию из которой хочет отгружать номенклатуру. Хотелось бы в виде списка доступных.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
12. mifka186 8 15.11.18 17:31 Сейчас в теме
(1)
Занимаюсь изучением программирование/конфигурирования в 1с

Для старта неплохо бы пройти хотя бы бесплатный курс Программист 1С за 21 день
13. user992694 15.11.18 18:16 Сейчас в теме
(12)
Ммм, прошел два платных курса от 1с. Без практики и решения задач это малозначительно.
16. mifka186 8 15.11.18 18:36 Сейчас в теме
(13)Я старался всегда оглядываться на типовые конфигурации. Смотрел бизнес процесс который мне подходит, а потом пробовал разобраться как он устроен "изнутри". В любом случае бесплатный курс не значит что он плохой.
2. DmitriiKopasov 13 30.10.18 13:05 Сейчас в теме
Привет.
Что за конфигурация?
Типовая и самописная?
Просто если типовая (например УТ), то этот функционал реализован уже.
3. YannikAlx 43 30.10.18 13:17 Сейчас в теме
Порой народ понятия не имея о существующем функционале в типовых изобретает тааакие велосипеды!
Буквально месяц назад здесь обсуждался вопрос по ERP - возможности Характеристик номенклатуры "программист" заменил своим справочником "Варианты исполнения". А мы пытались понять почему отчет хреново выводит данные по остаткам...
4. user992694 30.10.18 13:39 Сейчас в теме
Это самописка. Пишу сам конфигурацию, с нуля, дабы понять на опыте что и как работает.
Если мой алгоритм работы в корне не верен, был бы признателен, если бы подсказали как правильнее сделать. Именно логику.
5. antz 30.10.18 13:41 Сейчас в теме
(4) Лучше регистр накопления, и в нем учитывать еще остаток по партии, чтобы оператор не списывал по цене одной и той же партии, пока не надоест. Перечень получать, естественно, запросом, лепить свою форму подбора и в нее выводить.
6. user992694 30.10.18 13:46 Сейчас в теме
(5)правильное замечание. На самом деле я это уже учитываю. Разбил на два регистра. Один, как уже указал, с ценами а второй регистр накопления, где ведутся остатки в разрезе партии и номенклатуры. В принципе можно было держать все в одном. А вот насчет как выводить рещультат запроса в отдельную форму, об этом как то не думал. Спасибо за направление, подумаю/почитаю
7. user992694 15.11.18 06:52 Сейчас в теме
Подниму тему. продолжаю разбираться. написано следующее:

&НаКлиенте
Процедура ЗИПНаименованиеПриИзменении(Элемент)
	ТекущаяНоменклатура=Элементы.ЗИП.ТекущиеДанные.Номенклатура;
	ДанныеИзРегистраНакопления=ПолучениеДанныхИзРегистра(ТекущаяНоменклатура);
	Элементы.ЗИП.ТекущиеДанные.ЦенаЗакупки=ВыбратьИзМеню(ДанныеИзРегистраНакопления);
	
КонецПроцедуры
	
&НаСервере
Функция ПолучениеДанныхИзРегистра(ТекущаяНоменклатура) 
	
	        	//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОстаткиНоменклатурыОстатки.Цена
		|ИЗ
		|	РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
		|ГДЕ
		|	ОстаткиНоменклатурыОстатки.Номенклатура.Ссылка = &Ссылка
		|	И ОстаткиНоменклатурыОстатки.КолличествоОстаток > 0";
	
	Запрос.УстановитьПараметр("Ссылка", ТекущаяНоменклатура);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	СписокВыбора=Новый СписокЗначений;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		СписокВыбора.Добавить(ВыборкаДетальныеЗаписи);
	КонецЦикла;
	
	//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


КонецФункции
Показать


По факту выполнения получаю ошибку

{Документ.АктВыполненыхРабот.Форма.ФормаДокумента.Форма(78)}: Ошибка при вызове метода контекста (ВыбратьИзМеню)
Элементы.ЗИП.ТекущиеДанные.ЦенаЗакупки=ВыбратьИзМеню(ДанныеИзРегистраНакопления);
по причине:
Несоответствие типов (параметр номер '1')


Уже голову, сломал по решению данной задачи.
8. DenisCh 15.11.18 09:17 Сейчас в теме
(7) Возвращать из функции значение будет лично Денис Иванович?
user992694; +1 Ответить
9. user992694 15.11.18 09:53 Сейчас в теме
Да да, он самый, уже разобрался с этим.
Итоговый код :
&НаКлиенте
Процедура ЗИПНаименованиеПриИзменении(Элемент)
	ТекущаяНоменклатура=Элементы.ЗИП.ТекущиеДанные.Номенклатура;
	ДанныеИзРегистраНакопления=ПолучениеДанныхИзРегистра(ТекущаяНоменклатура);
	Элементы.ЗИП.ТекущиеДанные.ценазакупки=ВыбратьИзСписка(ДанныеИзРегистраНакопления);
			
	
КонецПроцедуры
	
&НаСервере
Функция ПолучениеДанныхИзРегистра(ТекущаяНоменклатура) 
	
	        	//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОстаткиНоменклатурыОстатки.Цена
		|ИЗ
		|	РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
		|ГДЕ
		|	ОстаткиНоменклатурыОстатки.Номенклатура.Ссылка = &Ссылка
		|	И ОстаткиНоменклатурыОстатки.КолличествоОстаток > 0";
	
	Запрос.УстановитьПараметр("Ссылка", ТекущаяНоменклатура);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	СписокВыбора=Новый СписокЗначений;
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		СписокВыбора.Добавить(ВыборкаДетальныеЗаписи.Цена);
	КонецЦикла;
	Возврат СписокВыбора;

КонецФункции
Показать

Теперь новая напасть. ценазакупа подставляется в таблицу, только если тип колонки "строка" что не есть гуд.
10. user992694 15.11.18 11:30 Сейчас в теме
Перепроверил типы, везде стоят типы "Число". Однако
Элементы.ЗИП.ТекущиеДанные.ценазакупки=ВыбратьИзСписка(ДанныеИзРегистраНакопления);

упорно не заполняет ячейку. если в конфигураторе поставить что у столбца табличной части "ЦенаЗакупки" тип "строка", тогда начинает заполняться.
11. mifka186 8 15.11.18 17:28 Сейчас в теме
(10) Возможно затык в том, что функция возвращает список значений, в ячейку с типом число.

1. корректна ли вообще такая структура работы или же изначально идея плохая.

Цена закупки обычно явно нигде в документах продаж не указывается, а рассчитывается исходя из учетной политики при расчете себестоимости. Цена продажи товара не должна рассчитываться в документе продажи, а должна быть рассчитана заранее (типовая УТ - документ "установка цен номенклатуры"). Вы же в магазине заранее знаете сколько стоит булка хлеба, даже если её еще не начали пробивать на кассе. А уж чтобы сам продавец определил по какой цене продать вам булку - это из разряда сам владелец бизнеса, сам продавец.

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

Если при продаже необходимо указывать партию поступления, то обычно реализуют отдельную форму подбора партий. Для этого должно хватить одного регистра накопления "остатки номенклатуры по партиям". Измерения Партия, Номенклатура. Ресурс Количество, Сумма. Цена, а точнее себестоимость рассчитывается Сумма/Количество.
14. user992694 15.11.18 18:20 Сейчас в теме
(11)но функция выбратьизсписка возвращает одно значение. Пробовал писать это значение в промежуточную переменную, и явно указывать что это число, а уже из этой переменной присваивать значение в ячейку. Причем если у ячейки в табличной части сменить тип на строка, то присваивается не список а выбранное значение.
15. mifka186 8 15.11.18 18:34 Сейчас в теме
(14)Смотрим синтасис-помощник
ВыбратьИзСписка (ChooseFromList)
Синтаксис:
ВыбратьИзСписка(<СписокЗначений>, <ЭлементФормы>, <НачальноеЗначение>)
Параметры:
.......
Возвращаемое значение:
Тип: ЭлементСпискаЗначений; Неопределено.


Возвращает функция не число, а элемент списка значений.
17. user992694 16.11.18 04:10 Сейчас в теме
(15)Победил :) все оказалось просто. :)
18. progr-2008 118 17.11.18 01:12 Сейчас в теме
(17)Лучше все-таки сначала типовые смотреть.
19. progr-2008 118 17.11.18 01:13 Сейчас в теме
(17)Типовые дают наиболее рациональные и универсальные варианты.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот