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

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

Johnny_Green

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Евгений
Задача 1.01
« Ответ #300 : Сентябрь 03, 2013, 10:24:07 am »
Цитата (danya1606)
Мое решение, какие недоработки???
1. Режим управления блокировками: Автоматический (должен быть управляемый)
 2. Учетная политика должна задаваться на год
 3. В расходной лишний запрос и соединение к РегистрСведений.УчетнаяПолитика (проверку лучше сделать в начале)
 + нет проверки на пустое значение уч. политики(к примеру удали фифо/лифо в регистре сведений)
 решение очень тяжелое получилось в расходной

 
Цитата (Viver)
Решение. Недоработок надеюсь нет.
1. Услуги попадают в регистр партий товаров
 2. Услуги попадают в регистр продаж
 3. Можем оприходовать отрицательные показатели (Отсутствие в решении проверок на правильноезаполнение ресурсов регистра, приводящее, например, к появлению отрицательных
 остатков товаров на складе. Наличие отрицательных значений ресурсов регистра
 допустимо, только если об этом явно сказано в задании или следует из логики
 учетной схемы, не противоречащей ситуации, возникающей в реальной практике
 ведения учета)
 4. себестоимость товаров зависит от партии.
 В отчете продаж выполняется соединение к партиям товаров без
 учета партии (извиняюсь за тавтологию)
 возможно, не прав - кажется, себестоимость может неверно рассчитать

 Добавлено (03.09.2013, 10:24)
 ---------------------------------------------
 
Цитата (nskripka)
Делайте запросом. Если в цикле - снимут баллы обязательно на экзамене. По физической таблице, по индексу - не будет никаких практически задержек.

 Спасибо! Напомнили про индексацию (вечно забываю про нее)!
« Последнее редактирование: Сентябрь 03, 2013, 10:32:10 am от Евгений »

Denver

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Денис
Задача 1.01
« Ответ #301 : Сентябрь 07, 2013, 09:33:20 pm »
Да, себестоимость не правильно считается.
« Последнее редактирование: Сентябрь 07, 2013, 10:21:38 pm от Денис »


Voyager

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 1.01
« Ответ #302 : Сентябрь 17, 2013, 10:54:26 pm »
Здравствуйте, форумчане. Начал подготовку к аттестации. Как и положено, начал с первой задачи. Выкладываю свое решение вам на суд.

 Если кто-то будет смотреть решение, просьба указывать только на те ошибки и/или недочеты, за которые действительно могут снизить балл. Защит от дурака и т.п. (за исключением сворачивания ТЧ) не вешал, на юзабилити интерфейса внимания не обращал (кроме перехода к движениям из формы документа). Спасибо.

Добавлено (17.09.2013, 22:54)
---------------------------------------------
Прочитав некоторые комментарии в этой ветке к решению задач других участников форума, еще раз пересмотрел свое решение. Собственно присутствуют следующие ошибки/недочеты:
 1) Не проверяется заполненность учетной политики
 2) Присутствует неявное обращение к БД за представлением номенклатуры


Вложения:
Voyager_1.1.dt

Voyager

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 1.01
« Ответ #303 : Сентябрь 19, 2013, 11:37:22 pm »
Исправил недочеты, которые обнаружил (не только связанные с учетной политикой). Выкладываю переработанный вариант решения задачи. По-прежнему остается проблема обращения к БД в цикле за представлением номенклатуры. Как исправить эту ситуацию, не усложняя и не выходя за рамки довольно шаблонного решения, не знаю. Как вариант, можно вовсе не указывать наименование товара, которого не хватает, т.к. используется подсказка с указанием на строку товара в ТЧ.
Вложения:
Voyager_1.1_v2.dt

XYZ

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Gosha
Задача 1.01
« Ответ #304 : Сентябрь 20, 2013, 01:18:38 am »
Voyager, посмотрел твое решение, в документе расходная.
 1. в запросе убери отбор по услуге.

 2. поставь условие при списании Не услуга.

 ps и скачай с сайта 1С типовую конфигурацию, легче будет
« Последнее редактирование: Сентябрь 20, 2013, 01:24:39 am от Gosha »

Voyager

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 1.01
« Ответ #305 : Сентябрь 20, 2013, 01:43:57 am »
XYZ, спасибо за дельные советы. Внес исправления, код упростился, дополнительно внес изменения в текст запроса, чтобы в цикле не обращаться через точку к реквизиту "Услуга". По поводу каркасной конфигурации, мне пока как-то проще с чистого листа начинать, возможно, со временем перейду на каркасную, но за совет все равно спасибо.

RedTree

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Fedor
Задача 1.01
« Ответ #306 : Октябрь 09, 2013, 11:11:13 pm »
Добрый день.
 Хотел порешать билеты, посмотрел у других решения и не одного совпадения с билетом.
 например нету  движения товаров на складах(Основной,Транзитный). Или я что то с билетом напутал?

Voyager

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 1.01
« Ответ #307 : Октябрь 09, 2013, 11:21:52 pm »
RedTree, каким билетом? это ветка обсуждения задачи из сборника (ред.3, 2011г.)

RedTree

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Fedor
Задача 1.01
« Ответ #308 : Октябрь 09, 2013, 11:27:23 pm »
Понятно, значит все перепутал.

Pro100KoT

  • Новичок
  • *
  • Сообщений: 7
  • ФИО: Кирилл
Задача 1.01
« Ответ #309 : Октябрь 17, 2013, 11:05:49 am »
Всем привет! Прошу проверить моё решение, жду конструктивной критики. Спасибо
Вложения:
7870371.dt

Voyager

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 1.01
« Ответ #310 : Октябрь 17, 2013, 01:18:51 pm »
Pro100KoT

 1) Это "Запрос.УстановитьПараметр("МоментВремени", МоментВремени());" заменить на это "Запрос.УстановитьПараметр("МоментВремени", ?(РежимПроведения = РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()));"

 2) Помимо "ВТТовары.Номенклатура КАК Номенклатура" получать вот это "ПРЕДСТАВЛЕНИЕССЫЛКИ(ВТТовары.Номенклатура) КАК НоменклатураПредставление" и итоги строить по этому полю, и далее вот здесь "Сообщить("Не достаточно остатка для списания номенклатуры " + ВыборкаНоменклатура.Номенклатура + ".В наличии: "+ ВыборкаНоменклатура.КолОст + ".Списывается: " + ВыборкаНоменклатура.КолДок);" использовать не это "ВыборкаНоменклатура.Номенклатура", а вот это "ВыборкаНоменклатура.НоменклатураПредставление"

 3) Временную таблицу проиндексировать по полю "Номенклатура"

 1) 2) 3) - к этому могут придраться.

 Далее:

 4) "Если Отказ = Истина Тогда" можно заменить на "Если Отказ Тогда", аналогично в тексте запроса вот это "РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ЭтоУслуга = ИСТИНА" можно заменить на "РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ЭтоУслуга"

 5) Это "СуммаДвижения = Выборка.СумОст/Выборка.КолОст*КоличествоДвижения;" лучше заменить на это "СуммаДвижения =  КоличествоДвижения*Выборка.СумОст/Выборка.КолОст;"

 6) В цикле обхода номенклатуры это "Если Отказ = Истина Тогда Возврат; КонецЕсли;" заменить на это "Если Отказ = Истина Тогда Продолжить; КонецЕсли;"

Pro100KoT

  • Новичок
  • *
  • Сообщений: 7
  • ФИО: Кирилл
Задача 1.01
« Ответ #311 : Октябрь 17, 2013, 02:10:50 pm »
Voyager,

 За замечания спасибо,исправил
« Последнее редактирование: Октябрь 17, 2013, 03:20:33 pm от Кирилл »

SoleSurvivor

  • Пользователь
  • **
  • Сообщений: 22
Задача 1.01
« Ответ #312 : Октябрь 23, 2013, 03:16:16 am »
Здравствуйте, коллеги. Готовлюсь к "специалисту" по платформе... Вот, осилил первую задачу )
 Старался соблюсти все нюансы, о которых знал.
 Пожалуйста, прокомментируйте мое решение!
Вложения:
1272312.dt
« Последнее редактирование: Октябрь 23, 2013, 04:28:13 am от Ростислав »

Voyager

  • Новичок
  • *
  • Сообщений: 0
  • ФИО: Александр
Задача 1.01
« Ответ #313 : Октябрь 23, 2013, 10:13:07 am »
1) "Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина" - это не нужно, нужно работать с объектом "БлокировкаДанных", в твоем случае ты либо ничего не заблокируешь либо заблокируешь записи по текущим движениям документа до перепроведения (последнее произойдет в случае, если для свойства "Движения" основного реквизита формы документа выставлен флаг "Использовать всегда", чтобы и  это предусмотреть, нужно перед этим "Движения.ОстаткиНоменклатуры.Записать()" вставить это "Движения.ОстаткиНоменклатуры.Очистить()")

 2) "Выборка.Номенклатура" при выводе диагностического сообщения - это неявный запрос к БД за представлением в цикле

 3) Вместо этого "Запрос.УстановитьПараметр("МоментВремени", МоментВремени())" лучше использовать это "Запрос.УстановитьПараметр("МоментВремени", ?(РежимПроведения=РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()))"

 4) "Запрос.УстановитьПараметр("Период", НачалоГода(Дата))" тут "НачалоГода" - лишнее

 главный косяк - блокировки

SoleSurvivor

  • Пользователь
  • **
  • Сообщений: 22
Задача 1.01
« Ответ #314 : Октябрь 23, 2013, 09:46:13 pm »
Цитата Voyager ()
1) "Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина" - это не нужно, нужно работать с объектом "БлокировкаДанных", в твоем случае ты либо ничего не заблокируешь либо заблокируешь записи по текущим движениям документа до перепроведения (последнее произойдет в случае, если для свойства "Движения" основного реквизита формы документа выставлен флаг "Использовать всегда", чтобы и  это предусмотреть, нужно перед этим "Движения.ОстаткиНоменклатуры.Записать()" вставить это "Движения.ОстаткиНоменклатуры.Очистить()") 2) "Выборка.Номенклатура" при выводе диагностического сообщения - это неявный запрос к БД за представлением в цикле

 3) Вместо этого "Запрос.УстановитьПараметр("МоментВремени", МоментВремени())" лучше использовать это "Запрос.УстановитьПараметр("МоментВремени", ?(РежимПроведения=РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()))"

 4) "Запрос.УстановитьПараметр("Период", НачалоГода(Дата))" тут "НачалоГода" - лишнее

 Спасибо большое! Выкладываю исправленное решение, если кому-нибудь будет интересно.

 1) Собрал информацию, понял следующее: "БлокироватьДляИзменения" актуально использовать тогда, когда одновременно соблюдаются два условия: во-первых, контроль остатков производится после записи движений документа в регистр, во-вторых, у регистра включен режим разделения итогов. Иначе данное свойство не имеет смысла. Т.е. в режиме управляемых блокировок платформа сама при записи движений устанавливает необходимые блокировки. Но, в случае с разделением итогов, блокировки накладываются только на записи с тем разделителем, который получила текущая транзакция. Свойство "БлокироватьДляИзменения" позволяет установить блокировки для всех итогов. В данном случае контроль остатков производится до записи в регистр, поэтому необходимо использовать объект "БлокировкаДанных". Я правильно понимаю?

 2) Согласен, добавил в запрос ПРЕДСТАВЛЕНИЕССЫЛКИ()

 3) Так же исправил.

 4) Я специально не использую метод "ПолучитьПоследнее", как и виртуальную таблицу "СрезПоследних", т.к. если учетная политика за текущий год не будет указана, такой запрос получит метод списания за предыдущий период, что, как мне кажется, будет ошибкой. В таком случае "НачалоГода(Дата)" необходимо использовать, иначе запрос окажется пустым.
Вложения:
3514661.dt
« Последнее редактирование: Октябрь 23, 2013, 10:12:21 pm от Ростислав »