|   |   | 
| 
 | v7: Обработка минусовых остаков | ☑ | ||
|---|---|---|---|---|
| 0
    
        manatin 08.11.12✎ 11:09 | 
        Доброго времени суток.
  Прошу подсказки в таком вопросе: Имеется РИБ с товарами, по которым осуществляется приход/расход, проблема в том что в нескольких периферийных базах по некоторым товарам наблюдается такая картина. Например есть товар "Яблоко" фактически которого есть в наличии 3 шт. 1 штука по одной партии и 2 по другой, а при просмотре регистра остатков по вышеуказанному товару можем наблюдать такую картину Наименование Партия Кол-во Яблоко 111111 1 Яблоко 111111 -1 Яблоко 111222 1 Яблоко 111223 2 Яблоко 111224 1 Яблоко 111224 -1 В сумме все равно получаем кол-во равное 3-м как и есть в реалии, вопрос том как можно победить перекрывающие записи. Для этого написал обработку (вернее документ) для расходования 1 и -1. Суть в том что при переборе всех остатков делаем сравнение текущей записи и предыдущей, если у них наименование и серия совпадают, но количество отличается на -, то добавляем эту информацию в ТЗ, а потом сравниваем еще одним перебором на наличие в ТЗ, если есть до расходуем. Следующего содержания: перем НомерСерии_пред; перем Кол_пред; перем Серия_пред; перем ТЗ; Функция Очистка(Наим, НомСер, Кол) Далее Процедура ОбработкаПроведения() ТЗ = СоздатьОбъект("ТаблицаЗначений"); ТЗ.НоваяКолонка("Наименование"); ТЗ.НоваяКолонка("Серия"); ТЗ.НоваяКолонка("Количество"); Сч_ТЗ = 0; рег = СоздатьОбъект("Регистр.ДоступныеОстатки"); Рег.ВыбратьИтоги(); Пока Рег.ПолучитьИтог() =1 Цикл ПечСерт = ""; СпрСертПарт = СоздатьОбъект("Справочник.СерииПартии"); СпрСертПарт.ИспользоватьВладельца(Рег.Партия); СпрСертПарт.ВыбратьЭлементы(); СпрСертПарт.ПолучитьЭлемент(); НомерСерии = СпрСертПарт.Серия.Наименование; Если (НомерСерии=НомерСерии_пред) и (Рег.Количество = Кол_пред*(-1)) и (Серия_пред=НомерСерии) и (СтрДлина(Строка(НомерСерии))>0) Тогда Сч_ТЗ = Сч_ТЗ + 1; ТЗ.НоваяСтрока(); ТЗ.УстановитьЗначение(Сч_ТЗ, "Наименование", Рег.Товар); ТЗ.УстановитьЗначение(Сч_ТЗ, "Серия", НомерСерии); ТЗ.УстановитьЗначение(Сч_ТЗ, "Количество", Рег.Количество); КонецЕсли; НомерСерии_пред = НомерСерии; Кол_пред = Рег.Количество; Серия_пред =НомерСерии; КонецЦикла; рег = СоздатьОбъект("Регистр.ДоступныеОстатки"); Рег.ВыбратьИтоги(); Пока Рег.ПолучитьИтог() =1 Цикл ПечСерт = ""; СпрСертПарт = СоздатьОбъект("Справочник.СерииПартии"); СпрСертПарт.ИспользоватьВладельца(Рег.Партия); СпрСертПарт.ВыбратьЭлементы(); СпрСертПарт.ПолучитьЭлемент(); НомерСерии = СпрСертПарт.Серия.Наименование; а = Очистка(Рег.Товар, НомерСерии, Рег.Количество); Если (а=1) Тогда Регистр.ДоступныеОстатки.Товар = Рег.Товар; Регистр.ДоступныеОстатки.Партия = Рег.Партия; Регистр.ДоступныеОстатки.Отдел = Рег.Отдел; Регистр.ДоступныеОстатки.Единицаизмерения = Рег.Единицаизмерения; Регистр.ДоступныеОстатки.Количество = Рег.Количество; Регистр.ДоступныеОстатки.ДвижениеРасходВыполнить(); КонецЕсли КонецЦикла; КонецПроцедуры Функция Очистка (Наим, НомСер, Кол) ТЗ.ВыбратьСтроки(); Сч_ТЗ=0; Сч=0; Пока ТЗ.ПолучитьСТроку()=1 Цикл Сч_ТЗ = Сч_ТЗ + 1; ТЗ.ТекущаяСтрока(Сч_ТЗ); Т = ТЗ.ПолучитьЗначение(ТЗ.ТекущаяСтрока(), "Наименование") ; С = ТЗ.ПолучитьЗначение(ТЗ.ТекущаяСтрока(), "Серия"); К = ТЗ.ПолучитьЗначение(ТЗ.ТекущаяСтрока(), "Количество"); Если (Т=Наим) и (С=НомСер) и (К=Кол) Тогда Сч=1; КонецЕсли; КонецЦикла; Возврат Сч; КонецФункции Правилен ли ход мыслей и написанной обработки. | |||
| 1
    
        Lionee 08.11.12✎ 11:20 | 
        свернуть партии и все     | |||
| 2
    
        manatin 08.11.12✎ 11:35 | 
        А по подробнее про это можно?
  Моя реализация правильна или только сворачивать партии? | |||
| 3
    
        Ёпрст гуру 08.11.12✎ 11:40 | 
        (0) нет     | |||
| 4
    
        Ёпрст гуру 08.11.12✎ 11:40 | 
        (2) нет     | |||
| 5
    
        varelchik 08.11.12✎ 12:05 | 
        А последовательность восстанавливать не пытались?     | |||
| 6
    
        vcv 08.11.12✎ 12:13 | 
        Может быть проще вообще не вести учет партий, чем вести его так? Нет партий, нет проблем с пересортом.
  А по большому счету, у (0) наблюдается разруха в головах, которая техническими средствами не лечится. | |||
| 7
    
        dakrangel 08.11.12✎ 12:27 | 
        (6) Очень даже хорошо лечится, при правильной настройке в документах.     | |||
| 8
    
        vcv 08.11.12✎ 12:41 | 
        (7) 
  Если для учета пофиг партии, нужно их просто не вести и не иметь проблем из-за пересорта партий. Если партии важны, нужно натаскивать пользователей, а не мудрить всякие процедуры "автозамазывания проблем". | |||
| 9
    
        dakrangel 08.11.12✎ 13:13 | 
        (8) не про автозамазывая имел ввиду. Вопрос в том, почему при выборе партий дает выбирать больше, чем есть на самом деле. Или почему при переносе даты документа нет сверки, как поведет себя система... и так далее.     | |||
| 10
    
        vcv 08.11.12✎ 13:30 | 
        (9) Почему больше? Сколько есть, столько и даёт. Если есть по партии (или может по складу) 10 штук, подбор и покажет 10 штук. А то, что по другой партии (складу/фирме и прочей аналитике) минус пять, так это не его подборово дело.
  А контроль "как поведет себя система при переносе даты документа" очень специфичен для каждого клиента и сильно тормозит проведение документов. Вряд ли такое стоит делать типовым решением. | |||
| 11
    
        dakrangel 08.11.12✎ 13:37 | 
        (10) Соглашусь. Как говориться, каждый извращается как хочет :)     | |||
| 12
    
        manatin 08.11.12✎ 14:24 | 
        (6)
  Разруха в головах к счастью не у меня, я просто пытаюсь помоч решить проблему | |||
| 13
    
        manatin 08.11.12✎ 14:26 | 
        (8)
  Партии важны, а по натаскиванию, это не моя задача. | |||
| 14
    
        Boroda 08.11.12✎ 14:36 | 
        Я б сделал так.
  Выгружаем итоги. Обнуляем все что получено по "ВыгрузитьИтоги". Сворачиваем по партиям и делаем приход по свернутой ТЗ. | |||
| 15
    
        manatin 09.11.12✎ 15:00 | 
        (14)
  Чтобы так сделать, нужно немного покопать. А чем не правилен мой вариант, на тестовой базе я его проверил, вроде результат то что и нужно получить. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |