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

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

EfKonstanin

  • Новичок
  • *
  • Сообщений: 1
  • ФИО: Константин
Задача 1.09
« Ответ #45 : Сентябрь 27, 2014, 08:54:15 am »
Я вот не пойму, почему практически все решения здесь построены на 1 РН. Ведь если внимательно читать условие, то в нем можно найти строчку "Аванс числится просто за контрагентом без учета проекта", поэтому считаю что корректнее всего решать ее на 2 РН.

Nelli83

  • Новичок
  • *
  • Сообщений: 3
  • ФИО: Nelli83
Re: Задача 1.09
« Ответ #46 : Ноябрь 11, 2014, 07:05:43 pm »
Здравствуйте!

Проверьте пожалуйста, мой вариант решения задачи 1.09. не совсем уверена в установленных  блокировках. Решила на одном РН. Меня правда еще смущает отчет по взаиморасчетам за период (последняя строка), мне кажется ошибка вкралась в задачу


olsput

  • Пользователь
  • **
  • Сообщений: 15
  • ФИО: olsput
Re: Задача 1.09
« Ответ #47 : Ноябрь 27, 2014, 11:06:59 am »
Предлагаю свое решение. Тоже опирался на опыт, изложенный в опубликованных решениях.
Делал на одном регистре - Взаиморасчеты. Завел отдельный проект Аванс, и настроил на него константу.
Главный нюанс при решении через один регистр - что по сути проводки Прихода денег на проект Аванс
по логике бухгалтерии должны идти со знаком  "-". А отгрузки - это "+"
Но тогда остаток Денегн на проекте Аванс - тоже будут со знаком "-". Что не согласуется с предложенным вариантом отчета.
Поэтому проводки делал на Аванс тоже как +
И в отчете (на СКД) корректровал логику покрытия задолженности по проекту и ден.средства на авансе так:

   ВЫБОР
      КОГДА ВзаиморасчетыОстаткиИОбороты.Проект = &Аванс
         ТОГДА ЕСТЬNULL(ВзаиморасчетыОстаткиИОбороты.СуммаРасход, 0)
      ИНАЧЕ ЕСТЬNULL(ВзаиморасчетыОстаткиИОбороты.СуммаПриход, 0)
   КОНЕЦ КАК Отгрузка,
   ВЫБОР
      КОГДА ВзаиморасчетыОстаткиИОбороты.Проект = &Аванс
         ТОГДА ЕСТЬNULL(ВзаиморасчетыОстаткиИОбороты.СуммаПриход, 0)
      ИНАЧЕ ЕСТЬNULL(ВзаиморасчетыОстаткиИОбороты.СуммаРасход, 0)
   КОНЕЦ КАК Оплата

Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: Задача 1.09
« Ответ #48 : Декабрь 16, 2014, 12:40:11 pm »
Честно говоря немного вздохнул с облегчением увидев что есть и простые задачи в этом разделе.
выкладываю свое решение. Кому не трудно прокомментируйте пжл

Eufes

  • Пользователь
  • **
  • Сообщений: 33
  • ФИО: Eufes
Re: Задача 1.09
« Ответ #49 : Декабрь 16, 2014, 10:03:00 pm »
Честно говоря немного вздохнул с облегчением увидев что есть и простые задачи в этом разделе.
выкладываю свое решение. Кому не трудно прокомментируйте пжл

В целом норм по логике :)
В остальном:

1. Для чего этот код в проведении "Приход денег" ?
Если НЕ ЭтоНовый() Тогда
   Движения.Взаиморасчеты.Записать();
КонецЕсли;
Эта конструкция явно очищает движения документа при перепроведении. И поэтому строка ниже (с границей) не будет иметь смысла.
Но и по ней ест замечание:
При неоперативном проведении мы же не должны прочитать те движения, которые сделал сам документ, поэтому надо исключать:
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
    Граница = Неопределено;
Иначе   
    Граница = Новый Граница(МоментВремени(),ВидГраницы.Исключая);
КонецЕсли;

На мой взгляд, при неоперативном перепроведении, очищая движения вы тем самым искажаете остатки ведь в этот момент их кто-то может считать, а у вас отмена транзакции произошла. В таком случае бы надо сперва установить блокировку, но допустим, вы решили поменять проект, или еще хуже контрагента, тогда тоже не вариант. Правильней будет воспользоваться методом подробно описанном здесь
http://1c.chistov.pro/2013/07/blog-post_25.html


2. Судя по задаче если в приходе Проект не указан, то все идет в авансы. Условий на заполненность этого реквизита нет.
По этому же пункту я , думаю, что необходимо устанавливать блокировку еще и по проекту (если заполнен), ведь от чтения нам надо заблокировать только в разрезе проектов.

3. В отчете по состоянию надо добавить порядок, так чтоб авансы в конце отчета были.

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

Odines

  • Проверенный
  • ***
  • Сообщений: 112
  • ФИО: Odines
Re: Задача 1.09
« Ответ #50 : Январь 12, 2015, 05:13:37 pm »
Честно говоря немного вздохнул с облегчением увидев что есть и простые задачи в этом разделе.
выкладываю свое решение. Кому не трудно прокомментируйте пжл

В целом норм по логике :)
В остальном:

1. Для чего этот код в проведении "Приход денег" ?
Если НЕ ЭтоНовый() Тогда
   Движения.Взаиморасчеты.Записать();
КонецЕсли;
Эта конструкция явно очищает движения документа при перепроведении. И поэтому строка ниже (с границей) не будет иметь смысла.
Но и по ней ест замечание:
При неоперативном проведении мы же не должны прочитать те движения, которые сделал сам документ, поэтому надо исключать:
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
    Граница = Неопределено;
Иначе   
    Граница = Новый Граница(МоментВремени(),ВидГраницы.Исключая);
КонецЕсли;

На мой взгляд, при неоперативном перепроведении, очищая движения вы тем самым искажаете остатки ведь в этот момент их кто-то может считать, а у вас отмена транзакции произошла. В таком случае бы надо сперва установить блокировку, но допустим, вы решили поменять проект, или еще хуже контрагента, тогда тоже не вариант. Правильней будет воспользоваться методом подробно описанном здесь
http://1c.chistov.pro/2013/07/blog-post_25.html


2. Судя по задаче если в приходе Проект не указан, то все идет в авансы. Условий на заполненность этого реквизита нет.
По этому же пункту я , думаю, что необходимо устанавливать блокировку еще и по проекту (если заполнен), ведь от чтения нам надо заблокировать только в разрезе проектов.

3. В отчете по состоянию надо добавить порядок, так чтоб авансы в конце отчета были.

Плюс можно, я думаю, обойтись без предопределенного элемента проектов "Авансы", опираясь на знак по регистру остатков.
Спасибо, принял к сведению все замечания. Отдельное спасибо за статью. Правда я не совсем понял причем там движения которые в форме, но в целом почерпнул из нее многое!!!

naumenko_alex

  • Пользователь
  • **
  • Сообщений: 11
  • ФИО: Александр
Re: Задача 1.09
« Ответ #51 : Май 17, 2015, 01:19:49 pm »
Выкладываю своё решение на 2 регистрах и с нормальным отчетом.

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Задача 1.09
« Ответ #52 : Май 20, 2015, 01:02:14 pm »
Решил максимально просто (главное, чтобы не слишком)
Жду критики. Надеюсь, в принципе, все верно.

В обоих документах (и в РН и в ПриходеДенег) контроль остатков выполняю по старой методике.
-Записываю пустые движения
-Движения.ДолгиПокупателей.Записывать = Истина;
-Блокирую объектом
-Запрос к остаткам
и если их достаточно, то
-формирование движений

naumenko_alex

  • Пользователь
  • **
  • Сообщений: 11
  • ФИО: Александр
Re: Задача 1.09
« Ответ #53 : Май 20, 2015, 10:22:33 pm »
Решил максимально просто (главное, чтобы не слишком)
Жду критики. Надеюсь, в принципе, все верно.

В обоих документах (и в РН и в ПриходеДенег) контроль остатков выполняю по старой методике.
-Записываю пустые движения
-Движения.ДолгиПокупателей.Записывать = Истина;
-Блокирую объектом
-Запрос к остаткам
и если их достаточно, то
-формирование движений

1.Блокировка в док.  не правильно установлена. Блокируется не все движения по контрагенту,а только в значении контрагент,проект.
2.Не корректно работает разработанный алгоритм при отмене проведения документов. В регистре образовываются минусовые остатки.
3. В Отчете состояние взаиморасчетов задолженность по проекта выводиться со знаком минус.
Дальше не смотрел задача не решена.
« Последнее редактирование: Май 20, 2015, 10:25:08 pm от naumenko_alex »

Jones

  • Проверенный
  • ***
  • Сообщений: 199
Re: Задача 1.09
« Ответ #54 : Май 21, 2015, 03:10:26 pm »
Какой Вы суровый. Надеюсь Вы не принимаете экзамены?
Благодарю за критику. Постараюсь все учесть.

Sergey-Vl

  • Новичок
  • *
  • Сообщений: 7
Re: Задача 1.09
« Ответ #55 : Июнь 22, 2015, 03:24:47 pm »
Пожалуйста, покритикуйте решение.

Zeskord

  • Пользователь
  • **
  • Сообщений: 77
  • ФИО: Андрей Назаров
Re: Задача 1.09
« Ответ #56 : Сентябрь 04, 2015, 11:42:10 am »
Пожалуйста, покритикуйте решение.

В справочнике Проекты есть какой-то предопределенный проект "Аванс". Аванс - это не проект, и почему я могу его выбрать в расходной накладной или в приходе денег?

Дальше:
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
               | ВзаиморасчетыОстатки.СуммаОстаток
               |ИЗ
               | РегистрНакопления.Взаиморасчеты.Остатки(
               | &МоментВремени,
               | Контрагент = &Контрагент
               | И Проект = ЗНАЧЕНИЕ(Справочник.Проекты.Аванс)) КАК ВзаиморасчетыОстатки";
   
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("Контрагент", Контрагент);

Блокировка.Заблокировать();
Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();
Выборка.Следующий();
СуммаАвансаСписание = Мин(СуммаПоДокументу, -Выборка.СуммаОстаток);
И программа валится с ошибкой, когда результат запроса пустой. А это уже классифицируется как ошибка в программном коде.


Fat_Mike

  • Пользователь
  • **
  • Сообщений: 12
Re: Задача 1.09
« Ответ #57 : Апрель 01, 2016, 10:55:56 am »
Если не сложно, посмотрите пожалуйста решение.  ;)

LevSeverianin

  • Новичок
  • *
  • Сообщений: 7
  • ФИО: Северянин Лев Андреевич
Re: Задача 1.09
« Ответ #58 : Май 03, 2017, 02:34:15 pm »
Для ПриходаДенег сделал две логики проведения, для заполненного и пустого проекта.
Авансы не только погашаются но и зачитываются на проект и только затем списываются, чтобы не вышло ситуации когда в отчете нет проектов - одни авансы.
Весь код прокомментирован, кто сможет найти ошибки буду очень рад.

jonik

  • Проверенный
  • ***
  • Сообщений: 135
Re: Задача 1.09
« Ответ #59 : Июнь 09, 2017, 02:18:56 pm »
Всем привет. Сделал задачу с 1 одним регистром и все прекрасно списывается. Отчеты идентичны по структуре книжным.