|
Помогите спроектировать регистр | ☑ | ||
---|---|---|---|---|
0
pro3ri
30.04.15
✎
12:58
|
День добрый!
поставили тз: Создайте регистр для хранения остатков товаров, при этом номенклатура должна храниться в разрезе качества (степеней брака). Количество в регистре храниться в базовых единицах измерения. http://savepic.ru/6955423.png сделал, поправьте если ошибся |
|||
1
jsmith82
30.04.15
✎
12:58
|
реквизит накуй
|
|||
2
Ненавижу 1С
гуру
30.04.15
✎
12:59
|
зачем реквизит?
|
|||
3
jsmith82
30.04.15
✎
12:59
|
В остальном молодец, справился
|
|||
4
pro3ri
30.04.15
✎
12:59
|
(2) (1) дак, Количество в регистре храниться в базовых
единицах измерения. |
|||
5
zenik
30.04.15
✎
13:02
|
(4) базовая единица - привязывается к номенклатуре, а не к регистру.
|
|||
6
jsmith82
30.04.15
✎
13:02
|
(4) ну ты.... ваще....
сам понял чо сказал? |
|||
7
pro3ri
30.04.15
✎
13:04
|
в конторе сделано так, что Номенклатура док поступление товаров и услуг может быть в разных ед измерения, и в справочнике ЕдиницыИзмеренияНоменклатуры есть коэффициенты пересчета
|
|||
8
jsmith82
30.04.15
✎
13:05
|
(7) Ну так расчёт в базовую единицу выполняется до записи в регистр. В регистр уже будет в базовых
|
|||
9
pro3ri
30.04.15
✎
13:05
|
(8) согласен однако
|
|||
10
pro3ri
30.04.15
✎
13:06
|
всем спс!
|
|||
11
jsmith82
30.04.15
✎
13:06
|
Допустим, карандаш
2 единицы: шт, упак (коэффициент 10) Пришло 2 упак Рассчитываешь в базовую - 20 шт В регистр пишешь Карандаш, Новый, 20 |
|||
12
pro3ri
30.04.15
✎
14:18
|
Процедура ОбработкаПроведения(Отказ, Режим)
// регистр ОстаткиТоваров Приход Движения.ОстаткиТоваров.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ОстаткиТоваров.ДобавитьПриход(); Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Качество = ТекСтрокаТовары.Качество; Если ТекСтрокаТовары.ЕдИзм = ТекСтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения Тогда Движение.Количество = ТекСтрокаТовары.Количество; Иначе Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЕдиницыИзмеренияНоменклатуры.Коэффициент, | ЕдиницыИзмеренияНоменклатуры.ЕдиницаИзмерения |ИЗ | Справочник.ЕдиницыИзмеренияНоменклатуры КАК ЕдиницыИзмеренияНоменклатуры |ГДЕ | ЕдиницыИзмеренияНоменклатуры.Владелец = &Владелец | И ЕдиницыИзмеренияНоменклатуры.Наименование = &Наименование"; Запрос.УстановитьПараметр("Владелец", ТекСтрокаТовары.Номенклатура); Запрос.УстановитьПараметр("Наименование", ТекСтрокаТовары.ЕдИзм.Наименование); РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); ВыборкаДетальныеЗаписи.Следующий(); Движение.Количество = ТекСтрокаТовары.Количество * ВыборкаДетальныеЗаписи.Коэффициент; КонецЕсли; КонецЦикла; КонецПроцедуры не думаю что сильно оптимально, скорее надо создать реквизит дока СуммаПоТЧВБазЕд, не? |
|||
13
jsmith82
30.04.15
✎
14:20
|
пестец
|
|||
14
User_Agronom
30.04.15
✎
14:22
|
(12) Запрос в цикле. Не сдал.
|
|||
15
jsmith82
30.04.15
✎
14:24
|
Процедура ОбработкаПроведения(Отказ, Режим)
Движения.ОстаткиТоваров.Записывать = Истина; Запрос = Новый Запрос(); Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка); Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура КАК Номенклатура, | Товары.Качество КАК Качество, | Товары.Количество * Товары.ЕдиницаИзмерения.Коэффициент КАК Количество |ИЗ | Документ.ПриходнаяНакладная.Товары КАК Товары |ГДЕ | Товары.Ссылка = &Ссылка"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Движение = Движения.ОстаткиТоваров.ДобавитьПриход(); Движение.Период = Дата; Движение.Номенклатура = Выборка.Номенклатура; Движение.Качество = Выборка.Качество; Движение.Количество = Выборка.Количество; КонецЦикла; КонецПроцедуры |
|||
16
Ёпрст
30.04.15
✎
14:25
|
(12) в тч дока втыкаешь Коэффициент, при записи движений
пихаешь Рег.Количество = Количество*Коэффициент; наслаждаешься |
|||
17
Ёпрст
30.04.15
✎
14:25
|
и никаких запросов там вообще не надо, и друга из Сибая не слушай - а то тоже, забухаешь
|
|||
18
Ненавижу 1С
гуру
30.04.15
✎
14:26
|
(15) не нужен там цикл, результат запроса выгружай в ТЗ, а набор записей заполни по ТЗ
|
|||
19
jsmith82
30.04.15
✎
14:26
|
>>Если ТекСтрокаТовары.ЕдИзм = ТекСтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения Тогда
ТекСтрокаТовары.ЕдИзм тип СправочникСсылка.ЕдиницыИзмеренияНоменклатуры (как ты назвал) ТекСтрокаТовары.Номенклатура.БазоваяЕдиницаИзмерения тип КлассификаторЕдиницИзмерения |
|||
20
jsmith82
30.04.15
✎
14:28
|
ну или без запроса пишешь
Движение.Количество = ТекСтрокаТовары.ЕдиницаИзмерения.Коэффициент * ТекСтрокаТовары.Количество |
|||
21
jsmith82
30.04.15
✎
14:29
|
(17) с фига ли запрос не нужен
в каноничном случае нужен я конеш понимаю, что кэширование все дела, но всё-таки |
|||
22
jsmith82
30.04.15
✎
14:30
|
по ходу ТС как-то криво запроектировал единицы измерений
|
|||
23
pro3ri
30.04.15
✎
17:46
|
(22) пришлось поработать:
Процедура ОбработкаПроведения(Отказ, Режим) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЕдиницыИзмеренияНоменклатуры.Владелец КАК Владелец, | ЕдиницыИзмеренияНоменклатуры.Наименование КАК Наименование, | ЕдиницыИзмеренияНоменклатуры.Коэффициент КАК Коэффициент |ИЗ | Документ.ПоступлениеТоваров КАК ПоступлениеТоваров | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмеренияНоменклатуры КАК ЕдиницыИзмеренияНоменклатуры | ПО (ПоступлениеТоваров.Товары.ЕдИзм.Наименование = ЕдиницыИзмеренияНоменклатуры.Наименование) |ГДЕ | ЕдиницыИзмеренияНоменклатуры.Владелец В | (ВЫБРАТЬ | ПоступлениеТоваровТовары.Номенклатура | ИЗ | Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары | ГДЕ | ПоступлениеТоваровТовары.Ссылка = &Ссылка) | И ПоступлениеТоваров.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",Ссылка); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Для каждого СтрокаТЧ Из Товары Цикл СтрокаТЧ.Коэффициент = РезультатЗапроса.Найти(СтрокаТЧ.Номенклатура).Коэффициент; КонецЦикла; Движения.ОстаткиТоваров.Записывать = Истина; Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ОстаткиТоваров.ДобавитьПриход(); Движение.Период = Дата; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.Качество = ТекСтрокаТовары.Качество; Движение.Количество = ТекСтрокаТовары.Количество * ТекСтрокаТовары.Коэффициент; КонецЦикла; |
|||
24
2S
30.04.15
✎
17:48
|
зачем два цикла друг за другом?
|
|||
25
zenik
30.04.15
✎
17:50
|
При проведении изменять коэфициент? серьезно? Коэфициент должен быть проставлен при заполнении ТЧ документа.
|
|||
26
Ёпрст
30.04.15
✎
17:51
|
(24) так же веселее, как и получение наименования в тексте запроса
|
|||
27
pro3ri
30.04.15
✎
17:51
|
(24) да, согл:
Процедура ОбработкаПроведения(Отказ, Режим)// Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЕдиницыИзмеренияНоменклатуры.Владелец КАК Владелец, | ЕдиницыИзмеренияНоменклатуры.Наименование КАК Наименование, | ЕдиницыИзмеренияНоменклатуры.Коэффициент КАК Коэффициент |ИЗ | Документ.ПоступлениеТоваров КАК ПоступлениеТоваров | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ЕдиницыИзмеренияНоменклатуры КАК ЕдиницыИзмеренияНоменклатуры | ПО (ПоступлениеТоваров.Товары.ЕдИзм.Наименование = ЕдиницыИзмеренияНоменклатуры.Наименование) |ГДЕ | ЕдиницыИзмеренияНоменклатуры.Владелец В | (ВЫБРАТЬ | ПоступлениеТоваровТовары.Номенклатура | ИЗ | Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары | ГДЕ | ПоступлениеТоваровТовары.Ссылка = &Ссылка) | И ПоступлениеТоваров.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка",Ссылка); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); Движения.ОстаткиТоваров.Записывать = Истина; Для каждого СтрокаТЧ Из Товары Цикл СтрокаТЧ.Коэффициент = РезультатЗапроса.Найти(СтрокаТЧ.Номенклатура).Коэффициент; Движение = Движения.ОстаткиТоваров.ДобавитьПриход(); Движение.Период = Дата; Движение.Номенклатура = СтрокаТЧ.Номенклатура; Движение.Качество = СтрокаТЧ.Качество; Движение.Количество = СтрокаТЧ.Количество * СтрокаТЧ.Коэффициент; КонецЦикла; |
|||
28
Ёпрст
30.04.15
✎
17:52
|
(270 ничего, как (16) осилишь, так всё перепишешь..
|
|||
29
pro3ri
30.04.15
✎
17:56
|
(25) коэффиц находятся в справочнике ЕдиницыИзмеренияНоменклатуры, менеджер при поступлении указывает любую ед изм. из справочника ЕдиницыИзмеренияНоменклатуры
|
|||
30
pro3ri
30.04.15
✎
17:57
|
+ а родителем спр ЕдиницыИзмеренияНоменклатуры явл спр Номенклатура
|
|||
31
jsmith82
30.04.15
✎
17:58
|
ты бы глянул как в типовых сделано
в той же ут 10.3 |
|||
32
jsmith82
30.04.15
✎
17:58
|
чёто какой-то велосипед у тебя с квадратными колёсами
|
|||
33
zenik
30.04.15
✎
21:05
|
(29) житейская практика показывает, что коэффициент будут менять. Так же, она подсказывает, что документы будут перепроводить задним числом (или исправлять или последовательность восстанавливать) и получится, что остаток твой будет меняться.
Поэтому коэффициент должен быть прописан в документ в момент заполнения и храниться в нем. |
|||
34
1С_Fitness
30.04.15
✎
21:31
|
||||
35
ДенисЧ
30.04.15
✎
21:43
|
(33) Как может поменяться количество штук в упаковке? Если оно поменялось, то это уже другая упаковка.
А за заднее число - руки отрывать |
|||
36
zenik
01.05.15
✎
08:55
|
(35) Я не имею в виду ситуацию, с другой упаковкой, я имею в виду ситуацию с ошибкой при изначальном назначении. К примеру упаковка чая, "всю жизнь" продавали упаковкой, а тут решили открыть и продавать пакетики. Продавать 0.001 упаковки "не гуманно", и поменяли коэффициент у базовой единицы и вуаля.
Руки то отрывать - понятно... Прям даже рад, что у Вас никто не ошибается. Или отсутствие рук не позволяет? :) |
|||
37
jsmith82
01.05.15
✎
11:03
|
(36) На самом деле это от балды
Вот договоры, например, нельзя менять после проведения документов |
|||
38
ДенисЧ
01.05.15
✎
11:40
|
(36) так и продавай штуку, а не упаковку
|
|||
39
zenik
01.05.15
✎
12:04
|
(38) Ды это не мне надо. Ты не видишь, что человек изменяет коэффициент у товара при его проведении? Это норма да?
|
|||
40
pro3ri
05.05.15
✎
10:25
|
(33) однако данное дело учтено-с:
это справ-к номенклатура: Процедура ПередЗаписью(Отказ) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки"; РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Отказ = Истина; Сообщить("Нельзя изменять базовую единицу уже проведенной номенклатуры"); КонецЕсли; КонецПроцедуры |
|||
41
pro3ri
05.05.15
✎
10:29
|
если поточнее то так:
Процедура ПередЗаписью(Отказ) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ОстаткиТоваровОстатки.Номенклатура |ИЗ | РегистрНакопления.ОстаткиТоваров.Остатки КАК ОстаткиТоваровОстатки |ГДЕ | ОстаткиТоваровОстатки.Номенклатура = &Номенклатура"; Запрос.УстановитьПараметр("Номенклатура", Ссылка); РезультатЗапроса = Запрос.Выполнить(); Если Не РезультатЗапроса.Пустой() Тогда Отказ = Истина; Сообщить("Нельзя изменять базовую единицу уже проведенной номенклатуры"); КонецЕсли; КонецПроцедуры |
|||
42
Ёпрст
05.05.15
✎
10:33
|
(41) п....ц
|
|||
43
Бубка Гоп
05.05.15
✎
10:41
|
(41) У вас интересный подход к решению проблем, которые вы сами себе и придумываете. Оригинальный. Однако с такими решениями ваша конфигурация далеко не уплывет. Лучше изучите реализацию в типовом решении.
|
|||
44
zenik
05.05.15
✎
10:45
|
Товар пришел - товар ушел = остаток 0 - можем менять коэфициент... перепроводить приходы по товару - получать интересный результат.
Вы бы действительно, посмотрели парочку типовых товароучетных. з.ы. Целиком бы эту нетленку глянуть :) |
|||
45
Бубка Гоп
05.05.15
✎
10:50
|
(44) +1. ТС, просим в пятницу создать ветку ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |