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

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

jonik

  • Проверенный
  • ***
  • Сообщений: 135
Re: Задача 1.02
« Ответ #240 : Ноябрь 20, 2017, 02:00:43 pm »
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Подкорректировал

Евгений_нвкз

  • Пользователь
  • **
  • Сообщений: 18
Re: Задача 1.02
« Ответ #241 : Сентябрь 07, 2020, 06:09:49 am »
Всем привет. Мой вариант решения, кто что скажет?)


Grehmin

  • Новичок
  • *
  • Сообщений: 1
Re: Задача 1.02
« Ответ #242 : Сентябрь 14, 2020, 04:10:36 pm »
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Подкорректировал

Спасибо за вариант с приоритетом по партии в запросе - лаконично и просто)

Black_Corsair

  • Новичок
  • *
  • Сообщений: 6
  • ФИО: Е. С. И.
Re: Задача 1.02
« Ответ #243 : Ноябрь 05, 2020, 02:19:10 pm »
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
1.в приходной нет проверки на услугу.
2.если не хватает то выводит первую номенклатуру и прерывается, а может быть там несколько номенклатуры не хватает
на Сколько я верно прочитал условие, в приходной и не должно быть услуги, так что какой смысл там её проверять? может я что то не понимаю в задании

OurProgramist

  • Пользователь
  • **
  • Сообщений: 33
  • ФИО: Иван
Re: Задача 1.02
« Ответ #244 : Ноябрь 06, 2020, 11:55:31 pm »
Всем привет. Мой вариант решения, кто что скажет?)

 В "ПриходнаяНакладная"  доделайте , либо при проведении либо через СписокНоменклатуры -> Номенклатура -> Параметры Выбора, чтобы Услуга не попадала в регистр Остатки,
 не большие мелочи , Учетная политика не выведена на форму,  чтобы можно было менять , и по умолчанию лучше поставить ФИФО, хотя я точно не знаю это чисто мое мнение,
остальное с моей точки зрения работает правильно по условию задачи. (тестировал несколько раз)
  Если не трудно в двух словах прокомментируйте запрос
 
« Последнее редактирование: Ноябрь 07, 2020, 12:34:52 am от OurProgramist »

Евгений_нвкз

  • Пользователь
  • **
  • Сообщений: 18
Re: Задача 1.02
« Ответ #245 : Январь 29, 2021, 01:02:06 pm »
Спасибо за подсказку по поводу регистра, надо будет переделать.
По поводу моего запроса, там доп поле создается, все остатки по партии из шапки нумеруется "1", остальной "2", потом упорядочивается по возрастанию, и получается, что вначале идут остатки по партии из шапки, и списывается от туда в первую очередь (по условию так), а потом по остальным партиям идет списание.

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Задача 1.02
« Ответ #246 : Март 31, 2021, 12:30:00 pm »
Спасибо за подсказку по поводу регистра, надо будет переделать.
По поводу моего запроса, там доп поле создается, все остатки по партии из шапки нумеруется "1", остальной "2", потом упорядочивается по возрастанию, и получается, что вначале идут остатки по партии из шапки, и списывается от туда в первую очередь (по условию так), а потом по остальным партиям идет списание.
Можно еще перед формированием движений в переборе детальных записей запроса использовать ВыборкаДетальные.НайтиСледующий (Партия, "Партия") и формировать движения по партии из шапки. Потом ВыборкаДетальные.Сбросить(). При формировании движений по остальным строкам выборки ставить условие на не равенство ВыборкаДетальные.Партия <> ЭтотОбъект.Партия и ИНАЧЕ продолжить.

VasilyK

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 1.02
« Ответ #247 : Май 19, 2021, 08:40:49 pm »
Коллеги, добрый день, посмотрите, пожалуйста, моё решение. Спасибо!

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Задача 1.02
« Ответ #248 : Май 20, 2021, 11:00:25 am »
Коллеги, добрый день, посмотрите, пожалуйста, моё решение. Спасибо!
День добрый! В общем все ок. Есть недостатки, на мой взгляд:
1. В проведении расходной накладной запись пустого набора в регистр "Продажи" не имеет смысла.
 - Движения.Продажи.Записать(); - 5 строка Обработки проведения.
Запись пустого набора нужна только в том случае, когда для проведения нужны данные из регистра без учета движений самого документа (традиционная методика проведения).
Ошибка не серьезная, и даже не факт что заметят, но Белоусов точно заметит и будет задавать вопросы на понимание.
А нарветесь на вопрос экзаменатора при очной сдаче (-0,5 балла).
- В качестве параметра используется объект Граница с параметром МоментВремени, включая по умолчанию. Нужно просто МоментВремени(). Это тоже вопрос от экзаменатора на понимание механизма традиционной методики проведения и почему используется именно МоментВремени документа, а не его правая граница. Это связано с получением остатков. В выбранном Вами варианте могут быть получены не корректные остатки при перепроведении документа. Это грубая ошибка. 
2. Движения в регистр Продажи пишутся неправильно. Количество разбивается по партиям, а сумма по каждой записи общая по всему количеству. Тут два момента - раздута таблица движений, в отчете появляется не корректная сумма продаж. Количество по услугам не попадает в регистр, это логическая ошибка Вашего решения. Если не разберетесь сами, то пишите - помогу.
3. По отчетам:
- оформление отчета должно быть таким же как в примере, приведенном в задаче. Надо обращать внимание на положение текста в ячейке, границы ячеек, болды и т.д.
- обратите внимание на представление поля "Партия" отчета Остатки Товаров. Это тоже не архи важно, но терять баллы на этом тоже не стоит.
Я не докапываюсь, просто пока тренируетесь, лучше доводить до идеала. Если останется время на экзамене, то отчеты можно и зализать. Тогда будет пятерка.
P.S. В режиме исполнения добавил одну расходную накладную и провел ее. Результат Вы видите на скринах.
« Последнее редактирование: Май 20, 2021, 11:06:02 am от Холодный Тимофей »

VasilyK

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 1.02
« Ответ #249 : Май 20, 2021, 01:33:51 pm »
День добрый! В общем все ок. Есть недостатки, на мой взгляд:
Тимофей, добрый день, спасибо за обратную связь.

Насчет конструкции "Новый Граница(МоментВремени()", Вы правы это для проведения по новой методике, исправил на МоментВремени(). Насчет не корректных остатков, а почему так? Я же записал пустой набор записей в ОстаткиНоменклатуры, значит остатки на левую и на правую границу документа равны. Или и я не прав?

Насчет отчетов Вы абсолютно правы, лучше при подготовке отработать на 5. Кстати, в этом случае, как лучше реализовать?

Добавить в "Выражение представления": "Прих. Накл № " + ОбщийМодульСервер.УдалитьЛидирующиеНули(Партия.Номер)? Не универсально, но других партий у нас и нет

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Задача 1.02
« Ответ #250 : Май 20, 2021, 02:03:05 pm »
Цитировать
Насчет не корректных остатков, а почему так? Я же записал пустой набор записей в ОстаткиНоменклатуры, значит остатки на левую и на правую границу документа равны. Или и я не прав?


Имеется ввиду, что при использовании конструкции Новый Граница (МоментВремени()) будут получены остатки на правую границу интервала. Тут важно понимать, что документ может быть пререпроведен когда угодно, например на следующий день. В этом случае он будет проводиться неоперативно, его дата и время не изменятся. Таким образом при перепроведении в этот интервал могут попасть и другие документы, введенные позже, что приведет к некоректному получению остатков. А значит надо использовать только МоментВремени(). Это в традиционной методике.

Цитировать
Добавить в "Выражение представления": "Прих. Накл № " + ОбщийМодульСервер.УдалитьЛидирующиеНули(Партия.Номер)? Не универсально, но других партий у нас и нет
Очень даже и универсально для приходных накладных. Я так и делал. Только получал представление поля целиком и не парился.

Проведение по регистру Продажи смотрели?
« Последнее редактирование: Май 20, 2021, 02:12:12 pm от Холодный Тимофей »

VasilyK

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 1.02
« Ответ #251 : Май 20, 2021, 04:06:38 pm »
Имеется ввиду, что при использовании конструкции Новый Граница (МоментВремени()) будут получены остатки на правую границу интервала. Тут важно понимать, что документ может быть пререпроведен когда угодно, например на следующий день. В этом случае он будет проводиться неоперативно, его дата и время не изменятся. Таким образом при перепроведении в этот интервал могут попасть и другие документы, введенные позже, что приведет к некоректному получению остатков. А значит надо использовать только МоментВремени(). Это в традиционной методике.

А почему дата и время не изменяются при не оперативном проведении? Новый Граница (МоментВремени()) это правая граница документа, а МоментВремени() это левая, но если очистить движения документа по регистру конструкцией: Движения.ОстаткиНоменклатуры.Записать();. То значения должны быть равны. Разве нет?

Цитировать
Добавить в "Выражение представления": "Прих. Накл № " + ОбщийМодульСервер.УдалитьЛидирующиеНули(Партия.Номер)? Не универсально, но других партий у нас и нет
Очень даже и универсально для приходных накладных. Я так и делал. Только получал представление поля целиком и не парился.
Не универсально, в том смысле, что если добавится новый документ "Приходная накладная по Экспорту", то из "Выражения представления" в запрос нужно будет переносить в конструкцию ВЫБОР КОГДА ТОГДА. Что-то вроде такого:

ВЫБОР
   КОГДА ОстаткиНоменклатурыОстатки.Партия ССЫЛКА Документ.ПриходнаяНакладная ТОГДА "Прих. Накл №"
   ИНАЧЕ "Что-то другое №"
КОНЕЦ

Тимофей, насчет получения поля целиком не понял как Вы это делали, можете рассказать?

Цитировать
Проведение по регистру Продажи смотрели?
Да, перенёс в цикл по Номенклатуре и исправил заполнение количества по документу. Так что всё ок.

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Задача 1.02
« Ответ #252 : Май 21, 2021, 11:59:50 am »
Цитировать
А почему дата и время не изменяются при не оперативном проведении?

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

Цитировать
Новый Граница (МоментВремени()) это правая граница документа, а МоментВремени() это левая, но если очистить движения документа по регистру конструкцией: Движения.ОстаткиНоменклатуры.Записать();. То значения должны быть равны. Разве нет?

Когда Ваш документ проводится/перепроводиться оперативно текущей датой, то разницы действительно нет. Ему будет присвоена оперативная отметка времени, которая всегда на 1 с больше последнего проведенного документа. Его положение на оси времени уникально и после него ничего нет. Раньше вообще получали актуальные остатки при оперативном проведении. Но когда Дата документа меньше Даты текущего сеанса, документ будет проводиться / перепроводиться не оперативно, дату пользователь может поменять вручную (программно это никак не ограничено). Вот тогда разница будет и в этот интервал [МоментВремени(), ПраваяГраница] могут попасть движения других документов, которые изменяли остатки позже.
Методически правильно использовать МоментВремени(). Инфа с курса подготовки к Специалисту по платформе. Как-то так.

Цитировать
Тимофей, насчет получения поля целиком не понял как Вы это делали, можете рассказать?
Создавал вычисляемое поле и получал для него значение с помощью экспортной функции из общего модуля. Но зато можно допилив немного эту функцию, получать значения для этого поля любых документов, определяя тип значения ссылки получаемой функцией в качестве аргумента. Как Вы говорите, немного более универсальный подход. Вы почти так же делали, в общем-то.

VasilyK

  • Новичок
  • *
  • Сообщений: 4
Re: Задача 1.02
« Ответ #253 : Май 21, 2021, 03:46:00 pm »

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

Тимофей, насчет момента времени понял, так и буду делать :)

Насчет Партии, нашёл ещё одно решение без экспортных функций, вдруг кому пригодится. В "Выражение представления" для "Партии", можно использовать такую конструкцию:

"Выбор Когда ЗначениеЗаполнено(Партия) Тогда "Прих. Накладная №" + Строка(Вычислить(Партия.Номер)) Иначе "" Конец"

Холодный Тимофей

  • Пользователь
  • **
  • Сообщений: 22
  • ФИО: Тимофей Александрович Холодный
Re: Задача 1.02
« Ответ #254 : Май 24, 2021, 10:12:40 am »

Цитировать
Насчет Партии, нашёл ещё одно решение без экспортных функций, вдруг кому пригодится. В "Выражение представления" для "Партии", можно использовать такую конструкцию:

"Выбор Когда ЗначениеЗаполнено(Партия) Тогда "Прих. Накладная №" + Строка(Вычислить(Партия.Номер)) Иначе "" Конец"

Да, прикольно. Мне понравилось. Метод Вычислить особенно, о нем не знал. Правда у меня, как и у Вас, стоит запрет незаполненных значений у обоих измерений регистра Остатки. Поэтому можно и без выбора обойтись.