|
Регистр Накопления ЗаказыПоставщикам | ☑ | ||
---|---|---|---|---|
0
ColonelAp4u
09.12.14
✎
12:38
|
Подскажите как сделать правильный расход в регистре? Вот код движения
Для Каждого ТекСтрокаТовары Из Товары Цикл Движение = Движения.ЗаказыПоставщикам.Добавить(); Движение.ВидДвижения = ВидДвиженияНакопления.Расход; Движение.Период = Дата; Движение.ЗаказПоставщику = ДокументОснование; Движение.СтатусПартии = "Купленный"; Движение.Номенклатура = ТекСтрокаТовары.Номенклатура; Движение.ХарактеристикаНоменклатуры = ТекСтрокаТовары.ХарактеристикаНоменклатуры; Движение.Цена = ТекСтрокаТовары.Цена; Движение.ЕдиницаИзмерения = ТекСтрокаТовары.ЕдиницаИзмерения; Движение.Количество = ТекСтрокаТовары.Количество; КонецЦикла; В документе расхода товара может быть больше чем в приходе но отнять из регистра он же должен тоже что и приход? |
|||
1
Жан Пердежон
09.12.14
✎
12:39
|
попробуй остаки сначала получить....
|
|||
2
shuhard
09.12.14
✎
12:43
|
(0)[В документе расхода товара может быть больше чем в приходе но отнять из регистра он же должен тоже что и приход?
] да нет возможно |
|||
3
ColonelAp4u
09.12.14
✎
12:44
|
(2) вообще не понятен ваш ответ
|
|||
4
pessok
09.12.14
✎
12:45
|
скопируй движения из ПТиУ
|
|||
5
ColonelAp4u
09.12.14
✎
12:46
|
Допустим ЗаказПоставщику Сделал движение приход 5 шт чего-то а переместили 10 шт он же не должен из регистра отнять 10 а всего лишь 5
|
|||
6
Alex S D
09.12.14
✎
12:48
|
Заказ - это план, перемещение - это факт. По моему ты чего-то путаешь
|
|||
7
ColonelAp4u
09.12.14
✎
12:51
|
(6) Факт фактом а разве не должно с регистра уйти именно столько сколько было по плану? просто это розница и тут вообще движений нет и не было сам дописывал
|
|||
8
Михаил Козлов
09.12.14
✎
12:52
|
(5) Почему не должен: сколько напишите, столько и спишет.
|
|||
9
pessok
09.12.14
✎
12:53
|
(5) а причем тут перемещение вообще? заказ поставщику закрывается либо закрытием заказов поставщикам, либо птиу. соответственно в каждой из ситуаций надо получить остаток по сделке и закрыть на него
|
|||
10
ColonelAp4u
09.12.14
✎
12:57
|
Дело в том что я при открытии формы списка документа обращаюсь к регистру через запрос (заказ может быть исполнен не полностью) и я спрашиваю какие заказы есть вообще у которых КоличествоОстаток > 0
|
|||
11
Alex S D
09.12.14
✎
12:58
|
(7) Ну если у тебя Перемещение выступает в роли поступления.. то, например в типовой УТ данный регистр уйдет в минус. С чего ты взял что так должно быть? Это ошибка в учете скорее всего
|
|||
12
ColonelAp4u
09.12.14
✎
12:58
|
и один из вчерашних заказов который был исполнен на половину не отобразился вообще в списке
|
|||
13
ColonelAp4u
09.12.14
✎
12:59
|
да регистр наверное уходит в минус
|
|||
14
ColonelAp4u
09.12.14
✎
13:01
|
это база создана для ресторана что бы удобно делать перемещение товаров в магазины. учет не важен должно просто делаться перемещение на основании заказа а потом в УТ это попадает как перемещение на основании Внутреннего заказа
|
|||
15
Михаил Козлов
09.12.14
✎
13:05
|
(14) Чтобы не было минусов в типовых делается КонтрольОстатков
|
|||
16
ОбычныйЧеловек
09.12.14
✎
13:08
|
(15) Шикарное решение (как впрочем и любое другое решение от 1С)...
|
|||
17
ColonelAp4u
09.12.14
✎
13:18
|
(15) у меня из за того что отнимается больше слетел весь регистр все данные попутались
|
|||
18
ColonelAp4u
09.12.14
✎
13:19
|
(15) как выполнить контроль остатков?
|
|||
19
ОбычныйЧеловек
09.12.14
✎
13:23
|
(18) Не слушай глупости которые написаны в (15)
Закрывай регистр "заказы поставщикам" по принципу закрытия регистра например "Тавары на складах" и т.д. а не тупо пиши данные в регистр по принципу "что есть в табличной части то и пишу" |
|||
20
ColonelAp4u
09.12.14
✎
13:25
|
(19) я извиняюсь программировать только начал и как делается закрытие регистра
|
|||
21
Михаил Козлов
09.12.14
✎
13:25
|
(19) И какой-же принцип закрытия регистра "Товары на складах", так что минусов не будет?
|
|||
22
Михаил Козлов
09.12.14
✎
13:25
|
(20) В такой ситуации невредно смотреть, как делается в типовых.
|
|||
23
ColonelAp4u
09.12.14
✎
13:27
|
Уважаемые давайте е спорить Михаил подскажите как сделать алгоритм что бы не создавать минусы в регистре
|
|||
24
ColonelAp4u
09.12.14
✎
13:28
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | ЗаказыПоставщикамОстатки.КоличествоОстаток |ИЗ | РегистрНакопления.ЗаказыПоставщикам.Остатки КАК ЗаказыПоставщикамОстатки |ГДЕ | ЗаказыПоставщикамОстатки.КоличествоОстаток = &КоличествоОстаток"; Запрос.УстановитьПараметр("КоличествоОстаток", Что тут поставить?); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи КонецЦикла; |
|||
25
ОбычныйЧеловек
09.12.14
✎
13:30
|
Примерно так
тзДвижения=Движения.ЗаказыПоставщикам.ВыгрузитьКолонки(); Запрос=Новый Запрос; Запрос.УстановитьПараметр("НаДату", МоментВремени() Запрос.УстановитьПараметр("Номенклатура", Товары.ВыгрузитьКолонку("Номенклатура"); Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", Товары.ВыгрузитьКолонку("ХарактеристикаНоменклатуры")); Запрос.УстановитьПараметр("Порядок", 10000); стрУсловие="ЗаказПокупателя В (&Заказ) И Номенклатура В (&Номенклатура)"; Если НЕ МассивХарактеристикиНоменклатуры.Количество()=0 Тогда стрУсловие=стрУсловие+" И ХарактеристикаНоменклатуры В (&ХарактеристикаНоменклатуры)"; КонецЕсли; Запрос.УстановитьПараметр("Заказ", МассивСделок); Запрос.Текст=" |ВЫБРАТЬ | &Порядок, | ИсточникДанных1.ДоговорКонтрагента, | ИсточникДанных1.ЗаказПокупателя, | ИсточникДанных1.Номенклатура, | ИсточникДанных1.ХарактеристикаНоменклатуры, | СУММА(ИсточникДанных1.КоличествоОстаток) КАК Количество, | СУММА(ИсточникДанных1.СуммаОстаток) КАК Сумма |ИЗ | РегистрНакопления.ЗаказыПокупателей.Остатки(&НаДату, "+стрУсловие+") КАК ИсточникДанных1 | |СГРУППИРОВАТЬ ПО | ИсточникДанных1.ДоговорКонтрагента, | ИсточникДанных1.ЗаказПокупателя, | ИсточникДанных1.Номенклатура, | ИсточникДанных1.ХарактеристикаНоменклатуры |"; тзНезакрытыеЗаказы=Запрос.Выполнить().Выгрузить(); Для каждого СтрокаКоллекции Из тзНезакрытыеЗаказы Цикл ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаКоллекции); МассивСтрок=Товары.НайтиСтроки(СтруктураОтбора); Для каждого СтрокаМассива Из МассивСтрок Цикл Если СтрокаМассива.Количество<=0 Тогда Продолжить; КонецЕсли; НоваяСтрока=тзДвижения.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКоллекции); НоваяСтрока.Количество=Мин(СтрокаКоллекции.Количество, СтрокаМассива.Количество); НоваяСтрока.Сумма=СтрокаКоллекции.Сумма*НоваяСтрока.Количество/СтрокаКоллекции.Количество; СтрокаМассива.Количество=СтрокаМассива.Количество-НоваяСтрока.Количество; КонецЦикла; КонецЦикла; тзДвижения.ЗаполнитьЗначения(Дата, "Период"); тзДвижения.ЗаполнитьЗначения(Истина, "Активность"); тзДвижения.ЗаполнитьЗначения(Ссылка, "Регистратор"); //Движения.ЗаполнитьЗначения(Организация, "Организация"); тзДвижения.ЗаполнитьЗначения(ВидДвиженияНакопления.Расход, "ВидДвижения"); |
|||
26
Михаил Козлов
09.12.14
✎
13:32
|
(23) Остатки смотреть. Но тут есть такой момент: как правильно контролировать остатки при проведении задним числом.
По-хорошему, нужно контролировать минусы на любое движение по регистру. Часто контролируют на момент проведения, но это может приводить к минусам в дальнейшем. Поэтому в типовых остатки контролируют только при оперативном проведении. (25) Легко привести пример, когда будут минусы. |
|||
27
ОбычныйЧеловек
09.12.14
✎
13:34
|
Процедура ВыполнитьДвиденияРегистра_ЗаказыПоставщикам()
тзДвижения=Движения.ЗаказыПоставщикам.ВыгрузитьКолонки(); МассивХарактеристикиНоменклатуры=Новый Массив; Для Каждого СтрокаКоллекции Из Товары Цикл Если НЕ СтрокаКоллекции.ХарактеристикаНоменклатуры.Пустая() Тогда МассивХарактеристикиНоменклатуры.Добавить(СтрокаКоллекции.ХарактеристикаНоменклатуры); КонецЕсли; КонецЦикла; Запрос=Новый Запрос; Запрос.УстановитьПараметр("НаДату", МоментВремени() Запрос.УстановитьПараметр("Номенклатура", Товары.ВыгрузитьКолонку("Номенклатура"); стрУсловие="Номенклатура В (&Номенклатура)"; Если НЕ МассивХарактеристикиНоменклатуры.Количество()=0 Тогда стрУсловие=стрУсловие+" И ХарактеристикаНоменклатуры В (&ХарактеристикаНоменклатуры)"; Запрос.УстановитьПараметр("ХарактеристикаНоменклатуры", МассивХарактеристикиНоменклатуры); КонецЕсли; Запрос.Текст=" |ВЫБРАТЬ | ИсточникДанных1.ДоговорКонтрагента, | ИсточникДанных1.ЗаказПокупателя, | ИсточникДанных1.Номенклатура, | ИсточникДанных1.ХарактеристикаНоменклатуры, | СУММА(ИсточникДанных1.КоличествоОстаток) КАК Количество, | СУММА(ИсточникДанных1.СуммаОстаток) КАК Сумма |ИЗ | РегистрНакопления.ЗаказыПокупателей.Остатки(&НаДату, "+стрУсловие+") КАК ИсточникДанных1 | |СГРУППИРОВАТЬ ПО | ИсточникДанных1.ДоговорКонтрагента, | ИсточникДанных1.ЗаказПокупателя, | ИсточникДанных1.Номенклатура, | ИсточникДанных1.ХарактеристикаНоменклатуры |"; тзНезакрытыеЗаказы=Запрос.Выполнить().Выгрузить(); Для каждого СтрокаКоллекции Из тзНезакрытыеЗаказы Цикл ЗаполнитьЗначенияСвойств(СтруктураОтбора, СтрокаКоллекции); МассивСтрок=Товары.НайтиСтроки(СтруктураОтбора); Для каждого СтрокаМассива Из МассивСтрок Цикл Если СтрокаМассива.Количество<=0 Тогда Продолжить; КонецЕсли; НоваяСтрока=тзДвижения.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаКоллекции); НоваяСтрока.Количество=Мин(СтрокаКоллекции.Количество, СтрокаМассива.Количество); НоваяСтрока.Сумма=СтрокаКоллекции.Сумма*НоваяСтрока.Количество/СтрокаКоллекции.Количество; СтрокаМассива.Количество=СтрокаМассива.Количество-НоваяСтрока.Количество; КонецЦикла; КонецЦикла; тзДвижения.ЗаполнитьЗначения(Дата, "Период"); тзДвижения.ЗаполнитьЗначения(Истина, "Активность"); тзДвижения.ЗаполнитьЗначения(Ссылка, "Регистратор"); тзДвижения.ЗаполнитьЗначения(ВидДвиженияНакопления.Расход, "ВидДвижения"); КонецПроцедуры |
|||
28
ОбычныйЧеловек
09.12.14
✎
13:36
|
@olonelAp4u Не факт, что у тебя сразу заработает (возможно надо будет чуток напильничком под себя подправить)
|
|||
29
ОбычныйЧеловек
09.12.14
✎
13:37
|
(26) с удовольствием послушаю (ибо в данном коде система закроет, только столько сколько есть в на остатках (или меньше но никак не больше) )
|
|||
30
ColonelAp4u
09.12.14
✎
13:38
|
(27) мою процедуру полностью заменить на эту? и доработать ее?
|
|||
31
ОбычныйЧеловек
09.12.14
✎
13:39
|
(30) просто посмотри принцип...и напиши сам...
|
|||
32
Михаил Козлов
09.12.14
✎
13:40
|
(27) Представим такую ситуацию:
ПТиУ оприходовало 10. РТиУ списала 10. По какой-то причине распровели ПТиУ и в этот момент перепровели РТиУ. В результате РТиУ списала 0. ПТиУ провели. В документе человек видит 10, а в регистре - 0. (29) 01.01.2014 поступило 2. 03.01.2014 списали 1. Оформили РТиУ 02.01.2014 на 2. Контроль пройден, в регистре минус. Все это уже обсасывалось миллион раз. |
|||
33
ОбычныйЧеловек
09.12.14
✎
13:43
|
(32) Я таких примеров тебе миллион приведу и что это меняет? при перепроведении (а его ты сделаешь в любом случае ибо у тебя в таком случае еще и партии полетят) - все восстановится
|
|||
34
ОбычныйЧеловек
09.12.14
✎
13:45
|
(32) Я вообще не понимаю при чем тут контроль остатков если необходимо просто закрыть заказы, т.е. вместо того, что бы все сделать автоматически ты (как впрочем и 1С) начинает о чем то пользователя предупреждать (мол у тебя где,что-то не так) - пользователю это зачем?
|
|||
35
Михаил Козлов
09.12.14
✎
13:46
|
(33) Это я к тому, что в типовых часто предлагается продуманное решение и велосипед с квадратными колесами не нужен.
|
|||
36
ОбычныйЧеловек
09.12.14
✎
13:47
|
(35) Хорошая шутка - я оценил.
|
|||
37
ColonelAp4u
09.12.14
✎
14:08
|
(35) (36) Подскажите как мне в моем коде (0) когда я записую количество в двжиение Написать что КоличествоРасход <= ЗаказКоличествоПриход, и все что бы больше чем то что в приходе не отнимал что бы это был максимум и при этом давал возможность провести . Я щас тестил на УТ внутренний заказ и на его основании пермещение там если в пермещении на товаре укажу какой внутренний заказ то больше чем стоит приход программа не дает сделать расход пишет не хватает на остатке,
|
|||
38
ColonelAp4u
09.12.14
✎
14:09
|
Движение.Количество = что тут можно поставить ? ДокументОснование.Товары.Количество не пойдет?
|
|||
39
ДенисЧ
09.12.14
✎
14:12
|
(38) поставь 42
Тебе всё равно, а людям приятно будет |
|||
40
ColonelAp4u
09.12.14
✎
14:13
|
(39) Движение.Количество = 42 для тебя
|
|||
41
ОбычныйЧеловек
09.12.14
✎
14:18
|
(37) Вот в этом вся 1С...вместо того, что бы списать по заказу (сколько есть) + при наличии товара на складе (без заказа) переместить его на новый склад она тупо скажет пользователю (мол нет по заказу нужного кол-ва, иди правь заказ (пользователю же заняться то все равно нечем))
|
|||
42
ОбычныйЧеловек
09.12.14
✎
14:19
|
(38) Я же тебе дал практически готовую процедуру...
|
|||
43
ColonelAp4u
09.12.14
✎
14:22
|
(42) проще че твоя процедура нету варианта?
|
|||
44
ОбычныйЧеловек
09.12.14
✎
14:40
|
(43) Варианты есть всегда.
|
|||
45
ColonelAp4u
09.12.14
✎
14:58
|
когда я открываю список документов у меня стоит вот такой запрос
СЗ=Новый СписокЗначений; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ЗаказыПоставщикамОстатки.ЗаказПоставщику |ИЗ | РегистрНакопления.ЗаказыПоставщикам.Остатки(&НачалоПериода) КАК ЗаказыПоставщикамОстатки |ГДЕ | ЗаказыПоставщикамОстатки.КоличествоОстаток > 0"; Запрос.УстановитьПараметр("НачалоПериода", ТекущаяДата()); Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл СЗ.Добавить(ВыборкаДетальныеЗаписи.ЗаказПоставщику); КонецЦикла; //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА СтрСсылка=ДокументСписок.Отбор.Найти("Ссылка"); Если СтрСсылка= Неопределено Тогда СтрСсылка=ДокументСписок.Отбор.Добавить("Ссылка"); КонецЕсли; СтрСсылка.ВидСравнения=ВидСравнения.ВСписке; СтрСсылка.Значение=СЗ; СтрСсылка.Использование=Истина; |
|||
46
ColonelAp4u
09.12.14
✎
15:03
|
(45) и если товар ушел в регистре в минус и стал < 0 в заказе который отгружен не полностью то этот заказ не попадает в мой СЗ, если поставлю условие <> тогда заказ виден но при его выборе я еще раз обращаюсь к регистру и не добавляю ни одной позиции к пермещению
|
|||
47
ColonelAp4u
09.12.14
✎
15:06
|
(46) если заказ выполнен если не выполнен увижу ту позицию которую нужно добавить и все равно при полном исполнении заказа он все равно висит в списке
|
|||
48
ColonelAp4u
09.12.14
✎
15:47
|
У меня в документе перемещения для сравнения создана Колонка заказано в которую попадает значение количества товара по заказу могу ли я сделать так?
Если ТекСтрокаТовары.Количество< ТекСтрокаТовары.Заказанно Тогда Движение.Количество =ТекСтрокаТовары.Количество; Иначе Движение.Количество =ТекСтрокаТовары.Количество; КонецЕсли; |
|||
49
ColonelAp4u
09.12.14
✎
15:48
|
упс
Если ТекСтрокаТовары.Количество< ТекСтрокаТовары.Заказанно Тогда Движение.Количество =ТекСтрокаТовары.Количество; Иначе Движение.Количество =ТекСтрокаТовары.Заказанно; КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |