Имя: Пароль:
1C
1С v8
Регистры сведений
0 Nub666
 
naïve
07.05.24
17:29
Добрый день. Я новичок в 1Си буду рад, если поделитесь литературой. Перейдем к сути проблемы

И так, у меня есть "ЦенаНаТоварыВМагазинах". В нем есть:

1. Измерения:
- Адрес. Ссылается на справочник "Адреса"
- Товар. Ссылается на справочник "Товары"

2. Ресурсы:
- Цена. Числовой
- ДатаНачалаДействияЦены. Дата
- ДатаОкончанияДействияЦены. Дата

Вопрос: Как мне в зависимости от даты проведения документа подтягивать цены?
Один из запросов на подтягивание цены:

&НаКлиенте
Процедура ТабличнаяЧасть1ТоварПриИзменении(Элемент)
	// Получаем текущий адрес из документа
	ТекущийАдрес = ЭтаФорма.Объект.Адрес;
	// Получаем текущий товар из табличной части
	Товар = ЭтаФорма.ТекущийЭлемент.ТекущиеДанные.Товар;
	// Получаем текущую дату из объекта
	Дата = Объект.Дата;
	// Вызываем функцию для получения цены
	Информация = Тралала(Товар, Дата, ТекущийАдрес);
	// Устанавливаем цену для текущей строки табличной части
	ЭтаФорма.ТекущийЭлемент.ТекущиеДанные.Цена = Информация.Цена;
   	// Устанавливаем Сумму для текущей строки табличной части
	ЭтаФорма.ТекущийЭлемент.ТекущиеДанные.Итог = Информация.Цена * ЭтаФорма.ТекущийЭлемент.ТекущиеДанные.Количество;
	// Выводим цену в сообщении (для проверки)
	Сообщить(Информация.Цена);
КонецПроцедуры

&НаСервереБезКонтекста
Функция Тралала(Товар, Дата, Адрес)
	Результат = Новый Структура("Цена", 0);
		
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Цены.Цена КАК Цена
		|ИЗ
		|	РегистрСведений.ЦеныНаТоварыВМагазинах.СрезПоследних(&Дата, Товар = &Товар И Адрес = &Адрес) КАК Цены";
	
	Запрос.УстановитьПараметр("Адрес", Адрес);
	Запрос.УстановитьПараметр("Дата", Дата);
	Запрос.УстановитьПараметр("Товар", Товар);
	
	РезультатЗапроса = Запрос.Выполнить();
			
	Если НЕ РезультатЗапроса.Пустой() Тогда
		Выборка = РезультатЗапроса.Выбрать();
		Если Выборка.Следующий() Тогда
			Результат.Цена = Выборка.Цена;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Результат;
КонецФункции
1 Волшебник
 
07.05.24
17:28
Тралала - плохое название функции
2 mikecool
 
07.05.24
17:28
когда же ИИ уже научится?
3 mikecool
 
07.05.24
17:29
+2 искать информацию в интернете
4 ЖНЕЦ
 
07.05.24
17:30
Как мне в зависимости от даты проведения документа подтягивать цены? - куда и зачем?
что ты хочешь в итоге сделать?

у тебя жесть замечательная Тралала (один из параметров дата)

провели документ Установка хитрых цен
Адрес, Товар, 07.05.2024 16:56:00 - 450 руб.
вот эта цена и будет на эту дату
5 Nub666
 
naïve
07.05.24
17:45
Я хочу в зависимости от даты проведения подстраивалась цена, а она зависит от текущего дня https://disk.yandex.ru/i/fd10lm-IoDK7iw
6 Aleksey
 
07.05.24
17:48
Зачем нужны ДатаНачалаДействияЦены и ДатаОкончанияДействияЦены? Чтобы получить гемор на ровном месте?
7 Nub666
 
naïve
07.05.24
17:48
(1) Знаю
(2) Без понятия. Мне ии никак не решает проблему с 1С
8 Nub666
 
naïve
07.05.24
17:49
(6) А как ты предлагаешь?
9 Aleksey
 
07.05.24
17:50
а что будет если эти даты пересекаются?
магазин 1 товар 1 цена 100 рублей дата начала 01.05.24 дата окончания 10.05.24
Магазин 1 товар 1 цена 200 рублей дата начала 02.05.24 дата окончания 08.05.24

Если мы проводим документ текущей датой, то какая цена будет и почему?
10 Aleksey
 
07.05.24
17:52
(8) забыть о них как страшный сон
сделать периодическим, подчинённым регистратору. и тогда срез последних вернет тебе цену актуальную на конкретную дату
11 Aleksey
 
07.05.24
17:57
У тебя регистр не периодический, т.е. бесполезно передавать ему период и использовать срез последних
12 Nub666
 
naïve
07.05.24
17:59
(11) Как быть? Что нужно сделать? Хочу, чтобы цена подтягивалась в диапазоне выбранных дат
13 Aleksey
 
07.05.24
19:18
(9) Не делать так как ты делаешь
А если именно с таким регистром то нужен отбор не по периоду а руками через отбор искать во всем регистре, что очень долго
Ведь никто не может исключить что кто то 1 января установит период действия декабрь следующего года (потому что пьяный был), поэтому нужно отбирать те записи где дата документа в диапозоне с ДатаНачалаДействияЦены по ДатаОкончанияДействияЦены. Что в любом случае не снимает проблему в (9), когда в заданном диапозоне может быть 25 уникальных цен
P.s. это мы еще не рассматриваем ситуацию когда дата начала и дата окончания не указана
14 Aleksey
 
07.05.24
19:20
ТАк что тебе решать что сделать. я бы начал бы с нуля, с проектирования регистра. Не исключено что нужно будет добавить еще виды цен (акция, распродажа)
15 AlexeyKh
 
08.05.24
10:50
(12) не знаешь как делать?
Открывай любую типовую базу, смотри, как там, это, УЖЕ ДАВНО сделано!!!
16 Волшебник
 
08.05.24
10:55
(15) Послал так послал...
17 Garykom
 
гуру
08.05.24
11:07
(0) 1. Даты перенеси в измерения
2. Или убрать даты и сделать РС периодическим, но будет сложней с ним работать, хотя экономия места
18 Волшебник
 
08.05.24
11:08
(0) Справочник "Адреса" — плохое название для справочника.
Правильнее "Магазины".
19 Garykom
 
гуру
08.05.24
11:09
(18) Может лучше Склады?
20 Волшебник
 
08.05.24
11:17
(19) цена на складе? не... У него регистр ЦенаНаТоварыВМагазинах
21 DJ Anthon
 
08.05.24
11:17
(16) заметил такую тенденцию ))
нулевые - делаю такую вот задачу, вылазит ошибка, не могу понять
десятые - расскажите, как сделать такую задачу
двадцатые - сделайте за меня работу плиз
22 Волшебник
 
08.05.24
11:19
(21) Скоро будут тупо промты отправлять:

УТ. Заказ. Добавить скидки. Гипердетализация. Фотореалистично. Красивый программный код.
23 Garykom
 
гуру
08.05.24
11:25
(22) И в ответ получать дикпик ))
24 mmg
 
08.05.24
11:36
(23) Если бы...
Будут получать скидки. Представь, у кого-то есть какая-то учетная система. Там есть документы Заказ. Но в этих документах нет скидок. Человек говорит: "Мне нужны скидки в заказах". А ему в ответ: "Сделано. Пользуйся"
25 Волшебник
 
08.05.24
11:40
(24)+ С Вас 10 биткоинов.
26 maxab72
 
08.05.24
11:50
2(21)
девяностые - есть задача, решил так, а можно сделать красивее, проще и короче?
27 maxab72
 
08.05.24
11:52
(25) и эти 10 бк ИИ потратит на наём собственного сисадмина, лояльного к именно этому ИИ...
28 Волшебник
 
08.05.24
11:55
(27) Купит себе новую железяку https://habr.com/ru/news/810523/
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn