Автор Тема: Задача 1.19  (Прочитано 50824 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Lukashov_as

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Лукашов Андрей Сергеевич
Задача 1.19
« Ответ #15 : Май 19, 2011, 10:22:02 pm »
Почитал статью Гилева, сделал с учетом что можно продавать аналог аналога
 сделал через кластеры и запоминание списанного в тз, все вроде логично когда аналог аналога продается а приоритет аналогов задает пользователь
 на документ назначения аналогов не замарачивался , кластеры которым принадлежит товар задаются в рс

вот как конечно в такои задаче блокировку поставить тут я теряюсь, заблокировать весь кластер


Вложения:
1_19_lukashov.dt
« Последнее редактирование: Май 19, 2011, 10:22:41 pm от Лукашов Андрей Сергеевич »

pavig

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Pavel
Задача 1.19
« Ответ #16 : Июнь 22, 2011, 05:27:37 pm »
Вот мой вариант.
 Жажду объективной критики.
Вложения:
1_19_bpi.dt
« Последнее редактирование: Июнь 22, 2011, 05:27:57 pm от Pavel »


kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.19
« Ответ #17 : Сентябрь 04, 2011, 10:16:24 am »
В решении ТЗ не использую.
 1 Создаю справочник ГруппаАналогов и в РС записываю Номенклатуру и к какой ГруппеАналогов она относиться;
 2. Списываю в начале, заданный товар;
 3. Определяю список товаров(аналогов) по которым возникли отрицательные остатки.
 4. Проверяю достаточность аналогов для списания, согласна задания.

 Спасибо за комментарии и замечания
Вложения:
kow19761.19.dt

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 1.19
« Ответ #18 : Сентябрь 05, 2011, 12:35:24 pm »
kow1976, Мне понравилось Ваше решение, и, ИМХО, оно проще, чем решение с использованием ТЗ или по Гилеву! Но!! 3 запроса!!! Любой преподаватель скажет, что это не оптимально и всю информацию нужно получать по 1 запросу (или стремится к этому)! Может имеет смысл, сделать составной пакет одним запросом, допустим пакет 1 - общие остатки, пакет 2 - остатки основного товара, пакет 3 - остатки аналогов, чтобы проще было списывать. Как я понял, у Вас, все товары будут являться аналогами для товаров из группы ГруппаАналогов, что в свою очередь решает такую подводную проблему, как списание аналога аналога (тарабарщина, но иначе не скажешь ..), если его/их не хватает!
 Насчет же решения .. Мыслю, что лучше все-таки в самом начале проверить сумму общих остатков, и основного товара и аналогов! Если не хватает, то дальше можно и не идти. В качестве мелочи, в 1 запросе Склад в ВТ лишнее, он как параметр для РН из док-та, его всегда получить можно. Также, можно избавиться от 2 запроса. Объедините его с 3-им как ВТ! В целом, скажу, что Ваша идея самая простая, без заморочек, чем мне и понравилась. Поэтому, её быстрее будет реализовать на экзамене. Один вопрос .. запросы .. не снизят ли баллы за их количество?

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.19
« Ответ #19 : Сентябрь 06, 2011, 05:04:07 am »
DoctorRoza,

 1. При решении использую менеджер временных таблиц, поэтому в принципе запрос один и к любой его части можно обратиться в пакете. Сам Евгений Гилев на своих уроках не стесняясь, разрывает запросы на такие мелкие (и как правило динамические) части, что порой не понятно где начало запроса где конец и какой текст запроса будет в разных ситуациях. А текст запроса рекомендует просматривать при отладке (Запрос.Выполнить().Текст).

 2. Проверить сумму остатков в одном запросе у меня не получается да и Евгений Гилев в своем решении предупреждает что эти остатки могут быть не правильные.

 Пример
 Остатки (Аналоги)
 Портсигар 3 ед
 Портсигар(имп) 5 ед
 Портсигар (отеч) 6 ед

 Нужно списать
 Портсигар 7 ед
 Портсигар(имп) 11 ед

 Остатки для Портсигар 3+5+6=14ед
 Остатки для Портсигар(имп) 5+3+6=14ед

 Поэтому я в начале, списываю остатки по основному заданию, в пределах, существующих в БД. Записываю результат в базу. Затем проверяю необходимость аналогов.

 К тому же четко не известно, на какую номенклатуру нужно накладывать блокировку. Если по основному заданию и их аналогам, то это избыточно, так как часть номенклатуры может списаться без проблем.
 
 У решения я вижу одно слабое место. Это количество записей в базу. Три записи в базу это конечно плохо. Но здесь, на мой взгляд, на некоторых наборах данных должна быть существенная экономия оперативной памяти процессорного времени, и количества заблокированной номенклатуры(увеличивается маштобируемость системы).

 Что лучше ТЗ с блокировкой всей номенклатуры и аналогов из РН или лишний метод Записать() с блокировкой всей номенклатуры из РН и блокировкой аналогов по той номенклатуре которой не хватило на остатках, это большой вопрос?

 3) На счет как лучше передавать параметр (склад) в запрос или использовать разыменование полей можно выделить достоинства и недостатки:
 Достоинства
 Возможность провести индексацию, что серьезно должно ускорить поиск в БД заданных значений
 Недостатки
 1. Левое соединение к табличной части реквизитов РН (практически вложенный запрос)
 2 Наличие заданного поля(склад). Т.е. практически целый столбец одного и того же значения. Явные потери оперативной памяти.
 Что лучше я точно не знаю. Нужно понимать sql. В решении ориентируюсь на требование индексирования полей от 1С

Saipl

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.19
« Ответ #20 : Сентябрь 09, 2011, 08:28:34 am »
Quote
kow1976
Часто в твоих решения встречаю ненужное соединение ТабДок.Склад = ОстаткиНоменклатурыОстатки.Склад которое ты и так указываешь в параметрах виртуальных таблиц.

 Использование механизма соединения таблиц вместо того, чтобы задать значения параметров виртуальных таблиц - 0,5 – 1,0

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.19
« Ответ #21 : Сентябрь 09, 2011, 08:47:34 am »
Saipl,

 Немножко не так
 Параметры виртуальных таблиц указываю обязательно.
 А соединение делаю, чтобы присутствовали записи из табДок даже если остатки нулевые.

van_za

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Зарубин Иван
Задача 1.19
« Ответ #22 : Сентябрь 11, 2011, 06:56:28 pm »
Мне кажется что решение не должно быть сложным и при нахождении аналогов можно ограничиться первым уровнем зависимости.

 Буду рад конструктивной критики предложенного решения.
Вложения:
1Cv81_19.dt

van_za

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Зарубин Иван
Задача 1.19
« Ответ #23 : Сентябрь 11, 2011, 07:29:13 pm »
Добавил оборотные регистр продажи для отчета
Вложения:
1Cv8__1_19_VAN_.dt

Saipl

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.19
« Ответ #24 : Сентябрь 14, 2011, 04:11:52 pm »
Quote
kow1976
Для чего используется ГруппаАналогов ? Зачем промежуточный справочник ?Не уловил !

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.19
« Ответ #25 : Сентябрь 14, 2011, 06:51:33 pm »
Saipl,

 Евгений Гелев в своем решении использует понятие «кластер» это группы, в которые объединяется номенклатура динамически (программно).

 Я использую тот же подход, только группы аналогов(кластеры) формирует пользователь. Т. е это список номенклатуры, который полностью взаимозаменяем

 Например:
 ГруппаАналогов – «Ботинки»
 В группу входят : Ботинки черные, Ботинки красные, Ботинки зеленые и т. д.
 Идея такая
 Нужно списать «ботинки зеленые». Если их не хватило. Определяем к какой группе они относиться «ГрппеАналогов» «ботинки» в данную группу входят «Ботинки черные, Ботинки красные»

Saipl

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.19
« Ответ #26 : Сентябрь 15, 2011, 05:35:19 am »
Quote
kow1976
Не могу придумать ситуацию в которой ГруппаАналогов имела бы более практическую значимость по сравнению с левым соединением Номенклатура - Аналог.
« Последнее редактирование: Сентябрь 15, 2011, 06:25:49 am от Максим »

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.19
« Ответ #27 : Сентябрь 15, 2011, 06:11:48 am »
Saipl,
 Надо смотреть реализацию задачи. Возможно, ваше решение будет лучше. Меньше левых соединений. При решении приходится решать комплекс проблем, если где то выиграл, обязательно, что то, ухудшиться.

Saipl

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Максим
Задача 1.19
« Ответ #28 : Сентябрь 15, 2011, 06:26:17 am »
Quote
kow1976

 В обработке проведения преднамеренно не указываете РежимБлокировкиДанных ?
 Когда происходит вторая блокировка данных по аналогам вы добавляете новый ЭлементБлокировки, может имеет смысл создать новую блокировку тем самым "освободить" перечень номенклатуры из документа т.к. движение по регистрам мы уже сделали ?

 Делаем приход Big (капилярная) 3 по 5 р.шт., Делаем расход в одном документе на 3 Big (капилярная) по 10 р.шт. и 3 Big (капилярная) по 15 р.шт. - документ успешно проводится. (Самый первый запрос - группируешь по цене !)
« Последнее редактирование: Сентябрь 15, 2011, 07:01:29 am от Максим »

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.19
« Ответ #29 : Сентябрь 15, 2011, 08:17:15 am »
Saipl,

 Разблокировать смысла нет все равно мы все списали до нуля.

 С ценой действительно есть проблема. Но она носит интерфейсный характер. Не бывает у одной номенклатуры разных цен в одной приходной.
 Можно было бы использовать выручку (сумму), но тогда встает вопрос распределения выручки между заданным товаром и аналогами. Хлопотно решается проблема копеек.

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

 По хорошему, нужен РС с ценами на номенклатуру на заданную дату.