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

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

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 1.22
« Ответ #15 : Июль 26, 2011, 09:29:17 pm »
Выложу свое решение .. оно отличается от предложенного тут товарищами, минимальным запросом!
Вложения:
DoctorRoza_1_22.dt

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.22
« Ответ #16 : Сентябрь 14, 2011, 08:40:45 am »
DoctorRoza,
 Согласен, с вами левое соединение к таблице приоритетов использовать здесь нельзя.

 Такой вариант решения. Спасибо за комментарии и замечания.
Вложения:
kow19761.22.dt


DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 1.22
« Ответ #17 : Сентябрь 14, 2011, 10:04:08 pm »
kow1976, нормально .. ошибок не обнаружил!

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.22
« Ответ #18 : Сентябрь 15, 2011, 04:36:12 am »
DoctorRoza,

 Спасибо за проверку. Жаль, что мы в разных разделах. И я толком не могу комментировать ваши текущие решения. Хотел вас догнать, но понял, что это не реально.

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 1.22
« Ответ #19 : Сентябрь 15, 2011, 06:54:47 pm »
kow1976, Приношу свои извинения, но вот мне удобно, когда есть человек, который решает задачи, которые я уже прошел. Ведь это лишний повод вернуться назад да вспомнить решения. До кучи еще и свои каракули проверить! smile Ошибок уже тьма обнаружил, но ведь как без них!? Тут многие товарищи готовятся к экзамену, решая задачи исключительно по билетам. Мне это не приемлемо. Вы выкладывайте свои решения, по возможности буду смотреть, хотя трудновато бывает переключится с бухучета на оперативный. Раздел 2 без подготовки, наскоком с трудом берется! smile

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.22
« Ответ #20 : Сентябрь 16, 2011, 01:05:52 pm »
DoctorRoza,

 Я думаю вы правы решения данных задач нужно не 1С, а тому кто хочет работать с данной системой. А к экзамену натаскаться можно будет быстро.
« Последнее редактирование: Сентябрь 16, 2011, 01:06:27 pm от Олег »

shv

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр Швецов
Задача 1.22
« Ответ #21 : Сентябрь 27, 2011, 10:23:46 am »
kow1976,
Quote
левое соединение к таблице приоритетов использовать здесь нельзя.

 Не согласен: если товар есть на складе, для которого кто-то забыл поставить приоритет, то не надо запрещать списывать товар с этого склада. Лучше сделать так, чтобы товар с такого склада списывался в последнюю очередь. Хотя, вопрос философский.

 Блокировки Белоусов рекомендовал всегда ставить исключительные. Иначе высока вероятность deadlock'ов.

 мой вариант:
Вложения:
shv-1.22.dt

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.22
« Ответ #22 : Сентябрь 28, 2011, 02:16:25 am »
shv,
 Есть сомнения по поводу предложенного вами решения
 1. Можно оприходовать услуги в РН остатки. РН в этом случае в ноль не выйдет никогда
 2. При оперативном проведении берете остатки на момент времени а надо из текущих итогов
 3. При отказе проведения свойство записывать нужно, ставить ложь. Иначе пишете два раза пустые наборы, а не одной строчки в базу не записываете.
 4. Не решаете проблему копеек. Операция деления не восстановима. Регистр в ноль не выйдет.

 С левым соединением, вы правы.
 При создании новой блокировки у нее режим по умолчанию исключительный
 Спасибо за комментарии и замечания

shv

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр Швецов
Задача 1.22
« Ответ #23 : Сентябрь 28, 2011, 07:55:23 am »
kow1976, спасибо большое за комментарии. Очень полезно, когда кто-то смотрит твой код. Однако, попытаюсь развеять сомнения:

 1. Оприходовать услуги нельзя, так как в Приходной накладной у реквизита Номенклатура определены параметры выбора: Отбор.Услуга(Ложь). Более того, списать услуги тоже нельзя, поскольку в запросе при выборе запросом из табличной часть Расходной накладной стоит условие "РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга = ЛОЖЬ"

 2. Во-первых, оперативное проведение документов запрещено. Это нормально для экзамена, придираться не будут. Во-вторых Белоусов где-то на devtraining и на курсах говорил, что можно всегда проверять остатки на момент времени.

 3. При отказе от проведения, если я правильно Вас понял, ничего и не запишется в базу, никаких пустых наборов... Свойство Записывать менять не надо. Достаточно Отказ = Истина. Не очень понял... Поясните, если можно.

 4. Как не решаю проблему копеек? А это:
 
Code
Движение.Количество = Мин(ОсталосьСписать, ВыборкаДетали.КоличествоОстаток);
 Движение.Сумма = ?(Движение.Количество = ВыборкаДетали.КоличествоОстаток,
        ВыборкаДетали.СуммаОстаток,
        Движение.Количество * ВыборкаДетали.СуммаОстаток / ВыборкаДетали.КоличествоОстаток
       );


 
Quote
При создании новой блокировки у нее режим по умолчанию исключительный

 Да, действительно. Не обращал раньше раньше внимания. Всегда писал явно.
« Последнее редактирование: Сентябрь 28, 2011, 08:37:57 am от Александр Швецов »

kow1976

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Олег
Задача 1.22
« Ответ #24 : Сентябрь 28, 2011, 07:20:49 pm »
shv,

 Я извиняюсь, смотрел наверно не вашу работу.

 Практически все по теории. Плохого, сказать не могу, а хорошее не кому не нужно.
 1. Наверно нужно добавить пустой набор
 Движения.ОстаткиНоменклатуры.Записать();
 Если перепровести док расх нак будущей датой, то будет выдавать нехватку

 По поводу ложь в свойстве записывать
 Поставьте точку останова в «Модуле набора записей» Регистре накопления «Остатки номенклатуры» в процедуре ПередЗаписью (создайте пустую процедуру и точку на КонецПроцедуры).
 На данной точке (записывать набор записей) Обработка проведения должна останавливаться два раза(после того как добавите Движения.ОстаткиНоменклатуры.Записать()). Первый запись пустых наборов. Второй запись движений.
 При отказе проведения у вас тоже будет два раза, а можно один. Если свойство записывать поставить в ложь.

DoctorRoza

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Алексей
Задача 1.22
« Ответ #25 : Сентябрь 28, 2011, 07:37:09 pm »
shv, ИМХО, но вот это
 ВЫБОР
    КОГДА ОстаткиНоменклатурыОстатки.Склад = &СкладШапка
       ТОГДА 0
    ИНАЧЕ ЕСТЬNULL(ПриоритетыСкладовСрезПоследних.Приоритет, 1000)
 КОНЕЦ
 можно и по-критиковать .. А если будет склад с приоритетом больше чем 1000? ))) Мыслю, что даже малейшей притягивание "за уши" есть не айс! Конечно, реально такое маловероятно, но возможно!

shv

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр Швецов
Задача 1.22
« Ответ #26 : Сентябрь 29, 2011, 08:03:40 am »
DoctorRoza, приоритет ограничен тремя цифрами и запретом на пустое значение, так что пользователь не может задать приоритет ни 0, ни 1000. tongue

 kow1976,
 
Quote
1. Наверно нужно добавить пустой набор
 Движения.ОстаткиНоменклатуры.Записать();
 Если перепровести док расх нак будущей датой, то будет выдавать нехватку

 Справедливо. Но я, в частности, поэтому и запрещаю оперативное проведение, чтобы на экзамене об этом не думать. Если мне нужно будет провести другой датой, то сначала отменю проведение. На экзамене так проще, в жизни, наверное, по-другому.

 
Quote
При отказе проведения у вас тоже будет два раза, а можно один. Если свойство записывать поставить в ложь.

 Попробовал. Нет такого, если полагаться на платформу и не ставить "Движения.ОстаткиНоменклатуры.Записать()". При отказе от проведения вообще не вызывается ПередЗаписью и ПриЗаписи...
« Последнее редактирование: Сентябрь 29, 2011, 08:08:19 am от Александр Швецов »

SergTH000

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Сергей
Задача 1.22
« Ответ #27 : Сентябрь 30, 2011, 07:43:07 am »
shv, Если не писать Движения.ОстаткиНоменклатуры.Записать(); и перепровести документ, то его старые движения останутся в базе на момент выполнения запроса, что может привести к неверному списанию.
 
Quote
Но я, в частности, поэтому и запрещаю оперативное проведение, чтобы на экзамене об этом не думать. Если мне нужно будет провести другой датой, то сначала отменю проведение

 При чем здесь оперативное проведение? Че та я не понял, это при оперативном проведении нельзя провести будущей датой, а если оно запрещено то он проведется буз проблем.

vvvlad85

  • Пользователь
  • **
  • Сообщений: 16
  • ФИО: Владислав
Задача 1.22
« Ответ #28 : Сентябрь 30, 2011, 09:57:12 am »
Кстати будет ли ошибкой если в свойствах документа указать удалять движения автоматически?

shv

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр Швецов
Задача 1.22
« Ответ #29 : Сентябрь 30, 2011, 01:02:27 pm »
SergTH000, При оперативном проведении документ каждый раз сдвигает время вперед. В этом случае обязательно надо писать пустой набор, чтобы в базе не осталось старых движений, влияющих на результат запроса.

 Если оперативное проведение запрещено и мы не пытаемся менять дату на будущую (упрощение для экзамена), и запрос у нас берет данные на МоментВремени(), то старые движения в результат запроса не попадают.

 Сейчас подумал, что наверное не надо упрощать. Если проведение "по-старому", то удалять всегда старые движения. Всего-то 2 строчки...

 vvvlad85,
Quote
Кстати будет ли ошибкой если в свойствах документа указать удалять движения автоматически?

 В списке ошибок этого нет. Просто надо понимать для чего это и уметь объяснить, если возникнут вопросы.
« Последнее редактирование: Сентябрь 30, 2011, 05:44:20 pm от Александр Швецов »