Форум Чистова. Подготовка к экзаменам 1С

Аттестация "1С:Специалист" => Аттестация "1С:Специалист по платформе 1С:Предприятие 8.3 и 8.2" => Тема начата: esa_makss от Май 26, 2010, 03:11:34 pm

Название: Задача 1.01
Отправлено: esa_makss от Май 26, 2010, 03:11:34 pm
Подскажите пожалуйста как делать отбор в форме списка Расходной. Делаю через критерий отбора, но ничего не получается

Добавлено (26.05.2010, 15:11)
---------------------------------------------
Извините, нашла обсуждение этого вопроса

Название: Задача 1.01
Отправлено: Нуб от Июнь 05, 2010, 01:06:27 pm
Раз уж нашла, то отписала бы как делать, ведь нашла - поделись с другими )
Название: Задача 1.01
Отправлено: Silverman от Июнь 08, 2010, 11:03:20 am
как в 8.1 сделать не получится. можно из форм списка (или элемента, точно не помню) номенклатуры вызвать форму критериев отбора и в этой форме отобразить нужные документы.
Название: Задача 1.01
Отправлено: d1mka22091988 от Сентябрь 06, 2010, 11:10:28 am
Доброго времени суток! Вот начал подготовку к специалисту на 8.2 и тут же стало возникать много вопросов. Сделал первую задачу и хочу попросить чтобы более опытные товарищи посмотрели и сказали правильно ли я ее сделал. Больше всего интересует модуль документа "Расходная накладная", на отчетах сильно не заморачивался пока...
Название: Задача 1.01
Отправлено: d1mka22091988 от Сентябрь 06, 2010, 11:12:07 am
Вот база (с первого раза не прикрепилась):
Вложения:
7436561.dt
Название: Задача 1.01
Отправлено: Amali от Сентябрь 06, 2010, 06:29:57 pm
d1mka22091988,
 Явные ошибки -
 1) У пользователя нету возможности изменить учетную политику.
 2) В проведении расх. накл. в запросе есть условие выбора номенклатуры из таб части документа -
 "И (НЕ РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга)" - и из за этого номенклатура с видом "Услуга" никогда не попадет в регистр "Продажи" и соответственно в отчет "Продажи".
Название: Задача 1.01
Отправлено: d1mka22091988 от Сентябрь 06, 2010, 06:49:10 pm
Amali, согласен по обоим пунктам. А есть ли еще какие нибудь недочеты? Правильно ли я блокирую регистр в обработке проведения. Просто слышал разные мнения, в том числе и на этом форуме, что нужно блокировать регистр перед чтением чтобы пока мы читаем остатки, никто другой не мог их поменять (я так и делал установив БлокироватьДляИзменения = Истина). По мнению других, регистр надо блокировать только при записи с помощью БлокировкаДанных. Как же все таки правильно для сдачи экзамена?:)
Название: Задача 1.01
Отправлено: SergTH000 от Сентябрь 07, 2010, 08:10:56 am
d1mka22091988,
 
Quote
Движения.ОстаткиНоменклатуры.Очистить();
 1.Движения.ОстаткиНоменклатуры.Записать();

 Достаточно просто Движения.ОстаткиНоменклатуры.Записать();
 2.Зачем тебе итоги по партии? Достаточно по номенклатуре
 3.
Quote
Если НадоСписать = 0 Тогда Прервать;
лучше Пока Выборка.Следующий И НадоСписать > 0
 Это ерунда в принципе. А вот блокировки используешь не верно. БлокироватьДляИзменения применяется, когда ты сначала записываешь данные в регистр, а потом делаешь запрос, к этому регистру. Сделай поиск по форуму, здесь очень много про это писали. В этой задаче, ты сначала делаешь запрос, а потом запись в этот регистр, нужно создавать объект БлокировкаДанных и самому описывать измерения по которым ты будешь блокировать его.

Добавлено (07.09.2010, 08:10)
---------------------------------------------
d1mka22091988,

Quote
Если НадоСписать<ВыборкаПартий.КолОСт Тогда
                КолСписание = НадоСписать;
                СуммСписание = ВыборкаПартий.СуммОст/ВыборкаПартий.КолОСт*НадоСписать;
             Иначе
                КолСписание = ВыборкаПартий.КолОст;
                СуммСписание = ВыборкаПартий.СуммОСт;
             КонецЕсли;

 Проще так: КолСписание = МИН(НадоСписать, КолОст)
 А проблему копеек решает СуммСписание = КолСписание/КолОст*СуммаОст
Название: Задача 1.01
Отправлено: Heckfy от Сентябрь 30, 2010, 01:25:52 pm
Классическая задача.
Вложения:
1.01.dt
Название: Задача 1.01
Отправлено: Danan от Октябрь 03, 2010, 02:37:13 pm
Доброго времени суток.
 Мой вариант решения задачи.

Особо интересует мнения по отчету а конкретно работа с вариантами, правильно ли?

Ну и конечно же управляемые блокировки в проведении расходной накладной. Читал на форумах и в литературе про эти самые блокировки, но использую впервые.

А также в общем и целом решение этой задачи в среде 8.2.

Буду рад конструктивной критике.


Вложения:
Task_1_1.dt
Название: Задача 1.01
Отправлено: SergTH000 от Октябрь 03, 2010, 07:04:14 pm
ПриходнаяНакладнаяСписокНоменклатуры.Ссылка.Дата КАК Период,
 ПриходнаяНакладнаяСписокНоменклатуры.Ссылка КАК Партия

Плохо обращаться через точку к полю Дата, лучше написать:
 ВЫБРАТЬ &Дата КАК Период, а потом установить параметр

Про расходную.На курсах в 1с обращают внимание, что не стоит без надобности выгружать результат запроса в ТЗ, просто обходить выборкой. Как говорил Белоусов единственная задача, где эта выгрузка оправдана это 1.19

Про отчет - проще всего завести ресурс себестоимость в продажах и он строится элементарно.

Блокировки - все верно у тебя.

Название: Задача 1.01
Отправлено: Danan от Октябрь 04, 2010, 12:51:31 am
SergTH000, по порядку:
 1) Обработка в приходной накладной - твоя правда, благодарю.

2) В обработке расходной накладной я не выгружаю результат запроса сразу в тз.
 При обходе результата запроса формируется таблица значения, которая потом загружается в регистр накопления. Дело в том что формировать движения по регистру загружая тз в набор записей быстрее чем формировать каждую строчку.
 В видео лекции Павла Чистова об этом как раз говорится. Начиная с 5:00 - 5:30. Вот ссылка: http://vimeo.com/8150615.

Что касается выгрузки результата запроса в тз об этом написано в правилах по аттестации, в списке наиболее часто встречающихся ошибок.

3) Еще один ресурс в регистре продажи - это избыточность на мой взгляд, ведь можно получить ту же себестоимость из регистра накопления. Но я не об этом.
 Меня интересовало мнение людей по поводу работы с вариантами отчета, работы с наборами данных. И поскольку в задании явно указано что отчет должен выдавать информацию о продажах и остатках, то сколько вариантов отчета должно быть один, два или три?

Название: Задача 1.01
Отправлено: SergTH000 от Октябрь 04, 2010, 06:23:48 am
Quote
В обработке расходной накладной я не выгружаю результат запроса сразу в тз.
 При обходе результата запроса формируется таблица значения, которая потом загружается в регистр накопления. Дело в том что формировать движения по регистру загружая тз в набор записей быстрее чем формировать каждую строчку.
 В видео лекции Павла Чистова об этом как раз говорится. Начиная с 5:00 - 5:30. Вот ссылка

 Конечно, я ее видел=) это лекция старая, потом сам Чистов, на последующих вебинарах стал делать все обыной выборкой. Это просто совет.
 
Quote
Меня интересовало мнение людей по поводу работы с вариантами отчета, работы с наборами данных. И поскольку в задании явно указано что отчет должен выдавать информацию о продажах и остатках, то сколько вариантов отчета должно быть один, два или три?

 Ничего страшного в этой избыточности нет, на экзамене к этому не придераются. Вариантов отчета, всегда столько сколько таблиц в задании.
Название: Задача 1.01
Отправлено: Danan от Октябрь 05, 2010, 05:23:35 pm
SergTH000, Спасибо за совет, я подумаю над ним.
 Я так понял ты уже бывал на экзамене.
 А если формировать движения по регистру таким образом:

Code
Движения.ОстаткиНоменклатуры.Загрузить(РезультатЗапроса.Выгрузить());

У меня так приходной накладной.

Название: Задача 1.01
Отправлено: SergTH000 от Октябрь 05, 2010, 05:30:01 pm
Danan, Да так можно и я так делал на экзамене (правда не для приходной, делай ее лучше конструктором время сэкономишь, а в расчетных задачах). Остальное делал обычной выборкой. По коду препод сделал лишь одно замечание (хотя из того что опер я сделал не так смотрел очень внимательно) по расчетным задачам, что в общем модуле не надо писать

Запись = НаборЗаписей[Выборка.НомерСтроки - 1] , написал об этом Павлу, он согласился и предложил использовать метод набора Найти(), куда передавать структуру с номер строки. Так кстати делают на курсах в 1с.

Название: Задача 1.01
Отправлено: Danan от Октябрь 06, 2010, 01:02:28 am
SergTH000, выгрузка запроса в приходной для чтобы избавиться от дублей строк.
Название: Задача 1.01
Отправлено: SergTH000 от Октябрь 06, 2010, 07:56:43 am
Danan, Да понимаю я зачем эта выгрузка! Я имею ввиду, что время на это ты потратишь, а оценит ли это экзаменатор еще вопрос, Это надо делать в последнюю очередь, когда все успел и т.д.
Название: Задача 1.01
Отправлено: Gyd от Октябрь 19, 2010, 04:19:20 pm
Quote (esa_makss)
Подскажите пожалуйста как делать отбор в форме списка Расходной.

 вопрос до сих пор не раскрыт, подскажите как это реализовать.
Название: Задача 1.01
Отправлено: ut2k5 от Октябрь 19, 2010, 07:08:59 pm
Gyd, http://forum.chistov.pro/index.php?topic=1232.msg1#msg1
 там тебе ответили, смотри про динамический список с параметром и две процедуры в форме
Название: Задача 1.01
Отправлено: Ezhilo от Ноябрь 03, 2010, 11:05:20 pm
Не к задаче относится, но
 SergTH000, почему нельзя использовать
 "Запись = НаборЗаписей[Выборка.НомерСтроки - 1] " ? Ссылочку на обоснование дайте плиз.
Название: Задача 1.01
Отправлено: Mraque от Ноябрь 18, 2010, 11:41:43 am
Вопрос про схему проведения.

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

Это ошибка, недочет, или как ?

Название: Задача 1.01
Отправлено: Danan от Ноябрь 20, 2010, 11:04:59 am
Это нормально. Если для расчета себестоимости необходимо КоличествоОстаток, то можно ведь попутно проконтролировать и отрицательные остатки. Какой смысл повторно строить запрос только для того узнать появились ли отрицательные остатки или нет?
Название: Задача 1.01
Отправлено: igrok_ от Ноябрь 24, 2010, 10:49:42 am
Задача 1.1
Вложения:
1_1.dt
Название: Задача 1.01
Отправлено: Vlastmen от Ноябрь 24, 2010, 11:15:03 am
igrok_, отчет по остаткам кривой, ресурс Количество считать нужно функцией Сумма() вместо Количество().
 Не установлены отборы и период при получении остатков
Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 06, 2010, 10:53:20 am
Вопрос по оператинному и неоперативному проведению (относится ко всем задачам, но раз уж начал с первой пишу сюда).Поясните пожайлуста нужно ли использавать разный механизм для проведения в оперативном и неоперавном режиме. В неоперативном режиме вроде бы не надо контролировать остатки, но тогда как проводить списание по себестоимости (может быть товара нет и соответсвенно себестоимость=0, а спысывать надо)?! Если использовать одну и ту же процедуру проведения для опер. и неопер. проведения то тогда при перепроведении старой накладной, может возникнуть ситуация что остатки изменятся так что последущие проведённые документы не могли быть проведены (остатков для проведения уже может быть недостаточно). Где логика?
Название: Задача 1.01
Отправлено: Oliver от Декабрь 09, 2010, 05:25:11 am
Посмотрел решение Heckfy, всё отлично, спасибо.
 У меня возник следующий вопрос: нужно ли в самом начале делать

Движения.ОстаткиТоваров.Очистить();
 Движения.ОстаткиТоваров.Записать(); //можно и без очистить?

Мы стёрли движения которые могли быть у документа, а потом строим запрос к регистру остатков. И в параметре передаем МоментВремени. На сколько я понимаю движения созданные этим документом не попадут в остатки, даже если они есть.
 Не является ли это лишним? Движения.ОстаткиТоваров.Записать();
 Снижают ли за это баллы?
 Заранее спасибо.

Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 09, 2010, 10:00:41 am
Oliver, думаю нет необходимости очищать движения перед проведением. Действительно, раз мы перадаём в таблицу остатков МоментВремени, то движения созданные документом не попадут в остатки. Тоже об этом думал.
 Собственно так делается в решённом примере из задачника.
Название: Задача 1.01
Отправлено: Vlastmen от Декабрь 10, 2010, 08:20:55 am
AndreiPiter, Очищать остатки нужно.
 При оперативном перепроведении дата увеличивается и в остатках учитываются старые движения этого же документа.
Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 10, 2010, 10:25:57 am
Quote (Vlastmen)
При оперативном перепроведении дата увеличивается и в остатках учитываются старые движения этого же документа.

 Да, действительно при перепроведении будущей датой старые движения попадают в остатки. Но если посмотреть пример из задачника, то увидим что движения не удаляются!!! И вряд ли это ошибка.
 В условиях задачи не сказано, что документы должны перепроводится будущим числом. В начале задачника есть общие требования ко всем задачам:
 "Документы, используемые в решении могут быть неоперативно перепроведены задним числом."
 Требований по перепроведению будущим числом нет.
Название: Задача 1.01
Отправлено: Vlastmen от Декабрь 10, 2010, 03:39:32 pm
AndreiPiter, Допустим преподователь при проверке твоего решения, захочет исправить какие-либо данные в твоем документе, скажем там добавит 1 к количеству, нажимает провести и документ не проводится, а вроде как на складе к примеру был ещё свободный товар, и получается что это ошибка, и ты ему тоже скажешь "Требований по перепроведению будущим числом нет"?
Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 10, 2010, 09:35:05 pm
Vlastmen, как быть с примером из задачника? Будем считать что там процедура ОбработкаПроведения некорректна???
Название: Задача 1.01
Отправлено: SergTH000 от Декабрь 12, 2010, 01:26:32 am
AndreiPiter, Выложи ихний модуль проведения Расходной, что то не верится, что они движения не удаляют, если речь о старой методике.

Добавлено (12.12.2010, 01:26)
---------------------------------------------
Очищать движения можно как методом Очистить(), так и Записать() (в начале обработки проведения, записывая пустой набор). Вместе применять их для очистки смысла нет

Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 12, 2010, 12:11:28 pm
SergTH000, вот пример решения из задачника
Вложения:
9636301.dt
Название: Задача 1.01
Отправлено: Vlastmen от Декабрь 12, 2010, 04:48:31 pm
SergTH000, не совсем так. Зачем применять очистить() если набор записей изначально не считан из регистра?
 Разве что считать набор старых движений методом Прочитать() потом Очистить() и потом Записать() (ведь если не записать то на момент получения остатков они учтутся если дата увеличилась) и получается что проще и оптимальнее записать сразу методом Записать()
Название: Задача 1.01
Отправлено: SergTH000 от Декабрь 12, 2010, 06:05:30 pm
Vlastmen, для метода очистить() не нужно предварительно использовать прочитать(). Очистить() удалит существующие движения.
Название: Задача 1.01
Отправлено: Vlastmen от Декабрь 13, 2010, 08:42:19 am
SergTH000, из регистра он их удалит только в конце процедуры проведения (если Запись движений при проведении = "Записывать модифицированные" ИЛИ (Запись движений при проведении = "Записывать выбранные" И НаборЗаписей.Записывать = Истина)) На момент получения остатков удалятся записи только из набора, в регистре ничего не изменится пока не применить метод Записать().
Название: Задача 1.01
Отправлено: Gyd от Декабрь 17, 2010, 03:56:41 pm
Quote (AndreiPiter)
SergTH000, вот пример решения из задачника
 Прикрепления: 9636301.dt(251Kb)

 что-то как-то сложно... устал читать smile

соглашусь с Vlastmen, документ должен при любых проведениях считать корректно. А вот почему этого нет в примере, это вопрос.

Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 17, 2010, 07:55:39 pm
Quote (Gyd)
соглашусь с Vlastmen, документ должен при любых проведениях считать корректно. А вот почему этого нет в примере, это вопрос.

 ну может быть потому что для этого нужна корректная проведённая последовательность всех документов (как приходных, так и расходных). Каким обазом будет поддерживаться хронологически правильная последовательность это не входит в рамки задач.
 Задумайтесть, даже если вы поставите удалять движения в начале и документ станет проводится (т.е по остаткам будет всё нормально), то состояние учёта на момент проведения документа будет неверным (требуется востановление хронологиеской последовательнисти документов)!
Название: Задача 1.01
Отправлено: Gyd от Декабрь 20, 2010, 09:27:31 am
Quote (AndreiPiter)
Задумайтесть, даже если вы поставите удалять движения в начале и документ станет проводится (т.е по остаткам будет всё нормально), то состояние учёта на момент проведения документа будет неверным

 что-то не пойму о чём вы.
Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 20, 2010, 08:50:04 pm
Gyd, скажем у нас есть Документ1, Документ2 (в хронологическом порядке)
 мы перепроводим Документ1 будущим числом. т.е теперь Документ2, Документ1
 на момент времени Документ1 состояние учёта неверно (по количеству списали правильно, а по себестоимости/партии нет).
 Нужно корректно препровети последовательность Документ2, Документ1
Название: Задача 1.01
Отправлено: Gyd от Декабрь 21, 2010, 10:16:42 am
Quote (AndreiPiter)
то состояние учёта на момент проведения документа будет неверным
а вы попробуйте не нарушать последовательность: есть Док1 и Док2, перепроведите Док2 будущей датой, последовательность не нарушена,а остатки Док2 на момент проведения получает неправильные. Это если движения не очищать.
Название: Задача 1.01
Отправлено: AndreiPiter от Декабрь 21, 2010, 07:46:41 pm
Gyd, конечно, но это всего лишь частный случай.
Название: Задача 1.01
Отправлено: Gyd от Декабрь 22, 2010, 03:22:12 pm
Набросал примерную схему того что нужно сделать в модуле проведения, типа шпаргалки, поправьте пожалуйста или дополните, глядишь кому-нибудь пригодится:

Предварительные:
 1. Очистить движения документа по регистру.
 2. Включить/выключить формирования движений по регистру (св-во набора записей Записывать).
 3. Блокировка данных регистра.

В запросе:
 1. Сгруппировать строки табличной части документа для правильного списания номенклатуры.
 2. Установить параметры для виртуальных таблиц (фильтры для быстрого получения данных).
 3. Применить при необходимости функцию ЕСТЬNULL для получаемых числовых значений (избавиться от ошибок при получении пустых значений).

Списание товара:
 1. Реализовать правильное списание сумм (чтоб не зависали копейки).
 2. Вывод записей регистра в "ноль" (отсутствие лишних записей в регистре).
 3. Вывод сообщений пользователю при нехватке/отсутствии товара и отменить проведение документа.
 4. Добавить, при желании, измерение Себестоимость в регистр Продажи (для отчета).

Название: Задача 1.01
Отправлено: RomanKokarev от Декабрь 29, 2010, 03:38:45 pm
Привет.
 Посмотрел вариант Heckfy.
 Подскажите, зачем в параметрах виртуальной таблицы ОстаткиНомеклатуры.Обороты в условии пишем вот это: Номенклатура В
    (ВЫБРАТЬ
       Расходная.Номенклатура
    ИЗ
       Расходная КАК Расходная).
Название: Задача 1.01
Отправлено: RAINman от Декабрь 29, 2010, 03:57:30 pm
RomanKokarev, дабы результатом запроса вернулись лишь обороты по номенклатуре из документа
Название: Задача 1.01
Отправлено: RomanKokarev от Декабрь 29, 2010, 04:03:53 pm
Спасибо RAINman. Это относится и к остаткам?
Название: Задача 1.01
Отправлено: RAINman от Декабрь 29, 2010, 04:42:17 pm
RomanKokarev, к любим виртуальным таблицам...будь то остатки или обороты.
Название: Задача 1.01
Отправлено: Dunda от Январь 10, 2011, 08:04:26 am
привет всем!!! я теперь с вами!!! но оказывается я так медленно решая!! почти месяц мучила первую задачу!!! мне сказали здесь могут сказать какие ошибки допущены!!))))
Вложения:
1.1.dt
Название: Задача 1.01
Отправлено: Gyd от Январь 11, 2011, 11:23:08 am
Quote (Dunda)
привет всем!!! я теперь с вами!!! но оказывается я так медленно решая!! почти месяц мучила первую задачу!!! мне сказали здесь могут сказать какие ошибки допущены!!))))

 Это не ошибки, но можно по-другому сделать:
 1. Нет подсистемы для оперативного учета.
 2. Нет интерфейса для оперативного учета (все свалено в одну кучу smile )
 3. Из документа Расходная не перейти в регистры по которым делает движения документ, быстро движения не посмотришь.

Ошибки:
 1. Зачем вы ищете (и не находите) в регистре Остатков услуги? Вы делаете фильтр по Номенклатуре из табл. части документа где у вас может быть услуга, включаете эту услугу в фильтр хотя знаете что по ней ничего не получите.
 2. У меня такая же ошибка была - услуга попадает в регистр Остатки из Приходной накладной.
 3. Обратите внимание на форму отчета Остатки товара в задаче, у вас она не такая. И итоговая строка не нужна.
 4. В отчете Продажи сумма услуги не попадает в колонку Прибыль. Итоговая строка не нужна.
 5. Сортировка в запросе сделана по ...Партия.МоментВремени, а зачем? в поле Партия записывается документ, а документ уже "занял" свое место в цепочке других документов.

Название: Задача 1.01
Отправлено: AndreiPiter от Январь 11, 2011, 07:38:16 pm
Dunda, могу добавить к вышеперечисленному
 1. Зачем Очистить в ОбработкеПровединия ПриходнойНакладной?
 2. Если выбрать услугу в ПриходнойНакладной она попадает в ОстаткиНоменклатуры.
 3. В отчете ОстаткиТоваров расположение полей группировок должно быть Отдельно и только в итогах.
 4. Итоги по вертикали в отчетах не нужно выводить.
Название: Задача 1.01
Отправлено: Dunda от Январь 12, 2011, 05:46:57 am
)))) Большое спасибо за разъяснения!!! буду исправляться!!!
Название: Задача 1.01
Отправлено: Gulf_Stream от Январь 21, 2011, 02:10:34 pm
Моя первая экзаменационная задача на 8.2, до этого решал только для 8.1

Возникли такие вопросы:
 1)Достаточно ли установить флаги БлокироватьДляИзменения или нужно исполь зовать объект болкировка?
 2)Удаление движений - везде выставлял удалять автоматически (как было в 8.1) - это не считается ошибкой?

Спасибо.


Вложения:
_1.01.dt
Название: Задача 1.01
Отправлено: AndreiPiter от Январь 21, 2011, 08:12:44 pm
Quote (Gulf_Stream)
1)Достаточно ли установить флаги БлокироватьДляИзменения или нужно исполь зовать объект болкировка?

 Нужно использовать объект БлокировкаДанных, т.к при БлокироватьДляИзменения=Истина будут заблокированы соответсвущие записи только при записи движений, такая методика используется при проверке остатков после записи движений (ни в одной задаче не встречается), а нам нужна блокировать записи до получения сведений об остатках номенклатуры (т.е до запроса).

Quote (Gulf_Stream)
2)Удаление движений - везде выставлял удалять автоматически (как было в 8.1) - это не считается ошибкой?

 Думаю да, поскольку в этом случае перед проведением будут безусловно удалятся движения (т.е ещё одно обращение к базе данных). Надо оставлять "Удалять автоматически при отмене проведения".
Название: Задача 1.01
Отправлено: rus от Январь 24, 2011, 07:54:29 am
Мое решение
Вложения:
4815930.dt
Название: Задача 1.01
Отправлено: Владик от Февраль 07, 2011, 05:17:50 pm
Прошу проверить
Вложения:
1.1..dt
Название: Задача 1.01
Отправлено: XSmilE от Февраль 26, 2011, 12:24:35 pm
Проверьте, пожалуйста, и мое решение.
Вложения:
XSmilE_1.01.dt
Название: Задача 1.01
Отправлено: LivingStar от Март 16, 2011, 07:24:40 am
Прокоментируйте мой вариант решения...
Вложения:
LivingStar_01.1.dt
Название: Задача 1.01
Отправлено: Helga от Март 28, 2011, 01:30:02 am
проверьте мой вариант. правильно ли использую блокировки данных? И еще вопрос - как и когда надо ставить свойство "индексировать"?
Вложения:
1-01-.dt
Название: Задача 1.01
Отправлено: Danan от Март 28, 2011, 05:15:46 pm
Helga, по поводу блокировок есть тема на форуме. Управляемые блокировки
 По поводу индексации - я думаю что это имеет смысл в запросах с временными таблицами. При создании временной таблицы появляется возможность проиндексировать ее поля. Запрос по проиндексированным полям временной таблицы выполняется быстрее.

Если речь идет о индексации для подчиненных объектов(измерения регистров, реквизиты) прикладных объектов( справочники, документы, регистры и тд) то не знаю зачем это нужно.

Название: Задача 1.01
Отправлено: gr0ck от Апрель 13, 2011, 10:25:57 pm
Решил первую задачу, буду рад комментариям.
 Очень интересует вопрос по поводу блокировок, уже сдавал один раз, ошибка была в неправильном использовании блокировок. Еще в параметрах расходной использовал дату, ну эт понятно, накосячил, но не думал, что будут к этому придираться. Сдавал давно очень, сейчас уже многое забыл, заново начал готовиться
Вложения:
8624144.dt
Название: Задача 1.01
Отправлено: garden от Апрель 29, 2011, 11:07:36 am
Столкнулась с такими проблемами при решении задачи:
 1.На счет оперативного и не оперативного проведения.
 Перед решением просмотрела лекции Чистова и Гилева. Позиция Чистова (если конечно я все поняла првильно): В неоперотивном режиме не делать никаких блокировок и проверок на наличии товара в базе. Т.е. делаем условие если оперативный режим то все как всегда. Если неоперативный проводим документ безусловно и тут же возникает куча проблем на какое МоментВремени брать остатки (0001 01 01 или 3999 31 12 или все же на момент документа) и как не делать проверок, если таким образом можно получить отрицательные остатки. И вообще глобальный вопрос на экзамене проверяют разделение на оперативный и неоперативный режим???? У Гилева все просто ставим МоментВремени и никаких отличей оперативного от неоперативного. ПЛИЗ если есть хоть какие-то знания по данному вопросу поделитесь, буду очень благодарна.
 2. Чистов в своих лекциях делает акцент на том, что при заполнения регистра продажи себестоимость должна быть обязательно измерением регистра Продажи. Мотивация: а вдруг в базе есть не только расходная, а также списание товара или потеря или кража, то в регистре Себестоимость или ОстаткиНоменклатуры (у кого как) себестоимость уменьшится, но это не продажа. И поэтому формировать отчет необходимо только из регистра продажи!!! Т.е. себестоимость будем обязательно хранить и в И как говорит Чистов говорит это грубейшая ошибка новичков.
 А мне интересно в рамка задач, а не прикладных решений на это вообще стоит обращать внимания?

Надеюсь на Вашу помощь.

Название: Задача 1.01
Отправлено: SergTH000 от Апрель 29, 2011, 12:12:36 pm
garden,
 
Quote
Чистов в своих лекциях делает акцент на том, что при заполнения регистра продажи себестоимость должна быть обязательно измерением регистра Продажи

 2. Тебе же самой удобнее будет делать отчеты, если в Продажи ты добавишь еще один ресурс Себестоимость. К тому же в сборнике есть задачи когда нужно распределить доп. расходы и там точно только так..

Добавлено (29.04.2011, 12:12)
---------------------------------------------
1. http://forum.chistov.pro/index.php?topic=1310.msg13626#msg13626

Название: Задача 1.01
Отправлено: garden от Апрель 29, 2011, 09:01:44 pm
SergTH000, Спасибо!
 Все четко и понятно.
Название: Задача 1.01
Отправлено: garden от Апрель 29, 2011, 09:06:54 pm
Выкладываю свое решение может кому пригодится. Попробывала использовать новую методику проведения, получилось не оптимально, да и с запросами немого наворотила, но все работает. Если кто прокоментирует буду очень рада!
Вложения:
1-01.dt
Название: Задача 1.01
Отправлено: antantait от Май 05, 2011, 01:14:38 pm
В 1с я новичок.
 Вот попробовал сделать. Посмотрите проведение расходной накладной. Натворотил что то с циклами помогите разобраться?
Вложения:
1.1.dt
Название: Задача 1.01
Отправлено: Gyd от Май 06, 2011, 11:41:07 am
Quote (antantait)
Вот попробовал сделать. Посмотрите проведение расходной накладной. Натворотил что то с циклами помогите разобраться?

 1. в регистре нет запрета на незаполненные значения, при проведении позволяет записать пустые строки документа в регистр.
 2. в документах желательно сделать переход к регистрам, чтобы из формы можно было быстро посмотреть движения документа.
 3. "не хватает для списания " + остаток - этого недостаточно, товар еще указывайте что понятно было чего не хватает.
 4. Базы подписывайте пожалуйста, типа antantait_1.1.
 5. Стоимость (в регистре) в вашем случае это сумма на которую продали товар, а вообще "стоимость" это определение для единицы товара.

А так вроде всё работает. Товар же списывается, и вроде правильно списывается. А что в циклах смущает?

Название: Задача 1.01
Отправлено: antantait от Май 10, 2011, 10:35:38 am
5. Стоимость (в регистре) в вашем случае это сумма на которую продали товар, а вообще "стоимость" это определение для единицы товара.
 То есть это выручка?
 А так вроде всё работает. Товар же списывается, и вроде правильно списывается. А что в циклах смущает?
 Была проблема для определения товар или услуга с циклами намудрил.Если услуга получалось деления на 0. Сейчас сделал через запрос ВЫБОР
    КОГДА ДокРасх.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)
                       ТОГДА 1
                    ИНАЧЕ 0
                 КОНЕЦ КАК Вид

Quote
Название: Задача 1.01
Отправлено: Gyd от Май 11, 2011, 09:56:13 am
Quote (antantait)
То есть это выручка?

 да, это выручка.
Название: Задача 1.01
Отправлено: Ikem от Май 16, 2011, 08:04:55 pm
Здравствуйте. Посмотрите пожалуйста мой вариант. Выражу благодарность любой критике. Заранее спасибо.

Добавлено (16.05.2011, 14:37)
---------------------------------------------
Нашел у себя сам ошибку. Просмотрел предложенные тут решения. Ошибка частая. Может даже у всех. Нельзя использовать метод "ПолучитьПоследнее". Поскольку вернет он действительно самое последнее значение, и не факт, что этого года.
 Я решил проблему через -
 УчПолитика = РегистрыСведений.УчетнаяПолитика.Получить(НачалоГода(Дата)).Значение;
 Вроде так работает.

Добавлено (16.05.2011, 14:45)
---------------------------------------------
Плюс поправил в свойствах конфигурации - Режим управления блокировкой данных в транзакции по умолчанию - Управляемый

Добавлено (16.05.2011, 15:20)
---------------------------------------------
Продолжаем работу над ошибками...

Добавил в приходную накладную проверку.
 Проверяю ситуацию, когда в табличной части указывается номенклатура, у которой не указан реквизит "Вид номенклатуры". Раньше обрабатывалось только заполненное значение.

Добавлено (16.05.2011, 20:04)
---------------------------------------------
Решая задачу 1.2 возник вопрос.
 Откуда берется требование делать отбор по номенклатуре в списке расходных?
 Я не говорю, что это глупость. Просто не понимаю, где написано это требование.


Вложения:
1_01.dt
Название: Задача 1.01
Отправлено: Gyd от Май 19, 2011, 09:09:05 am
Quote (Ikem)
Откуда берется требование делать отбор по номенклатуре в списке расходных?
это из старого сборника.

Quote (Ikem)
Ошибка частая. Может даже у всех. Нельзя использовать метод "ПолучитьПоследнее". Поскольку вернет он действительно самое последнее значение, и не факт, что этого года.

 чем вам не нравится этот метод? он вернет последнее значение на указанную дату ПолучитьПоследнее(Дата), то есть если у вас регистр сведений с периодичностью Год, то за каждый год у вас будет записано одно значение, значит метод вернет последнее (и единственное) значение в году. Год определится по Дата.
Название: Задача 1.01
Отправлено: Urfin от Июнь 06, 2011, 12:26:09 am
Доброго дня.
 Собственно есть 2 вопроса:
 1. Сделал у регистра ПРодажи 3 ресурса: количество, стоимость, себестоимость. При проведении сначала списываю партии, если все норм, то беру общую себестоимость и ее записываю в регистр продажи. Как следствие отчет продажи получился совсем простой. Это нормальное решение?
 2. Я так понял, эту задачу нельзя решить по новому методу контроля остатков? Т.е. процедура проведения и контроля остатков совпадает с 8.1. Это так? или есть способ? Если есть, подскажите его, пжл. Как-то можно однозначно определить, какие задачи нужно решать по новому способу, а какие по старому? Где можно про это почитать?

 Прикрепляю базу, буду признателен за критику.
 Спасибо.
Вложения:
1.01_Urfin.dt
Название: Задача 1.01
Отправлено: Gyd от Июнь 06, 2011, 10:30:59 am
Quote (Urfin)
Как следствие отчет продажи получился совсем простой. Это нормальное решение?
Нормальное. Все так делают.

 ---------------------------------------------
 
Quote (Urfin)
Я так понял, эту задачу нельзя решить по новому методу контроля остатков? Т.е. процедура проведения и контроля остатков совпадает с 8.1. Это так? или есть способ? Если есть, подскажите его, пжл. Как-то можно однозначно определить, какие задачи нужно решать по новому способу, а какие по старому? Где можно про это почитать?

 http://forum.chistov.pro/index.php?topic=1310.msg1#msg1 вот здесь сообщение SergTH000, ответы на все ваши вопросы.
Название: Задача 1.01
Отправлено: Urfin от Июнь 06, 2011, 12:27:05 pm
Gyd, спасибо.

 Не знаю, в какую тему поместить вопрос, а новую создавать не хочется, совсем он простой. Вопрос общий, для всех, наверное, задач первого раздела, и вот какой: обычно для документа приходная движения делаются конструктором. Не является ли это недочётом? может лучше получить запросом ТЧ приходной и сгруппировать по номенклатуре?
Название: Задача 1.01
Отправлено: Gyd от Июнь 06, 2011, 01:43:59 pm
Quote (Urfin)
Не является ли это недочётом? может лучше получить запросом ТЧ приходной и сгруппировать по номенклатуре?

 Моё мнение такое: это конечно идеальный вариант, но думаю не обязательный, подумаешь в регистре появятся несколько лишних строк, которые потом все равно схлопнутся.
Название: Задача 1.01
Отправлено: karagiosis от Июнь 08, 2011, 10:09:42 am
Всем доброго времени суток...Решил (или, может мне так показалось) первую задачу, буду рад конструктивной критике...
Вложения:
task1_1.dt
Название: Задача 1.01
Отправлено: Gyd от Июнь 08, 2011, 04:13:24 pm
Quote (karagiosis)
буду рад конструктивной критике...

 да в общем нормально, только некоторые моменты интересны:
 Вот это вы зачем сделали?
 
Code
Если Отказ Тогда  // не будем выполнять зря цикл
    Возврат;
   КонецЕсли;

 Если на первой строке "выскочит" нехватка остальные строки проверяться не будут. Вы исправите первую, потом увидите что во второй тоже не хватает, исправите вторую... а в документе 200 строк к примеру smile

 а зачем блокировка регистра сведений?
 
Code
БлокировкаДанныхУчетнойПолитики    = Новый БлокировкаДанных;
  ЭлементБлокировки  = БлокировкаДанныхУчетнойПолитики.Добавить("РегистрСведений.УчетнаяПолитика");
  ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый;
 

 учетная политика устанавливается раз в год, врятли она "вдруг" изменится.

 и еще не увидел очистки движений по регистру.
Название: Задача 1.01
Отправлено: karagiosis от Июнь 08, 2011, 08:35:22 pm
Gyd, спасибо. Согласен на счет первого замечания. Переделал. На счет регистра сведений - просто хотел обезопасить... Пословица есть, что и палка раз в жизни стреляет smile на счет очистки движений по регистрам вы подразумевали эти строчки?
 
Code
Движения.ОстаткиТоваров.Записывать = Ложь;
 Движения.ОстаткиПоСкладам.Записывать = Ложь;

Вложения:
Task1_1.dt
Название: Задача 1.01
Отправлено: Gyd от Июнь 09, 2011, 08:38:17 am
Quote (karagiosis)
на счет очистки движений по регистрам вы подразумевали эти строчки?

 Нет. Отсутствие очистки движений по регистру остатков в начале обработки проведения:
 
Code
Движения.НазваниеРегистра.Записать()

 чтобы у вас движения этого документа не попали в остатки.
Название: Задача 1.01
Отправлено: karagiosis от Июнь 09, 2011, 10:18:40 am
Да, Gyd, спасибо. Разобрался и добавил строчки очистки движений в начало обработки проведения. Нашел еще короткое обсуждение темы по очистке : http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=566214. Больше не заметили недочетов?
Вложения:
_1.1.dt
Название: Задача 1.01
Отправлено: Gyd от Июнь 09, 2011, 10:43:44 am
Quote (karagiosis)
Больше не заметили недочетов?

 заметил smile вы свою базу не подписываете smile

 и еще: попробуйте завысить количество продаваемого товара, посмотрите как сейчас ваша база работает.

 Вы вынесли проверку общего количества в отдельный цикл. Сделайте нехватку товара в первой строке и во второй. Пользователь сразу увидит что не хватает товара в первой строке и во второй? Или он исправит первую строку, попытается провести и увидит что во второй тоже не хватает?
Название: Задача 1.01
Отправлено: karagiosis от Июнь 09, 2011, 12:34:16 pm
Попробовал с завышенным количеством товара - работает адекватно smile Сообщения появляются и с привязкой к конкретному полю ТЧ (по очереди) и справа в окне сообщений сразу... Gyd, спасибо за помощь и оперативное реагирование:)
Название: Задача 1.01
Отправлено: Gyd от Июнь 10, 2011, 09:16:14 am
Quote (karagiosis)
Попробовал с завышенным количеством товара - работает адекватно

 сейчас я попробую.
Название: Задача 1.01
Отправлено: Gyd от Июнь 10, 2011, 09:34:20 am
Я слегка изменил вашу расходную накладную, посмотрите в базе как я спокойно списываю 30 курток из имеющихся 4. И посмотрите какие при этом делаются движения. Думаю там есть над чем задуматься smile
Вложения:
for_karagiosis_.dt
Название: Задача 1.01
Отправлено: karagiosis от Июнь 10, 2011, 11:21:46 pm
smile Gyd, я думаю, вы хороший тестер программного обеспечения smile Да, в решении не была учтена возможность повторяющихся строк в табличной части документа. Есть несколько вариантов решения. Либо на этапе добавления новой строки пользователем контролировать дублирование строк и не позволять это делать (или сворачивать сразу), либо группировать в обработке проведения, в запросе, по табличной части номенклатуру... Сделал, как проще, группировкой. Сообщение о нехватке вызывается с привязкой к первой встреченной строке с проблемной номенклатурой...
Вложения:
oper_task.dt
Название: Задача 1.01
Отправлено: Istur от Июнь 14, 2011, 01:15:52 am
karagiosis, увидел следующие ошибки:

 1. Запрос.УстановитьПараметр("Период", Дата); - вместо Дата надо МоментВремени()
 2. Движения.ОстаткиНоменклатуры.Записать();
 Движения.Продажи.Записать();
 такие строчки есть. а где очищение перед этим?? как были строки, так они и остались. надо добавить перед этим Движения.ОстаткиНоменклатуры.Очистить();
 3. Себестоимость   = СписываемоеКоличествоВПартии / ВыборкаДетальныеЗаписи.КоличествоОстаток
 * ВыборкаДетальныеЗаписи.СуммаОстаток;
 надо: СписываемоеКоличествоВПартии * ВыборкаДетальныеЗаписи.СуммаОстаток / ВыборкаДетальныеЗаписи.КоличествоОстаток;
 деление всегда в конце!
 4. нет индексирования по номенклатуре в запросе.
 5. блокировать учетную политику излишне.
 6. |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.Партия, 0) КАК Партия,
 Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
 Движение.Партия       = ВыборкаДетальныеЗаписи.Партия;
 по логике получается, что в регистр будет записан 0, что не соответсвует типу значения.
 ну а так - ЕСТЬNULL излишен для партии, т.к. если в регистре нет остатков по номенклатуре, то ранее уже и так произойдет отказ.
 |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) - тут ЕСТЬNULL избыточен тоже по той же причине.
 7. у тебя: Выручка       = СписываемоеКоличествоВПартии / ВыборкаДетальныеЗаписи.КоличествоСписать*ВыборкаДетальныеЗаписи.Выручка;

 но ведь 2 и 3 параметр можно получить не на уровне детатьных записей, а на уровне номенклатуры. поэтому лично для меня читабельнее:
 Цена = ВыборкаОбщая.Выручка / ВыборкаОбщая.КоличествоСписать; (на уровне ВыборкаОбщая) и
 Выручка       = СписываемоеКоличествоВПартии * Цена;
 8. В Тексте запроса нет слова ВОЗР, поэтому конструкция с заменой не отработает.. ВОЗР идет по умолчанию. поэтому его нет в тексте.
 надо: Запрос.Текст = СтрЗаменить(Запрос.Текст, "ОстаткиНоменклатурыОстатки.Партия.Дата", "ОстаткиНоменклатурыОстатки.Партия.Дата УБЫВ");

 P.S. На основе твоей базы я сделаю сгодня-завтра свою с исправлением ошибок.
Название: Задача 1.01
Отправлено: Gyd от Июнь 14, 2011, 09:17:18 am
Quote (Istur)
Движения.ОстаткиНоменклатуры.Очистить();

 Уверены что эта строка нужна?

 ---------------------------------------------
 
Quote (Istur)
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) - тут ЕСТЬNULL избыточен тоже по той же причине.

 Почему считаете что это не нужно?

 ---------------------------------------------
 
Quote (Istur)
Цена = ВыборкаОбщая.Выручка / ВыборкаОбщая.КоличествоСписать; (на уровне ВыборкаОбщая) и
 Выручка = СписываемоеКоличествоВПартии * Цена;

 У вас себестоимость неправильно спишется.

 ---------------------------------------------
 
Quote (karagiosis)
Сделал, как проще, группировкой.

 
Code
// избавимся от дублей в табличной части
 СписокНоменклатуры.Свернуть("Номенклатура, Цена","Количество, Сумма");

 

 Это вам не поможет, пользователь ошибется в цене на одну копейку - и всё - привет. А группировка у вас есть в запросе:
 
Code
|СГРУППИРОВАТЬ ПО
       |РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
 

 а вот тут:
 
Code
Запрос.УстановитьПараметр("Период", Дата);

 Istur прав, серьезная ошибка.

 В общем давайте еще раз прорешайте задачу smile
Название: Задача 1.01
Отправлено: LivingStar от Июнь 14, 2011, 11:12:26 am
объясните пожалуйста, что означают и зачем вот эти строки?

    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    Движения.Продажи.Записывать = Истина;
    
    Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
    Движения.Продажи.БлокироватьДляИзменения = Истина;
Название: Задача 1.01
Отправлено: Gyd от Июнь 14, 2011, 12:40:06 pm
Quote (Gyd)
Quote (Istur)
 | ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) - тут ЕСТЬNULL избыточен тоже по той же причине.

 Почему считаете что это не нужно?

 вопрос снимается smile

 ---------------------------------------------
 
Quote (LivingStar)
Движения.ОстаткиНоменклатуры.Записывать = Истина;

 Если у документа стоит свойство "Запись движений при проведении" в "Записывать выбранные", то будут записаны только те движения которые вы выберите. Этой строкой вы "выбираете" по какому регистру хотите записать движения. Попробуйте убрать ее и посмотрите что получится.

 ---------------------------------------------
 
Quote (LivingStar)
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;

 Это делается для того чтобы после записи движений документа, другие пользователи не могли прочитать/изменить те номенклатуры по которым ваш документ сделал записи, а вы тем временем будете с ними работать, например смотреть остаток.

 Пример: если вы продаете яблоки и груши (делаете движения и блокируете регистр) - то в регистре все записи с "яблоками-грушами" будут заблокированы, а вот ананасы не будут, и их можно спокойно продавать параллельно с вашими яблоками-грушами. В версии 7.7 например, если вы продаёте яблоки-груши, остальные - курят и ждут пока вы закончите. Пример конечно грубый, но принцип думаю вам будет понятен.
Название: Задача 1.01
Отправлено: LivingStar от Июнь 14, 2011, 01:45:52 pm
Как то соотносится
 |
 Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
 |
 c
 |
 Блокировка = Новый БлокировкаДанных;
 ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
 ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
 ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
 ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
 Блокировка.Заблокировать();
 |
 или это аналогичные, подобные инструкции?
Название: Задача 1.01
Отправлено: karagiosis от Июнь 14, 2011, 01:50:02 pm
To Istur. Спасибо, что уделили время. Некоторые моменты не ясны :

 1.
Quote
4. нет индексирования по номенклатуре в запросе.
Зачем здесь индексация?

 2.
Quote
Себестоимость = СписываемоеКоличествоВПартии / ВыборкаДетальныеЗаписи.КоличествоОстаток
 * ВыборкаДетальныеЗаписи.СуммаОстаток;
 надо: СписываемоеКоличествоВПартии * ВыборкаДетальныеЗаписи.СуммаОстаток / ВыборкаДетальныеЗаписи.КоличествоОстаток;
 деление всегда в конце!
 

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

 3.
Quote
Блокировать учетную политику излишне.
Согласен, в 99,99% - это лишняя трата времени и ресурсов, но ведь чисто теоретически, может же быть такое, что во время проведения документа изменят учетную политику? Тогда результат будет не верный.
Название: Задача 1.01
Отправлено: SergTH000 от Июнь 14, 2011, 03:22:58 pm
karagiosis,
 
Quote
Некоторые специалисты рекомендуют делать умножение в конце, чтобы избежать зависания дробных долей в копейках

 че за специалисты? =)

 2. Умножение может быть в конце, только если (как написано у тебя) сначала идет Списываем/Выборка.КоличествоОстаток тут нет ошибки.
 Но надежнее действительно выносить деление в конец. А еще экзаменаторам почему то больше нравится ?(Списываем = Выборка.КоличествоОстаток, Выборка.СуммаОстаток, Выборка.СуммаОстаток/Выборка.КоличествоОстаток*Списываем)

 3. Если менятется значение учетной политики, то нужно выдавать сообщение что нужно перепровести документы (как в типовых =))))...Не заморачивайтесь - на экзамене надо блокировать только РН и РБ
Название: Задача 1.01
Отправлено: Istur от Июнь 14, 2011, 06:31:13 pm
Gyd,
 
Quote
Движения.ОстаткиНоменклатуры.Очистить(); Уверены что эта строка нужна?

 Да, уверен. Например было 4 записи в движениях. ты их просто перезапишешь и все. Очищения не произойдет. Но ты так уверенно в этой и других темах утверждаешь обратное, что волей-неволей начинают мучать сомнения) Так что расскажи почему она не нужна.

 
Quote
Цена = ВыборкаОбщая.Выручка / ВыборкаОбщая.КоличествоСписать; (на уровне ВыборкаОбщая) и
 Выручка = СписываемоеКоличествоВПартии * Цена;
 У вас себестоимость неправильно спишется.

 Почему? Не согласен.

 karagiosis,
 
Quote
4. нет индексирования по номенклатуре в запросе.
 Зачем здесь индексация?

 Индексация в первой таблице пакета. Зачем.. Слышал, источник не скажу, что колонки, по окторым в дальнейшем идет соединение, надо индексировать. Так быстрее происходит соединение.

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

 3/5*10= дробное значение. 3*10/5 уже получше. Увидел это у Гилева, 4 видеоурок 1 бонусного материала, решение задачи оперативного учета.

 
Quote
Согласен, в 99,99% - это лишняя трата времени и ресурсов, но ведь чисто теоретически, может же быть такое, что во время проведения документа изменят учетную политику? Тогда результат будет не верный.

 Если изменят учетную политику во время проведения, то этот документ сделает неверные движения, не по тому методу. Это да. Но теперь подумаем. Допустим решили поменять учетную политику на текущий год вот сейчас, в июне. Но тогда нужно будет перепроводить документы за полгода, а не только 1 конкретный, который взмался проводиться именно в ту секунду, когда меняется учетная политика. Взгляни с этой стороны. Не со стороны документа, а со стороны учетной политики. Поэтому эта конструкция излишняя. И это надо понять, блокировка учетной политики ошибочна. Само изменение учетной политики создает ошибку и требует перепроведения документов.
Название: Задача 1.01
Отправлено: karagiosis от Июнь 15, 2011, 10:25:21 am
SergTH000, спасибо за замечания. Приму к сведению.
 
Quote
че за специалисты? =)

 Не хотел быть голословным, в частности, заметил подобный способ расчета себестоимости списания (с умножением в конце) в вебинаре Павла Чистова, урок 13, на 42 минуте... Дословно:
 
Code
ДвижениеСтоимость = Выборка.Количество / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток;
Или я что - то не правильно понял?
Название: Задача 1.01
Отправлено: Gyd от Июнь 15, 2011, 10:43:01 am
Quote (Istur)
Но ты так уверенно в этой и других темах утверждаешь обратное, что волей-неволей начинают мучать сомнения) Так что расскажи почему она не нужна.

 Говорю уверенно потому что читал об этом у коллег плюс сам проверял. Поставьте после строки Записать() - Возврат, проведите документ и посмотрите что получится (без Очистить()).

 Добавлено (15.06.2011, 10:39)
 ---------------------------------------------
 
Quote (Istur)
Quote
 Цена = ВыборкаОбщая.Выручка / ВыборкаОбщая.КоличествоСписать; (на уровне ВыборкаОбщая) и
 Выручка = СписываемоеКоличествоВПартии * Цена;
 У вас себестоимость неправильно спишется.

 Почему? Не согласен.

 Если я правильно понял, у вас на уровне ВыборкаОбщая идет общая сумма и кол-во по номенклатуре, а если так то себестоимость будет рассчитана общая, а не по партии. Правильно?
 2 шт. - 200 р.
 2 шт. - 300 р.
 2 шт. - 400 р.
 общая сумма - 900, общее кол-во - 6, себестоимость - 150.
 А вам надо 2 по 100 списать, 2 по 150, 2 по 200. Метод ФИФО-ЛИФО именно для этого используется, а вы реализуете просто списание по средней.

 Добавлено (15.06.2011, 10:43)
 ---------------------------------------------
 
Quote (Istur)
3/5*10= дробное значение. 3*10/5 уже получше.

 "от перемены мест слагаемых сумма не меняется" smile
 эта фишка давно применяется, чтобы не возникало ошибки при делении на "0", так сказать идеальный вариант. Но у karagiosis, в задаче "0" просто "не дойдет" до этого места - так что можно не беспокоиться smile
Название: Задача 1.01
Отправлено: ogorana21 от Июнь 15, 2011, 11:42:12 am
По поводу "очистки движений" перед проведением.

 Что происходит при выполнении такого кода?
 
Code
Движения.ОстаткиНоменклатуры.Очистить();  
 Движения.ОстаткиНоменклатуры.Записать();


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

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

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

 Можете в отладке запуститься и посмотреть что наборы записей Пустые в начале обработки проведения.
Название: Задача 1.01
Отправлено: SergTH000 от Июнь 15, 2011, 12:46:00 pm
karagiosis, Самое главное не то, что умножение в конце, а то что в начале деление количеств. По сути это тоже самое что и
 ?(Списываем = Выборка.КоличествоОстаток, Выборка.СуммаОстаток, Выборка.СуммаОстаток/Выборка.КоличествоОстаток*Списываем)
 только компактнее. Думаю что при выборе способа с конструкцией ?(,,) экзаменатор сразу видит, что экзаменуемый в теме проблемы копеек и не задает дополнительных вопросов.

Добавлено (15.06.2011, 12:46)
---------------------------------------------

Quote
3/5*10= дробное значение. 3*10/5 уже получше. Увидел это у Гилева, 4 видеоурок 1 бонусного материала, решение задачи оперативного учета.


 Istur,
 Вообще то 3/5*10 = 6 и это не дробное значение =) но в целом идея такая=)
Название: Задача 1.01
Отправлено: Istur от Июнь 15, 2011, 12:49:56 pm
Gyd,
 
Quote
А вам надо 2 по 100 списать, 2 по 150, 2 по 200. Метод ФИФО-ЛИФО именно для этого используется, а вы реализуете просто списание по средней.

 После этого к тебе возникают сразу 3 вопроса:
 1. внимательность
 2. умение читать код
 3. знание предметной области.

 Это высчитывается выручка, а не себестоимость. Себестоимость считается в другой строке и завист да, от партий. А выручка зависит от реализации.

 
Quote
"от перемены мест слагаемых сумма не меняется"
 эта фишка давно применяется, чтобы не возникало ошибки при делении на "0", так сказать идеальный вариант.


 От перемены мест слагаемых сумма меняется. Те цифры что я привел некорректны, не посмотрел. 5/3*9 лучше. сначала получается дробное значение, а потом умножение на целое. Теоритически может получится не 15, а 14,9999999999.
 Деление на ноль - не понял. что ты имел ввиду.

 
Quote
Говорю уверенно потому что читал об этом у коллег плюс сам проверял. Поставьте после строки Записать() - Возврат, проведите документ и посмотрите что получится (без Очистить()).


 Да, Очищать() излишне выходит, как и рассказала ogorana21. Но к тебе есть претензии к оформлению. Лично для меня цель подготовки к специалисту например не получить бумажку, а лучше разобраться в платформе. а твои комментарии из серии
 
Quote
правильно. Очистить() - не обязательно.
, которые ты пишешь во всех постах, где видишь про Очистить() немного раздражают, так как надо объяснять почему и как, а не просто писать как. Тупое зазубривание людей специалистами не сделает.

 
Quote
Говорю уверенно потому что читал об этом у коллег плюс сам проверял. Поставьте после строки Записать() - Возврат, проведите документ и посмотрите что получится (без Очистить()).
Ну и данный комментарий говорит, что ты сам не понимаешь почему Очищать() излишне. Ты просто увидел, что эта строчка ни на что не влияет и остался счастливый от этого. Но так неправильно по моему мнению. Надо смотреть и искать корень.

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

 SergTH000,
Quote
Вообще то 3/5*10 = 6 и это не дробное значение =) но в целом идея такая=)
Да, да. Пример некорректный( 5/3*9 лучше..
Название: Задача 1.01
Отправлено: LivingStar от Июнь 15, 2011, 02:56:30 pm
может в этом посте по заданию 1.1 стоит вывести идеально правильное решение?
 с приведетными так же правильными аналогами решения, и тестовые данные длят проверки?
 а то я вот наработал это задание, а в идеальной правильности его уверенности нет...
Название: Задача 1.01
Отправлено: Gyd от Июнь 15, 2011, 03:34:53 pm
Quote (Istur)
После этого к тебе возникают сразу 3 вопроса:
 1. внимательность
 2. умение читать код
 3. знание предметной области.
 

 Отвечаю: был невнимателен, извините. Нестандартное решение, поэтому сразу не заметил что там есть понятие "выручка" smile
 
Quote (Istur)
немного раздражают, так как надо объяснять почему и как, а не просто писать как.

 Раздражают? Спасибо smile На тему объяснения: я вам сказал что это так, верьте мне. Если не хотите верить, или сомневаетесь, или вы раздражены - вам сюда -> http://chistov.spb.ru/index/0-15 Уважайте время других людей, не надо просить чтоб "почитали Радченко" для вас.
Название: Задача 1.01
Отправлено: Istur от Июнь 15, 2011, 04:17:04 pm
Gyd, Решение стандартной задачи и полностью стандартное..

 
Quote
я вам сказал что это так, верьте мне
Не надо думать о ситуации, что Вы суперкомпетентный специалист, а я тут радченко хочу почитать) После проверки Вами решения я нашел ошибок на вагон. И дважды Вы тут думали, что нашли ошибку у меня. Оказалось не так. После этого в моих глазах человек теряет право говорить о чем-либо как о факте, без основания своей позиции. И когда мне, человеку проработавшему 2 года на УПП, начинают рассказывать, что тут надо списывать по ФИФО или ЛИФО, а я тут гад такой, по-средней) Реально улыбнуло) Тут почему-то Вы время нашли. Ну и плюс, Вы не услышали меня, или не захотели. Сам факт не интересен, нужно почему это. А если человек находит время писать сообщения, но при этом не находит объяснять, то думаю писать их не стоит.. Если челвоек говорит А, то надо говорить и Б, или не говорить А.. Лично я придерживаюсь такой точки зрения. Обучение кого-либо крайне ответсвенная штука, и подходить к ней надо тоже ответсвенно, или не подходить вообще.

 LivingStar,

 Меня посетила та же мысль, эту базу я сделаю. Точнее я сделаю видео по ней. Единсвенное еще нет точной уверенности в некоторых строках кодах, что надо делать именно так, или иначе, или вот знаю что надо так, а почему не скажу. как только решу все вопросы, так тут же и выложу.
Название: Задача 1.01
Отправлено: karagiosis от Июнь 15, 2011, 05:24:15 pm
Коллеги, пожалуйста, давайте не будем тратить свои ресурсы на личностную оценку, а уделим наше драгоценное время на решение актуальных задач. Я, конечно, не модератор и вообще никто. Тяжелый день может быть у каждого из нас... У Омара Хайяма есть строки:

 Не зли людей, и сам не злись -
 Мы гости в этом мире;
 И если что не так - смирись,
 Будь по - умнее, улыбнись,
 Холодной думай головой...
 Ведь в жизни все закономерно -
 Зло, излученное тобой, к тебе вернется непременно smile
Название: Задача 1.01
Отправлено: SergTH000 от Июнь 15, 2011, 06:32:03 pm
Istur или как там тебя, ты выкладываешь решения, просишь чтоб проверили, а потом недоволен тем, что тебе недостаточно подробно объяснили? Ты либо лентяй, либо поиск юзать не умеешь? Про то что при записи, в начале обработки проведения записывается пустой набор писали уже и не раз.
 То что тебе сказали про недочет уже хорошо, тысячи постов на форумах висят без ответов, хотя ответы достаточно очевидны...
Название: Задача 1.01
Отправлено: Istur от Июнь 15, 2011, 07:07:01 pm
Quote (SergTH000)
Istur или как там тебя, ты выкладываешь решения, просишь чтоб проверили, а потом недоволен тем, что тебе недостаточно подробно объяснили? Ты либо лентяй, либо поиск юзать не умеешь? Про то что при записи, в начале обработки проведения записывается пустой набор писали уже и не раз.
 То что тебе сказали про недочет уже хорошо, тысячи постов на форумах висят без ответов, хотя ответы достаточно очевидны...

 Я не выкладывал еще ни одного решения.. Будьте внимательнее) Голословность не есть хорошее качество. И лично я в принципе не нуждаюсь в проверках других и выкладывать ничего не собираюсь. Точнее собираюсь, но не для проверки) Я не нуждающийся в помощи, я помогающий)
Название: Задача 1.01
Отправлено: karagiosis от Июнь 15, 2011, 08:29:11 pm
SergTH000, спрашивал я. А остальные просто развили тему. Можно сказать, что и лентяй, и что юзать не умею. Я только учусь. Есть желание стать специалистом, не просто по сертификату. Но и беда есть, наверное, общая для всех - катастрофическая нехватка времени. Только из - за этого я спрашиваю тогда, когда не могу чего - то найти сам, или понять. И благодарен всем, кто делится знанием, не дожидаясь, когда у товарища высохнут спички и он сможет сам зажечь свой костер и, возможно, грамотно помочь другому:)
Название: Задача 1.01
Отправлено: SergTH000 от Июнь 16, 2011, 01:35:13 am
Istur,
Quote
Ну и данный комментарий говорит, что ты сам не понимаешь почему Очищать() излишне. Ты просто увидел, что эта строчка ни на что не влияет и остался счастливый от этого. Но так неправильно по моему мнению. Надо смотреть и искать корень.


 Ищешь корень?

 
Quote
Движения.ОстаткиНоменклатуры.Очистить(); Уверены что эта строка нужна?

 Да, уверен. Например было 4 записи в движениях. ты их просто перезапишешь и все. Очищения не произойдет.


 Ты тут предъявляешь претензии Gyd, что он объяснил тебе не подробно, а сам только путаешь других пользователей своими "рекомендациями". Помогающий, блин.

 Добавлено (16.06.2011, 01:35)
 ---------------------------------------------
 karagiosis, Не надо передергивать, задавать вопросы вполне естественно и нормально. А раздражают как раз не то, что Gyd поправляет, когда находит ошибки, а такие "помогающие" типа Istur. Он просто уверенно советует применять Очистить(), не только не объясняя почему, а вообще не проверив правильно это или нет.
Название: Задача 1.01
Отправлено: LivingStar от Июнь 16, 2011, 06:50:44 am
у меня получилось так что прибыль в отчете продажи получилась отрицательная, почему так получилось?
 значение ОстаткиНоменклатурыОбороты.СуммаРасход больше чем ПродажиОбороты.СуммаОборот
 откуда берется значение ОстаткиНоменклатурыОбороты.СуммаРасход почему там такое значение?

Добавлено (16.06.2011, 06:50)
---------------------------------------------
от куда берется значение .СуммаРасход регистра накопления остатки ...

Название: Задача 1.01
Отправлено: Gyd от Июнь 16, 2011, 10:59:03 am
Quote (LivingStar)
у меня получилось так что прибыль в отчете продажи получилась отрицательная, почему так получилось?

 Базу выложите пожалуйста.

Добавлено (16.06.2011, 10:59)
---------------------------------------------

Quote (Istur)
После проверки Вами решения я нашел ошибок на вагон.

 Уважаемый, спасибо за вашу оценку, впредь постараюсь искать лучше, ну а пока помогаю чем могу, вы уж не обессудьте.
Название: Задача 1.01
Отправлено: LivingStar от Июнь 16, 2011, 11:09:08 am
Gyd, выкладываю своё решение. Заранее благодарен еслы вы поставите все на место что не так там стоит. В этом посте всмысле. Охото понять то что не понимаю, и исключить свои ошибки в будущем, уяснить очевидные вещи!
Вложения:
1Cv8_LS_1.1.dt
Название: Задача 1.01
Отправлено: Gyd от Июнь 16, 2011, 01:21:36 pm
Quote (LivingStar)
у меня получилось так что прибыль в отчете продажи получилась отрицательная, почему так получилось?

 Потому что вы купили товар дороже чем продали smile У вас себестоимость (стоимость покупки) Товар 01 - 71.700, а продали за 33.000.

 Добавлено (16.06.2011, 12:50)
 ---------------------------------------------
 Посмотрите как другие делали отчет Продажи: там связь с таблицей регистра Остатки делать не нужно, это излишне. Все данные для отчета у вас хранятся в регистре Продажи. Вытаскивайте с него номенклатуру, кол-во оборот, сумму оборот, себестоимость оборот. И всё.

 На закладке Настройки СКД отчета, внизу на закладке Параметры добавьте НачалоПериода и КонецПериода в пользовательские настройки (через правую кнопку мыши). Отчет должен формироваться за период выбранный пользователем.

 Добавлено (16.06.2011, 13:10)
 ---------------------------------------------
 По поводу тестирования.
 Рекомендую вводить простые данные, это позволит быстрее провести тестирование, например я делаю так:
 1. создал Приход №1, дата ставится сегодняшняя - меняем на первое число месяца например.
 2. добавил номенклатуру (лучше свою, но я беру обычно готовую), назовем ее Ручка, кол-во -5, цена - 100.
 3. добавил еще одну номенклатуру - Куртка, кол-во тоже 5, цена - 200. И добавил услугу (сразу и услуги проверить).
 4. скопировал Приход №1 и сделал Приход №2 и №3, в них меняем даты на прошлые (за Приходом №1), кол-во: в №2 - по 10 шт., в №3 по 20 шт., суммы ставим разные но круглые (100,200,300 и т.д.).
 Потом при тестировании списания вы уже будете знать какое кол-во у вас того или иного товара на память (Ручка 5+10+20 = 35), 40 - это будет превышение, чтоб списать из трех партий ставите - 30. Суммы тоже легко проверить потому что они "круглые". И так далее. Делается это всё быстро, всё понятно и всё легко запоминается.
 Ну в общем принцип такой smile

 Добавлено (16.06.2011, 13:21)
 ---------------------------------------------
 
Quote (LivingStar)
значение ОстаткиНоменклатурыОбороты.СуммаРасход больше чем ПродажиОбороты.СуммаОборот
 откуда берется значение ОстаткиНоменклатурыОбороты.СуммаРасход почему там такое значение?
 ---------------------------------------------
 от куда берется значение .СуммаРасход регистра накопления остатки ...

 ОстаткиНоменклатурыОбороты.СуммаРасход (точнее СтоимостьРасход, из отчета) должна равняться ПродажиОбороты.СебестоимостьОборот. Но никак не ПродажиОбороты.СуммаОборот. Потому что ПродажиОбороты.СуммаОборот - это ваши продажи, за сколько продали. А ОстаткиНоменклатурыОбороты.СуммаРасходПродажиОбороты.СебестоимостьОборот) - это ваша себестоимость, за сколько купили товар.
 Вы делаете запись по регистру Остатки: приход - Ручка 5 шт. на сумму 100 руб., значит когда вы списываете эту Ручку (ОстаткиНоменклатурыОбороты.СуммаРасход), у вас тоже должно быть5 шт. на сумму 100 руб. А вот в Продажах вы записываете за сколько продали - 5 шт. на сумму 500 руб. (ПродажиОбороты.СуммаОборот).
Название: Задача 1.01
Отправлено: DoctorRoza от Июнь 16, 2011, 09:34:31 pm
Коллеги! Прошу посмотреть мое решение Задачи 1.1. И у меня к Вам есть несколько вопросов
 1. В задаче сказано, что имеется 2 документа Приходная накладная и Расходная накладная, в отчете по остаткам требуется вывести в иной форме - Прих. Накладная № 1 и т.д.
 Нужно ли редактировать в СКД название документа, снижают ли оценку за это на экзамене? Ведь, на экзамене, можно подойти с той точки зрения, что не соблюдено условие задачи!?
 2. По отчетам, точнее по заголовкам. В задаче написано .. Продажи с 01.01.2010 по 31.03.2010
 Нужно ли соблюдать точно букву задачника? Или достаточно правильно создать отчеты!?

 Заранее благодарю за помощь!
Вложения:
DoctorRoza_1_1.dt
Название: Задача 1.01
Отправлено: karagiosis от Июнь 16, 2011, 11:38:12 pm
Коллеги, появится свободное время, посмотрите мое решение, пожалуйста. Исправил с учетом высказанных выше замечаний...Спасибо
Вложения:
karagi_1_01.dt
Название: Задача 1.01
Отправлено: SergTH000 от Июнь 17, 2011, 01:50:53 am
DoctorRoza,

 В запросе расходной:
 1. Зачем в первом пакете соединять тч документа с документом по ссылке?
 2. во втором пакете группировка не нужна, тк ДокТч уже сгруппирована, а вирт. таблица остатков всегда сгруппирована
 3.После того как
Quote
Отказ = Истина;

 вот это
          
Quote
Движения.ОстаткиНоменклатуры.Записывать = Ложь;
          Движения.ПродажиТоваров.Записывать = Ложь;

 уже не нужно. Мне больше нравится устанавливать св-во записывать в самом конце процедуры:
Quote
Движения.ОстаткиНоменклатуры.Записывать = Не отказ;
          Движения.ПродажиТоваров.Записывать = Не отказ;

 4. Ну если совсем придираться вот это
 
Quote
ВыборкаПартии.Номенклатура.ВидНоменклатуры
плохо тк система неявно строит запрос, лучше поле ВидНоменклатуры выбрать в запросе, а потом просто проверять его значение.
 5. учетную политику на дату надо получать, а не методом МоментВремени().
 6. Вообще в большинстве решений которые (а да во всех наверное=)), которые я видел выборку обходят один раз. Так и я сам всегда решал, но в принципе твой вариант имеет смысл: сначала выдать сообщения и не обходить лишний раз детальную выборку. Но думаю, что производительнее так: добавить в запрос во втором пакете поле ПревыешениеКоличества:
 
Quote
ВЫБОР КОГДА СУММА(ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0)) > МАКСИМУМ(ДокТЧ.Количество) ТОГДА
 Истина
 Иначе ЛОЖЬ


 и далее:

 
Quote
ВыборкаИтог = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаИтог.НайтиСледующий(Истина, "ПревышениеКоличества") Цикл
       Сообщение = Новый СообщениеПользователю;
 ...
    КонецЦикла;

 Вроде так не проверял, но должно работать. ну вообщем идея такая с использованием НайтиСледующий()

Добавлено (17.06.2011, 01:44)
---------------------------------------------
По поводу отчетов - не заморачивайся: главное чтобы суть значения в колонке соответствовала отчету.

Добавлено (17.06.2011, 01:50)
---------------------------------------------
Да, и св-во удаление движений в документах, должно быть удалять при отмене проведения. Ну и как следствие предварительно в расходной нужно записать пустой набор: Движения.ИмяРегистра.Записать();

Название: Задача 1.01
Отправлено: DoctorRoza от Июнь 18, 2011, 10:27:50 am
SergTH000,
 Благодарю за конструктивную критику .. учел свои ошибки. И еще есть вопрос .. скажите, нужно использовать в задачах (если явно не указано!) последовательности для контроля правильности проводок? Или это уже будет лишнее?
Название: Задача 1.01
Отправлено: LivingStar от Июнь 28, 2011, 11:17:47 am
объясните на конец, что нужно писать? :

 Движения.ОстаткиНоменклатуры.Записывать = Истина;
 Движения.Продажи.Записывать = Истина;

 или

 Движения.ОстаткиНоменклатуры.Записать();
 Движения.Продажи.Записывать();

 или

 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записать();
 Движения.Продажи.Очистить();
 Движения.Продажи.Записывать();

Добавлено (28.06.2011, 11:17)
---------------------------------------------
имеется 2 примера использования блокировок:
    Блокировка        = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
    ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    Блокировка.Заблокировать();
 и
 Блокировка = Новый БлокировкаДанных;
 Элемент = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
 Элемент.ИсточникДанных = СписокНоменклатуры;
 Элемент.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
 Элемент.Режим = РежимБлокировкиДанных.Исключительный;
 Блокировка.Заблокировать();

 вопрос:
 обязательна ли вот эта строка Элемент.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура"); ?

Название: Задача 1.01
Отправлено: Lukashov_as от Июнь 28, 2011, 12:14:24 pm
LivingStar,

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

 Движения.ОстаткиНоменклатуры.Записывать = Истина; это инструкция чтоб все сделанные движения Движения.ОстаткиНоменклатуры.Добавить() записались после выхода из транзакции

 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записать();

 так делают обычно после предварительных расчетов, но в основном в Расчетах, очищают то что запихали для расчета и записывают, погляди тут задачи где необходимо предоставить пользователю исправлять результат руками

 Все случаи имеют право на жизнь в зависимости от ситуации, как тебе кто скажет что правильно вне контекста где это используется

 ты лучше попробуй делать задачи и и там уже играйся

Добавлено (28.06.2011, 12:14)
---------------------------------------------

Quote (LivingStar)
обязательна ли вот эта строка Элемент.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");

 biggrin а как программка узнает какое поле из источника данных и какой реквизит из регистра брать для сапостовления, у тебя в табличной части может быть 10 реквизитов с типом например номенклатура и 10 реквизитов в регистре, тут ты просто говоришь по каким полям в документе(источник данных) сопоставить с каким реквизитом из регистра
Название: Задача 1.01
Отправлено: LivingStar от Июнь 28, 2011, 01:04:33 pm
правильная ли это формула рассчета себестоимости?

             СуммаСписания        = ?(ВыборкаПартии.Количество < СписаниеПоПартии,
                                ВыборкаПартии.СуммаОстаток,
                                СписаниеПоПартии * ВыборкаПартии.Количество / ВыборкаПартии.КоличествоОстаток);
Название: Задача 1.01
Отправлено: Lukashov_as от Июнь 28, 2011, 01:09:02 pm
LivingStar,
 http://forum.chistov.pro/index.php?topic=1563.msg1#msg1
Название: Задача 1.01
Отправлено: kow1976 от Июль 04, 2011, 06:25:51 pm
Добрый день, выкладываю свой вариант решения.
 Кому не сложно посмотреть и порвать решения буду очень благодарен.
 Решение построено на базе механизма последовательностей.
 В «Расходной накладной» проверяю только остатки по новому алгоритму (так как считаю, что если документы можно проводить неоперативно, то правильно себестоимость записать в регистр нельзя), а стоимость списываю обработкой после определения документов, у которых границы последовательности меньше последнего проведенного документа.
Вложения:
kow1976.dt
Название: Задача 1.01
Отправлено: DoctorRoza от Июль 04, 2011, 08:36:26 pm
kow1976,
 Сложное решение .. жутко неоптимальное ..
 - Движение.Регистратор=Ссылка; .. это не надо писать
 - используете 3 регистра .. это лишнее .. 2 .. в одном списание по партиям, другой - продажи
 - нет блокировок .. это серьёзная ошибка .. внимательней почитайте требования на экзамене
 - использование последовательности тут лишнее .. ИМХО .. это усложнение
 - на строки в ТаблЧасти не обращайте внимание .. никаких НомерСтроки .. лишнее .. сворачивание .. это не главное
 - Сумму лучше записывать в обработчике ПередЗаписью()
 - насчет методик проведения .. эта задача решается как раз с применением старой методики .. и проверять остатки надо всегда .. опер/неоперативное проведение, не важно!
 - ЛИФО/ФИФО где?
 ИТОГ: решение не важнецкое ..
Название: Задача 1.01
Отправлено: kow1976 от Июль 05, 2011, 07:28:12 am
Спасибо за комментарии и оценки
 1. Движение.Регистратор=Ссылка – согласен система сама заполнит.

 2. Недостаток дублируется информация в рег. остатки и стоимость и построение отчета «Отчет по продажам» с использованием виртуальной таблицы обороты в регистре с видом остатки, который строится по физической таблице регистра накопления. Но должен быть выигрыш в скорости проведения. В расх. нак. проверяется только недостачи(по новому алгоритму). Себестоимость списывается регламентной обработкой в конце месяца или перед построением отчета. Чтоб однозначно получить правильную себестоимость.

 3. Блокировки есть обязательно есть:
 расх.нак.
 Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения=ОперативноеПровидение
 В обработке
 Блокировка=Новый БлокировкаДанных;
 ЭлементБлокировки=Блокировка.Добавить("РегистрНакопления.СтоимостьНоменклатуры");
 ЭлементБлокировки.ИсточникДанных=РезультатДок;//результат запроса
 ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");

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

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

 6. Сумму действительно лучше записывать ПередЗаписью() так как ПриЗаписи() реквизит уже записан с нулем и я записываю его второй раз.

 7. Насчет методик я же применил новую методику, значит, ее можно решить по новой методике.
 Оперативное проведение важно при списании остатков
 Если оперативно, то нужно брать текущие актуальные остатки на 3999год
 Запрос.УстановитьПараметр("МоментВремени",Неопределено)
 И обязательно накладывать блокировки.
 При неоперативном проведении система будет рассчитывать остатки на указанную дату путем пересчета, итогов, поэтому только так:
 Граница=Новый Граница(МоментВремени(), ВидГраницы.Включая);
 Запрос.УстановитьПараметр("МоментВремени",Граница) ;
 Я проверяю в расх нак. но смысла в этом особого нет, данная проверка дублирующая. Основная при восстановлении последовательности реализована в обработке списания стоимости.

 Если ты проводишь документ задним числом для чего проверять прошлое, если ты испортил будущее?

 Нужно однозначно восстанавливать последовательность и там проводить все проверки

 8. Метод списания ЛИФО/ФИФО
 Реализован, в запросе при определении списка документов, по которым нужно проводить списание. Причем метод должен правильно определяться при переходе год-год т.е. когда документы разных лет;
 
Code
Запрос.Текст =  
  "ВЫБРАТЬ
  |    ТоварныеДокументы.Регистратор КАК Регистратор
  |ПОМЕСТИТЬ ТоварныеДок
  |ИЗ
  |    Последовательность.ТоварныеДокументы КАК ТоварныеДокументы
  |  ЛЕВОЕ СОЕДИНЕНИЕ Последовательность.ТоварныеДокументы.Границы КАК ТоварныеДокументыГраницы
  |  ПО ТоварныеДокументы.МоментВремени > ТоварныеДокументыГраницы.МоментВремени
  |;
  |
  |////////////////////////////////////////////////////////////////////////////////
  |ВЫБРАТЬ
  |    РасходнаяНакладная.Ссылка,
  |    НАЧАЛОПЕРИОДА(РасходнаяНакладная.Дата, ГОД) КАК ПериодНачалоГода
  |ПОМЕСТИТЬ РасхНак
  |ИЗ
  |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
  |  ЛЕВОЕ СОЕДИНЕНИЕ ТоварныеДок КАК ТоварныеДок
  |  ПО (ТоварныеДок.Регистратор = РасходнаяНакладная.Ссылка)
  |;
  |
  |////////////////////////////////////////////////////////////////////////////////
  |ВЫБРАТЬ
  |    ВЫБОР
  |  КОГДА УчетнаяПолитика.СпособСписания = ЗНАЧЕНИЕ(Перечисление.Учетнаяполитика.ФИФО)
  |   ТОГДА ""Возр""
  |  КОГДА УчетнаяПолитика.СпособСписания = ЗНАЧЕНИЕ(Перечисление.Учетнаяполитика.ЛИФО)
  |   ТОГДА ""Убыв""
  |    КОНЕЦ КАК СпособСписания,

  |    РасхНак.Ссылка
  |ИЗ
  |    РасхНак КАК РасхНак
  |  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.УчетнаяПолитика КАК УчетнаяПолитика
  |  ПО РасхНак.ПериодНачалоГода = УчетнаяПолитика.Период
  |
  |УПОРЯДОЧИТЬ ПО
  |    РасхНак.Ссылка.МоментВремени";
 

 ИТОГ: Вы….
Название: Задача 1.01
Отправлено: DoctorRoza от Июль 05, 2011, 09:06:13 pm
Ну насчет выиграша в скорости - это, конечно, мерить нужно .. Тот код, который этот выигрыш обеспечивает, загромождает решение .. Если решение основано на реальной практике, тогда Вы тут, возможно, правы, оно оправдано. Но применительно к экзамену, оно уж больно громоздко. Ну сами посудите .. для того чтобы списать товар, Вы используете в сумме 5 запросов!! Когда можно воспользоваться 1-м!? Это точно даст выигрыш в скорости? Вам нужно решить задачу, а не получить наивысшую скорость! Тем более, сколько уйдет времени на написание кода на экзамене? Времени на остальное то хватит?
Название: Задача 1.01
Отправлено: kow1976 от Июль 06, 2011, 07:37:40 am
Решение сделано по мотивам «Конфигурирование в системе 1С:Решение оперативных задач» uc3 Автор Габец А.П. стр.120-150
 Я предлагаю обсудить данный подход и его реализацию на экзамене

 Вы действительно правы, код написан, так что нужно время на его набор. На экзамене нужно десять раз подумать прежде, применять данный способ. Возможно, его можно сделать меньше.
 Запросов все-таки к базе данных всего три (используются временные таблицы) их можно объединить, но тогда блокировки нужно накладывать раньше, что не есть хорошо.
 В расх. нак. – один (должен возвращать значения только в случае отрицательных остатков). Соответственно для пользователя ввод док будет очень быстрый.
 В обработке – два НО
 Первый получает набор документов, по которым нужно провести движения и метод списания (ФИФО или ЛИФО)
 Второй списывает стоимость
 Если 10 док расх нак. то обращений к базе данных 1*10+1+1*10=21

 При списании в обработке проведения:
 Запросов к базе два
 Первый получение метода списания (ФИФО или ЛИФО)
 Второй списывает стоимость
 К тому же блокирует номенклатуру перед началом проведения.
 Если 10 док расх нак. то обращений к базе данных 2*10=20

 При оценке предлагаю пользоваться критериями:
 http://www.1c.ru/rus/partners/training/files/ATT82PL.zip
 Необходимо доработать конфигурацию на мой взгляд:
 1. добавить ресурс себестоимость в регистр продаж (В задачах получения итоговой информации по остаткам использование информации по оборотам или наоборот минус 2балла).
 2. нужно вызывать обработку при запуске отчета, если был ввод документов задним числом или перепроведение с измененными значениями количества.
 Ваши предложения замечания...
Название: Задача 1.01
Отправлено: sada от Июль 06, 2011, 10:52:38 am
kow1976,

 Такой подход может быть полезен только при частом проведении документов с огромным количеством строк и согласии руководства тратить свое время на ожидание пересчетов перед формированием отчетов. т.е. как вариант вынужденной оптимизации, а не типовая схема реализации.

 Кроме того в погоне за актуальностью данных можно предположить и такую ситуацию, пока руководитель изучает результат отчета, сотрудники могут ввести ряд документов, что в этом случае делать, блокировать данные при формировании отчета, или информировать о том, что данные устарели и придется снова ждать перерасчет себестоимости… :)
Название: Задача 1.01
Отправлено: kow1976 от Июль 06, 2011, 11:17:22 am
Запрет пользователям вводить док не оперативно
 А неоперативное проведения только для доверенных пользователей, но это в любом случае пересчет или перепроведение что в одном что в другом случае.
 Возможна ситуация что получен отчет и уже введено 30 док при любом подходе

 Обработка, запускается в конце дня(получаем актуальную стоимость за день)
 При необходимости отчетов можно легко досчитать стоимость за текущий день.
 Для системы работы будет однозначно больше(два регистра их нужно писать и рассчитывать итоги) но какое дело кассиру отпускающему товар до того что систем будет работать больше вечером, ему сейчас надо списать количество
Название: Задача 1.01
Отправлено: sada от Июль 06, 2011, 11:45:50 am
kow1976, если это необходимо то да, но в 2 раза увеличивать объем кода, объем базы, увеличивать время формирования отчетов ради того чтобы у оператора документ проводился не две секунды а одну, при том что сам документ он заполняет 10 минут, на мой взгляд не целесообразно.
Название: Задача 1.01
Отправлено: kow1976 от Июль 06, 2011, 03:42:38 pm
Строго говоря, код тот же самый только разбит на две части оперативную и регламентную. У пользователя появляется возможность самому решать как проводить документ с списанием себестоимости сейчас или подождать регламентного времени.
 Можно код списания разместить в форме списка и кнопкой «списать» или галкой списать автоматически, списывать как будет угодно.
 Наверно задачу два попробую решить в таком варианте.
Название: Задача 1.01
Отправлено: Кенгуру от Июль 24, 2011, 07:00:40 pm
Буду рад конструктивной критике.
Вложения:
8403823.dt
Название: Задача 1.01
Отправлено: kow1976 от Июль 25, 2011, 03:49:55 am
Кенгуру,

 1 Вот это не надо зачем?
 Движения.ОстаткиНоменклатуры.Очистить();
 Нужно
 Движения.ОстаткиНоменклатуры.Записать();
 И только для ОстаткиНоменклатуры.

 2. У вас 4 обращения к базе данных. Можно решить одним.

 3. Выручка по услуге не пишется в регистр

 4 Пишете движение по продажам, а потом проверяете на возможность их записать.

 5. В случае нехватки товара хорошо бы прервать цикл и не писать движение по ОстаткиНоменклатуры

 6 В случае нехватки товара флаг записывать надо ставить ЛОЖЬ.

 7. При оперативном проведении остатки надо брать из ТекущихИтогов

 8. Оприходовать можно («доставку» в ОстаткиНоменклатуры) услугу. Регистр в ноль не выйдет.
Название: Задача 1.01
Отправлено: vvvlad85 от Июль 28, 2011, 01:25:37 pm
Все здравствуйте! У меня непонятки. Почемуто в отчете остатки все работает, а вотчета продажи нет если он оборотный, и еще странно новая (вновь введеная) номенклатура будет отображатся, а используемая нет. Если кто может помочь помогите и подскажите.
 И если будут какие либо комментарии или замечания, то я буду только рад.

Добавлено (28.07.2011, 12:02)
---------------------------------------------

Quote (kow1976)
1 Вот это не надо зачем?
 Движения.ОстаткиНоменклатуры.Очистить();
 Нужно
 Движения.ОстаткиНоменклатуры.Записать();
 И только для ОстаткиНоменклатуры.

 Почему так не правильно?*???

Добавлено (28.07.2011, 13:25)
---------------------------------------------
Кстати не работало сделал тестирвоание и исправление в конфигуратооре и все стало нормально.
 А критику хотелось бы послушать.


Вложения:
9469314.dt
Название: Задача 1.01
Отправлено: Кенгуру от Июль 28, 2011, 01:53:09 pm
kow1976, спасибо, буду доделывать.
 8. Думаю не писать услуги в остатки, а писать в продажи.

 vvvlad85, мельком глянул, надо указывать параметры виртуальных таблиц в отчетах. Больше не скажу, т.к. пока зелен.
Название: Задача 1.01
Отправлено: vvvlad85 от Июль 28, 2011, 02:46:05 pm
Quote (Кенгуру)
vvvlad85, мельком глянул, надо указывать параметры виртуальных таблиц в отчетах. Больше не скажу, т.к. пока зелен.

 Чтобы выбрать в пользовательском режиме? Это ты имеешь в виду.
Название: Задача 1.01
Отправлено: Кенгуру от Июль 29, 2011, 12:06:01 pm
Quote (vvvlad85)
Чтобы выбрать в пользовательском режиме?


 ммм, я имею ввиду, например, отчет остатки строится на основе запроса, у него есть виртуальная таблица "ОстаткиНоменклатуры.Остатки", у нее есть параметры Период, Условие. Их желательно задавать, это влияет на скорость работы.

Вложения:
s1523116.jpg
Название: Задача 1.01
Отправлено: vvvlad85 от Июль 29, 2011, 02:46:30 pm
Quote (Кенгуру)

 ммм, я имею ввиду, например, отчет остатки строится на основе запроса, у него есть виртуальная таблица "ОстаткиНоменклатуры.Остатки", у нее есть параметры Период, Условие. Их желательно задавать, это влияет на скорость работы.

 Я понял, но интересно это ошибка на экзамене, ведь и так работает, началопериода и конецпериода это типовое
Название: Задача 1.01
Отправлено: Кенгуру от Июль 29, 2011, 02:53:52 pm
Quote (vvvlad85)
Я понял, но интересно это ошибка на экзамене, ведь и так работает, началопериода и конецпериода это типовое
Да, ошибка, снимают 1 или 2 балла. При работе с регистрами следует избегать конструкции ГДЕ, используя вместо нее параметры виртуальной таблицы. Т.к. используя ГДЕ мы перелопатим весь регистр ради нескольких записей.
Название: Задача 1.01
Отправлено: Gyd от Июль 29, 2011, 03:54:09 pm
Quote (Кенгуру)
При работе с регистрами следует избегать конструкции ГДЕ, используя вместо нее параметры виртуальной таблицы. Т.к. используя ГДЕ мы перелопатим весь регистр ради нескольких записей.


 
Quote (Кенгуру)
Больше не скажу, т.к. пока зелен.

 Я бы не сказал что вы "зелен" smile
Название: Задача 1.01
Отправлено: kow1976 от Июль 30, 2011, 04:16:59 pm
vvvlad85,

 Почему так не правильно?*???

 Движения.ОстаткиНоменклатуры.Очистить() – очищает набор записей в оперативной памяти. Нужно если мы читали( Прочитать() ) наборы из БД , а потом нам нужно сформировать новые движения. В нашем случае Движения и так пустые. Это не ошибка. Просто лишняя строчка.

 Движения.ОстаткиНоменклатуры.Записать() - записывает набор данных в БД. В нашем случае обязателен (Записывает пустой набор) так как нам нужны остатки без, записей которые сделал данный документ.
 Пример
 1.01.11 Остаток 5ед
 2.01.11 Расх. Нак №1 3ед Остаток 2ед
 3.01.11 Рсх. Нак №2 2ед Остаток 0ед
 Пользователь открывает 2.01.11 Расх. Нак №1 меняет в ней дату на 4.01.11.
 Остаток 0ед Док не проводится. Хотя реально остаток 3ед.
 Поэтому перед проведением Расх. Нак №1 должна удалить все свои записи.

 В регистр продажи записывать не надо, так как мы данные из него не читаем и наборы сами перезапишутся в модуле набора записей.
Название: Задача 1.01
Отправлено: kow1976 от Июль 30, 2011, 06:09:15 pm
Quote (Кенгуру)
ммм, я имею ввиду, например, отчет остатки строится на основе запроса, у него есть виртуальная таблица "ОстаткиНоменклатуры.Остатки", у нее есть параметры Период, Условие. Их желательно задавать, это влияет на скорость работы.


 Если отчет на СКД, то в СКД свои параметры Период (они зависит от выбранной виртуальной таблицы) и они определяют какие данные нужно выбирать. И это именно параметр, а не условие (где). Если вы создаете свои параметры в запросе (например Момент) то нужно определяться как параметр период в СКД соотноситься с параметром запроса.
 Должно быть Период=Момент.
 Иначе пользователь может задать
 Период =01.01.11
 Момент=05.01.11
 Отчет Остатки номенклатуре в обработке «Консоль системы компоновки данных»
Вложения:
s0213154.jpg
Название: Задача 1.01
Отправлено: Кенгуру от Июль 30, 2011, 10:32:09 pm
Quote (kow1976)
Если отчет на СКД, то в СКД свои параметры Период (они зависит от выбранной виртуальной таблицы) и они определяют какие данные нужно выбирать. И это именно параметр, а не условие (где). Если вы создаете свои параметры в запросе (например Момент) то нужно определяться как параметр период в СКД соотноситься с параметром запроса. Должно быть Период=Момент. Иначе пользователь может задать Период =01.01.11 Момент=05.01.11 Отчет Остатки номенклатуре в обработке «Консоль системы компоновки данных»


 Спасибо!
 Прошу прощения за дезинформацию wacko
 По весне ходил на курсы (притом 8.1), до сих пор в голове каша.
Название: Задача 1.01
Отправлено: Legion от Август 30, 2011, 05:47:27 pm
Доброго времени суток. Посмотрел варианты решений, подскажите насколько правильно создавать регистр накопления Продажи, для хранения стоимости номенклатуры, с регистратором РасходнаяНакладная, т.е получается что регистр не закрывается
Название: Задача 1.01
Отправлено: Данияр от Август 30, 2011, 06:50:15 pm
Legion, Очень правильно создавать такой регистр накопления Продажи, но он должен быть оборотным.
Название: Задача 1.01
Отправлено: deleted111 от Сентябрь 04, 2011, 12:12:01 am
Кому не лень посмотрите моё решение. Плиссссссссссссссс.
Вложения:
7532804.dt
Название: Задача 1.01
Отправлено: Грейт от Сентябрь 22, 2011, 08:48:06 am
Изучив 7 решений в этой ветке, написал свое.
 Считаю его наиболее эффективным и полным.


Вложения:
Great_1.1.dt
Название: Задача 1.01
Отправлено: aveego от Октябрь 05, 2011, 09:01:10 am
Quote (Грейт)
Изучив 7 решений в этой ветке, написал свое.
 Считаю его наиболее эффективным и полным.


 Зачем использовать объект БлокировкаДанных для блокировки набора, если для этого есть свойство этого же набора БлокироватьДляИзменения?
 Еще отсутствует очистка набора в регистре, чтобы читать остатки без учета данных в документе.

 Могу быть не прав так как только начал готовиться.
Название: Задача 1.01
Отправлено: chilli от Октябрь 05, 2011, 07:52:30 pm
Доброго времени суток!
 Вот решил без подглядок, но по времени в час не уложился, да что там, даже в экзамен lol
Вложения:
chili_1_1.dt
Название: Задача 1.01
Отправлено: dreeme от Октябрь 06, 2011, 01:35:30 pm
Quote (Грейт)
Считаю его наиболее эффективным и полным.

 1. Почему нельзя указывать услуги в приходной накладной? В типовых это не так.
 2. Движения.ОстаткиНоменклатуры.Записывать = НЕ Отказ; - предполагается, что на вход процедуры может быть подан параметр Отказ = Истина?
 3. В расходной УчетнаяПолитика определяется на текущую дату. Почему не на дату документа?
 4. Временную таблицу ВТ_Документ надо индексировать.
 5. В запросе по остаткам не хватает условия: Номенклатура В   (ВЫБРАТЬ ВТ_Документ.Номенклатура ИЗ ВТ_Документ)
Название: Задача 1.01
Отправлено: chilli от Октябрь 06, 2011, 03:59:02 pm
Quote (dreeme)
Временную таблицу ВТ_Документ надо индексировать.

 а что при этом произойдет?
Название: Задача 1.01
Отправлено: rnikinko от Октябрь 07, 2011, 08:28:21 am
Quote (chilli)
Quote (dreeme)Временную таблицу ВТ_Документ надо индексировать. а что при этом произойдет?


 При индексации выборка работает намного быстрее, соединение с регистром остатки будет быстрее, следовательно запрос выполнется быстрее при условии что в табличной части много строк.
Название: Задача 1.01
Отправлено: gr0ck от Октябрь 07, 2011, 08:31:44 am
И индексировать нужно правильно:) Чтобы быстрее было
 
Quote (dreeme)
1. Почему нельзя указывать услуги в приходной накладной? В типовых это не так.

 В принципе неважно. Главное, чтобы в движения в остатки не попали услуги
Название: Задача 1.01
Отправлено: rnikinko от Октябрь 07, 2011, 08:42:10 am
Quote
И индексировать нужно правильно:) Чтобы быстрее было

 Делать нужно все правильно, не только индексировать. smile
Название: Задача 1.01
Отправлено: bonig от Октябрь 07, 2011, 11:53:20 am
chili, попробую вставить свои 5 копеек по поводу твоего решения. Если я где-то не прав, то пусть квалификалы меня поправят.
 У тебя оставлен режим управления блокировкой автоматический. Это большой грех. При решении первым делом надо в каркасной конфигурации установить управляемый режим блокировки.
 Для расходной накладной ты установил режим удаления движений автоматический. А его не надо было трогать. Во избежание проблем при оперативном проведении обычно используют Движения.ОстаткиНоменклатуры.Записать(). У тебя эта функция есть, но она выполняется после того, как движения сформированы, а надо до того, чтобы записать пустой набор движений.
 В модуле расходной накладной у тебя используется отдельные запросы для остатков и продаж. Такую простую задачу можно и, наверное, нужно делать с помощью одного запроса.
 
Quote

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

 В качестве параметра здесь можно использовать дату документа и непонятно, причем тут режим проведения.
Название: Задача 1.01
Отправлено: chilli от Октябрь 07, 2011, 10:10:45 pm
Quote (bonig)
Это большой грех.

 о блин... пасиба
 
Quote (bonig)
Для расходной накладной ты установил режим удаления движений автоматический. А его не надо было трогать.

 Когда открываю проведенный документ Расходная накладная и нажимаю кнопку провести, выдается сообщение о том , что нехватает товара. т.е. товар который уже в документе не учитывается, а так то его хватает. А установив режим удаления движений автоматический все фунциклирует.
 
Quote (bonig)
В качестве параметра здесь можно использовать дату документа и непонятно, причем тут режим проведения.

 Это из видеокурсов Чистова запомнил. А почему он так там сделал не помню. Видео на рабочем компе, а я в отпуске. Сейчас не могу их пересмотреть.
 
Quote (bonig)
Движения.ОстаткиНоменклатуры.Записать(). У тебя эта функция есть, но она выполняется после того, как движения сформированы, а надо до того, чтобы записать пустой набор движений.

 После движений по регистру ОстаткиНоменклатуры, чтобы потоб использовать данные этого регистра для формирования движений по регистру Продажи. А если два раза, ну до и после движения записать?
 
Quote (bonig)
В модуле расходной накладной у тебя используется отдельные запросы для остатков и продаж. Такую простую задачу можно и, наверное, нужно делать с помощью одного запроса.

 Один из факторов. Мне так больше нравится, потомучто код более читабельный, особенно если возвращаешься к нему спустя время, легче понять.
 
Quote (rnikinko)
При индексации выборка работает намного быстрее, соединение с регистром остатки будет быстрее, следовательно запрос выполнется быстрее

 Это с SQL связано? А есть случаи когда индексацию лучше не делать?
Название: Задача 1.01
Отправлено: DoctorRoza от Октябрь 08, 2011, 10:29:31 am
chilli,
 
Quote (chilli)
Это с SQL связано? А есть случаи когда индексацию лучше не делать?

 Индексация имеет смысл в том случае, если данных для обработки достаточно много! Если же Вы обрабатываете 1 строку, то построение индекса - это только дополнительная нагрузка на сервер. В данной ситуации построение индекса оправдывается знанием функционала платформы для реализации какого-то конкретного решения .. То есть, хоть слова эти и заезжаны до дыр, но в зависимости от конкретной задачи следует выбирать и путь решения. Бездумное индексирование всего и вся .. а возможно, эти данные уже проиндексированы .. "выигрыша в работе не дадут" (золотое правило механики)! В рамках же экзамена 1С.Специалист индексирование лучше делать для реквизитов табл. частей документов.
Название: Задача 1.01
Отправлено: bonig от Октябрь 08, 2011, 10:31:22 am
chili
 
Quote
А установив режим удаления движений автоматический все фунциклирует.

 Не хватает товара, потому что при оперативном перепроведении сдвигается оперативная отметка времени и движения этого документа попадают в остатки. При обычном проведении МоментВремени() не включает движения этого документа.
 Бороться с этим можно либо записав пустые движения, как я уже писал, либо запретив оперативное проведение документа (там же, но строчкой выше), но не путем изменения режима удаления движений. Эта фишка 8.2, к которой экзаменаторы относятся очень трепетно.

 
Quote
После движений по регистру ОстаткиНоменклатуры, чтобы потоб использовать данные этого регистра для формирования движений по регистру Продажи. А если два раза, ну до и после движения записать?

 Боюсь, что за такое решение вкатят "Использование менее эффективной методики проведения документов" и минус 1 балл.

 
Quote
А есть случаи когда индексацию лучше не делать?

 На экзамене таких случаев нет, поскольку опять же в ошибках записано "В задачах получения данных из информационной базы установка отборов по неиндексированным полям" минус 0,5 балла
Название: Задача 1.01
Отправлено: Oliver от Октябрь 11, 2011, 04:28:30 am
Прошу прокомментировать моё решение. У меня там вопрос о флагах "записать" в модуле Расходной. Буду рад всем замечаниям. Спасибо.
Вложения:
1_1_Oliver.dt
Название: Задача 1.01
Отправлено: Кенгуру от Октябрь 11, 2011, 05:04:51 pm
Quote (Oliver)
Прошу прокомментировать моё решение. У меня там вопрос о флагах "записать" в модуле Расходной. Буду рад всем замечаниям. Спасибо


 
Code
Процедура ОбработкаПроведения(Отказ, Режим)
   
  Движения.ОстаткиНоменклатуры.Записывать = Истина;
  Движения.Продажи.Записывать = Истина;
  Движения.Записать();
   
  //Вопрос №1. Когда я записываю движения у меня флаг "записывать" скидывается в Ложь,
  //и мне приходится второй раз выставлять флаги (иначе движения после окончания транзакции не записываются), как этого избежать
  //Вопрос №2 нужно ли мне выставлять флаг "записывать" у регистра Продажи? При методе записать будет запись в регистр Продажи, излишне ли она?
   
  Движения.ОстаткиНоменклатуры.Записывать = Истина;
  Движения.Продажи.Записывать = Истина;    
 


 1. Я делаю
 
Code

 Движения.ОстаткиНоменклатуры.Записывать = Истина;
 Движения.Продажи.Записывать = Истина;   
 Движения.ОстаткиНоменклатуры.Записать();

 И все ок.

 2. Т.е. ты хочешь вместо Движения.Продажи.Записывать=Истина в начале сделать Движения.Продажи.Записать() в конце?
Название: Задача 1.01
Отправлено: Romdavid от Октябрь 11, 2011, 07:48:33 pm
Quote (Oliver)
Прошу прокомментировать моё решение. У меня там вопрос о флагах "записать" в модуле Расходной. Буду рад всем замечаниям. Спасибо.

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

 Движения.ОстаткиНоменклатуры.Записывать = Истина;
 Движения.Продажи.Записывать = Истина;
 Движения.ОстаткиНоменклатуры.Записать();

 При этом не нужно после этого опять устанавливать свойство "Записывать" в "Истина".
Название: Задача 1.01
Отправлено: crabzzy от Октябрь 21, 2011, 04:22:06 pm
Выложу свою версию
 два регистра ,кажется, тренировался на двух делать и по новой методике списания
Вложения:
crabzzy_1.1.dt
Название: Задача 1.01
Отправлено: Romdavid от Октябрь 22, 2011, 12:11:54 pm
crabzzy, новая методика списания здесь не уместна
Название: Задача 1.01
Отправлено: crabzzy от Октябрь 24, 2011, 09:40:18 am
Quote (Romdavid)
crabzzy, новая методика списания здесь не уместна

 Ясно, спасибо!
 На одном регистре да, неуместна.
Название: Задача 1.01
Отправлено: Irmo от Октябрь 26, 2011, 07:34:03 pm
Сделал задачу и я.
 Только что прослушал курс "Конфигурирование платформы "1С:Предприятие 8.2"" у Белоусова в 1С.
 Похоже, нигде не ошибся, верно?
Вложения:
irmo-1.1.dt
Название: Задача 1.01
Отправлено: bonig от Октябрь 27, 2011, 06:36:37 pm
Irmo, небольшие замечания для точности.
 - Вы используете объект БлокировкаДанных, поэтому устанавливать флаг БлокироватьДляИзменения - это лишнее.
 - Вместо конструкции
          Если ВыборкаПоНоменклатуре.КоличествоДок > ВыборкаПоНоменклатуре.Остаток Тогда
             Отказ = Истина;
             Сообщение = Новый СообщениеПользователю;
             Сообщение.Текст = "Недостаточно товара " + ВыборкаПоНоменклатуре.НоменклатураПредставление +
                ", реально есть " + ВыборкаПоНоменклатуре.Остаток + "!";
             Сообщение.Сообщить();
             Продолжить;
          КонецЕсли;
          
          Если Отказ Тогда
             Возврат;
          КонецЕсли;
 лучше использовать
          Если ВыборкаПоНоменклатуре.КоличествоДок > ВыборкаПоНоменклатуре.Остаток Тогда
             Отказ = Истина;
             Сообщение = Новый СообщениеПользователю;
             Сообщение.Текст = "Недостаточно товара " + ВыборкаПоНоменклатуре.НоменклатураПредставление +
                ", реально есть " + ВыборкаПоНоменклатуре.Остаток + "!";
             Сообщение.Сообщить();
          КонецЕсли;
          
          Если Отказ Тогда
             Продолжить;
          КонецЕсли;
 Тогда вы будете информированы сразу по всем недостачам.

 - Считается, что вместо конструкции
                ?(Движение.Количество = Выборка.Остаток,
                   Выборка.СуммаОстаток,
                   Выборка.СуммаОстаток / Выборка.Остаток * Движение.Количество);
 лучше использовать
                ?(Движение.Количество = Выборка.Остаток,
                   Выборка.СуммаОстаток,
                   Выборка.СуммаОстаток * Движение.Количество/ Выборка.Остаток );
 это связано с так называемой проблемой копеек (http://forum.chistov.pro/index.php?topic=1563.msg1#msg1)

 - В отчетах с использованием системы компоновки данных нет необходимости в запросе задавать параметры виртуальных таблиц.

 - В задании в отчете по продажам Доставка выведена в конце (не по порядку сортировки). Это может быть реализовано дополнительной сортировкой по вычисляемому полю Порядок (Выбор Когда Номенклатура.ВидНоменклатуры = Значение(Перечисление.ВидыНоменклатуры.Товар) Тогда 1 Иначе 2 Конец).

Добавлено (27.10.2011, 18:36)
---------------------------------------------
Irmo, по параметрам я имею ввиду &НачалоПериода и &КонецПериода. Они подхватываются компоновкой данных автоматически.

 И еще, по-видимому вы пользовались конструктором запросов, а здесь удобнее и быстрее воспользоваться конструктором запросов с обработкой результата

Название: Задача 1.01
Отправлено: Romdavid от Октябрь 27, 2011, 07:39:19 pm
Quote (bonig)
- Считается, что вместо конструкции
 ?(Движение.Количество = Выборка.Остаток,
 Выборка.СуммаОстаток,
 Выборка.СуммаОстаток / Выборка.Остаток * Движение.Количество);
 лучше использовать
 ?(Движение.Количество = Выборка.Остаток,
 Выборка.СуммаОстаток,
 Выборка.СуммаОстаток * Движение.Количество/ Выборка.Остаток );
 это связано с так называемой проблемой копеек (http://forum.chistov.pro/index.php?topic=1563.msg1#msg1)


 Т.к. в обоих случаях идет проверка на полное списание остатка то нет никакой разницы между ними.
Название: Задача 1.01
Отправлено: bonig от Октябрь 27, 2011, 09:29:56 pm
Quote
Т.к. в обоих случаях идет проверка на полное списание остатка то нет никакой разницы между ними.


 Согласен, погорячился. И вообще, можно написать короче

 Движение.Количество / Выборка.Остаток * Выборка.СуммаОстаток

 и проверки на полное списание не нужно.
 Но идеологически, все-таки, правильнее проверку делать.
Название: Задача 1.01
Отправлено: Irmo от Октябрь 27, 2011, 11:11:03 pm
Спасибо, что потратили время на просмотр smile

 
Quote (bonig)
Вы используете объект БлокировкаДанных, поэтому устанавливать флаг БлокироватьДляИзменения - это лишнее.

 Я тоже так думаю, но в примере, что решался при мне Белоусовым, он сделал именно так. Использовал и блокировку и БлокироватьДляИзменения

 
Quote (bonig)
- Вместо конструкции ... Тогда вы будете информированы сразу по всем недостачам

 А вы запустите на выполнение с излишним списанием в нескольких строках -- я и так информирован по всем недостачам smile

 
Quote (bonig)
...нет необходимости в запросе задавать параметры виртуальных таблиц

 Верно, недоглядел.

 
Quote (bonig)
Доставка выведена в конце (не по порядку сортировки)

 Согласен, не обратил внимания
Название: Задача 1.01
Отправлено: Oliver от Ноябрь 01, 2011, 03:53:13 pm
Quote
Вы используете объект БлокировкаДанных, поэтому устанавливать флаг БлокироватьДляИзменения - это лишнее.
- Совсем даже не лишнее а необходимое если используется режим разделения итогов. Считаю на экзамене режим разделения использовать нужно.
 
Quote

 - Считается, что вместо конструкции
 ?(Движение.Количество = Выборка.Остаток,
 Выборка.СуммаОстаток,
 Выборка.СуммаОстаток / Выборка.Остаток * Движение.Количество);
 лучше использовать
 ?(Движение.Количество = Выборка.Остаток,
 Выборка.СуммаОстаток,
 Выборка.СуммаОстаток * Движение.Количество/ Выборка.Остаток );
 это связано с так называемой проблемой копеек (http://forum.chistov.pro/index.php?topic=1563.msg1#msg1)
 
- ничего подобного, как то натыкался на ветку в котором на эту тему вели диспут Чистов и Белоусов, каждый остался при своём мнении.
Название: Задача 1.01
Отправлено: Romdavid от Ноябрь 01, 2011, 08:55:41 pm
Oliver, БлокироватьДляИзменения здесь абсолютно лишнее. Вообще БлокировкаДанных более универсальна. Поэтому ни в каком случае БлокироватьДляИзменения не является необходимым, но в некоторых более оптимальным.
Название: Задача 1.01
Отправлено: Альберт от Январь 25, 2012, 08:58:44 pm
А как вам такое решение?

Добавлено (25.01.2012, 20:58)
---------------------------------------------
Как по-вашему, являются ли:

 -фильтрация номенклатуры на наличие в ней услуг в обработке проведения документа ПриходнаяНакладная
 и
 -наличие ресурса Себестоимость в оборотном регистре накопления Продажи

 не очень удачными идеями?


Вложения:
2687051.dt
Название: Задача 1.01
Отправлено: kow1976 от Январь 25, 2012, 10:14:23 pm
Альберт,
 
Quote (Альберт)
фильтрация номенклатуры на наличие в ней услуг в обработке проведения документа ПриходнаяНакладная

 Для пользователя будет странно. В табличной части документа есть номенклатура в регистре нет. Хорошо бы запретить ввод услуги в табличную часть приходной накладной.

 
Quote (Альберт)
наличие ресурса Себестоимость в оборотном регистре накопления Продажи


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

 
Code
Движения.Продажи.Записать();

 Наверно не нужно, данные этого регистра мы не читаем. А при окончании транзакции записи все равно перезаписываются.
Название: Задача 1.01
Отправлено: Альберт от Январь 25, 2012, 11:26:33 pm
kow1976, спасибо Вам за отклик! Согласен с Вами по каждому пункту.

Добавлено (25.01.2012, 23:26)
---------------------------------------------
Нашел мнение Белоусова по пункту 2:
 http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=578804#578804

Название: Задача 1.01
Отправлено: sv_mikh от Март 11, 2012, 12:57:51 am
Мое решение.
Название: Задача 1.01
Отправлено: Hawk от Март 11, 2012, 07:05:58 pm
sv_mikh, ты выкладываешь чтобы похвастаться? ) задача типовая так сказать основной скелет многих задач её можно закрытыми глазами писать ).
 Прочитал только условие задачу не смотрел sv_mikh, ты получаешь 5 biggrin
Название: Задача 1.01
Отправлено: Student90 от Март 11, 2012, 09:42:44 pm
sv_mikh, спасибо ) Мне пригодилось. Вопрос (сразу извиняюсь перед за примитивность): в расходной накладной "Удалять автоматически при отмене проведения", почему не "Удалять автоматически"?
 И если не сложно, поясни кусок: Если СпишемКол = ВыборкаДет.КоличествоРег Тогда
                   СпишемСум = ВыборкаДет.СуммаРег;
                Иначе
                   СпишемСум = ?(ВыборкаДет.КоличествоРег=0,0,СпишемКол * ВыборкаДет.СуммаРег / ВыборкаДет.КоличествоРег);
                КонецЕсли;
 Спасибо)
Название: Задача 1.01
Отправлено: sv_mikh от Март 11, 2012, 10:07:26 pm
Quote (Student90)
sv_mikh, спасибо ) Мне было полезно )

 А вот это уже радует.

 Добавлено (11.03.2012, 22:00)
 ---------------------------------------------
 
Quote (Hawk)
sv_mikh, ты выкладываешь чтобы похвастаться? ) задача типовая так сказать основной скелет многих задач её можно закрытыми глазами писать ).
 Прочитал только условие задачу не смотрел sv_mikh, ты получаешь 5

 Hawk, дай Бог Вам здоровья и скорейшей сдачи.

 Добавлено (11.03.2012, 22:07)
 ---------------------------------------------
 
Quote (Student90)
в расходной накладной "Удалять автоматически при отмене проведения", почему не "Удалять автоматически"?

 При флаге удалять автоматически запись при обработке проведения выполняется 2 раза. 1 раз при начале проведения записывается пустой набор движений, второй раз в конце записываются сформированные наборы. На примере регистра Продажи -- мы его не используем в запросе к остаткам. Заметь -- я его не очищаю как регистр остатков Движения.ОстаткиТоваров.Записать(). Просто мы его перезаписываем в конце новым набором (директива .Записывать = Истина)... В варианте удалять автоматически время платформы уходило бы еще и на двойную запись набора регистра Продажи... Т.е. методологически удалять автоматически -- анахронизм оставленный для совместимости платформ.

 
Quote (Student90)
Если СпишемКол = ВыборкаДет.КоличествоРег Тогда
 СпишемСум = ВыборкаДет.СуммаРег;
 Иначе
 СпишемСум = ?(ВыборкаДет.КоличествоРег=0,0,СпишемКол * ВыборкаДет.СуммаРег / ВыборкаДет.КоличествоРег);
 КонецЕсли;

 Это мероприятия для выведения регистра в ноль. Проблема копеек, когда количество уходит, а сумма в копейках остается... В этом случае из месяца в месяц (итоги помесячные) будут идти записи в итогах об этой копейке -- путь к раздуванию базы.
Название: Задача 1.01
Отправлено: Hawk от Март 11, 2012, 11:02:11 pm
sv_mikh, я думаю вы быстрее сдадите
Название: Задача 1.01
Отправлено: Gyd от Март 12, 2012, 11:19:51 am
sv_mikh, никого не слушайте - продолжайте выкладывать решения, они нам пригодятся smile
Название: Задача 1.01
Отправлено: Student90 от Март 12, 2012, 08:03:20 pm
sv_mikh, спасибо, можно еще пару вопросов?
 1) Вы не убираете возможные дубли при проведении приходной накладной, почему?
 2) При проведении расходной во временной таблице ИНДЕКСИРОВАТЬ, зачем?
 3) там же в регистре Остатки не будет услуг. (неоткуда им там взяться), зачем условие на НЕ услуги?
 4) МоментВремени ... зачем так сложно? И для неоперативного проведения тоже есть момент времени ...
 извините, я только начинаю - много непонятного.
 Но я не понимаю про проблему "копейки" ... Количество в целых единицах, списывается по записям ... Откуда эти "копейки" возьмутся?

Добавлено (12.03.2012, 20:03)
---------------------------------------------
Вопрос не по теме, но интересно ... На сайте привязка к IP?

Название: Задача 1.01
Отправлено: sv_mikh от Март 12, 2012, 08:43:47 pm
Quote (Student90)
1) Вы не убираете возможные дубли при проведении приходной накладной, почему?

 В целом про задачи: каждая задачка имеет некий акцент, тот вопрос, ради которой она создана. В первую очередь нужно понять его и решить. К основному вопросу идут наполнитель -- некие общие вопросы и положения. Их тоже необходимо решить. И есть "бантики" -- это тот функционал, на который смотреть экзаменатор не будет, но на котором можно потерять массу времени. В данном случае не группировка строк может привести к разрастанию базы -- это да. Но вероятность такого события (человек плодит строки) достаточно мала, а проведение документа приходная не обусловлено (просто запись того, что уже есть в документе) -- т.е. проведение максимально быстро. Поэтому данный вопрос не критичен. Вот в расходе негруппировка чревата ошибкой, т.к. там идет связь с рег.остатков.
 НО! Почему все же в приходной имело смысл делать запрос и формировать движения по выборке. Это нужно ОБЯЗАТЕЛЬНО если мы решаем вопрос выявления услуг в приходе (кстати условие задачи этого не требует -- можно не реализовывать). А как я это делаю: через точку от Товара к ВидуНоменклатуры. Но в объекте нет информации о ВидеНоменклатуры -- система делает запрос к базе данных (и при этом самое страшное -- в цикле). Вот за это можно хорошо схлопотать от экзаменатора. Поэтому или не проверяем в приходе Услуги (не требуют) или если проверяем -- движения формируем по выборке запроса.

 
Quote (Student90)
2) При проведении расходной во временной таблице ИНДЕКСИРОВАТЬ, зачем?

 Индексируются те поля создаваемых временных таблиц, которые в дальнейшем используются в соединении таблиц, в условиях. В этом случае запрос выполняется быстрее (это требование входит в список ошибок на экзамене). В целом, если вы как то используете в пакете запросов некое поле -- индексируйте его. Но индексировать "на всякий случай" -- это тоже ошибка, т.к. расходуется время/память на индексирование.

 
Quote (Student90)
3) там же в регистре Остатки не будет услуг. (неоткуда им там взяться), зачем условие на НЕ услуги?

 Не Услуги используются в параметризации ВТ ОстатковНоменклатуры. Нужно для того, чтобы система даже не пыталась вытащить из регистра остатки услуг (понятно что их там нет -- но время тратит). Вообще сразу запомните и это важно. То, что задача показывает правильные цифры этого не достаточно. Важно, чтобы она это делала оптимально. И это оценивается.

 
Quote (Student90)
4) МоментВремени ... зачем так сложно? И для неоперативного проведения тоже есть момент времени ...
 извините, я только начинаю - много непонятного.

 При неоперативном проведении система обращается к остаткам указывая конкретный момент времени (Момент = Дата + Ссылка), при оперативном не указываем момент времени и система понимает, что мы обращаемся к текущим (всегда актуальным и следовательно самым быстрым) итогам.

 
Quote (Student90)
Вопрос не по теме, но интересно ... На сайте привязка к IP?

 Не в курсе

 Добавлено (12.03.2012, 20:43)
 ---------------------------------------------
 
Quote (Student90)
Но я не понимаю про проблему "копейки" ... Количество в целых единицах, списывается по записям ... Откуда эти "копейки" возьмутся?

 Проблему копеек лучше закладывать в любое решение... Это некий "хороший тон" + не всегда умом можно придумать пример, когда они могут возникнуть. А нерешение его грозит потерей баллов. Поэтому лучше привыкнуть этот вопрос по любому решать. Мое мнение.
Название: Задача 1.01
Отправлено: Student90 от Март 12, 2012, 10:42:12 pm
sv_mikh, понятно. Спасибо большое, за терпение и подробные ответы. )
Название: Задача 1.01
Отправлено: poritskiy от Апрель 04, 2012, 05:09:16 pm
Посмотрите пожалуйста буду признательный за комментарии
Вложения:
8391685.dt
Название: Задача 1.01
Отправлено: TuMyP1985 от Апрель 10, 2012, 09:37:20 am
Посмотрите пожалуйста буду признательный за комментарии
 По моему (только начинаю, могу ошибаться):
 1) В ОбработкеПроведения Приходная накладная перед добавлением в РегистрНакопления.ОстаткиНоменклатуры - нет проверок
 на вид номенклатуры услуга она или нет, например можно было добавить:

 ...
 Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
       Если ТекСтрокаСписокНоменклатуры.Номенклатура.ВидНоменклатуры = Перечисления.ВидыНоменклатуры.Услуга Тогда
          Продолжить;
       КонецЕсли;

       
       Движение = Движения.ОстаткиНоменклатуры.Добавить();
 ...

 А так вроде верно (небольшие замечания - вместо сообщить, по моему нужно использовать конструкцию Сообщение = Новый СообщениеПользователю; ...)
 Еще я в решении ВидНоменклатуры хранил не в Перечислениях, а в типе Булево (Ложь, Истина) - чтобы не проставлять у каждой номенклатуры ВидНоменклатуры (Булево по
 умолчанию будет Ложь)
 Прикрепляю мое решение, может что не правильно решил, буду благодарен за найденные "косячки" в решении))
Вложения:
1Cv8-1_1-.dt
Название: Задача 1.01
Отправлено: Gyd от Апрель 10, 2012, 09:50:29 am
TuMyP1985, по поводу услуг в приходе и сообщения пользователю вы всё правильно написали. По поводу ВидаНоменклатуры - тип булево - для задачки можно и так.
Название: Задача 1.01
Отправлено: aret от Апрель 10, 2012, 03:13:01 pm
TuMyP1985, внесу свои 5 копеек.
 Хорошо бы для красоты в Подсистеме Оперативный учет ввести починенную "См. также", куда и поместить учетную политику (как это сделано в рекомендациях сборника). Когда интерфейс стандартизирован, у экзаменатора лучше настроение.

 Посмотрел списание по партиям - придраться не к чему, разве что в секции ИТОГИ строчка МАКСИМУМ(Услуга) лишняя.
Название: Задача 1.01
Отправлено: TuMyP1985 от Апрель 10, 2012, 06:18:48 pm
Спасибо за замечания, учту.)
 Только в секции ИТОГИ строчка МАКСИМУМ(Услуга) не лишняя, она используется для получения вида номенклатуры в обходе результата запроса по группировкам
 ...ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    Пока ВыборкаНоменклатура.Следующий() Цикл
       
       Если НЕ ВыборкаНоменклатура.Услуга
...
Название: Задача 1.01
Отправлено: aret от Апрель 12, 2012, 04:59:32 pm
TuMyP1985, я применил
 Если НЕ ВыборкаНоменклатура.Номенклатура.Услуга Тогда
 // делаем движения
 КонецЕсли;
 тогда МАКСИМУМ(Услуга) не нужна. У меня все сработало.
 В прочем оба варианта имеют место быть.

 Добавлено (12.04.2012, 16:59)
 ---------------------------------------------
 TuMyP1985, копнул отчеты. В Остатки номенклатуры у Вас в СКД указан параметр период тип дата. В этом случае система будет определять остатки на начадо дня (0 час 0 мин). А надо на конец дня. Это не зачтут однозначно.
 В столбце "выражение" нужно написать:

 ДобавитьКДате(КонецПериода(&Лериод,"День"),"Секунда",1)

 Тогда будут остатки на 23:59
Название: Задача 1.01
Отправлено: ZolteR от Апрель 30, 2012, 08:27:35 pm
Доброго всем времени суток! Пытаюсь решать задачи и все бы ничего, но никак не могу понять как при формировании отчета сделать красивую шапку ("Остатки товаров на 01.01.2010") у отчета вместо стандартной шапки состоящей из набора параметров и их значений. Есть другой способ кроме "Процедура ПриКомпоновкеРезультата" и добавления дополнительно макета, например ч/з макеты самой СКД.
Название: Задача 1.01
Отправлено: sv_mikh от Апрель 30, 2012, 08:57:47 pm
Quote (ZolteR)
Доброго всем времени суток! Пытаюсь решать задачи и все бы ничего, но никак не могу понять как при формировании отчета сделать красивую шапку ("Остатки товаров на 01.01.2010") у отчета вместо стандартной шапки состоящей из набора параметров и их значений. Есть другой способ кроме "Процедура ПриКомпоновкеРезультата" и добавления дополнительно макета, например ч/з макеты самой СКД.

 Красивая шапка с помощью макетов заголовков группировок и макетов группировок. На экзамене не требуется красивая шапка. Требуется корректное наполнение отчета. Так что время на это не тратьте.
Название: Задача 1.01
Отправлено: ZolteR от Май 02, 2012, 03:05:48 pm
Всем доброго времени суток, решил первую задачу, очень хотелось бы критики, поскольку она будет базой для остальных решений. В свою очередь есть несколько вопросов к специалистам:
 1) Нужно-ли проверять (сравнивать) год у значения учетной политики с годом документа или все таки учетная политика может неменяться несколько лет? Если добавлять проверку то получить дату можно только ч/з СрезПоследних, но некоторые пишут что надо получать значение регистра ч/з ПолучитьПоследнее.
 Цитата из условия задачи: "Еще раз подчеркивается - учетная политика действует год."
 2) Нужно ли проверять на заполнение табличные части документов? Почти у всех решенных вариантов можно проводить документ с незаполненым полем "Номенклатура" в то время как "Количестьво", "Цена" и "Сумма" присутствует в строке.
 3) Для себя очень бы хотелось посмотреть на грамотную реализацию шапки отчетов.
 Пример: "Продажи с 01.01.2010 по 31.03.2010" или "Остатки товаров на 01.01.2010"
 4) Так и неразобрался в чем разница м/у "Сообщить()" и "Новый СообщениеПользователю".
 5) Так и непонятен смысл "Запрос.УстановитьПараметр("Период", ?(Режим = РежимПроведенияДокумента.Неоперативный, МоментВремени(), Неопределено))" при установке периода в запросе "РегистрНакопления.ОстаткиНоменклатуры.Остатки(&Период,)".

Вложения:
ZolteR-1_01.dt
Название: Задача 1.01
Отправлено: Pavlyk от Май 04, 2012, 01:11:49 pm
Только начинаю готовится к Специалисту, но попробую ответить =)

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

 2) Ну тут в принципе одну "галочку" поставить наверное не лишним будет

 3)А зачем это нужно? Разве там вобще должна быть какая то шапка?

 4) Второе можно привязать к конкретному полю и т.п. вроде как лучше делать второе всегда , где то читал, уже не помню почему.

 5) Ну если не оперативный то получаем остатки именно на тот момент, а если оперативный то на данный момент.

 Я вот сам только не могу понять Условие в параметрах виртуальной таблицы Остатки номенклатуры

 Номенклатура В
    (ВЫБРАТЬ
       Список.Номенклатура
    ИЗ
       Список КАК Список
    ГДЕ
       НЕ Список.ЭтоУслуга)

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

Добавлено (04.05.2012, 13:11)
---------------------------------------------
Подскажите , а помимо решения задачи какие еще "флажки" нужно ставить в самой конфигурации ? Меняем режим управления блокировкой данный с автоматического на управляемый , вроде бы? Всегда во всех задачах? Зачем это делается?

Название: Задача 1.01
Отправлено: ZolteR от Май 04, 2012, 07:08:23 pm
Quote (Pavlyk)
Я вот сам только не могу понять Условие в параметрах виртуальной таблицы Остатки номенклатуры

 Номенклатура В
 (ВЫБРАТЬ
 Список.Номенклатура
 ИЗ
 Список КАК Список
 ГДЕ
 НЕ Список.ЭтоУслуга)


 Это нужно для того чтобы сначала получать остатки только по номенклатуре в ТЧ, а только потом соединять с ТЧ.
 P.S. Процесс получения всех остатков гораздо медлительнее

Добавлено (04.05.2012, 19:08)
---------------------------------------------

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


 Про учетную политику имелось ввиду не проверка на "задана" или "не задана", а "задана на текущий год", т.е. мало того проверить есть она или нет, но еще и узнать соответствует год значения метода году документа или нет
Название: Задача 1.01
Отправлено: Gyd от Май 04, 2012, 08:34:24 pm
Немного добавлю к тому что сказал Pavlyk:
 
Quote (ZolteR)
СрезПоследних, но некоторые пишут что надо получать значение регистра ч/з ПолучитьПоследнее.

 Без разницы.
 
Quote (ZolteR)
Цитата из условия задачи: "Еще раз подчеркивается - учетная политика действует год."

 Это значит что периодичность у регистра - год.
 
Quote (ZolteR)
Нужно ли проверять на заполнение табличные части документов?

 На экзамене это не требуется.
 
Quote (ZolteR)
Так и неразобрался в чем разница м/у "Сообщить()" и "Новый СообщениеПользователю".

 "Сообщить()", насколько я помню, не работает на тонком и веб клиентах.
Название: Задача 1.01
Отправлено: Sangre от Май 07, 2012, 12:53:24 pm
Quote (Gyd)
СрезПоследних, но некоторые пишут что надо получать значение регистра ч/з ПолучитьПоследнее.

 Правильнее ПолучитьПоследнее() - он возвращает одну запись
 
 
Quote (Gyd)
"Сообщить()", насколько я помню, не работает на тонком и веб клиентах.


 Все работает, из справки:
 Сообщение = Новый СообщениеПользователю();
 Текст = "ru = ""В строке 11 табличной части ""Номенклатура"" не хватает ";"
 + " en = ""In line 11 of tabular section ""Nomenclature"" is missing ";
 Сообщение.Текст = НСтр(Текст)+НедостающееКоличество+" "+ЕдиницаИзмеренияНоменклатуры;
 Сообщение.Поле = "Номенклатура[10].Количество";
 Сообщение.УстановитьДанные(ОбъектДанных);
 Сообщение.Сообщить();

 Так как экзамен сдается на Упр. приложениях, то желательнее использовать СообщениеПользователю()
Название: Задача 1.01
Отправлено: Gyd от Май 07, 2012, 03:20:50 pm
Quote (Sangre)
Все работает, из справки:

 Вы правы. Извиняюсь за неточность.
 
Quote (Sangre)
желательнее использовать СообщениеПользователю()

 Да, так есть возможность привязать сообщение к элементам формы.
Название: Задача 1.01
Отправлено: ZolteR от Май 10, 2012, 09:11:47 pm
так

 
Quote (Sangre)
Правильнее ПолучитьПоследнее() - он возвращает одну запись


 нет возможности проверить из какого периода значение
Название: Задача 1.01
Отправлено: LEOON от Май 10, 2012, 10:23:13 pm
Quote (ZolteR)
так
 Quote (Sangre)
 Правильнее ПолучитьПоследнее() - он возвращает одну запись
 нет возможности проверить из какого периода значение

 Получать запросом? biggrin
Название: Задача 1.01
Отправлено: Pavlyk от Май 14, 2012, 12:16:26 pm
Подскажите, я что-то окончательно запутался когда мы делаем запись движений у нас ,в принципе всегда будут две строчки
    Движения.ОстаткиНоменклатуры.Записать();
    Движения.ОстаткиНоменклатуры.Записывать = Истина;

 Или не всегда? Почитал синтаксис помощник но так и не понял до конца , какое действие делает каждая эта строчка, если можно поподробней.
 Заранее спасибо
Название: Задача 1.01
Отправлено: LEOON от Май 14, 2012, 01:08:45 pm
Pavlyk,
 Движения.ОстаткиНоменклатуры.Записать(); - безусловно записывает набор движений, если этот код в начале обработки проведения(когда движения не считаны/не сформированы) движения документа очистятся.
 Движения.ОстаткиНоменклатуры.Записывать = Истина; - устанавливает соответствующее свойство набора записей документа, все движения документа(по данному регистру) при окончании транзакции запишутся в базу автоматически.

Добавлено (14.05.2012, 13:08)
---------------------------------------------
Если движения текущего документа сформированные ранее(к примеру при проведении) не могут повлиять на результаты проведения(например по регистру продажи) первая строчка не обязательна. Если нам нужны остатки, тогда мы эту строку используем, что бы получить остатки без учета движений текущего документа.

Название: Задача 1.01
Отправлено: Pavlyk от Май 14, 2012, 01:21:50 pm
Ну я это как бы понимаю, только не пойму в каких случаях применяют одно,второе , а когда оба? То есть Движения.ОстаткиНоменклатуры.Записывать = Истина; мы в принципе пишем всегда когда делаем какие либо движения вобще ? А Движения.ОстаткиНоменклатуры.Записать(); когда нам нужно еще заранее очистить движения? то есть при перепроведении например и т.п.?
Название: Задача 1.01
Отправлено: LEOON от Май 14, 2012, 01:55:13 pm
Quote (Pavlyk)
Ну я это как бы понимаю, только не пойму в каких случаях применяют одно,второе , а когда оба? То есть Движения.ОстаткиНоменклатуры.Записывать = Истина; мы в принципе пишем всегда когда делаем какие либо движения вобще ? А Движения.ОстаткиНоменклатуры.Записать(); когда нам нужно еще заранее очистить движения? то есть при перепроведении например и т.п.?

 Вобщем да, Движения.ОстаткиНоменклатуры.Записать() в начале обработки проведения такая конструкция имеет смысл только при перепроведении. Но ее так же можно/нужно использовать для промежуточной записи в обработке проведения. Как пример новая методика проведения:
 1)формируем движения
 2)Движения.ОстаткиНоменклатуры.Записать()-записываем их
 3)контролируем остатки
 При новой методике записывать/очищать движения в начале не имеет смысла т.к. все равно мы их заместим.
 ---
 Флаг Движения.ОстаткиНоменклатуры.Записывать = Истина; можно устанавливать когда угодно. Хоть в конце обработки к примеру так:
 
Code
   ...
     Если Не Отказ Тогда
        Движения.ОстаткиНоменклатуры.Записывать = Истина;
     КонецЕсли
 КонецПроцедуры

 По сути флаг вообще можно не выставлять, а записывать движения вручную с помощью скажем:
 Если Не Отказ Тогда
        Движения.ОстаткиНоменклатуры.Записать(); или Движения.Записать();//второй вариант сбрасывает флаг Записывать = Истина по всем регистрам в Ложь, но движения все равно запишутся, просто в середине обработки проведения это стоит учитывать;
 КонецЕсли
Название: Задача 1.01
Отправлено: Pavlyk от Май 14, 2012, 03:23:17 pm
LEOON Спасибо.
Название: Задача 1.01
Отправлено: НачинающийВ1С от Май 19, 2012, 09:37:27 am
Ребят подскажите, надо ли в этой задаче включать в себестоимость транспортные и прочие услуги сопутсвующие продаже товара и как их распределять?
 и что делать если Доставка и прочие услуги вылазят в отчеты?
Название: Задача 1.01
Отправлено: sv_mikh от Май 19, 2012, 01:27:40 pm
Quote (НачинающийВ1С)
Ребят подскажите, надо ли в этой задаче включать в себестоимость транспортные и прочие услуги сопутсвующие продаже товара и как их распределять?
 и что делать если Доставка и прочие услуги вылазят в отчеты?

 Не надо.
Название: Задача 1.01
Отправлено: genayo от Май 21, 2012, 11:00:04 am
Здравствуйте!
 Хотелось бы прояснить вопрос - будет ли ошибкой не использовать разделение итогов ни для каких регистров?
Название: Задача 1.01
Отправлено: RoMeL от Июль 31, 2012, 12:24:24 am
Всем привет. Начинаю подготовку к екзамену. Первая задача. tongue
Вложения:
RoMeL_1.1.dt
Название: Задача 1.01
Отправлено: Hawk от Август 06, 2012, 02:19:29 pm
RoMeL, все чисто особо придраться не к чему
Название: Задача 1.01
Отправлено: RoMeL от Август 06, 2012, 02:24:38 pm
Hawk, спасибо ! smile
Название: Задача 1.01
Отправлено: XilDen от Август 20, 2012, 10:28:27 pm
Если не сложно прокомментируете
Вложения:
1-1_XilDen.dt
Название: Задача 1.01
Отправлено: RoMeL от Август 21, 2012, 12:31:11 am
XilDen
 Сам учусь, но прокомментирую wink

 1. Не установлен режим упр. блок.
 2. Можно оприход. услуги в ПН, регистр в ноль не выведется
 3. Нет подсистем
 4. Выгрузка результата запроса в ТЧ , кажется это ошибка

 Если Не Отказ Тогда

 Движения.Продажи.Загрузить(РезультатТЧ.Выгрузить());
 Движения.ОстаткиНоменклатуры.Записать();

 КонецЕсли;

 5. Это лишнее

 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записать();

 6. В параметрах ВТ остатки Номенклатуры нет условия на услуги

 ВЫБРАТЬ
 Товары.Номенклатура
 ИЗ
 Товары КАК Товары
 ГДЕ НЕ Товары.Услуга

 7. В запросе нет проверки на NULL
 8. В отчете "Остатки" параметр "Период" не приведен к концу дня

 ДобавитьКДате(КонецПериода(&Период,"День"),"Секунда",1)

 smile
Название: Задача 1.01
Отправлено: ivanzavr от Август 21, 2012, 08:25:02 am
Quote (RoMeL)
4. Выгрузка результата запроса в ТЧ , кажется это ошибка


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

 
Quote (RoMeL)
6. В параметрах ВТ остатки Номенклатуры нет условия на услуги

 ВЫБРАТЬ
 Товары.Номенклатура
 ИЗ
 Товары КАК Товары
 ГДЕ НЕ Товары.Услуга


 с таким условием запрос не выдаст услуги и они не попадут в "продажи"

 услуги проверяются тут:

 Пока ВыборкаПоНоменклатуре.Следующий() Цикл
 Если не ВыборкаПоНоменклатуре.номенклатура.услуга тогда
 Если ВыборкаПоНоменклатуре.Количество > ВыборкаПоНоменклатуре.КолОст и ВыборкаПоНоменклатуре.КоличествоТогда

 
Quote (RoMeL)
8. В отчете "Остатки" параметр "Период" не приведен к концу дня

 ДобавитьКДате(КонецПериода(&Период,"День"),"Секунда",1)


 вот этого КонецПериода(&Период,"День"), по-моему вполне достаточно
Название: Задача 1.01
Отправлено: RoMeL от Август 21, 2012, 09:45:01 am
ivanzavr,

 1. "Выгрузка результата запроса в промежуточную таблицу (например, в таблицу значений) без необходимости" - 1 бал
 2. В данном решении XilDen попадут...

 Если не ВыборкаПоНоменклатуре.номенклатура.услуга тогда

 А вот это "вредная" конструкция - (меня уже переубедили здесь http://forum.chistov.pro/index.php?topic=2133.msg24206#msg24206 и здесь http://forum.chistov.pro/index.php?topic=983.msg24197#msg24197)

 + Радченко - "практическое пособие разработчика" стр 391 - 396 прямо об этом говорится...

 3. наверное нужно протестировать

 smile
Название: Задача 1.01
Отправлено: Gyd от Август 21, 2012, 10:06:08 am
Quote (RoMeL)
А вот это "вредная" конструкция

 Соглашусь с RoMeL, обращение через точку - это мини-запрос в цикле, желательно всё нужное отбирать в запросе.
Название: Задача 1.01
Отправлено: RoMeL от Август 21, 2012, 10:54:22 am
ivanzavr,
 Протестировал... smile
 Нужно использовать :

 ДобавитьКДате(КонецПериода(&Период,"День"),"Секунда",1)

 тогда "последняя" секунда попадет в отчет... Посмотрите мою тестовую базу...
 "Остатки235959" используют Вашу конструкцию - КонецПериода(&Период,"День")

 а "Остатки" конструкцию - ДобавитьКДате(КонецПериода(&Период,"День"),"Секунда",1)

 Отчеты показывают разные данные... smile
Вложения:
s5533331.png
RoMeL_1.1_2.dt
Название: Задача 1.01
Отправлено: ivanzavr от Август 21, 2012, 11:43:36 am
RoMeL, посмотрел
 и правда разные)
 учту, если принципиально надо будет добавить последнюю секунду)
Название: Задача 1.01
Отправлено: RoMeL от Август 21, 2012, 02:40:11 pm
"Подправил" свое решение...

 1. Запрос в ПН для отсечения услуг, группировки дублей строк;
 2. Запрос с использованием Менеджера временных таблиц в РН для источника даных для управляемых блокировок;

 Найдите ошибки smile
Вложения:
RoMeL_1.1_3.dt
Название: Задача 1.01
Отправлено: XilDen от Август 21, 2012, 05:38:09 pm
RoMeL, Учту все недочеты, только не понял что значит "регистр в ноль не выведется"
Название: Задача 1.01
Отправлено: RoMeL от Август 21, 2012, 05:53:22 pm
XilDen, в приходе нет проверки на запись услуг в регистр остатков, т.е. теоретически можно оприходовать услугу...
 РН не делает расход услуг, таким образом услуги начнут копиться в итоговой таблице регистра остатков и списать их никак не выйдет. Это не выведение регистра в ноль.
Название: Задача 1.01
Отправлено: XilDen от Август 21, 2012, 05:56:23 pm
RoMeL, Все понял. Ты давно к экзамену готовишься?
Название: Задача 1.01
Отправлено: XilDen от Август 21, 2012, 05:58:39 pm
Все поправил
Вложения:
0866607.dt
Название: Задача 1.01
Отправлено: RoMeL от Август 21, 2012, 05:59:14 pm
XilDen, с начала августа, пока только по разделу ОУ
Название: Задача 1.01
Отправлено: XilDen от Август 21, 2012, 06:00:30 pm
RoMeL, Сколько задач решил?
Название: Задача 1.01
Отправлено: RoMeL от Август 21, 2012, 08:36:38 pm
XilDen, "прошол" ± 20, но не все решил до конца пока...

 Может кому пригодится...

 Как быстро набрать текст управляемой блокировки:

 1. Вводим в модуле текст "БлокировкаДанных"
 2. Выделяем, Ctrl+F1, открывается синтаксис-помочник
 3. Выделяем пример , мышкой перемещаем текст в модуль ( Drag&Drop)
 4. Переименовуем регистр, удаляем лишние строки и т.д.
 5. PROFIT tongue

 Все делается за 30 сек.

 Как быстро создать подсистемы:

 1. Выделяем "Общие картинки" ( корень )
 2. Drag&Drop мышкой на подсистемы
 3. PROFIT tongue

 Делается за 5 сек.
Название: Задача 1.01
Отправлено: Alexis от Сентябрь 09, 2012, 07:33:22 pm
Здравствуйте. Прошу покритиковать мое решение задачи 1.1

 Я пока не смотрел чужие решения, хочется знать, насколько я далек или близок к правильному варианту.

 Вдогонку сразу вопрос - при списании товара, если я буду не записывать в регистр движения, а потом контролировать отрицательные остатки (как это советует радченко и 1с), а сделаю так, как сделал я (записываю пустой набор, делаю запрос на необходимое количество, а потом, если все в порядке - движения ) - это примут на экзамене?.

 Темы, которые наверняка (по моим догадкам) хромают в моем решении:

 -наверное надо создавать подсистемы, интерфейс (пока не заморачивался)
 -блокировки - все ли решается одной строкой перед выполнением запроса (Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;) или надо по-другому
Вложения:
_1_1.dt
Название: Задача 1.01
Отправлено: Pavlyk от Сентябрь 09, 2012, 08:18:22 pm
Alexis , добро пожаловать на форум =) Знаешь я сам не так давно готовлюсь, и могу тебе дать совет, смотреть чужие решения и разбираться что и зачем там сделано. Очень советую тебе товарища sv_mikh его решения есть почти по каждой задаче! Можно конечно тебе написать что у тебя не правильно и т.п. но лучше разберись сам , поверь пользы будет больше.
 То как вы делаете это старая методика, есть еще новая, но не во всех задачах она применима, в тех в которых она применима нужно делать обязательно по ней иначе засчитают ошибкой.
 По поводу блокировок, конечно нужно по другому, то как вы написали применимо только к новой методике, а в старой по другому. Поэтому скачайте себе чье нибудь решение и постарайтесь там во всем разобраться. Ссылка на статью по новой методике http://chistov.spb.ru/publ....-1-0-29
Название: Задача 1.01
Отправлено: tenikov от Сентябрь 10, 2012, 04:37:32 pm
Мой вариант.
Вложения:
tenikov_1.01.dt
Название: Задача 1.01
Отправлено: Lazio от Сентябрь 10, 2012, 05:52:34 pm
Quote (tenikov)
Мой вариант.

 Регистр Партии номенклатуры абсолютно лишний. Задача решается на двух регистрах: остатки: Номенклатура Партия Количество Стоимость и обороты: Номенклатура Количество Сумма.
 Проведение РН думаю лучше сделать одним запросом с Итогами и вставить туда направление сортировки в зависимости от учетной политики.
 Проблема копеек насколько вижу не решена
 Очень много кода и запросов. Думаю РН надо переделать.
 Не совсем понимаю зачем получать список номенклатуры в Товары и потом ставить в блокировку если можно табл. часть указать как источник данных.
Название: Задача 1.01
Отправлено: tenikov от Сентябрь 10, 2012, 07:13:52 pm
Quote (Lazio)
Регистр Партии номенклатуры абсолютно лишний. Задача решается на двух регистрах: остатки: Номенклатура Партия Количество Стоимость и обороты: Номенклатура Количество Сумма.


 Хотелось сделать контроль остатков "по новому", а так - да, разумеется, можно на 2х регистрах.

 
Quote (Lazio)
Проведение РН думаю лучше сделать одним запросом с Итогами и вставить туда направление сортировки в зависимости от учетной политики.


 Так и есть.

 
Quote (Lazio)
Проблема копеек насколько вижу не решена


 Не понял. Какая проблема?

 
Quote (Lazio)
Не совсем понимаю зачем получать список номенклатуры в Товары и потом ставить в блокировку если можно табл. часть указать как источник данных.


 В табличной части могут быть услуги.
Название: Задача 1.01
Отправлено: Lazio от Сентябрь 11, 2012, 02:58:58 pm
Quote (tenikov)
Не понял. Какая проблема?

 Стоимость снимается у тебя как СтоимостьОстаток на КоличествоОстаток * Количество, это не до конца правильно.

Добавлено (11.09.2012, 14:58)
---------------------------------------------
мэй би в блокировке прокатит тогда так
 ЭлементБлокировки.УстановитьЗначение("Номенклатура.ВидНоменклатуры", Перечисления.ВидыНоменклатуры.Товар);
 эти заблокируем все товары в регистре. Затем из источника данных СписокНоменклатуры выберем Номенклатуру

Название: Задача 1.01
Отправлено: tenikov от Сентябрь 11, 2012, 03:47:47 pm
Quote (Lazio)
Стоимость снимается у тебя как СтоимостьОстаток на КоличествоОстаток * Количество


 Стоимость у меня снимается как
 
Code

 СписатьПоПартии = Мин(НужноСписать, ВыборкаПоПартиям.КоличествоОстатокПоПартии);

 Если СписатьПоПартии = ВыборкаПоПартиям.КоличествоОстатокПоПартии Тогда
  СуммаПоПартии = ВыборкаПоПартиям.СуммаОстатокПоПартии;
 Иначе
  СуммаПоПартии = СписатьПоПартии * ВыборкаПоПартиям.СуммаОстатокПоПартии / ВыборкаПоПартиям.КоличествоОстатокПоПартии;
 КонецЕсли;
 


 Остатка по копейкам при нулевом количестве по регистру с таким способом списания не возникнет.

 
Quote (Lazio)
мэй би в блокировке прокатит тогда так


 А если не заполнен значение "ВидНоменклатуры" в элементе справочника?
Название: Задача 1.01
Отправлено: Lazio от Сентябрь 11, 2012, 04:32:24 pm
Тогда ничего не заблокирует. Также как и запрос в не вернет результата.
Название: Задача 1.01
Отправлено: tenikov от Сентябрь 11, 2012, 05:21:07 pm
Quote (Lazio)
Также как и запрос в не вернет результата.


 В запросе: РасходнаяНакладная.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
Название: Задача 1.01
Отправлено: Pavlyk от Сентябрь 11, 2012, 05:37:29 pm
На остатках же услуг нет, так что думаю не стоит париться по этому вопросу
Название: Задача 1.01
Отправлено: crabzzy от Сентябрь 12, 2012, 12:06:40 pm
удалено
Название: Задача 1.01
Отправлено: frd от Октябрь 05, 2012, 09:37:11 am
Правильно ли я построил проведение Приходной Накладной? Просьба к тем, кто сдал - подсказать какое решение оптимальное с точки зрения экзаменаторов.

 Процедура ОбработкаПроведения(Отказ, Режим)
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
     |   Прих.Номенклатура,
     |   СУММА(Прих.Количество) КАК Количество,
     |   СУММА(Прих.Сумма) КАК Сумма
     |ИЗ
     |   Документ.ПриходнаяНакладная.СписокНоменклатуры КАК Прих
     |ГДЕ
     |   Прих.Ссылка = &Ссылка
     |   И Прих.Номенклатура.ВидНоменклатуры <> ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
     |
     |СГРУППИРОВАТЬ ПО
     |   Прих.Номенклатура";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    
    Результат = Запрос.Выполнить();
    
    Если НЕ Результат.Пустой() Тогда
       
       Выборка = Результат.Выбрать();
       
       // регистр ОстаткиНоменклатуры Приход
    Движения.ОстаткиНоменклатуры.Записывать = Истина;
    
    Пока Выборка.Следующий() Цикл
       
       Движение = Движения.ОстаткиНоменклатуры.Добавить();
       Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
       Движение.Период = Дата;
       Движение.Номенклатура = Выборка.Номенклатура;
       Движение.Партия = Ссылка;
       Движение.Количество = Выборка.Количество;
       Движение.Сумма = Выборка.Сумма;
    КонецЦикла;
    
    КонецЕсли;

 КонецПроцедуры
Название: Задача 1.01
Отправлено: Pavlyk от Октябрь 05, 2012, 11:41:10 am
Правильно, но приходную можно делать конструктором тут.
Название: Задача 1.01
Отправлено: Tsar от Октябрь 10, 2012, 07:23:09 pm
Доброго времени суток.

 Кому не сложно, посмотрите мой вариант.
Вложения:
2693445.dt
Название: Задача 1.01
Отправлено: Hany от Ноябрь 08, 2012, 01:13:33 pm
Пару вопросов, если можно, сдавшим экзамен.
 На экзамене тестируется задача только в управляемом приложении или же и в обычном все должно работать?

 Вопрос возник в связи со следующим:

 Дано: В документа "Расходная" удалять движения выставлено "Удалять автоматически при отмене проведения".

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

 Чтобы избежать такого поведения в обычном приложении нужно сделать одно из двух:
 1) либо выставить у расходной "удалять движения" = "удалять автоматически"
 2) либо в модуле проведения добавить строки
 Движения.ОстаткиНоменклатуры.Очистить();
    Движения.Продажи.Очистить();

 оба варианта, как я поняла, неприемлимы при решении экзаменационного билета.

 Что посоветуете?
 Спасибо!

 P.S. Забыла упомянуть, что такую ситуацию заметила на примере решенной задачи из сборника задач по экзамену.
 Желающим проверить можно установить режим запуска примера в обычное приложение и проверить проведение расходной.
Название: Задача 1.01
Отправлено: Istari от Ноябрь 16, 2012, 01:09:55 am
Hany, насколько мне известно на экзамене проверяется работа решения только в управляемом приложении. поэтому не стоит усложнять и додумывать задачи для себя, за усложнение как известно тоже снимает балы
Название: Задача 1.01
Отправлено: Oliver от Ноябрь 16, 2012, 08:28:36 am
Hany,
 
Code

 2) либо в модуле проведения добавить строки  
  Движения.ОстаткиНоменклатуры.Очистить();  
  Движения.Продажи.Очистить();


 Вот это очень даже приемлемо, Павел Чистов при решении билтов всегда так делает - тем самым обеспечивает работу и в обычном приложении. Только данное работа излишнаяя, согласно требованиям экзамена.

 P.S. что всё работало в обычном приложении ещё потребуется форму рисовать...
Название: Задача 1.01
Отправлено: Istari от Ноябрь 27, 2012, 08:35:59 pm
Здравствуйте! Вот начал подготовку к спецу! если не тяжело проверьте решение)
Вложения:
Istari_1.1.dt
Название: Задача 1.01
Отправлено: Ted от Ноябрь 28, 2012, 01:00:28 am
Istari,
 У меня вопрос: зачем Вы создали формы для документов, если в них не делаете расчет Суммы строки таб части на основании количества и цены...ну и вообще ничего не делаете на форме, система же их сама сформирует автоматом?
 • В модуле проведения документа РасходнаяНакладная вы указали:
    Движения.ОстаткиНоменклатуры.Очистить();
    Движения.ОстаткиНоменклатуры.Записать();
 На сколько я понял (сейчас сам готовлюсь к этому же спецу) вот это: Движения.ОстаткиНоменклатуры.Очистить(); лишнее действие.
 Движения.ОстаткиНоменклатуры.Записать(); будет вполне достаточно для удаления старых движений.
 • Там же (в модуле проведения РН) в строке № 80 Вы написали следующее: ТЗ = Результат.Выгрузить();
 Судя по тому, что далее эту ТЗ вы нигде не используете, предполагаю, что использовали её для проверки того, что выдаёт запрос в отладчике. Короче забыли удалить.
 Вроде, что смог наковырять.

Добавлено (28.11.2012, 01:00)
---------------------------------------------
Уважаемые. Не могли бы Вы уточнить мне некоторые моменты по данной задаче:
 1) У документов не заполнено СуммаПоДокументу, а так же в форме документа расчет суммы на при изменении количества и цены. Обязательно ли их заполнять, или же это "бантики"
 которые можно доделать, если хватит времени. Или же этого вообще лучше не делать, что бы от проверяющего не услышать "Этого небыло в задании, так что штраф".
 2) У меня перед глазами два примера решения данной задачи (автор одного из них sv_mikh, за что ему огромнейшее спасибо!). В обоих примерах при проведении документа "Расходная накладная" нет проверки на то, заполнил ли пользователь учетную политику (метод списания), или нет. В общем то в явном виде в задании не указано, что надо запрещать проводить документ, если он не указана, но... как-то это немного не корректно, по моему мнению. В связи с этим вопрос: надо ли это делать, или так же, как в пункте 1. Сюда же вопрос (извините за него, если что): когда я делую подобного рода проверку, и выясняется, что пользователь метод списания не заполнил, можно ли в обработке проведения сделать следующее (или же это не грамотно\не правильно\не корректно):
 // Выполняется код, возникающий, когда не заполнен метод списания
 Отказ = Истина;
 Возврат;
 3) В примере от sv_mikh в обработке проведения расходной накладной код:
             Пока ВыборкаДет.Следующий() И НужноСписатьКол > 0 Цикл
                
                СпишемКол = Мин(НужноСписатьКол, ВыборкаДет.КоличествоРег);
                Если СпишемКол = ВыборкаДет.КоличествоРег Тогда
                   СпишемСум = ВыборкаДет.СуммаРег;
                Иначе
                   СпишемСум = ?(ВыборкаДет.КоличествоРег=0,0,СпишемКол * ВыборкаДет.СуммаРег / ВыборкаДет.КоличествоРег);
                КонецЕсли;
                
                // Далее делаем движения
                
             КонецЦикла;
             
    Получается, если у нас по каким-то причинам (а причина тут может быть только одна когда ВыборкаДет.КоличествоРег = 0), когда СпишемКол=0 тогда мы делаем запись в регистре остатков, с нулями в количестве и сумме. Правильно ли это? И можно ли написать после так:
    СпишемКол = Мин(НужноСписатьКол, ВыборкаДет.КоличествоРег);
    Если СписываемКоличество = 0 Тогда
       Продолжить;
    КонецЕсли;
 4) И последний вопрос по этой задаче. По заданию необходимо строить отчет "Продажи" в котором мы указываем себестоимость. Во всех вариантах, что я видел, в регистр накопления "Продажи" добавлено поле "Себестоимость", которое, фактически, дублирует это же поле в регистре остатков, и которое потом выводится в отчете.
 Вопросов нет, так на самом деле проще: ничего не надо связывать, просто бери регистр за период и показывай пользователям, но... все же хотелось уточнить, почему не используется связка регистра Продажи и Остатки по регистратору и номенклатуре, и доставать себестоимость из рег.Остатков, а не дублировать его в рег.Продажах.
 Извините за дотошность, просто очень хочется сдать экзамен с первого раза, и, соответственно, подготовиться по максимуму.

Название: Задача 1.01
Отправлено: Oliver от Ноябрь 28, 2012, 06:39:17 am
Ted,
 
Quote
Вопросов нет, так на самом деле проще: ничего не надо связывать, просто бери регистр за период и показывай пользователям, но... все же хотелось уточнить, почему не используется связка регистра Продажи и Остатки по регистратору и номенклатуре, и доставать себестоимость из рег.Остатков, а не дублировать его в рег.Продажах.

 ...у меня по данному вопросу сложилось своё, особое мнение...
 ...Я считаю что использовать связку регистров Продажи и Остатки - нельзя! Аргументы: связь по регистратору это не есть гуд, по регистратору итоги не хранятся идёт обращение к релальным данным. Да и вобще в любом РН вида ОСТАТКИ таблица итогов хранит только остатки, по этому когда мы берё продажи за период - обращение идёт к реальным таблицам, в отличие от РН вида ИТОГИ таблица итогов которых хранит данные ИТОГОВ по месяцам, и при получении данных за период (с периодом более месяца) обращаться будем уже к ним + досчитсвать те дни которые не попадают на границу итогов.
 ...В целом требование к экзамену - разработать конфигурацию "с большим количеством пользователей", т.е. если Регистр продажи заполнен значительно а период продаж возмём несколько лет... разница должна почувствоваться...
 ...а П.Белоусов говорит можно так и так - но вы должны обосновать выбор той или иной модели...
 ...аргуметов для обоснования модели остатков у меня мало (ну дублирование информации), а с оборотами проще - коли спросят меня на экзамене а почему такая модель...
Название: Задача 1.01
Отправлено: Ted от Ноябрь 28, 2012, 10:04:20 am
Oliver, с этим понял. Спасибо!
Название: Задача 1.01
Отправлено: Istari от Ноябрь 28, 2012, 05:26:33 pm
Quote (Ted)
Istari,
 У меня вопрос: зачем Вы создали формы для документов, если в них не делаете расчет Суммы строки таб части на основании количества и цены...ну и вообще ничего не делаете на форме, система же их сама сформирует автоматом?
 • В модуле проведения документа РасходнаяНакладная вы указали:
 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записать();
 На сколько я понял (сейчас сам готовлюсь к этому же спецу) вот это: Движения.ОстаткиНоменклатуры.Очистить(); лишнее действие.
 Движения.ОстаткиНоменклатуры.Записать(); будет вполне достаточно для удаления старых движений.
 • Там же (в модуле проведения РН) в строке № 80 Вы написали следующее: ТЗ = Результат.Выгрузить();
 Судя по тому, что далее эту ТЗ вы нигде не используете, предполагаю, что использовали её для проверки того, что выдаёт запрос в отладчике. Короче забыли удалить.
 Вроде, что смог наковырять.


 спасибо что посмотрели

 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записать();

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

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

 и да, ТЗ = Результат.Выгрузить() просто для проверки) забыл удалить)
Название: Задача 1.01
Отправлено: Ted от Ноябрь 28, 2012, 08:17:52 pm
Quote (Istari)
формы создавал чтобы включить в них просмотр движений по регистрам не выходя из документа. расчет суммы документа насколько я понимаю не есть обязательным...и попросту является бантиком, если ошибаюсь поправьте, на экзамене это будет ошибкой? (логическое мышление говорит что это надо бы сделать, т.к. решение не красиво выглядит. но если времени не будет хватать получится выкрутиться?)

 Совершенно согласен!
Название: Задача 1.01
Отправлено: malaxit от Ноябрь 30, 2012, 12:32:22 pm
Добрый день. Подскажите пожалуйста где можно найти электронный вариант актуальных текстов заданий сборника. Заранее спасибо. Мой ящик amalaxit      ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!!     mail.ru
Название: Задача 1.01
Отправлено: ирко от Декабрь 03, 2012, 02:44:04 pm
Вопрос такой, если в документе "приходная накладная" в ТЧ, мы в двух строчках указываем один и тот же товар но с разной стоимостью, какая будет себестоимость этого товара в этой партии?? Писать в регистр среднюю себестоимость по этому документу? Или выводить пользователю сообщение об ошибке, что не может быть в одной партии двух одинаковых товаров с разной стоимостью?
Название: Задача 1.01
Отправлено: Кенгуру от Декабрь 03, 2012, 06:45:27 pm
Quote (ирко)
Вопрос такой, если в документе "приходная накладная" в ТЧ, мы в двух строчках указываем один и тот же товар но с разной стоимостью, какая будет себестоимость этого товара в этой партии?? Писать в регистр среднюю себестоимость по этому документу? Или выводить пользователю сообщение об ошибке, что не может быть в одной партии двух одинаковых товаров с разной стоимостью?


 Сгруппируем по номенклатуре и запишем в одну партию по средней стоимости, это норм. Сообщение об ошибке не нужно.
Название: Задача 1.01
Отправлено: ирко от Декабрь 04, 2012, 02:48:35 pm
Quote
Вопрос такой, если в документе "приходная накладная" в ТЧ, мы в двух строчках указываем один и тот же товар но с разной стоимостью, какая будет себестоимость этого товара в этой партии?? Писать в регистр среднюю себестоимость по этому документу? Или выводить пользователю сообщение об ошибке, что не может быть в одной партии двух одинаковых товаров с разной стоимостью?


 А себестоимость в данном случае измерение или ресурс регистра "ОстаткиТоваров"??
Название: Задача 1.01
Отправлено: Кенгуру от Декабрь 04, 2012, 04:45:47 pm
Quote (ирко)
А себестоимость в данном случае измерение или ресурс регистра "ОстаткиТоваров"??

 Ресурс. Т.к. по логике задачи себестоимость можно брать в разрезе товаров, партий.
Название: Задача 1.01
Отправлено: ирко от Декабрь 06, 2012, 04:38:37 pm
Ещё вопрос, в билете, как я понимаю, 3-4 задания по разным механизмам учета, эти задания связаны между собой или нет? как их оформлять каждое в отдельной конфе, или всё вместе внутри одной?
Название: Задача 1.01
Отправлено: Lazy от Декабрь 06, 2012, 04:43:53 pm
Все вместе в одной
Название: Задача 1.01
Отправлено: sima от Декабрь 15, 2012, 08:13:08 pm
Возник интересный момент. Я сомневаюсь в необходимости второго регистра.
 Как вы считаете, если я в регистр "ОстаткиНоменклатуры" добавлю реквизит "СуммаПродажи" и при построения отчета из виртуальной таблички обращусь к реальной за этой цифрой, я сильно проиграю?

 Моё решение на одном регистре. Это совсем просто biggrin
Вложения:
sima_1_1.dt
Название: Задача 1.01
Отправлено: Кенгуру от Декабрь 15, 2012, 09:13:01 pm
Как доберусь до компа с одинэсиной, постараюсь посмотреть дт-шник.

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

 Ресурс - не вижу смысла хранить количество-себестоимость, выручку в одном регистре, нагляднее в двух. Для программы по производительности, что два ресурса, что два регистра по одному ресурсу вроде. Да и обращаться к данным проще по их необходимости к разным регистрам. Помню, пытался решить задачу 1.6 в один регистр и убедился, что в два гораздо проще.

 Если работает исправно и нет обращения к реальным таблицам регистра накопления, то гуд, дело вкуса. Кстати, где ты будешь тогда хранить количество продажи?

 Номенклатура-Партия-КоличествоНаСкладе-Себестоимость
 Номенклатура-КоличествоПродажи-СуммаСписанойСебестоимости-СуммаПродажи

 Регистры удобно делать глядя на отчеты.
Название: Задача 1.01
Отправлено: sima от Декабрь 16, 2012, 12:55:15 pm
Quote (Кенгуру)
нет обращения к реальным таблицам регистра накопления

 Есть конечно(иначе реквизит не достать), но строго через виртуальную с оборотами.

 
Quote (Кенгуру)
где ты будешь тогда хранить количество продажи?

 Там же где и все остальное для отчета продаж - расход по "ОстаткиНоменклатуры".

 Я понимаю, что такое решение оказалось совсем узкоспециализированным, но тем не менее, работает, и программируется проще.

 Добавлено (16.12.2012, 12:55)
 ---------------------------------------------
 Понял, где в такой схеме недочет - не посчитать по чем и сколько было продано услуг.

 Добавлено (16.12.2012, 14:56)
 ---------------------------------------------
 Добавил решение на двух регистрах.
Вложения:
sima_1_1_2.dt
Название: Задача 1.01
Отправлено: Alexey_A от Январь 03, 2013, 12:53:58 pm
господа! всех приветствую!
 начал подготовку, и возник вопрос. почему везде, во всех решениях по расходной накладной, опираются на решение с двойным запросом, почему вот такой метод неприемлем?

 ВЫБРАТЬ
    ОстаткиНоменклатурыОстатки.Номенклатура КАК Номенклатура,
    ОстаткиНоменклатурыОстатки.Партия,
    ОстаткиНоменклатурыОстатки.КоличествоОстаток КАК КоличествоОстаток,
    ОстаткиНоменклатурыОстатки.СуммаОстаток КАК СуммаОстаток
 ИЗ
    Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки КАК ОстаткиНоменклатурыОстатки
       ПО РасходнаяНакладнаяСписокНоменклатуры.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
 ГДЕ
    РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
 ИТОГИ
    СУММА(КоличествоОстаток),
    СУММА(СуммаОстаток)
 ПО
    Номенклатура
Название: Задача 1.01
Отправлено: RoMeL от Январь 03, 2013, 01:06:13 pm
Alexey_A,
 он неефективен, вибираются сначала все остатки а потом делается соединение по условии... а если остатки милионы записей?
 поетому сналача отбираетса номенклатура из табличной части документа и по ней делается отбор в виртуальной таблице остатков, а потом делается связ...
Название: Задача 1.01
Отправлено: Alexey_A от Январь 03, 2013, 01:27:34 pm
RoMeL, спасибо, понял!
Название: Задача 1.01
Отправлено: v8Enterprise от Январь 16, 2013, 02:21:29 pm
Доброго времени суток. Рассматриваю пример решения sv_mikh_01_01_2 и не могу понять. При проведении расходной накладной мы же вручную настраиваем блокировку для РС ОстаткиНоменклатуры, и тем не менее только для этого регистра сведений указан тип блокировки не "управляемая", а именно "автоматическая". Почему? 
 Заранее благодарен за ответ!
Название: Задача 1.01
Отправлено: sima от Январь 17, 2013, 04:42:39 pm
Цитата (v8Enterprise)
сведений указан тип блокировки не "управляемая", а именно "автоматическая". Почему?
 
 Самое важное - обратите внимание, какой режим блокировки стоит у корня конфигурации.
 Если там режим стоит Управляемый, то все регистры будут на управляемых блокировках, не зависимо от настройки в самом регистре.
 Если там режим стоит Автоматический, то все регистры будут на автоматических блокировках, не зависимо от настройки в самом регистре.
 И, наконец, если стоит  Автоматический и управляемый, на режим блокировки будет влиять непосредственно свойство регистра.
Название: Задача 1.01
Отправлено: v8Enterprise от Январь 17, 2013, 04:54:25 pm
sima, спасибо!
Название: Задача 1.01
Отправлено: Kot78 от Февраль 16, 2013, 10:24:19 pm
Моё решение.
Вложения:
_1.1_.dt
Название: Задача 1.01
Отправлено: Odin777 от Февраль 19, 2013, 01:06:40 pm
Здравствуйте, по ходу решения задания возник вопрос: Можно ли вместо создания документа для установления учетной политики, создать  форму списка регистра Учетная политика и предоставлять пользователю возможность работать напрямую с регистром, понимаю что предоставлять пользователю доступ к  регистру неправильно , но если возможно поделитесь пожалуйста своим мнением по этому вопросу и тем каким образом вы реализовали это в своих решениях , спасибо!
Вложения:
Odin777_1.1.dt
Название: Задача 1.01
Отправлено: ChakChak от Февраль 19, 2013, 07:50:29 pm
Цитата (Odin777)
Можно ли вместо создания документа для установления учетной политики, создать  форму списка регистра Учетная политика и предоставлять пользователю возможность работать напрямую с регистром,

 Да можно, не надо усложнять себе жизнь.

 Вот мое решение в соответствии с БИЛЕТОМ 7 из Новых билетов (учет в двух валютах)

Добавлено (19.02.2013, 19:50)
---------------------------------------------
Odin777, проверяй какой режим удаления движений стоит в документах. При "Удалять при отмене проведения" при перепроведении движения будут удваиваться.


Вложения:
ChakCHak_1_1.dt
Название: Задача 1.01
Отправлено: Renegade от Февраль 22, 2013, 04:01:40 pm
Не подскажете для чего в варианте mikh'a во втором запросе из пакета используются итоги(не совсем понятно почему для значений табличной части итоги по МАКСИМУМУ, а для реестр остатков по СУММЕ) , разве нельзя использовать группировки?
 И для чего нужен парамет "&Момент"?
Название: Задача 1.01
Отправлено: Odin777 от Февраль 22, 2013, 08:21:09 pm
Цитата (Renegade)
не совсем понятно почему для значений табличной части итоги по МАКСИМУМУ, а для реестр остатков по СУММЕ
Насколько мне известно в первом пакете запроса создается временная таблица с данными из табличной части проводимого документа, эти данные группируются, т.е. строки табличной части документа сворачиваются а их значения суммируются, далее во втором запросе когда выбираются числовые значению из временной таблицы при получении итогов по номенклатуре не требуется их суммировании, а будет ли стоять МАКСИМУМ или МИНИМУМ для числовых значений временной таблицы насколько мне известно роли особо не играет. По поводу числовых значений регистра, т.к. в регистре остатков мы храним значения в двух измерениях то для получения общей суммы числовых показателей по одному из измерений необходимо их просуммировать. 
 Можно скачать видеоуроки по запросам здесь http://chistov.spb.ru/publ .
Название: Задача 1.01
Отправлено: Oliver от Февраль 23, 2013, 06:03:51 am
ChakChakOdin777, если будет стоять режим проведения отличный от "Удалять при отмене проведения" - это ошибка.
Название: Задача 1.01
Отправлено: Odin777 от Февраль 23, 2013, 03:25:54 pm
Oliver, спасибо, буду иметь ввиду.
Название: Задача 1.01
Отправлено: M0narch от Апрель 08, 2013, 06:34:03 pm
Мой вариант решения задачи 1.01. Буду рад услышать конструктивные замечания
Вложения:
101.dt
Название: Задача 1.01
Отправлено: Hawk от Апрель 11, 2013, 01:47:08 am
M0narch,  неплохо но есть ошибки ... например: 
 "Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записать();
 Движения.Продажи.Очистить();
 Движения.Продажи.Записать();"
 Во-первых "записать" делает тоже самое что и  "очистить", во-вторых регистр продажи можно не трогать он и так красиво запишеться ... поэтому достаточно одной строчки Движения.ОстаткиНоменклатуры.Записать();,  если увидет аксеонов у него нервный тик наверно начнеться )))  

 есть еще вот такой нюанс  ты написал "Движение.Сумма = КСписанию/ВыборкаПоСтрокам.КоличествоОстаток * ВыборкаПоСтрокам.СуммаОстаток;" к примеру если будет так  Движение.Сумма = 5/6 * 60  = 0.8333333 * 60 = какаетофигня  а если  Движение.Сумма = 5*60/6  = 50 вообщем сначала выполняй операцию умножения впервую очередь чтобы при списании меньше траблов было )

 в режиме предприятия я твою работу не смотрел запрос в отчетах вроде правильный
Название: Задача 1.01
Отправлено: fimanich от Апрель 11, 2013, 08:54:33 am
Цитата (Hawk)
Движения.ОстаткиНоменклатуры.Очистить();
В данном случае это скорее не ошибка, а перестраховка... Посмотри видеокурс Гилева "13 ошибок, за которые увольняют программистов", там он отлично эту строчку поясняет.
Название: Задача 1.01
Отправлено: Oliver от Апрель 11, 2013, 11:01:21 am
Hawk,
 
Цитата
вообщем сначала выполняй операцию умножения впервую очередь чтобы при списании меньше траблов было )

 Железно: "Использование неправильных или упрощенных алгоритмов при расчете значений ресурсов регистра. Например, при решении «проблемы копеек» 0,5 - 2,0."
Название: Задача 1.01
Отправлено: M0narch от Апрель 11, 2013, 01:23:33 pm
Цитата (Hawk)
Во-первых "записать" делает тоже самое что и "очистить"
    У меня почему то без Очистить не очищает движения
     Спасибо за замечания

Добавлено (11.04.2013, 12:33)
---------------------------------------------

Цитата (fimanich)
Цитата (Hawk)Движения.ОстаткиНоменклатуры.Очистить();
 В данном случае это скорее не ошибка, а перестраховка... Посмотри видеокурс Гилева "13 ошибок, за которые увольняют программистов", там он отлично эту строчку поясняет.
посмотрел Гилёва. Он и пишет, сначала Очистить() потом Записать()

Добавлено (11.04.2013, 13:23)
---------------------------------------------

Цитата (Hawk)
сть еще вот такой нюанс ты написал "Движение.Сумма = КСписанию/ВыборкаПоСтрокам.КоличествоОстаток * ВыборкаПоСтрокам.СуммаОстаток;" к примеру если будет так Движение.Сумма = 5/6 * 60 = 0.8333333 * 60 = какаетофигня а если Движение.Сумма = 5*60/6 = 50 вообщем сначала выполняй операцию умножения впервую очередь чтобы при списании меньше траблов было )
считаю что сделал правильно, вот тут обсуждение
 http://forum.chistov.pro/index.php?topic=1563.msg1#msg1
Название: Задача 1.01
Отправлено: yachsmit от Май 04, 2013, 03:38:04 pm
Добрый день. Не совсем понял, почему используется:
 Движения.ОстаткиНоменклатуры.Записать();
 или
 Движения.ОстаткиНоменклатуры.Очистить();
 для очистки предыдущих записей документа. Сколько раз не пробовал сделать так, чтобы каким то образом при изменении данных строк движений остались какие либо предыдущие записи у меня не получилось. Кто нибудь может подсказать, как оставить предыдущие записи регистра при перепроведении регистратора, буду очень признателен, или данные строки все таки излишни?

 Вопрос снят, разобрался )
Название: Задача 1.01
Отправлено: Cooper от Май 31, 2013, 12:46:11 pm
Мой вариант решения задачи 1.01. Хотелось бы узнать правильность выполнения
Вложения:
1-01_Cooper.dt
Название: Задача 1.01
Отправлено: bilateral от Май 31, 2013, 05:01:13 pm
Мое решение

 Добавлено (31.05.2013, 16:31)
 ---------------------------------------------
 yachsmit,  если ты разобрался напиши по возможности что БЫЛО тебе непонятно, и что ТЫ ПОНЯЛ, когда разобрался.

 Добавлено (31.05.2013, 17:01)
 ---------------------------------------------
 Cooper,
 1.РежимУправления у тебя Автоматический а не Управляемый. Не забывай менять. Это серьезный бок (Корень конфигурации,вкладка Совместимость).
 2.В блокировке не указал режим: ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
 3.В форме документа не выведен доступ к регистрам.
 4.Нет подчиненной подсистемы.
 5.В настройках документа "Удалять автоматически" не должно быть. Правильно что бы было "Удалять автоматически при отмене проведения". "Удалять автоматически" считается ошибкой, т.к. делается лишнее обращение к БД.
 6.В каркасной конфе есть перечисление "Виды номенклатуры". Это как бы намекает, что лучше использовать именно его а не булево "ЭтоУслуга" smile
 Как то так.
Вложения:
bilateral_upr_1.dt
Название: Задача 1.01
Отправлено: slazzy от Июнь 06, 2013, 03:23:24 pm
Ребят, я знаю, что уже наверно этот ответ можно посмотреть в решенных примерах, но хотелось бы понять принцип всё таки как правильно сделать контроль остатков?
 1) Сделать доп регистр (Номерклатура - количество), и делать по нему проведение по новому?
 2) Сделать всё в регистре с партиями и делать проведение по старому?

 ЗЫ Смотреть примеры не хочу тк хотелось бы с нуля написать всё самому, просто хочется понять именно как это сделать правильно. Судя по рекомендациям, которые я слышал, правильный первый вариант ибо позволяет быстро сделать отказ, если товара не хватает.
Название: Задача 1.01
Отправлено: danya1606 от Июнь 09, 2013, 10:47:34 pm
Мой вариант решения. Правильно ли все сделано?
Вложения:
_01.1.dt
Название: Задача 1.01
Отправлено: slazzy от Июнь 10, 2013, 05:24:47 pm
Цитата (danya1606)
Мой вариант решения. Правильно ли все сделано?
из того что заметил.
 1) Прежде чем писать Движения.ОстаткиНоменклатуры.Записать();
 Надо записи очистить, это для обычного приложения нужно. Это касается и второго регистра
 2) Почему у вас нигде не учтены услуги?
 3) в запросе нет проверок на NULL - грубейшая ошибка. Зачем вы группируете записи регистра Остатки? Они группируются автоматически, это тоже ошибка.
 4) момент времени получаете от ссылки. ну это конечно мелкий недочет, но зачем лишние ошибки?
 5) не учтены разные варианты проведения. оперативное и неоперативное. При оперативном надо очищать записи и получать данные по актуальным итогам.

 И ещё лично от меня, ну делайте вы код читабельным по стандартам оформления. Хотя бы форматирование применяйте и комментарии лишние удаляйте

 Добавлено (10.06.2013, 17:24)
 ---------------------------------------------
 Мой вариант, с двумя регистрами остатков )
Вложения:
1352443.dt
Название: Задача 1.01
Отправлено: Gazarov от Июнь 10, 2013, 10:23:08 pm
Проверьте пожалуйста мой вариант   wink
Вложения:
4866291.dt
Название: Задача 1.01
Отправлено: botokash от Июнь 17, 2013, 09:08:05 am
Всем привет. Приступил к подготовке, хотелось бы услышать мнения по поводу моего решения задачи.

 Добавлено (14.06.2013, 14:11)
 ---------------------------------------------
 
Цитата (Gazarov)
Проверьте пожалуйста мой вариант

 Самое очевидное - нет проверки на вид номенклатуры при записи приходной накладной, т.е. в остатки номенклатуры будут попадать услуги.

 Добавлено (17.06.2013, 09:08)
 ---------------------------------------------
 Никто так и не посмотрел, а хотелось бы услышать мнение специалистов. В регистр продаж добавил ресурс себестоимости, реализовал ее расчет в момент списания остатков со склада, и в регистр продаж попадает уже готовая цифра. Насколько такая методика правильна и жизнеспособна.
Вложения:
3225891.dt
Название: Задача 1.01
Отправлено: Кенгуру от Июнь 17, 2013, 09:42:33 am
botokash

 не смотрел дтшник.

 там алгоритм, что при списании у тебя считается себестоимость в цикле типа, а потом пишется в регистр продажи

 Пока ВыборкНоменклатура.Следующий() Цикл
    Себестоимость = 0;
     Пока Выборка.Следующий() И КоличествоСписат>0 Цикл
         Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход()
         ..
         Себестоимость = Себестоимость + Движение.Сумма;

     КонецЦикла;

     Движение = Движения.Продажи.Добавить();
     ...
     Движение.Себестоимость = Себестоимость;
     ...
 КонецЦикла;
Название: Задача 1.01
Отправлено: botokash от Июнь 17, 2013, 10:23:51 am
Цитата (Кенгуру)
botokash не смотрел дтшник. там алгоритм, что при списании у тебя считается себестоимость в цикле типа, а потом пишется в регистр продажи ...

 Собственно так и делал)

 Вот только насколько это верно в рамках экзамена, примет ли проверяющий такой вариант?
Название: Задача 1.01
Отправлено: Кенгуру от Июнь 17, 2013, 12:12:19 pm
а как это можно сделать по-другому? я сколько раз сдавал, к этому не придирались

Добавлено (17.06.2013, 11:57)
---------------------------------------------
ОстаткиНоменклатуры: Номенклатура,Партия-Количество,Себестоимость
 Продажи: Номенклатура-Количество,Себестоимость,СуммаПродажи
 т.к. в (1) два измерения а в (2) одно, то будет вложено в цикл..

 А что тебя смущает?

Добавлено (17.06.2013, 12:12)
---------------------------------------------
По коду модуля объекта расходной - преподаватель любит когда в таких задачах используют пакетные запросы

Название: Задача 1.01
Отправлено: fortune от Июнь 19, 2013, 12:29:27 pm
Моя первая решенная задача - покритикуйте пожалуйста! Буду благодарен за критику!
Название: Задача 1.01
Отправлено: patchwork от Июнь 19, 2013, 03:23:28 pm
Кенгуру задолбал с своей авой  бесовской ,той язык по всем веткам моячит
Название: Задача 1.01
Отправлено: first_may от Июнь 26, 2013, 02:33:39 pm
Добрый день.

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

 Если в расходной накладной написано:
 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записывать = Истина;
 то при той же ситуации всегда в регистре одна строка. 

 Здесь на форуме нашел фразу, что  Движения.ОстаткиНоменклатуры.Записать(); и   Движения.ОстаткиНоменклатуры.Очистить(); делают одно и тоже. Но как оказалось, первый вариант не очищает регистр перед записью и поэтому дублируются строки в регистре. Как правильно все таки писать?
Название: Задача 1.01
Отправлено: runner1 от Июль 05, 2013, 05:07:10 pm
Вот мое решение, ушло 2 часа и 1,5 на отладку sad
Вложения:
Runner_01_01.dt
Название: Задача 1.01
Отправлено: bliver от Июль 08, 2013, 09:39:49 am
runner1, в отчет Продажи из последнего дня указанного периода будет попадать только первая секунда (если не вводить его в ручную, что не есть гуд).
 Убери из дат время и для окончания периода используй выражение КонецПериода(&КонецПериода, "ДЕНЬ") или параметр с типом СтандартныйПериод он сам это контролирует.
 Это относиться и к отчету Остатки.
Название: Задача 1.01
Отправлено: _jester_ от Июль 08, 2013, 09:15:35 pm
Доброго времени суток!
 Решил задачу оперативного учета 7 билета.
 Прошу проверить решение кому не лень.
Вложения:
Jester_7_1.dt
Название: Задача 1.01
Отправлено: bliver от Июль 09, 2013, 12:53:43 pm
_jester_, 1. в процедуре ОбработкаПроведения() док ПриходнаяНакладная и док РасходняНакладная  строка Движения.ОстаткиНоменклатуры.Записать() там явно лишняя
 2. в процедуре ОбработкаПроведения() док РасходняНакладная нету проверки на возвращаемое значение регистра УчетнаяПолитика, в итоге учетная политика может быть не заполнена вообще, а док проводится 
 3. Новый Граница(МоментВремени(),ВидГраницы.Включая) - тоже не понятно, зачем там граница включая
 4 когда ты выводишь в сообщении пользователю ВыборкаНоменклатура.Номенклатура происходит неявный запрос к БД за представлением номенклатуры, нужно в запросе использовать доп поле с функцией ПРЕДСТАВЛЕНИЕССЫЛКИ()
 5. тоже неявный запрос ВыборкаНоменклатура.Номенклатура.Вид
Название: Задача 1.01
Отправлено: _jester_ от Июль 10, 2013, 02:26:22 pm
bliver, благодарю за критику!
Название: Задача 1.01
Отправлено: runner1 от Июль 12, 2013, 06:49:25 pm
bliver, ok, исправлю

Добавлено (12.07.2013, 18:49)
---------------------------------------------
....

Название: Задача 1.01
Отправлено: runner1 от Июль 12, 2013, 06:50:34 pm
...
Вложения:
Runner_01_01_02.dt
Название: Задача 1.01
Отправлено: NewProgrammer от Июль 18, 2013, 07:22:15 am
Добрый день, с Вашего позволения, коллеги!
 Как и многие, начинаю подготовку к сдаче специалиста и есть некоторые вопросы.
 Мое решение задачи во вложении, буду признателен за критику, ежели у кого найдется время проверить.
 В процессе выполнения возникли следующие вопросы:
 1. Есть ли необходимость принудительной отчистки движений документа при его перепроведении или достаточно установить свойство документа "Удалять автоматически" во вкладке "Движения" документа?
 2. В отчете по продажам "прибыльрассчитывается как: «Сумма продаж» -
 «Себестоимость». Если выполнять отчет с помощью компоновки данных, поле себестоимость необходимо определять через "Вычисляемые поля" самой компоновки или можно выполнить расчет при выборке данных из регистра?
 3. Необходимо ли прописывать расчет реквизита "Сумма документа", например у расходной накладной, если этого не указано в самой задаче и значение этого реквизита не используется?
 4. Необходимо ли прописывать какие либо вспомогательные процедуры, например расчет суммы строки ТЧ (при изменении цены или количества -> Сумма = Цена * Количество)?
Вложения:
7252812.dt
Название: Задача 1.01
Отправлено: artfa от Июль 25, 2013, 07:38:28 pm
сегодня решил последнюю з.1.50 из ОУ и решил еще раз пробежаться по задачам, где-то подправить что-то исправить (с учетом полученного опыта), и выложить не выложенные и\или исправленные задачи
Вложения:
4882443.dt
Название: Задача 1.01
Отправлено: nskripka от Июль 26, 2013, 01:35:26 pm
NewProgrammer
 1. Я лично всегда делаю с очисткой движений (это одна строка в коде для регистра) и ставлю "очищать при отмене проведения", поскольку так рекомендовал делать преподаватель. В стандартных конфигурациях сделано тоже так. Конечно, можно движения не очищать и ставить удаление движений, но не вижу в этом особого выигрыша.
 2. Лучше делать вычисляемое поле в СКД. Преподаватель тоже посоветовал делать так. Поскольку пользователь сам может перенастроить отчет в СКД, например, убрать это поле для отображения или установить доп. отборы, вывод данных по группам. Получиться, что в запросе это поле будет всегда вычисляться, а потом еще раз выводиться и суммироваться в отчете по группам. Это лишняя нагрузка на систему.
 3. Я всегда это делаю. Одна строка кода, при записи "СуммаПоДокументу = Список.Итог("Сумма"). Всё просто.
 4. Тоже делаю перерасчет табличных данных при изменени количества, цены и суммы. Там всего лишь 4 строки кода. Они очень похожи. Делаю на автомате, потом легче вводить документы.  

 Также я всегда делаю общий журнал документов, чтобы была видна последовательность действий и порядок ввода документов, не приходится лишний раз кликать по документам. Также делаю формы списков регистров, чтобы их можно было вызвать и посмотреть сразу движения по всем документам. Так легче отследить правильность списания себестоимости и подобных вещей. Это занимает не больше минуты, а при проверке поможет отследить ошибки. Также я бы еще обратил внимание на установку проверки заполнения реквизитов документа и флажки настроек регистров (запрет пустых значений и отрицательных значений, флажки - базовое, ведущее, вид блокировки и т.д.) за это могут снизить оценку на пустом месте.
Название: Задача 1.01
Отправлено: Nathalie от Июль 27, 2013, 01:19:14 pm
Здравствуйте,
 вот мое решение задачи 1.1
Название: Задача 1.01
Отправлено: danya1606 от Август 03, 2013, 05:32:42 pm
Мое решение, какие недоработки???
Вложения:
__1.01.dt
Название: Задача 1.01
Отправлено: Viver от Август 28, 2013, 12:15:27 pm
Решение. Недоработок надеюсь нет.
Вложения:
4947718.dt
Название: Задача 1.01
Отправлено: Johnny_Green от Сентябрь 03, 2013, 08:44:48 am
Приветствую!
 Проведение приходной накладной: для справочника Номенклатура услуга/товар использую перечисление ВидыНоменклатуры входящие в состав каркасной конфигурации (во многих решениях используют булево)
 Правильно ли понимаю, что для отсечения услуг в конструкторе движениях получается неявный запрос в цикле?
 
Код
Если ТекСтрока.Номенклатура.Вид = перечисления.ВидыНоменклатуры.Товар Тогда

 В таком случае решение ниже является более правильным?

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

     КонецЦикла;


 Смущает момент при количестве документов овер surprised
 
Код
И ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка

 Какие решения или методики можно применить?
Название: Задача 1.01
Отправлено: nskripka от Сентябрь 03, 2013, 10:18:19 am
Делайте запросом. Если в цикле - снимут баллы обязательно на экзамене. 
 По физической таблице, по индексу - не будет никаких практически задержек.
Название: Задача 1.01
Отправлено: Johnny_Green от Сентябрь 03, 2013, 10:24:07 am
Цитата (danya1606)
Мое решение, какие недоработки???
1. Режим управления блокировками: Автоматический (должен быть управляемый)
 2. Учетная политика должна задаваться на год
 3. В расходной лишний запрос и соединение к РегистрСведений.УчетнаяПолитика (проверку лучше сделать в начале)
 + нет проверки на пустое значение уч. политики(к примеру удали фифо/лифо в регистре сведений)
 решение очень тяжелое получилось в расходной

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

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

 Спасибо! Напомнили про индексацию (вечно забываю про нее)!
Название: Задача 1.01
Отправлено: Denver от Сентябрь 07, 2013, 09:33:20 pm
Да, себестоимость не правильно считается.
Название: Задача 1.01
Отправлено: Voyager от Сентябрь 17, 2013, 10:54:26 pm
Здравствуйте, форумчане. Начал подготовку к аттестации. Как и положено, начал с первой задачи. Выкладываю свое решение вам на суд.

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

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


Вложения:
Voyager_1.1.dt
Название: Задача 1.01
Отправлено: Voyager от Сентябрь 19, 2013, 11:37:22 pm
Исправил недочеты, которые обнаружил (не только связанные с учетной политикой). Выкладываю переработанный вариант решения задачи. По-прежнему остается проблема обращения к БД в цикле за представлением номенклатуры. Как исправить эту ситуацию, не усложняя и не выходя за рамки довольно шаблонного решения, не знаю. Как вариант, можно вовсе не указывать наименование товара, которого не хватает, т.к. используется подсказка с указанием на строку товара в ТЧ.
Вложения:
Voyager_1.1_v2.dt
Название: Задача 1.01
Отправлено: XYZ от Сентябрь 20, 2013, 01:18:38 am
Voyager, посмотрел твое решение, в документе расходная.
 1. в запросе убери отбор по услуге.

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

 ps и скачай с сайта 1С типовую конфигурацию, легче будет
Название: Задача 1.01
Отправлено: Voyager от Сентябрь 20, 2013, 01:43:57 am
XYZ, спасибо за дельные советы. Внес исправления, код упростился, дополнительно внес изменения в текст запроса, чтобы в цикле не обращаться через точку к реквизиту "Услуга". По поводу каркасной конфигурации, мне пока как-то проще с чистого листа начинать, возможно, со временем перейду на каркасную, но за совет все равно спасибо.
Название: Задача 1.01
Отправлено: RedTree от Октябрь 09, 2013, 11:11:13 pm
Добрый день.
 Хотел порешать билеты, посмотрел у других решения и не одного совпадения с билетом.
 например нету  движения товаров на складах(Основной,Транзитный). Или я что то с билетом напутал?
Название: Задача 1.01
Отправлено: Voyager от Октябрь 09, 2013, 11:21:52 pm
RedTree, каким билетом? это ветка обсуждения задачи из сборника (ред.3, 2011г.)
Название: Задача 1.01
Отправлено: RedTree от Октябрь 09, 2013, 11:27:23 pm
Понятно, значит все перепутал.
Название: Задача 1.01
Отправлено: Pro100KoT от Октябрь 17, 2013, 11:05:49 am
Всем привет! Прошу проверить моё решение, жду конструктивной критики. Спасибо
Вложения:
7870371.dt
Название: Задача 1.01
Отправлено: Voyager от Октябрь 17, 2013, 01:18:51 pm
Pro100KoT

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

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

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

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

 Далее:

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

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

 6) В цикле обхода номенклатуры это "Если Отказ = Истина Тогда Возврат; КонецЕсли;" заменить на это "Если Отказ = Истина Тогда Продолжить; КонецЕсли;"
Название: Задача 1.01
Отправлено: Pro100KoT от Октябрь 17, 2013, 02:10:50 pm
Voyager,

 За замечания спасибо,исправил
Название: Задача 1.01
Отправлено: SoleSurvivor от Октябрь 23, 2013, 03:16:16 am
Здравствуйте, коллеги. Готовлюсь к "специалисту" по платформе... Вот, осилил первую задачу )
 Старался соблюсти все нюансы, о которых знал.
 Пожалуйста, прокомментируйте мое решение!
Вложения:
1272312.dt
Название: Задача 1.01
Отправлено: Voyager от Октябрь 23, 2013, 10:13:07 am
1) "Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина" - это не нужно, нужно работать с объектом "БлокировкаДанных", в твоем случае ты либо ничего не заблокируешь либо заблокируешь записи по текущим движениям документа до перепроведения (последнее произойдет в случае, если для свойства "Движения" основного реквизита формы документа выставлен флаг "Использовать всегда", чтобы и  это предусмотреть, нужно перед этим "Движения.ОстаткиНоменклатуры.Записать()" вставить это "Движения.ОстаткиНоменклатуры.Очистить()")

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

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

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

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

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

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

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

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

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

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

 4) Я специально не использую метод "ПолучитьПоследнее", как и виртуальную таблицу "СрезПоследних", т.к. если учетная политика за текущий год не будет указана, такой запрос получит метод списания за предыдущий период, что, как мне кажется, будет ошибкой. В таком случае "НачалоГода(Дата)" необходимо использовать, иначе запрос окажется пустым.
Вложения:
3514661.dt
Название: Задача 1.01
Отправлено: SanjaKaiser от Октябрь 28, 2013, 01:19:06 pm
Прокомментируйте пожалуйста решение!
Вложения:
1Cv8__1.1.dt
Название: Задача 1.01
Отправлено: 32ops от Декабрь 28, 2013, 07:50:32 pm
Здравствуйте! Принимайте пополнение)) Прокомментируйте пожалуйста решение!

Добавлено (28.12.2013, 19:50)
---------------------------------------------
да уж. с суммой накасячил, блокировку не поставил, чеж блин на экзамене будет((( ужос


Вложения:
5994738.dt
Название: Задача 1.01
Отправлено: Sadr от Январь 05, 2014, 11:42:55 pm
32ops, посмотрел Ваше решение. Сразу оговорюсь я еще не сдавал экзамен, только готовлюсь.

 Что бросилось мне в глаза - может это и не ошибки, но я бы сделал по другому:
 1. В Номенклатуре реквизит Услуга сделать Булево, несмотря на имеющиеся в каркасе Перечисление, так как это по моему будет экономить время.

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

 наверное, лишнее, вот ссылка

 3. Вставки условия в текст запроса усложняет открытие конструктора, поэтому стараться избежать таких вставок.

 4. По причине пункта 3 не смог открыть конструктор запроса в РН, поэтому не точно, но, кажется там в итогах не правильное группирование.

 5. Блокировки (точнее их отсутствие) Вы сами заметили. Но с блокировками я и сам не разобрался еще.

 6. 
Код
Стоимость=?(Списываем=ВыборкаДетальныеЗаписи.КоличествоОстаток или списываем=0,

 не понятно зачем здесь списываем=0

 7. Нет расчета Суммы в ТЧ документов. Может это на экзамене и не критично, но для удобства при отладке. Вообще над формами доков поработать бы хотя бы минимум.

 Мое решение -
 

Вложения:
Sadr_1_1.dt
Название: Задача 1.01
Отправлено: 32ops от Январь 06, 2014, 12:48:32 am
по 1,2 уже принял для себя решение, буду делать как делал)) по запросам пытаюсь отучиться от вставок, 6) это была попытка проверки списываемого остатка на ноль, т.е. должно быть ВыборкаДетальныеЗаписи.КоличествоОстаток=0. Тоже типа решил что буду так делать, если есть деление на что-то, то и проверка на ноль должна быть. А откуда там ноль возьмется, дело третье. по 7 тоже - на экзамене точно делать не буду. Спасибо за проверку!

Добавлено (06.01.2014, 00:48)
---------------------------------------------
Sadr, Посмотрел бегло
 Не понравилось:
 1) в расходной при отказе все равно формируешь движения, хотя они уже точно не запишутся.
 2) группировка в СКД в отчете продажа (СКД сама группирует)  и выражение для ДатаОкончания (если не задать дату окончания приведет к концу дня и в отчете пусто, а предполагается что все с даты начала должно попасть)

Название: Задача 1.01
Отправлено: Sadr от Январь 06, 2014, 12:39:56 pm
Цитата 32ops ()
1) в расходной при отказе все равно формируешь движения, хотя они уже точно не запишутся.2) группировка в СКД в отчете продажа (СКД сама группирует) и выражение для ДатаОкончания (если не задать дату окончания приведет к концу дня и в отчете пусто, а предполагается что все с даты начала должно попасть)
Спасибо! Согласен, принял к сведению. В дальнейших решениях буду исправляться.

 Добавлено (06.01.2014, 12:39)
 ---------------------------------------------
 
Цитата Sadr ()
2. Вот это

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

 наверное, лишнее, вот ссылка
 
Цитата 32ops ()
по 1,2 уже принял для себя решение, буду делать как делал))
Вот еще подтверждение - что на экзамене так делать неправильно: ссылка (см. последнее сообщение от П.Белоусова)
Название: Задача 1.01
Отправлено: 32ops от Январь 06, 2014, 03:41:53 pm
Sadr, там нет подтверждения, что неправильно так делать. Белоусов говорит о том что остатки нужно контролировать всегда (приведенный пример сильно отличается от моего решения). И в твоем и в моем варианте остатки контролируются всегда, отличие в том, что в моем при оперативном проведении это происходит быстрее. Когда я задаю момент времени=Неопределено, это означает, что остатки будут браться из таблицы итогов, а не рассчитываться.
Название: Задача 1.01
Отправлено: Pro100KoT от Январь 09, 2014, 05:43:33 pm
Всем привет!Прошу проверить моё решение
Вложения:
Pro100KoT_1.1.dt
Название: Задача 1.01
Отправлено: yaroshaa от Февраль 02, 2014, 03:23:39 pm
В разных уроках по разному, в одних  услуги записываются в  РН Продажи в других нет,  подскажите  пожалуйста как правильно. В условии  задачи сказано что " И услуги и товары указываются в одной табличной части", в примере  отчета  Услуга  указывается в продажах??????.........
Название: Задача 1.01
Отправлено: Chichiq от Март 05, 2014, 09:40:02 am
Привет всем. Посмотрите мое решение пожалуйста
Вложения:
8106632.dt
Название: Задача 1.01
Отправлено: CeHbKA от Март 27, 2014, 01:57:59 pm
И меня посмотрите, плиз))
Вложения:
CeHbKA_1.1.dt
Название: Задача 1.01
Отправлено: YFred от Март 31, 2014, 02:53:53 pm
Только начал готовиться,
 Я правильно понял, что в этой задачи используется старый метод контроля остатков (до записи)?
Название: Задача 1.01
Отправлено: IT_PROGRAMMIST от Март 31, 2014, 10:32:00 pm
YFred, да

 Добавлено (31.03.2014, 22:32)
 ---------------------------------------------
 CeHbKA, быстро просмотрел твое решение.отчеты не глядел.
 1) В приходной накладной лучше сразу в запросе отсекать услуги, а не при обходе результата запроса.И если ты уже выбираешь запросом, то группируй записи.
 2) В расходной накладной:
 а)  я бы в это код 
 Движения.ОстаткиТоваров.Записывать = Истина;
 Движения.ОстаткиТоваров.Очистить();
 добавил
 Движения.ОстаткиТоваров.Записать();

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

 Правильнее так:
 Если Выборка.Количество>Выборка.Остаток И НЕ Выборка.ЭтоУслуга Тогда
 Сообщение = Новый СообщениеПользователю;
 Сообщение.Текст = "Недостаточно товара "+Выборка.Номенклатура;
 Сообщение.Сообщить();
 Отказ = Истина;
 КонецЕсли;
 Если Отказ Тогда
 Продолжить;
 КонецЕсли

 Удачи....
Название: Задача 1.01
Отправлено: CeHbKA от Апрель 01, 2014, 10:30:18 am
Так-с, по-порядку
 1) В чему разница между
 
Код
Движение.Стоимость = (ВыборкаНоменклатура.Стоимость/ВыборкаНоменклатура.Остаток)*НужноСписать

 и
 
Код
Движение.Стоимость = ?(ВыборкаНоменклатура.Остаток>НужноСписать,  
 НужноСписать*ВыборкаНоменклатура.Стоимость/ВыборкаНоменклатура.Остаток,ВыборкаНоменклатура.Стоимость);
м? smile

 2) Опять же, в чем разница?
 
Код
Если Выборка.Количество>Выборка.Остаток И НЕ Выборка.ЭтоУслуга Тогда  
  Отказ = Истина;  
  Сообщение = Новый СообщениеПользователю;  
  Сообщение.Текст = "Недостаточно товара "+Выборка.Номенклатура;  
  Сообщение.Сообщить();  
  Продолжить;  
  КонецЕсли;
 
Код
Если Выборка.Количество>Выборка.Остаток И НЕ Выборка.ЭтоУслуга Тогда  
  Сообщение = Новый СообщениеПользователю;  
  Сообщение.Текст = "Недостаточно товара "+Выборка.Номенклатура;  
  Сообщение.Сообщить();  
  Отказ = Истина;  
  КонецЕсли;  
  Если Отказ Тогда  
  Продолжить;  
  КонецЕсли
Название: Задача 1.01
Отправлено: IT_PROGRAMMIST от Апрель 01, 2014, 10:41:01 am
CeHbKA,
 1) Использование неправильных или упрощенныхалгоритмов при расчете значений ресурсов регистра. Например, при решении
 «проблемы копеек»(0.5-2 балла).
 2) Например.В документе будет 50 позиций и в позиции № 1 у тебя количество в документе будет больше остатка- система ругнется, а для остальных 49 позиций(которые есть на остатке) будет пытаться списывать по партиям(хотя это нам не нужно ведь у нас уже документ не проведется).
 а Условие
 Если Отказ Тогда
 Продолжить;
 КонецЕсли
 нас от это избавит.
Название: Задача 1.01
Отправлено: CeHbKA от Апрель 01, 2014, 02:19:17 pm
IT_PROGRAMMIST,спасибо большое!
 А за п.2 баллы снимают?
Название: Задача 1.01
Отправлено: YFred от Апрель 01, 2014, 03:54:42 pm
Посмотрите пожалуйста мое решение
Вложения:
1781292.dt
Название: Задача 1.01
Отправлено: Igor-pn от Апрель 13, 2014, 08:38:16 pm
Мой вариант задачи 1.1
Вложения:
7911302.dt
Название: Задача 1.01
Отправлено: Shooroopik111 от Апрель 14, 2014, 04:39:54 pm
Просьба мастеров и знатоков 1с проверить. Заранее спасибо.

 Заранее прошу прощения за то что не сделал подсистемы.

 Ребят и вот какие вопросы:

 1)Нужно ли делать проверку на не заполненньсть реквизита ВидНоменклатуры?
 И как такую возможность лучше реализовать?

 2)Чтобы в регистр непопали пустые данные, нужны ли выставлять свойстов проверка заполнения у реквизитов ТЧ ПТУ и РТУ?
Вложения:
Shooroopik_1_01.dt
Название: Задача 1.01
Отправлено: DenVit от Апрель 20, 2014, 12:18:40 am
удалено
Название: Задача 1.01
Отправлено: snaz от Апрель 21, 2014, 09:23:08 am
Добрый день, смотрел примеры решения задачи 1.1. Там в коде при проведении документов есть строки
 Движения.ОстаткиТоваров.Очистить();
 Движения.ОстаткиТоваров.Записать();
 но нет аналогичных строк. По реистру продажи. Почему при перепроведении нужно очищать старые движение только по регистру остатки, а по регистру Продажи не нужно?
Название: Задача 1.01
Отправлено: MorningStalker от Апрель 21, 2014, 09:55:06 am
Цитата s-n-a-y ()
Добрый день, смотрел примеры решения задачи 1.1. Там в коде при проведении документов есть строки Движения.ОстаткиТоваров.Очистить();
 Движения.ОстаткиТоваров.Записать();
 но нет аналогичных строк. По реистру продажи. Почему при перепроведении нужно очищать старые движение только по регистру остатки, а по регистру Продажи не нужно?

 потому что, ты обращаешься к ТОЛЬКО к регистру ОстаткиТоваров. И если ты не удалишь старые движения по этому регистру, то твой запрос вернет не верную информацию. К регистру Продажи ты НЕ обращаешься, поэтому нет смысла его очищать.

 Пример:
 На складе есть 5 табуреток.
 Документ №1 списывает все 5 шт.
 На складе осталось 0 шт.

 Перепроводим Документ №1.

 Если ты не очистишь тем или иным методом старые движения, то запрос к регистру ОстаткиТоваров вернет тебе информацию, что на складе 0 шт и не даст тебе перепровести документ (если конечно у тебя работает контроль остатков :)).

 А если очищать, то...
 в начале обработки проведения было 0.
 потом ты очищаешь движения, 5 шт. возвращаются на склад.
 делаешь запрос - он тебе возвращает 5 шт.
 записываешь нужные тебе движения...

 Подумай логически, зачем тебе в такой ситуации нужно очищать регистр Продажи?
Название: Задача 1.01
Отправлено: snaz от Апрель 21, 2014, 10:39:18 am
Приходящий, спасибо за ответ. В задаче нужно построить отчет по продажам. Как я понимаю, если после перепроведения Расходной накладной не очищать движения по регистру продажи в отчет могут попасть данные из старых записей. Квк это контролируется?
Название: Задача 1.01
Отправлено: MorningStalker от Апрель 21, 2014, 11:13:24 am
Цитата MorningStalker ()
Приходящий, спасибо за ответ. В задаче нужно построить отчет по продажам. Как я понимаю, если после перепроведения Расходной накладной не очищать движения по регистру продажи в отчет могут попасть данные из старых записей. Квк это контролируется?
у тебя в ОбработкеПроведения  Р/н есть движения по Регистру Продажи и по Регистру ОстаткиТоваров. При выходе из ОбработкиПроведения эти движения запишутся в регистр. Никаких старых записей сохранено не будет. Будут единственные актуальные записи.

 Логика проведения проста:

 Для Регистра ОстаткиТоваров:
 1. На начало Обработки Проведения у тебя уже есть какие-то записи по Регистру ОтстаткиТоваров.
 2. Для того чтобы эти записи не влияли на данные, которые вернет запрос к Регистру ОстаткиТоваров ты их либо очищаешь, либо записываешь их пустыми.
 3. Запрос возвращает данные.
 4. Ты обрабатываешь эти данные и формируешь на их основании проводки.
 5. В регистр записываются сформированные тобой записи.
 _____________Они единственные, нет никаких старых или новых, пустых или очищенных. Есть записи, которые ты сформировал в ОбработкеПроведения_____________

 Для Регистра Продажи:
 1. На начало ОбработкиПроведения у тебя уже есть какие-то записи по Регистру Продажи. Ну и хрен с ними, пусть будут.
 2. Ты ничего не очищаешь и не перезаписываешь, тебе не нужны эти изменения - эти лишнее обращение к БазеДанных, которое абсолютно не нужно!
 3. Ты формируешь записи по регистру Продажи, они могут быть теми же самыми, что и раньше, а могут отличаться от них.
 4. В регистр записываются сформированные тобой записи.
 ____________Они единственные, нет никаких старых или новых, пустых или очищенных. Есть записи, которые ты сформировал в ОбработкеПроведения. Они могут отличаться от старых записей или быть такими же, но они одни и в отчет попадут именно они_____________
Название: Задача 1.01
Отправлено: letni88 от Апрель 22, 2014, 10:41:02 am
s-n-a-y, по очищению регистра Остатки: при проведении будущей датой, сначала ты очищаешь движения в памяти методом остатки.очистить(), хотя в большинстве случаев это можно не делать и движения очищаются автоматически, но тем не менее существуют некоторые моменты, когда движения в памяти не очищаются, тем самым мы предостерегаем себя от некоторых ситуаций. Далее мы записываем пустой набор в базу. Это сделано для того, чтобы в случае проведения будущей датой при получении остатков не учитывались движения нашего документа. С регистром продажи мы не получаем остатки, да и вообще никакую информацию не получаем, поэтому смысла нет его записывать пустым набором.
Название: Задача 1.01
Отправлено: snaz от Апрель 23, 2014, 10:50:05 am
Вопрос по документу Приходная накладная. Может ли в табличной части документа (по условию задачи) быть несколько строк с одинаковой номенклатурой, но разной ценой (себестоимостью) товара. Если да, то при проведении документа Расходная накладная группировать по номенклатуре не получиться, так как цена разная. Нужно отдельно считать товар кол-во товара с большей ценой и с меньшей ценой. Это так?
Название: Задача 1.01
Отправлено: Demy от Апрель 23, 2014, 01:11:13 pm
Цитата s-n-a-y ()
Вопрос по документу Приходная накладная. Может ли в табличной части документа (по условию задачи) быть несколько строк с одинаковой номенклатурой, но разной ценой (себестоимостью) товара. Если да, то при проведении документа Расходная накладная группировать по номенклатуре не получиться, так как цена разная. Нужно отдельно считать товар кол-во товара с большей ценой и с меньшей ценой. Это так?
А при чем тут цена? Просто складываешь количество и сумму, а цена определяется отношением этих величин.
Название: Задача 1.01
Отправлено: otymko от Апрель 23, 2014, 05:20:55 pm
Добрый день. Не знаю оптимально ли я решил данную задачу. Заранее спасибо тем кто посмотрит мое решение.
Вложения:
1.1_otymko.dt
Название: Задача 1.01
Отправлено: letni88 от Апрель 23, 2014, 06:35:28 pm
s-n-a-y, прослеживается непонимание регистра накопления. Цена в приходной это ресурс, поэтому не имеет значения сколько у тебя записей будет с разными ценами, в конечном счете при получении остатков все записи просуммируются и сгруппируются по номенклатуре.
Название: Задача 1.01
Отправлено: Demy от Апрель 24, 2014, 05:20:03 pm
otymko, посмотрел твое решение:
 1. Зачем в справочнике "Номенклатура" использовать реквизит услуга, есть же "Перечисления.ВидыНоменклатуры"? (правда не знаю как к этому относятся на экзамене).
 2. В расходной накладной при получении партий в запросе нужно сортировать по моменту времени, а не по ссылке.
 3. В той же расходной накладной признак услуги лучше вытянуть в запросе, иначе платформа постоянно читает номенклатуру из базы.
 4. Так делать не обязательно:           
Код
Если КолНужно < ДанныеП.КолОст Тогда
                 КолС = КолНужно;
                 СуммаС = ДанныеП.СуммаОст * КолНужно / ДанныеП.КолОст;
             Иначе
                 КолС = ДанныеП.КолОст;
                 СуммаС = ДанныеП.СуммаОст;
             КонецЕсли;
можно обойтись:
                
Код
КолС = Мин(КолНужно, ДанныеП.КолОст);
                 СуммаС = ДанныеП.СуммаОст * КолС / ДанныеП.КолОст;
проблема копеек не возникнет.
 5. Не знаю как к этому относятся на экзамене, но в отчете по остаткам думаю выводить количество по партиям и в общих итогах не нужно.
Название: Задача 1.01
Отправлено: MorningStalker от Апрель 25, 2014, 05:07:47 am
Цитата Demy ()
1. Зачем в справочнике "Номенклатура" использовать реквизит услуга, есть же "Перечисления.ВидыНоменклатуры"? (правда не знаю как к этому относятся на экзамене).
Вот с этим я не согласен, реквизит "ЭтоУслуга" у справочника "Номенклатура" использовать гораздо удобнее, чем перечисление. Я тоже так всегда делаю.

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

 P.S. с остальными пунктами абсолютно согласен. Пункт №3 вообще крупный косяк, по факту это запрос в цикле.
Название: Задача 1.01
Отправлено: Demy от Апрель 25, 2014, 09:01:31 am
Цитата MorningStalker ()
Вот с этим я не согласен, реквизит "ЭтоУслуга" у справочника "Номенклатура" использовать гораздо удобнее, чем перечисление.
Удобней? Возможно. Но правильно ли? Задачи на экзамене все-таки имитируют реальные задачи, поэтому представим случай из реальности. Например, сделал ты так задачу, а заказчик через время подходит и говорит: "А сделай еще и материалы". И что? Будешь добавлять еще реквизит "ЭтоМатериал"? Но тогда возможен конфликт реквизитов, который необходимо решать программно. Плюс к этому все документы уже написаны без учета материалов. Это конечно относиться к проектированию базы, но возможно экзаменаторы обратят на это внимание.
Название: Задача 1.01
Отправлено: MorningStalker от Апрель 25, 2014, 09:33:42 am
Цитата Demy ()
Удобней? Возможно. Но правильно ли? Задачи на экзамене все-таки имитируют реальные задачи, поэтому представим случай из реальности. Например, сделал ты так задачу, а заказчик через время подходит и говорит: "А сделай еще и материалы". И что? Будешь добавлять еще реквизит "ЭтоМатериал"? Но тогда возможен конфликт реквизитов, который необходимо решать программно. Плюс к этому все документы уже написаны без учета материалов. Это конечно относиться к проектированию базы, но возможно экзаменаторы обратят на это внимание.
Demy, ты сам создаешь себе ненужные трудности. В задаче не сказано, что механизм распознавания Товаров и Услуг должен быть реализован с помощью Перечисления - значит разработчик может делать так, как ему удобней. И с помощью реквизита это сделать быстрее и удобней, и время написания кода сокращается, и отборы делать проще.

 Вот тебе еще один "СЛУЧАЙ ИЗ РЕАЛЬНОСТИ": в типовых конфигурациях все манипуляции с ОбработкойПроведения сделаны с помощью передачи данных в ОбщиеМодули и выполнения там с ними всех манипуляций. Т.е. согласно твоей логике, так как построение решений реальных задач подразумевает именно такой подход, то и тебе нужно ОбработкуПроведения реализовывать таким же образом. Я даже затрудняюсь представить, насколько увеличатся затраты по времени при реализации таким способом 3х разделов билета.

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

 Нужно уметь видеть главное, иначе на экзамене, из-за набора подобных мелочей, тебе банально не хватит времени на решение билета.
Название: Задача 1.01
Отправлено: Demy от Апрель 25, 2014, 10:56:40 am
Цитата MorningStalker ()
Demy, ты сам создаешь себе ненужные трудности. В задаче не сказано, что механизм распознавания Товаров и Услуг должен быть реализован с помощью Перечисления - значит разработчик может делать так, как ему удобней. И с помощью реквизита это сделать быстрее и удобней, и время написания кода сокращается, и отборы делать проще.
Проще? Ну не знаю... Мне, например, без разницы сделать так или так. К тому же я не утверждал что мое мнение единственно правильное, но высказал сомнение что экзаменаторы оценят способ решения без перечисления.
Цитата MorningStalker ()
Вот тебе еще один "СЛУЧАЙ ИЗ РЕАЛЬНОСТИ": в типовых конфигурациях все манипуляции с ОбработкойПроведения сделаны с помощью передачи данных в ОбщиеМодули и выполнения там с ними всех манипуляций. Т.е. согласно твоей логике, так как построение решений реальных задач подразумевает именно такой подход, то и тебе нужно ОбработкуПроведения реализовывать таким же образом. Я даже затрудняюсь представить, насколько увеличатся затраты по времени при реализации таким способом 3х разделов билета.
А вот не надо путать теплое с мягким. Впадать здесь в крайности вовсе ни к чему.
Цитата MorningStalker ()
Нужно уметь видеть главное, иначе на экзамене, из-за набора подобных мелочей, тебе банально не хватит времени на решение билета.
А главное как раз и складывается из мелочей. Мы можем тут на мыло изойтись споря какое решение правильней, но сомневаюсь что это к чему-нибудь приведет. Поэтому я и хотел бы знать мнение экзаменатора.
Название: Задача 1.01
Отправлено: otymko от Апрель 25, 2014, 02:57:14 pm
Цитата: Demy;34687
otymko, посмотрел твое решение:
 1. Зачем в справочнике "Номенклатура" использовать реквизит услуга, есть же "Перечисления.ВидыНоменклатуры"? (правда не знаю как к этому относятся на экзамене).
 2. В расходной накладной при получении партий в запросе нужно сортировать по моменту времени, а не по ссылке.
 3. В той же расходной накладной признак услуги лучше вытянуть в запросе, иначе платформа постоянно читает номенклатуру из базы.
 4. Так делать не обязательно:           
 Код
 Если КолНужно < ДанныеП.КолОст Тогда
                  КолС = КолНужно;
                  СуммаС = ДанныеП.СуммаОст * КолНужно / ДанныеП.КолОст;
              Иначе
                  КолС = ДанныеП.КолОст;
                  СуммаС = ДанныеП.СуммаОст;
              КонецЕсли;
 можно обойтись:
                
 Код
 КолС = Мин(КолНужно, ДанныеП.КолОст);
                  СуммаС = ДанныеП.СуммаОст * КолС / ДанныеП.КолОст;
 проблема копеек не возникнет.
 5. Не знаю как к этому относятся на экзамене, но в отчете по остаткам думаю выводить количество по партиям и в общих итогах не нужно.


 Спасибо что посмотрели. Во вложении переосмысленное решение.
 1. В задании не было сказано сделать решение вида номенклатуры через перечисление.(для решения можно использовать не только каркасную конфигурацию). Поэтому было решено сделать через булево.
 2. Исправлено. Через момент времени правильнее всего.
 3. Исправлено. Действительно (проверено через замер), если выбрать реквизиты в запросе - то цикл быстрее выполняется.
 4. Ну это не критическая ошибка. И так и так правильно.
 5. По поводу отчета можете пояснить? Не совсем понятно что именно не так.
Вложения:
otymko_1.1.dt
Название: Задача 1.01
Отправлено: Demy от Апрель 25, 2014, 04:39:14 pm
Цитата otymko ()
1. В задании не было сказано сделать решение вида номенклатуры через перечисление.(для решения можно использовать не только каркасную конфигурацию). Поэтому было решено сделать через булево.
Я просто обратил на это внимание. В любом случае не помешает знать несколько подходов.
 
Цитата otymko ()
5. По поводу отчета можете пояснить? Не совсем понятно что именно не так.
Я не думаю что на экзамене на это будут обращать внимание, но тем не менее если посмотреть на отчет глазами пользователя (экзаменатор тоже так умеет :)), то его интересует в итоге только сумма товара на складе. А итоговая информация о количестве, например что на складе находится в общем 4-е единицы чего-то, пользователю ничего не скажет. Может не очень понятно, поэтому подкреплю картинкой:
 
 Также еще пара замечаний:
 1. Не помню как было в изначальной версии, может я это упустил, но зачем в расходной накладной делать вложенный запрос при выборке данных табличной части документа? Вполне можно обойтись так:
Код
ВЫБРАТЬ
     РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
     СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
     СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма
 ПОМЕСТИТЬ втТаблица
 ИЗ
     Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
 ГДЕ
     РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Документ

 СГРУППИРОВАТЬ ПО
     РасходнаяНакладнаяСписокНоменклатуры.Номенклатура

 ИНДЕКСИРОВАТЬ ПО
     Номенклатура
2. Не помню где это читал или кто мне говорил, но лучше сделать чтобы из формы документа сразу можно было посмотреть его движения. Это будет удобней и для тебя на этапе отладки и для проверяющего.
Вложения:
s4491394.png
Название: Задача 1.01
Отправлено: Demy от Май 02, 2014, 11:36:32 pm
Прилагаю мой вариант решения. Покритикуйте, будьте добры. Заранее благодарен.
Вложения:
Demy_1_01.dt
Название: Задача 1.01
Отправлено: program1Cer от Май 25, 2014, 04:56:03 pm
Покритикуйте и мой вариант решения.
 Интересует мнения по поводу подсчета суммы документа.
 И проверка учетной политики на соответствие году. В задании делается акцент именно на том, что она действует год, значит ли это, что если есть данные по учетной политике за 2013, но нет за 2014, то необходимо выдать сообщение?

Вложения:
op_ex1.1.dt
Название: Задача 1.01
Отправлено: Zhuravlik от Май 27, 2014, 11:34:21 am
Demy,
 1) Можно приходовать услуги
 2) Чистов советовал в качестве источника данных для блокировки использовать не табличную часть, а результат запроса к табличной части. В самом запросе соотв. использовать менеджер временных таблиц. Это позволяет избежать двух запросов к табличной части.
 3) При оперативном проведении дату итогов нужно использовать пустую (Дата(1,1,1))
 4) При расчете себестоимости для списания нельзя просто писать как у вас:
 Стоимость = КСписанию * ДетальнаяВыборка.СуммаОстатка / ДетальнаяВыборка.Остаток;

  - нужна "защита от копеек", 1С рекомендует делать это вот так:
 Если КСписанию = ДетальнаяВыборка.Остаток Тогда
     Стоимость = ДетальнаяВыборка.СуммаОстатка;
 Иначе
     Стоимость = КСписанию * ДетальнаяВыборка.СуммаОстатка / ДетальнаяВыборка.Остаток;
 КонецЕсли;

 5) Это мелочь конечно, но в задаче явно попутали имена переменных (стоимость и себестоимость). Должно быть: Списывается - себестоимость, приходуется в продажи - стоимость, у вас наоборот.
 зы. Чтобы проверять на услугу, лучше (проще) использовать реквизит типа булево "ЭтоУслуга", а не возиться с перечислением. Мелочь, а приятно =)

Добавлено (27.05.2014, 11:25)
---------------------------------------------
program1Cer, то-же, что и в предидущем сообщении. Услуги при оприходовании проверяете, но я все привык через запросы делать, не знаю, по моему правильно только так.
 Да, в корне конфигурации режим управления блокировкой - не выставлен в управляемый, это сразу минус.
 И то, что блокировки не используете в принципе - тоже не допустимо на экзамене, прочитайте требования.
 Я бы не стал проверять значение учетной политики четко для текущего года. Т.е. отказ от проведения - только если его нет в срезе последних (да и то, можно просто по-умолчанию ФИФО использовать, и об этом пользователю сообщать).
 В самих запросах 1С рекомендует избегать вложенных запросов, в пользу временных таблиц.

Добавлено (27.05.2014, 11:34)
---------------------------------------------
+ Не тратьте время на расчет сумм при изменении цены/количества. Вообще формы документов нужно создавать, если об этом явно сказано.
 Я удаляю просто неиспользуемые реквизиты "Цена" из табл. части  и "СуммаДокумента" - из шапки, если по задаче не надо, никто этого не требует.
 Вот модуль приходной накладной, как мне кажется самый идеальный вариант (Павел приводил такой пример где-то, потом говорил, что все-равно как оприходовать. Но мне этот вариант больше всех импонирует):
 Процедура ОбработкаПроведения(Отказ, Режим)
     
     Движения.ОстаткиНоменклатуры.Записывать = Истина;
     Движения.ОстаткиНоменклатуры.Очистить();
     
     Запрос = Новый Запрос;
     Запрос.Текст =
         "ВЫБРАТЬ
         |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура,
         |    СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
         |    СУММА(ПриходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
         |    &Дата КАК Период,
         |    &Ссылка КАК Партия
         |ИЗ
         |    Документ.ПриходнаяНакладная.СписокНоменклатуры КАК ПриходнаяНакладнаяСписокНоменклатуры
         |ГДЕ
         |    ПриходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
         |    И ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура.ЭтоУслуга = ЛОЖЬ
         |
         |СГРУППИРОВАТЬ ПО
         |    ПриходнаяНакладнаяСписокНоменклатуры.Номенклатура";
     
     Запрос.УстановитьПараметр("ВидНоменклатуры", ВидНоменклатуры);
     Запрос.УстановитьПараметр("Дата", Дата);
     Запрос.УстановитьПараметр("Ссылка", Ссылка);
     
     РезультатЗапроса = Запрос.Выполнить();
     
     Движения.ОстаткиНоменклатуры.Загрузить(РезультатЗапроса.Выгрузить());
     
 КонецПроцедуры

Название: Задача 1.01
Отправлено: program1Cer от Май 27, 2014, 02:33:56 pm
2Zhuravlik, спасибо!

 Объясни, пожалуйста, почему никто не переключает Удаление движений в Удалять автоматически, а по-прежнему оставляют Удалять автоматически при отмене проведения?
Название: Задача 1.01
Отправлено: Zhuravlik от Май 27, 2014, 02:52:19 pm
program1Cer, это обьяснял Чистов, в одном из своих вебинаров. Если стоит "Удалять автоматически", это означает что перед началом проведения *каждый раз* происходит запись в базу пустого набора записей неявно, т.е. это делает платформа. А если "Удалять автоматически при отмене проведения" - то этого не происходит, и разработчик сам решает когда и в каких случаях нужно записывать. Т.е. следующий код:

 Если Режим = РежимПроведения.Оперативный Тогда
     Движения.Остатки.Записать();
 КонецЕсли;
 
 Имеет смысл только при "Удалять автоматически при отмене проведения", и экономит производительность в случае неоперативного проведения документа.
Название: Задача 1.01
Отправлено: program1Cer от Май 27, 2014, 04:06:25 pm
2Zhuravlik, да я помню и там задавался примерно тот же вопрос, но там был ответ что режим "Удалять автоматически при отмене проведения" необходим если документ проводится несколько раз и нам для корректной работы необходимы уже сделанные движения (очень частая ситуация при расчете начислений), но в задачах по оперативному учету я такой необходимости не вижу.

 "Имеет смысл только при "Удалять автоматически при отмене проведения", и экономит производительность в случае неоперативного проведения документа."

 Каким образом увеличивается производительность, за счет отсутствия записи пустого набора записей?

 И об услугах, в примере из сборника задач в документе Приходная накладная при выборе номенклатуры стоит отбор по товару, таким образом услуги в ТЧ не попадают.
Название: Задача 1.01
Отправлено: Demy от Май 27, 2014, 11:15:18 pm
Цитата Zhuravlik ()
1) Можно приходовать услуги
Есть такое. Кстати в примере из сборника тоже можно приходовать услуги.
 
Цитата Zhuravlik ()
2) Чистов советовал в качестве источника данных для блокировки использовать не табличную часть, а результат запроса к табличной части. В самом запросе соотв. использовать менеджер временных таблиц. Это позволяет избежать двух запросов к табличной части.
Интересная идея, попробую. Спасибо.
Цитата Zhuravlik ()
3) При оперативном проведении дату итогов нужно использовать пустую (Дата(1,1,1))
Не понял... может не пустую дату, а "неопределено"? Но в задании об этом не сказано.
Цитата Zhuravlik ()
4) При расчете себестоимости для списания нельзя просто писать как у вас:Стоимость = КСписанию * ДетальнаяВыборка.СуммаОстатка / ДетальнаяВыборка.Остаток;

 - нужна "защита от копеек", 1С рекомендует делать это вот так:
 Если КСписанию = ДетальнаяВыборка.Остаток Тогда
 Стоимость = ДетальнаяВыборка.СуммаОстатка;
 Иначе
 Стоимость = КСписанию * ДетальнаяВыборка.СуммаОстатка / ДетальнаяВыборка.Остаток;
 КонецЕсли;
Слышал уже неоднократно. Но может приведет кто-то пример где остатки в ноль не выводятся при таком решении. А то все об этом говорят, но никто не знает почему это так. У меня уже даже начинает складываться впечатление что 1С - это секта, где просто говорят: "... веруй, брат, это истина...".
Цитата Zhuravlik ()
5) Это мелочь конечно, но в задаче явно попутали имена переменных (стоимость и себестоимость). Должно быть: Списывается - себестоимость, приходуется в продажи - стоимость, у вас наоборот.
Это тоже не понял. В регистре продаж есть и себестоимость, и стоимость продажи. Делал этот регистр по отчету "Продажи", указанному в задании.
Цитата Zhuravlik ()
зы. Чтобы проверять на услугу, лучше (проще) использовать реквизит типа булево "ЭтоУслуга", а не возиться с перечислением.
Ну не знаю, мне проще с перечислениями. Рефлекс!

 По поводу формирования движений запросом в приходной накладной имею следующие замечания:
 1. При увеличении количества документов запрос начинает выполняться медленнее (по крайней мере в файл-серверном варианте).
 2. Не считаю что при проведении нужно просто игнорировать услуги. Нужно чтобы программа хотя бы выругалась.

 P.S. Спасибо за замечания.
Название: Задача 1.01
Отправлено: Zhuravlik от Май 28, 2014, 09:29:39 am
Цитата program1Cer ()
Каким образом увеличивается производительность, за счет отсутствия записи пустого набора записей
- да
 
Цитата program1Cer ()
таким образом услуги в ТЧ не попадают
- дело ваше =) Как по мне, - проще при проведении задать фильтр, чем городить огород на форме (это конечно в рамках экзамена).
Название: Задача 1.01
Отправлено: korsal от Май 28, 2014, 11:13:13 am
Цитата Zhuravlik ()
Как по мне, - проще при проведении задать фильтр, чем городить огород на форме

 Умение писать запросы - это, конечно, хорошо. Но вот давать пользователю выбирать то, чего выбирать нельзя, а потом в запросе отбрасывать - это нехорошо. В табличной части строка с услугой вроде как есть, а ни в какой регистр не попадает. Так нельзя ! cool
Название: Задача 1.01
Отправлено: Xsazar от Июнь 06, 2014, 08:26:21 pm
вы тут не актуальных билетов решения предлагаете, да? dry
Название: Задача 1.01
Отправлено: korsal от Июнь 06, 2014, 11:57:55 pm
Цитата Xsazar ()
вы тут не актуальных билетов решения предлагаете, да? dry
Поверь, новый сборник задач, который вот-вот выйдет в свет, тоже уже неактуальный, потому что на экзамене билеты могут немного меняться. Цель билетов не в заучивании.
Название: Задача 1.01
Отправлено: Demy от Июнь 07, 2014, 05:27:41 pm
Форумчане, возник вопрос: нужно ли контролировать услуги в приходной накладной? Я считаю что нет, т.к. есть масса способов засунуть услугу в регистр, тем более в примере к задачнику такой проверки нет. Хотелось бы услышать мнение прежде всего тех кто уже сдавал экзамен. Заранее благодарен.
Название: Задача 1.01
Отправлено: korsal от Июнь 07, 2014, 06:54:08 pm
Нужно устанавливать отбор на товар. См. скриншот.
Вложения:
s6428804.jpg
Название: Задача 1.01
Отправлено: Demy от Июнь 07, 2014, 08:26:30 pm
Цитата korsal ()
Нужно устанавливать отбор на товар. См. скриншот.
Я не об этом спрашивал. Ну допустим установил отбор, но есть уйма способов обойти это. Даже контроль при проведении может не помочь, ведь вид номенклатуры можно изменить после того как он попал в регистр. Тем более как я упоминал, в примере, который поставляется с задачником, никакого контроля нет! Поэтому интересно, возникали ли у кого-то проблемы с этим на экзамене. Хотелось бы услышать тех кто сдавал, если они тут еще ходят.
Название: Задача 1.01
Отправлено: korsal от Июнь 07, 2014, 09:05:40 pm
Для экзамена этого достаточно.
 Если очень хочется, то можно запретить пользователю изменять вид номенклатуры и отключать отбор в настройках списка. Это уже выходит за рамки задачи. Напиши, какие еще есть способы после этого запихнуть услугу в регистр остатков.
 Есть тут такие задачки, где учетную политику разрешается изменять не чаще, например, одного раза в год. При этом не уточняется, что она должна изменяться в начале года. Поэтому периодичность Год в регистре сведений не прокатит и этот момент уже нужно контролировать.
Название: Задача 1.01
Отправлено: Demy от Июнь 07, 2014, 10:02:27 pm
Цитата korsal ()
Для экзамена этого достаточно.
Т.е. ты хочешь сказать что поставляемое со сборником решение задачи на экзамене не примут? Ведь там никакого контроля нет и в помине!
Цитата korsal ()
Напиши, какие еще есть способы после этого запихнуть услугу в регистр остатков.
Тут целый ряд способов. Например используя создание при вводе, т.е. при создании ставишь вид номенклатуры "Услуга" и номенклатура автоматом добавляется. Можно добавить товар, а потом открыть и изменить вид. Можно даже изменить вид после проведения документа. Я в какой-то задачи уже описывал это (это все естественно относиться к 8.3).
Цитата korsal ()
Есть тут такие задачки, где учетную политику разрешается изменять не чаще, например, одного раза в год. При этом не уточняется, что она должна изменяться в начале года. Поэтому периодичность Год в регистре сведений не прокатит и этот момент уже нужно контролировать.
С этим у кого-то возникали проблеммы при сдаче, или просто чьи-то предположения? Т.к. если углубляться в тонкости, то задачи становятся практически не решаемые, тем более за отведенное для экзамена время.
Название: Задача 1.01
Отправлено: korsal от Июнь 07, 2014, 11:09:09 pm
Цитата Demy ()
Т.е. ты хочешь сказать что поставляемое со сборником решение задачи на экзамене не примут? Ведь там никакого контроля нет и в помине!
Посмотрел решение в задачнике. Там нет услуг, а значит и контролировать ничего не надо.

 
Цитата Demy ()
Тут целый ряд способов. Например используя создание при вводе, т.е. при создании ставишь вид номенклатуры "Услуга" и номенклатура автоматом добавляется. Можно добавить товар, а потом открыть и изменить вид. Можно даже изменить вид после проведения документа. Я в какой-то задачи уже описывал это (это все естественно относиться к 8.3).
Мдя. Если исключить все возможные способы ввести не то, что нужно, то времени на экзамен точно не хватит. Получается, это и при выборе номенклатуры нужно проверять, и при изменении вида. Про документ после проведения можно забыть - записи уже в регистре. Но, повторюсь, для экзамена достаточно и отбора. По крайней мере, я не видел сообщений среди сдавшихся, чтобы были какие-то проблемы с этим. Лучше в запросе все-таки оставить проверку, чтобы услуга не попала в регистр ни при каких обстоятельствах. А на экзамене, если спросят, объяснить, почему так сделал.

 
Цитата Demy ()
С этим у кого-то возникали проблемы при сдаче, или просто чьи-то предположения? Т.к. если углубляться в тонкости, то задачи становятся практически не решаемые, тем более за отведенное для экзамена время.
Да. Были замечания. В задании явно указывается, что политика меняется в начале года. Если нет, то значит может измениться в любой день.
Название: Задача 1.01
Отправлено: Demy от Июнь 08, 2014, 11:29:13 am
Цитата korsal ()
Посмотрел решение в задачнике. Там нет услуг, а значит и контролировать ничего не надо.
В моем примере есть! У справочника "Номенклатура" есть реквизит "ВидНоменклатуры". В расходнике, в запросе, услуги фильтруются. И здесь явно прослеживается либо усложнение задачи, либо неправильное решение. Другими словами 1С не пройдет свою же сертификацию! :)
Цитата korsal ()
Но, повторюсь, для экзамена достаточно и отбора. По крайней мере, я не видел сообщений среди сдавшихся, чтобы были какие-то проблемы с этим. Лучше в запросе все-таки оставить проверку, чтобы услуга не попала в регистр ни при каких обстоятельствах. А на экзамене, если спросят, объяснить, почему так сделал.
Буду надеяться что так оно и есть.
Цитата korsal ()
Да. Были замечания. В задании явно указывается, что политика меняется в начале года. Если нет, то значит может измениться в любой день.
Что-то я не нашел задач где говориться про начало года. Получается большая часть задач решенных на форуме неправильная?!!! sad
Название: Задача 1.01
Отправлено: korsal от Июнь 08, 2014, 01:44:32 pm
Цитата Demy ()
Что-то я не нашел задач где говориться про начало года. Получается большая часть задач решенных на форуме неправильная?!!!
В задачнике указывается - "на этот год", т.е. имеется ввиду календарный, а значит политика меняется в начале года. Тут все правильно. А вот в задачах в составе экзаменационных билетов такого уточнения нет.
 В задачах 1.21, 1.22 есть приоритеты складов, меняющиеся 1 раз в месяц. Там нет уточнения и нужно делать проверку.
Название: Задача 1.01
Отправлено: prof-net от Июль 24, 2014, 06:08:23 pm
Здравствуйте.
 Вот мой вариант решения... буду очень признателен за конструктивную критику

 Ребята, подскажите как прикрепить файл с вариантом решения
Название: Задача 1.01
Отправлено: a_L_ex от Июль 26, 2014, 05:35:33 pm
Добрый день.
 Подскажите как добавить базу с решением для проверки?
Название: Задача 1.01
Отправлено: prof-net от Июль 29, 2014, 03:14:31 pm
Пока не могу выложить свой вариант решения, то вопрос сформулирую в сообщении.

 Собственно в задаче 1.01 помимо всего прочего, необходимо создать регистр "Продажи", который имеет вид обороты... И в котором должны накапливаться количество и цена продажи в разрезах номенклатуры. По данным этого регистра, потом формируется отчет "По продажам", в котором кроме ресурсов данного регистра требуется еще вывести и себестоимость. Дык вот, если я например не буду добавлять в регистр "Продажи" еще один ресурс "себестоимость", а эти данные в отчет выведу из другого регистра (ОстаткиНоменклатуры) объединив 2 таблицы, это будет считаться ошибкой на экзамене? Просто смотрел решение нескольких человек, и у всех регистр "Продажи" Содержал ресурсы - количество, цену и себестоимость...
Название: Задача 1.01
Отправлено: 7183847 от Июль 29, 2014, 03:30:57 pm
а как вообще правильно решать эту и другие похожие задачи? вынося партии в отдельный регистр накопления или включая измерение партии в остатки номенклатуры?
Название: Задача 1.01
Отправлено: Denis_D от Июль 29, 2014, 05:33:39 pm
я делал отдельный регистр - остатки, отдельный - себестоимость (с измерением партии) и оборотный продажи
Название: Задача 1.01
Отправлено: mulradik от Июль 30, 2014, 12:20:13 pm
Начал готовиться к Аттестации. Как и все, наверное, с задачи 1.1.
 Теперь надо как-то набрать 10 полезных сообщений, чтобы иметь возможность выложить своё решение на проверку.
 А что, если это будут не очень полезные сообщения?
Название: Задача 1.01
Отправлено: prof-net от Июль 30, 2014, 12:49:53 pm
Цитата: mulradik;35607
А что, если это будут не очень полезные сообщения?
Я так предполагаю что твои (мои) сообщения будет оценивать не комиссия заслуженных программистов, которая оценит полезность твоего сообщения по 5 бальной шкале, и если меньше чем 2.2 балла то сообщение не засчитают, а если больше то все ок.

 Скорей всего если на тебя никто не пожалуется и если ты не будешь расценен как бот (программными алгоритмами форума) то в данном контексте сообщение автоматически считается полезным :)
Название: Задача 1.01
Отправлено: mulradik от Июль 30, 2014, 12:59:22 pm
Спасибо.
 :-) пойду нафлужу ещё восемь сообщений
Название: Задача 1.01
Отправлено: prof-net от Июль 30, 2014, 04:14:02 pm
ну раз пока свое решение выложить не могу, то предлагаю посмотреть видео, где некий "Мурадян К.В." решает эту задачу... Признаюсь, что смотреть его, мне было очень утомительно, но для дела посчитал полезным. Дык вот, у меня появились подозрения что его решение не является оптимальным/правильным... Если у кого хватит терпения ознакомится с этим материалом, буду рад услышать коментарии

 и собственно ссылка https://yadi.sk/d/InVRqzTBYTVbZ/%D0%A3%D1%80%D0%BE%D0%BA%D0%B8%D0%A1%D0%BF%D0%B5%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D1%81%D1%821%D0%A18/
Название: Задача 1.01
Отправлено: mulradik от Август 01, 2014, 04:22:17 am
Цитата: prof-net;35615
ну раз пока свое решение выложить не могу, то предлагаю посмотреть видео, где некий "Мурадян К.В." решает эту задачу... Признаюсь, что смотреть его, мне было очень утомительно, но для дела посчитал полезным. Дык вот, у меня появились подозрения что его решение не является оптимальным/правильным... Если у кого хватит терпения ознакомится с этим материалом, буду рад услышать коментарии


 Я купил обучающие курсы по подготовке 1С:Спец по платформе, там эта классическая задача разбирается от и до. Просто одно дело смотреть и понимать, а другое - решать задачу самому, что-то можешь упустить.

Добавлено (01.08.2014, 04:21)
---------------------------------------------

Цитата: 7183847;35601
а как вообще правильно решать эту и другие похожие задачи? вынося партии в отдельный регистр накопления или включая измерение партии в остатки номенклатуры?

 Партии с остатками нельзя путать. Их надо выносить в отдельный регистр, особенно когда ведётся учёт по складам.

Добавлено (01.08.2014, 04:22)
---------------------------------------------

Цитата: prof-net;35600
Просто смотрел решение нескольких человек, и у всех регистр "Продажи" Содержал ресурсы - количество, цену и себестоимость...

 Чистов решает именно так. Получается проще и красивее.
 Хотя можно и соединением с партионным регистром решать.
Название: Задача 1.01
Отправлено: prof-net от Август 05, 2014, 04:26:27 pm
Вот мое решение... Конструктивная критика приветствуется :)

 https://yadi.sk/d/W0tHA53-Z54rU

Добавлено (05.08.2014, 16:26)
---------------------------------------------

Цитата mulradik ()
купил обучающие курсы по подготовке 1С:Спец по платформе, там эта классическая задача разбирается от и до.
ЭЭЭ... А можно попросить поделится? )
Название: Задача 1.01
Отправлено: mulradik от Август 07, 2014, 11:52:44 am
Цитата: prof-net
ЭЭЭ... А можно попросить поделится? )

 Это курс Гилёва и Чистова. Он защищён ключом с привязкой к компьютеру, поэтому не получится...НО!
 В принципе, можно накачать с интернета открытые бесплатные видеоуроки Чистова - будет очень полезно.
 По вашему решению:
 1. Себестоимость пишется через "е"
 2. Там, где вы пишете "Учетная политика на текущий год не заполнена" и устанавливаете флаг отказа - дальше код продолжать бесмысленно.
 3. На партионный регистр надо накладывать управляемую блокировку, а не использовать свойство БлокироватьДляИзменения
 4. Регистр Продаж не надо блокировать, там мы ничего не контролируем.
 5. "Движения.ОстаткиНоменклатуры.Записать(); Движения.Продажи.Записать();" - это лишнее, 1С сама всё запишет при завершении транзакции.
 6. Некорректная конструкция ВЫБОР
           КОГДА ВТ.Номенклатура.Услуга = ЛОЖЬ
              ТОГДА ИСТИНА
           ИНАЧЕ ЛОЖЬ
        КОНЕЦ
 можно просто "ВТ.Номенклатура.Услуга"
 7. Почему в первом запросе "МАКСИМУМ(РасходнаяНакладнаяСписокНоменклатуры.Сумма)"?
Название: Задача 1.01
Отправлено: Svetik_1704 от Август 15, 2014, 05:10:02 pm
Добрый день. Подскажите как правильно контролировать копейки?
 Тут предлагался вариант
 Если КСписанию = КоличествоОстаток Тогда
 Стоимость = СуммаОстатка;
 Иначе
 Стоимость = КСписанию * СуммаОстатка / КоличествоОстаток;
 КонецЕсли;

 Он правильный. Но ведь с точки зрения правил арифметики, если написать без условия "если"
 Стоимость = КСписанию / КоличествоОстаток * СуммаОстатка
 , то сначало произойдет деление, а потом умножение и, т.о., в случае, когда КСписанию = КоличествоОстаток, получаем, что Стоимость = 1 * СуммаОстатка.
 Т.е. такое написание тоже вроде как допустимо. А прокатит ли оно на экзамене?
Название: Задача 1.01
Отправлено: beatthatthing от Август 15, 2014, 06:21:12 pm
Предлагаю на суд общественности мое решение: http://goo.gl/aCjuI9

 
Цитата Svetik_1704 ()
Он правильный. Но ведь с точки зрения правил арифметики, если написать без условия "если" Стоимость = КСписанию / КоличествоОстаток * СуммаОстатка
 , то сначало произойдет деление, а потом умножение и, т.о., в случае, когда КСписанию = КоличествоОстаток, получаем, что Стоимость = 1 * СуммаОстатка.
 Т.е. такое написание тоже вроде как допустимо. А прокатит ли оно на экзамене?

 Насколько я слышал - это утвержденная метода 1с контроля копеек. Так что лучше не лениться и их написать wink
Название: Задача 1.01
Отправлено: Svetik_1704 от Август 19, 2014, 09:40:22 am
Как должна быть реализована фраза "Ещё раз подчеркивается - учетная политика действует год. На следующий год метод списания может смениться".
 Какой вариант реализации правильный для экзамена:
 1. Указать периодичность РС = в пределах секунды. Юзер сам будет контролировать периодичность, но учетная политика будет действовать с даты, которую указал пользователь.
 2. Указать периодичность РС = в пределах года. Но тогда учетная политика будет действовать с 1 января. А как тогда быть со старыми документами, если изменение в учете было в середине года?
 3. Вар. 1 + реализовать как то контроль вводимой даты?
Название: Задача 1.01
Отправлено: Denis_D от Август 19, 2014, 09:43:24 am
конечно нужно делать РС с периодичностью год и брать срез последних на дату документа. и ввести записи на начало года в котором есть документы.
Название: Задача 1.01
Отправлено: alex1004 от Август 19, 2014, 09:58:29 am
Svetik_1704
 "Ещё раз подчеркивается - учетная политика действует год. На следующий год метод списания может смениться" - эта формулировка дает четко понять, что учетная политика действует именно календарный год. Поэтому периодичность РС год. В других задачах, может быть другая формулировка, например "Значение учетной политики меняется не чаще одного раза в год. При проведении документа необходимо использовать метод, актуальный на момент проведения". Здесь скорее всего речь идет именно о периодичности в пределах секунды или даже до регистратора если политика устанавливается отдельным документом. Т.е. действия политики может меняться раз в год, но в любой момент. В любом случае такой момент лучше будет уточнить на экзамене.
Название: Задача 1.01
Отправлено: Denis_D от Август 19, 2014, 01:23:01 pm
никаких секунд тут и близко нет.
Название: Задача 1.01
Отправлено: alex1004 от Август 19, 2014, 02:17:22 pm
Задача по ОУ билета № 3. Формулировка условия: "Учетная политика может меняться каждый месяц, её изменение фиксируется соответствующим документом".

 Комментарий к этой задаче человека которому билет попался:

 "Я делал способом описанным здесь на формуме. Для смены учетной политики я сделал месячный регистр сведений. Оказалось не совсем правильно, поскольку учетная политика меняется раз в месяц, но кто сказал, что она должна меняться именно первого числа в начале дня . Упрощение - раз. Далее - не факт, что именно в эту секунду не будет сделан приход или расход. В общем выход один - сделать так, чтобы учетная политика могла устанавливаться на определенный момент времени и меняться хоть сто раз в день. Условие, что учетная политика может меняться раз месяц - это ограничение пользователей."

 Поэтому возможно не стоит быть столь категоричным и на экзамене просто уточнить, что подразумевается под данной формулировкой.
Название: Задача 1.01
Отправлено: Denis_D от Август 19, 2014, 02:46:06 pm
Если что-то в билете не описано точно - делай так как тебе удобнее и пиши в описании что сделал так. Документ может вводиться любой датой. а значение периода само приведется к началу года. или месяца, если по билету 3. если хочешь, сделай Период = ДобавитьМесяц(НачалоМесяца(Дата),1). И напиши в описании что сделал так. Периодичность секунда - это избыточность.
Название: Задача 1.01
Отправлено: aramisov от Август 20, 2014, 03:56:37 pm
добрый день, тоже начал готовиться. не нашел примера и объяснения этого куска вопроса, не понятно как списание должно быть? по идее с какого склада расход с такого и списываем количество, себестоимость и партию? как можно продавая со склада Транзитный списывать товар с Основного склада?

 для расчета себестоимости при списании товара необходимо учитывать только момент поступления товара в компанию, вне зависимости от того, на какой склад он пришел. Предположим, для метода списания FIFO первое поступление портсигара произошло на склад «Основной» документом «Приходная накладная №1», а потом на склад «Транзитный» документом «Приходная накладная №2». В этом случае при продаже товара со склада «Транзитный» в первую очередь должна быть списана себестоимость портсигара по документу «Приходная накладная №1», так как она пришла раньше.
Название: Задача 1.01
Отправлено: beatthatthing от Август 20, 2014, 04:18:41 pm
Цитата aramisov ()
добрый день, тоже начал готовиться. не нашел примера и объяснения этого куска вопроса, не понятно как списание должно быть? по идее с какого склада расход с такого и списываем количество, себестоимость и партию? как можно продавая со склада Транзитный списывать товар с Основного склада? для расчета себестоимости при списании товара необходимо учитывать только момент поступления товара в компанию, вне зависимости от того, на какой склад он пришел. Предположим, для метода списания FIFO первое поступление портсигара произошло на склад «Основной» документом «Приходная накладная №1», а потом на склад «Транзитный» документом «Приходная накладная №2». В этом случае при продаже товара со склада «Транзитный» в первую очередь должна быть списана себестоимость портсигара по документу «Приходная накладная №1», так как она пришла раньше

 То есть Вас не смущает фраза при постановке задачи:  "Складской учет товаров не ведется" ?!
Название: Задача 1.01
Отправлено: aramisov от Август 20, 2014, 04:27:57 pm
Цитата: beatthatthing;35787
То есть Вас не смущает фраза при постановке задачи: "Складской учет товаров не ведется" ?!

 Где это написано?
 читаю
 Учет товаров ведется в разрезе складов. Поступление и продажа осуществляется с указанием склада (в шапке документа).

 В самом низу написано "Необходимо построить отчет по остаткам товара на складах на указанную дату" и ниже пример где остатки показаны в разрезе складов.

 Задачи смотрю https://docs.google.com/document/d/19Cv6COjMRcN_qDLbiWmYwp686IXpxE9GHHzQkpa2rME/edit#
 Билет первый оперативный учет
Название: Задача 1.01
Отправлено: beatthatthing от Август 20, 2014, 04:50:23 pm
Цитата aramisov ()
Где это написано? читаю
 Учет товаров ведется в разрезе складов. Поступление и продажа осуществляется с указанием склада (в шапке документа).

 В самом низу написано "Необходимо построить отчет по остаткам товара на складах на указанную дату" и ниже пример где остатки показаны в разрезе складов.

 Задачи смотрю https://docs.google.com/documen....t#
 Билет первый оперативный учет
Спешу обрадовать, что нумерация задач на форуме идет в соответствии с нумерацией из сборника для подготовки. 
 Например интересующая вас задача имеет номер 1.7 в сборнике.
Название: Задача 1.01
Отправлено: alex1004 от Август 20, 2014, 09:36:59 pm
Цитата: aramisov;35786
по идее с какого склада расход с такого и списываем количество, себестоимость и партию?


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

 Для реализации такой задачи на регистрах накопления, необходимо использовать два регистра остатков.
 Первый с измерениями: Номенклатура и Склад и ресурсом Количество. Второй с измерениями: Номенклатура и Партия и ресурсами: Количество и Сумма.
Название: Задача 1.01
Отправлено: Svetik_1704 от Август 21, 2014, 09:44:52 am
Цитата: alex1004;35759

 Комментарий к этой задаче человека которому билет попался:

 "Я делал способом описанным здесь на формуме. Для смены учетной политики я сделал месячный регистр сведений. Оказалось не совсем правильно, поскольку учетная политика меняется раз в месяц, но кто сказал, что она должна меняться именно первого числа в начале дня . Упрощение - раз. Далее - не факт, что именно в эту секунду не будет сделан приход или расход. В общем выход один - сделать так, чтобы учетная политика могла устанавливаться на определенный момент времени и меняться хоть сто раз в день. Условие, что учетная политика может меняться раз месяц - это ограничение пользователей."
 


 Именно подобный комментарий меня и смутил. Значит буду задавать наводящие вопросы на экзамене.
Название: Задача 1.01
Отправлено: masenshi от Август 22, 2014, 08:42:39 am
Цитата: alex1004;35759
Задача по ОУ билета № 3. Формулировка условия: "Учетная политика может меняться каждый месяц, её изменение фиксируется соответствующим документом".

 Комментарий к этой задаче человека которому билет попался:

 "Я делал способом описанным здесь на формуме. Для смены учетной политики я сделал месячный регистр сведений. Оказалось не совсем правильно,


 Для смены учетной политики сделал регистр, а документ сделал?
 Что-то не нашел такой задачи в сборнике (кто найдет скажите номер).
 Вероятно, что тебе попалась задача из сборника №1.5, где сказано:
 Учетная политика может меняться каждый день, ее изменение фиксируется соответствующим документом.

 В задаче 1.1 нужно делать периодичность год. Там это даже подчеркивается.
 Если сделать секунду то, возможно, что будет ошибка.

Добавлено (22.08.2014, 08:42)
---------------------------------------------
Пример из сборника задач 2014 года. Модуль проведения расходной содержит:
 //Очистим формируемые наборы, чтобы не было проблем с остатками при оперативном проведении
 Движения.ОстаткиНоменклатуры.Записать();

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

 Правильнее было бы так:
 Если Режим = РежимПроведенияДокумента.Оперативный Тогда
    Движения.ОстаткиНоменклатуры.Записать();
 КонецЕсли;

 И момент номер 2.
 В примере не парятся и независимо от режима проведения передают параметр в запрос
 Запрос.УстановитьПараметр("Момент", МоментВремени());
 хотя было бы правильнее для оперативного проведения передавать пустую дату. Или по барабану и делать все из примера?

Название: Задача 1.01
Отправлено: alex1004 от Август 24, 2014, 08:40:15 am
Цитата: masenshi;35804
И момент номер 2.
 В примере не парятся и независимо от режима проведения передают параметр в запрос
 Запрос.УстановитьПараметр("Момент", МоментВремени());
 хотя было бы правильнее для оперативного проведения передавать пустую дату. Или по барабану и делать все из примера?


 На экзамене делайте так, как правильно, а не так как где-либо сказано или написано. Ссылки на сборники, типовые конфигурации там не пройдут. Везде во всех источниках информации могут быть ошибки и не точности, умышленные или нет, Ваша задача их отсеять. Если Вы хорошо понимаете зачем перед передачей этого параметра проверяется режим проведения и почему передается тот или иной вариант, Вас не смутить ни каким не удачным примером.
Название: Задача 1.01
Отправлено: aramisov от Август 29, 2014, 02:55:02 pm
Подскажите пожалуйста я правильно обработку проведения в документе реализация организовал? (извините что так, не нашел как файл прикреплять)

 Процедура ОбработкаПроведения(Отказ, РежимПроведения)

 Движения.Продажи.Очистить();
 Движения.Продажи.Записывать = Истина;

 Движения.ОстаткиНоменклатуры.Очистить();
 Движения.ОстаткиНоменклатуры.Записывать = Истина;

 Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
 Движения.ОстаткиНоменклатуры.Записать();
 КонецЕсли;

 Блокировка = Новый БлокировкаДанных; //Накладываем блокировку
 ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");;
 ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры; //источник фильтра блокировки
 ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
 ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура"); // сопосталяем данные между измерением регистра и колонкой таб части
 Блокировка.Заблокировать();

 МетодСписания = РегистрыСведений.МетодСписания.ПолучитьПоследнее(рабочаядата)["МетодСписания"];
 Если МетодСписания = Перечисления.УчетнаяПолитика.ФИФО Тогда
 Убыв = "";
 Иначе
 Убыв = "УБЫВ";
 КонецЕсли;

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

 Результат = Запрос.Выполнить();
 ВыборкаПоНоменклатуре = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам,"Номенклатура"); // обходим по номенклатуре
 Пока ВыборкаПоНоменклатуре.Следующий() Цикл
 Если ВыборкаПоНоменклатуре.КоличествоКСписанию > ВыборкаПоНоменклатуре.КоличествоОстаток Тогда //проверяем есть ли вообще нужное количество
 Сообщение = Новый СообщениеПользователю;
 Сообщение.Поле = "СписокНоменклатуры["+(ВыборкаПоНоменклатуре.НомерСтроки-1)+"].Количество";
 Сообщение.Текст = "На складе: "+ВыборкаПоНоменклатуре.КоличествоОстаток+" нехватает: " + (ВыборкаПоНоменклатуре.КоличествоКСписанию-ВыборкаПоНоменклатуре.КоличествоОстаток);
 Сообщение.УстановитьДанные(ЭтотОбъект);
 Сообщение.Сообщить();
 Отказ = Истина;
 Иначе //Если нужное количество есть
 Если Отказ Тогда // Если хоть одной номенклатуры нехватает проводить остальные смысла нет
 Продолжить;    // Передаём управление в начало цикла чтобы продолжить проверку остальной номенклатуры
 КонецЕсли;
 НужноСписать = ВыборкаПоНоменклатуре.КоличествоКСписанию;

 Партии =     ВыборкаПоНоменклатуре.Выбрать(); // проваливаемся в группировку и начинаем цикл по партиям
 Пока Партии.Следующий() и НужноСписать > 0 Цикл

 Списываем = МИН(НужноСписать,Партии.КоличествоОстаток);

 Движение =    Движения.ОстаткиНоменклатуры.Добавить();
 Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
 Движение.Активность = Истина;
 Движение.Регистратор = Ссылка;
 Движение.Период = Дата;
 Движение.Партия = Партии.Партия;
 Движение.Количество = Списываем;
 Движение.Номенклатура= Партии.Номенклатура;
 Движение.Сумма = Партии.СуммаОстаток*Списываем/Партии.КоличествоОстаток;
 НужноСписать = НужноСписать - Списываем;

 КонецЦикла;
 //Добавим движения по Регистру продажи
 ДвижениеПродажи = Движения.Продажи.Добавить();
 ДвижениеПродажи.Активность = Истина;
 ДвижениеПродажи.Регистратор = Ссылка;
 ДвижениеПродажи.Период = Дата;
 ДвижениеПродажи.Номенклатура = ВыборкаПоНоменклатуре.Номенклатура;
 ДвижениеПродажи.Количество = ВыборкаПоНоменклатуре.КоличествоКСписанию;
 ДвижениеПродажи.Сумма = ВыборкаПоНоменклатуре.СуммаКСписанию;

 КонецЕсли;
 КонецЦикла;
 КонецПроцедуры
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 03, 2014, 08:33:38 am
Цитата: aramisov;35912
Подскажите пожалуйста я правильно обработку проведения в документе реализация организовал?

 Неправильно?
 1) Зачем используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ?
 При таком варианте, если товара из документа совсем нет на остатках, документ проведется и ничего не спишется.
 2) Проблема копеек не решена.
 3) Сортировку делать по моменту времени
 4) Зачем писать это:
 Движение.Активность = Истина;
 Движение.Регистратор = Ссылка;
 5) МетодСписания = РегистрыСведений.МетодСписания.ПолучитьПоследнее(рабочаядата)["МетодСписания"];
 Что еще за рабочаядата? Обращаться к ["МетодСписания"] имхо лучше через точку.
Название: Задача 1.01
Отправлено: aramisov от Сентябрь 03, 2014, 03:36:20 pm
Цитата: masenshi;35975
Цитата: aramisov;35912
Подскажите пожалуйста я правильно обработку проведения в документе реализация организовал?
Неправильно? 1) Зачем используется ВНУТРЕННЕЕ СОЕДИНЕНИЕ? При таком варианте, если товара из документа совсем нет на остатках, документ проведется и ничего не спишется. 2) Проблема копеек не решена. 3) Сортировку делать по моменту времени 4) Зачем писать это: Движение.Активность = Истина; Движение.Регистратор = Ссылка; 5) МетодСписания = РегистрыСведений.МетодСписания.ПолучитьПоследнее(рабочаядата)["МетодСписания"]; Что еще за рабочаядата? Обращаться к ["МетодСписания"] имхо лучше через точку.


 Спасибо
 как решить проблему копеек? думал проблема решается путем сведение к минимуму операции деления.

 рабочаядата это рабочая дата , или надо на дату проведения документа ориентироваться?
Название: Задача 1.01
Отправлено: MariaZhev от Сентябрь 03, 2014, 10:59:46 pm
Цитата: mulradik;35618
Я купил обучающие курсы по подготовке 1С:Спец по платформе, там эта классическая задача разбирается от и до. Просто одно дело смотреть и понимать, а другое - решать задачу самому, что-то можешь упустить.


 Курс по подготовке к экзамену по 8.3 или по 8.2 еще?
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 04, 2014, 03:39:35 am
Цитата: aramisov;35981
Спасибо
 как решить проблему копеек? думал проблема решается путем сведение к минимуму операции деления.

 http://forum.chistov.pro/index.php?topic=1563.msg35976#msg35976

 
Цитата: aramisov;35981
рабочаядата это рабочая дата , или надо на дату проведения документа ориентироваться?

 Я бы ориентировался на дату документа, в таком случае перепроведение документов прошлого года не произвело бы никаких изменений. Конкретно в условии этой задачи про это ничего не сказано, но в других условие такое будет.
Название: Задача 1.01
Отправлено: ealekseevost от Сентябрь 04, 2014, 09:42:33 am
Добрый день! Подскажите пожалуйста что делать с кнопкой "Подбор" в расходной накладной? Обязательно ли описывать механизм подбора? Спасибо.
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 04, 2014, 10:26:35 am
Цитата: ealekseevost;35993
Добрый день! Подскажите пожалуйста что делать с кнопкой "Подбор" в расходной накладной? Обязательно ли описывать механизм подбора? Спасибо.

 Думаю, что если вы не опишите механизм подбора, то кнопку лучше убрать.
Название: Задача 1.01
Отправлено: ealekseevost от Сентябрь 04, 2014, 11:54:01 am
Цитата: masenshi;35994
Думаю, что если вы не опишите механизм подбора, то кнопку лучше убрать.


 А, ну отлично...)
Название: Задача 1.01
Отправлено: Odin777 от Сентябрь 11, 2014, 10:52:08 am
Вопрос знающим людям, в регистр ОстаткиТоваров нужно ли добавлять два ресурса -Количество- и -Стоимость- или можно обойтись только  ресурсом -Количество-, не пойму как тогда получать себестоимость при проведении Расходной накладной для регистра Продажи.

 Добавлено (11.09.2014, 10:52)
 ---------------------------------------------
 Или фраза
Цитата
Списание себестоимости товаров должно быть организовано по партиям,
намекает нам на то, что в регистр ОстаткиТоваров в данном случае необходимо добавить два ресурса.
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 11, 2014, 12:04:06 pm
Цитата: Odin777;36073
в регистр ОстаткиТоваров нужно ли добавлять два ресурса -Количество- и -Стоимость- или можно обойтись только ресурсом -Количество-, не пойму как тогда получать себестоимость при проведении Расходной накладной для регистра Продажи.


 Для первой задачи можно хранить себестоимость в регистре ОстаткиТоваров (для ее списания) и в регистре Продажи (для отчета)
Название: Задача 1.01
Отправлено: Odin777 от Сентябрь 11, 2014, 12:58:21 pm
Другого способа никто не знает, или для данной задачи он наиболее оптимальный. masenshi, спасибо за ваш ответ.
Название: Задача 1.01
Отправлено: Odin777 от Сентябрь 11, 2014, 02:08:39 pm
Мое решение, пожалуйста поделитесь своими замечаниями и предложениями, если они возникнут.
Вложения:
_1.dt
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 12, 2014, 04:19:22 am
Цитата: Odin777;36081
Мое решение, пожалуйста поделитесь своими замечаниями и предложениями, если они возникнут.

 1) Два раза встречается
 Движения.ОстаткиТоваров.Очистить();
 тут наверное подразумевалось
 Движения.Продажи.Очистить();
 Не ошибка но все же
 2) Движения.Продажи.Записать();
 Наверное бессмысленно, т.к. запроса к данному регистру нет.
 3) Движения.ОстаткиТоваров.Записать();
 Имеет смысл для оперативного проведения
 +
 логичнее передавать не
 Новый Граница(МоментВремени(), ВидГраницы.Включая)
 а
 Новый Граница(МоментВремени(), ВидГраницы.Исключая)
 или просто МоментВремени()
 для неоперативного проведения
 4) Движения.Записать();
 А это еще зачем (строчка в самом конце)?
 движения будут записаны при завершении транзакции, т.к. флаги
 Движения.ОстаткиТоваров.Записывать = Истина;
 Движения.Продажи.Записывать = Истина;
 установлены
 5) В расходной накладной проверяет наличие услуг на остатке.
 6) В документы допускается вводить отрицательные количества, которые успешно попадают на остатки.
Название: Задача 1.01
Отправлено: Odin777 от Сентябрь 13, 2014, 12:27:40 am
masenshi, спасибо за ваш отзыв, по поводу 1 и 2 п. с вами согласен, по поводу п. 3 я немного не понял почему исключаем, по поводу п. 4 невнимательность, но насколько я знаю при формировании движений вне модуля объекта документа такая строчка кода актуальна?!, п. 5 не совсем понял в какой строке кода я проверяю наличие услуг в остатке, п. 6 если я вас правильно понял вы говорите о том что можно добавить в ТЧ документа отрицательное количество товара, если да то исправился, можно проставить галочку -Неотрицательное- в свойстве реквизитов Количество и Стоимость.
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 15, 2014, 03:45:07 am
п. 3. А как вы объясните, что нужно включать? Перечитайте еще раз мой ответ по п. 3.
 п. 4. Смотря что имеется ввиду "при формировании движений вне модуля объекта документа". Нужно рассматривать конкретную ситуацию.
 п. 5. По условию задачи могут оказываться услуги. Так вот если ввести в расходную услугу, то получим ошибку:
 Для номенклатуры Доставка нехватает 1 ед. товара! ИМХО, это грубая ошибка.
 п. 6. Да.
 Кстати, вот более краткий вариант
 "ДАТАВРЕМЯ(1,1,1) в запрос вместо параметра &ПустаяДата"
Название: Задача 1.01
Отправлено: DmitryZzz от Сентябрь 17, 2014, 03:00:32 pm
Приветствую всех!

 Я просмотрел решения последних нескольких страниц и не нашел применения контроля остатков по "новой" методике... Почему? Ведь для задач оперативного учета это должно быть правилом...

 Прошу прощения за "многобуков", но файлы пока не могу выкладывать, т.к. только сейчас перешел из гостей в пользователи.
 Прокомментируйте мой вариант контроля остатков:

 // регистр ОстаткиТоваров Приход
    Движения.ОстаткиТоваров.Записывать = Истина;
    Движения.ОстаткиТоваров.Очистить();    
    Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина;
    
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ПродажаТоваровСписокТоваров.Номенклатура КАК Номенклатура,
    |   СУММА(ПродажаТоваровСписокТоваров.Количество) КАК Количество,
    |   СУММА(ПродажаТоваровСписокТоваров.Выручка) КАК Выручка,
    |   &ВидДвижения,
    |   &Период
    |ПОМЕСТИТЬ ДокТЧ
    |ИЗ
    |   Документ.ПродажаТоваров.СписокТоваров КАК ПродажаТоваровСписокТоваров
    |ГДЕ
    |   ПродажаТоваровСписокТоваров.Ссылка = &Ссылка
    |
    |СГРУППИРОВАТЬ ПО
    |   ПродажаТоваровСписокТоваров.Номенклатура
    |
    |ИНДЕКСИРОВАТЬ ПО
    |   Номенклатура
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    |   ДокТЧ.Номенклатура,
    |   ДокТЧ.Количество,
    |   ДокТЧ.Выручка,
    |   ДокТЧ.ВидДвижения,
    |   ДокТЧ.Период
    |ИЗ
    |   ДокТЧ КАК ДокТЧ";
    
    Запрос.УстановитьПараметр("Ссылка", Ссылка);
    Запрос.УстановитьПараметр("ВидДвижения", ВидДвиженияНакопления.Расход);
    Запрос.УстановитьПараметр("Период", Дата);
    
    РезультатЗапроса = Запрос.Выполнить();
    
    Движения.ОстаткиТоваров.Загрузить(РезультатЗапроса.Выгрузить());
    Движения.Записать();
    
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ОстаткиТоваровОстатки.Номенклатура.Представление,
    |   ОстаткиТоваровОстатки.КоличествоОстаток
    |ИЗ
    |   РегистрНакопления.ОстаткиТоваров.Остатки(
    |         &МоментИтогов,
    |         Номенклатура В
    |            (ВЫБРАТЬ
    |               ДокТЧ.Номенклатура
    |            ИЗ
    |               ДокТЧ КАК ДокТЧ)) КАК ОстаткиТоваровОстатки
    |ГДЕ
    |   ОстаткиТоваровОстатки.КоличествоОстаток < 0";
    
    Если Режим = РежимПроведенияДокумента.Оперативный Тогда
       МоментИтогов = '00010101';
    Иначе
       МоментИтогов = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    КонецЕсли;
    
    Запрос.УстановитьПараметр("МоментИтогов", МоментИтогов);
    
    РезультатПоОстаткам = Запрос.Выполнить();
    
    Если НЕ РезультатПоОстаткам.Пустой() Тогда
       Отказ = Истина;
       Выборка = РезультатПоОстаткам.Выбрать();
       
       Пока Выборка.Следующий() Цикл
          Сообщение = Новый СообщениеПользователю;
          Сообщение.Текст = "Не хватает "+Выборка.НоменклатураПредставление+" - "+ (-Выборка.КоличествоОстаток);
          Сообщение.Сообщить();   
       КонецЦикла;
       
    КонецЕсли;
    
    Если Отказ Тогда
       Возврат;
    КонецЕсли;
    
    
    Движения.ОстаткиТоваров.Очистить();
    Движения.ОстаткиТоваров.Записать();
    Движения.ОстаткиТоваров.Записывать = Истина;
    
    //Блокировка
    Блокировка = Новый БлокировкаДанных;
    ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиТоваров");
    ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
    ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
    ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
 Блокировка.Заблокировать();
    //Блокировка

 ... и далее списание партий

 Спасибо!
Название: Задача 1.01
Отправлено: alex1004 от Сентябрь 18, 2014, 12:29:52 pm
Новая методика проведения не самоцель, а средство решения некоторых задач :)
 По новой методике надо решать только задачи в которых не надо обращаться к регистру для получения себестоимости, информации о партиях и т.д до записи набора. Это единичные задачи... В остальных случаях используется старая методика.
 Сравните для этой задачи:
 Старая методика.
 1. Мы делаем запись пустого набора (запись 1).
 2. Читаем остатки (чтение 1).
 3. Делаем запись заполненного набора (запись 2).

 Итого две записи и одно "маленькое чтение" остатков.

 Ваш вариант новой методики:
 1. Запись "не полноценного набора" (запись 1)
 2. Чтение остатков (чтение 1)
 3. Запись пустого набора (запись 2)
 4. Чтение остатков (нам же надо получить себестоимость и партии) (чтение 2)
 5. Запись полноценного набора (запись 3).

 Итого: Три записи и два чтения (одно "большое" и другое "маленькое"). Оно нам надо? :)

 Если же использовать новую методику там где ее действительно надо использовать, то в этом случае мы получаем:

 1.Запись набора (запись 1)
 2.Чтение остатков ниже нуля (чтение 1)

 Получаем одну запись и одно "маленькое" чтение, т.е. чтение только тех остатков которые меньше нуля.
Название: Задача 1.01
Отправлено: DmitryZzz от Сентябрь 18, 2014, 01:25:44 pm
Цитата: alex1004;36211
Новая методика проведения не самоцель, а средство решения некоторых задач :)
 По новой методике надо решать только задачи в которых не надо обращаться к регистру для получения себестоимости, информации о партиях и т.д до записи набора. Это единичные задачи... В остальных случаях используется старая методика.
 Сравните для этой задачи:
 Старая методика.
 1. Мы делаем запись пустого набора (запись 1).
 2. Читаем остатки (чтение 1).
 3. Делаем запись заполненного набора (запись 2).

 Итого две записи и одно "маленькое чтение" остатков.

 Ваш вариант новой методики:
 1. Запись "не полноценного набора" (запись 1)
 2. Чтение остатков (чтение 1)
 3. Запись пустого набора (запись 2)
 4. Чтение остатков (нам же надо получить себестоимость и партии) (чтение 2)
 5. Запись полноценного набора (запись 3).

 Итого: Три записи и два чтения (одно "большое" и другое "маленькое"). Оно нам надо? :)

 Если же использовать новую методику там где ее действительно надо использовать, то в этом случае мы получаем:

 1.Запись набора (запись 1)
 2.Чтение остатков ниже нуля (чтение 1)

 Получаем одну запись и одно "маленькое" чтение, т.е. чтение только тех остатков которые меньше нуля.


 Благодарю за исчерпывающий ответ!
 Меня и самого смутили лишние записи и чтения регистра, поскольку они не могли не сказаться на производительности...

 Значит, получается после получения временной таблицы с ТЧ документа, устанавливаем управляемую блокировку на РН ОстаткиТоваров и уже при обходе выборки выполняем контроль остатков?

 И можно еще один вопрос?
 Пустой набор записей в РН ОстаткиТоваров нужно записывать только при Оперативном проведении, или и при неоперативном тоже?

 Еще раз спасибо! =)
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 19, 2014, 04:49:35 am
Цитата: DmitryZzz;36214
Пустой набор записей в РН ОстаткиТоваров нужно записывать только при Оперативном проведении, или и при неоперативном тоже?


 При решении задачи по старой методике очищаем движения в базе данных только для оперативного проведения, т.к. однозначно в запросе их исключить не удастся.
 Для неоперативного проведения нет смысла очищать движения в БД т.к. обращаясь к остаткам на дату мы можем передать МоментВремени() и тем самым исключим движения проводимого документа. Я думаю, что ненужная запись движений отрицательно скажется на производительности. Например, при массовом перепроведении документов.
 Но также я не слышал, чтоб на экзамене к этому кто-то придирался.
Название: Задача 1.01
Отправлено: alex1004 от Сентябрь 19, 2014, 08:45:14 am
Хорошо, а если при неоперативном проведении пользователь решает сдвинуть дату документа, скажем делает его на одну секунду "моложе". Проведение остается неоперативным, но остатки мы получаем уже с учетом движений самого документа...
Название: Задача 1.01
Отправлено: masenshi от Сентябрь 19, 2014, 10:06:32 am
Тогда это называется изменением документов задним числом.

 Я полагаю, что Удаление движений "Удалять автоматически при отмене проведения" как раз и дает разработчику возможность управлять записью движений в регистр.
 В условии многих задач сказано, что документы задним числом не меняются (не вводятся). Значит выигрываем на быстродействии.
 Но "лишняя" запись или ее отсутствие не будет ошибкой.
 А какова твоя точка зрения?
Название: Задача 1.01
Отправлено: uazhdan от Октябрь 29, 2014, 12:19:32 am
Привет. Также начал готовиться к экзамену. Прошу проверить мой вариант.

 Процедура ОбработкаПроведения(Отказ, Режим)
    МетодСписания=РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее().МетодСписания;
    Если ЗначениеЗаполнено(МетодСписания) Тогда   
       Если МетодСписания=Перечисления.УчетнаяПолитика.ФИФО Тогда
          ПорядокСписания="";
       Иначе
          ПорядокСписания=" УБЫВ";
       КонецЕсли;
       
       Движения.Продажи.Записывать = Истина;
       Движения.ОстаткиНоменклатуры.Записывать=Истина;
       Движения.ОстаткиНоменклатуры.Очистить();
       Движения.ОстаткиНоменклатуры.Записать();
       
       Блокировка = Новый БлокировкаДанных;
       ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
       ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
       ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
       ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
       Блокировка.Заблокировать();
       
       Запрос = Новый Запрос;
       Запрос.Текст =
       "ВЫБРАТЬ
       |   МАКСИМУМ(РасходнаяНакладнаяСписокНоменклатуры.НомерСтроки) КАК НомерСтроки,
       |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК НоменклатураДок,
       |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоДок,
       |   СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаДок
       |ПОМЕСТИТЬ ВТ
       |ИЗ
       |   Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
       |ГДЕ
       |   РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
       |
       |СГРУППИРОВАТЬ ПО
       |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
       |
       |ИНДЕКСИРОВАТЬ ПО
       |   НоменклатураДок
       |;
       |
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |   ВТ.НомерСтроки КАК НомерСтроки,
       |   ВТ.НоменклатураДок КАК НоменклатураДок,
       |   ВТ.КоличествоДок КАК КоличествоДок,
       |   ВТ.СуммаДок КАК СуммаДок,
       |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
       |   ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
       |   ОстаткиНоменклатурыОстатки.Партия КАК Партия
       |ИЗ
       |   ВТ КАК ВТ
       |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
       |            &Момент,
       |            Номенклатура В
       |               (ВЫБРАТЬ
       |                  ВТ.НоменклатураДок
       |               ИЗ
       |                  ВТ КАК ВТ)) КАК ОстаткиНоменклатурыОстатки
       |      ПО ВТ.НоменклатураДок = ОстаткиНоменклатурыОстатки.Номенклатура
       |
       |УПОРЯДОЧИТЬ ПО
       |   Партия"+ПорядокСписания+"
       |ИТОГИ
       |   МАКСИМУМ(НомерСтроки),
       |   МАКСИМУМ(КоличествоДок),
       |   МАКСИМУМ(СуммаДок),
       |   СУММА(КоличествоОстаток),
       |   СУММА(СуммаОстаток)
       |ПО
       |   НоменклатураДок,
       |   Партия";
       
       Запрос.УстановитьПараметр("Момент", МоментВремени());
       Запрос.УстановитьПараметр("Ссылка", Ссылка);
       
       ВыборкаНоменклатура= Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
       
       Пока ВыборкаНоменклатура.Следующий() Цикл
          КолСписать=ВыборкаНоменклатура.КоличествоДок;
          Себестоимость=0;
          Если Не ВыборкаНоменклатура.НоменклатураДок.Услуга Тогда   
             Если КолСписать>ВыборкаНоменклатура.КоличествоОстаток Тогда
                Сообщение=Новый СообщениеПользователю;
                Сообщение.УстановитьДанные(ЭтотОбъект);
                Сообщение.Поле="СписокНоменклатуры[ВыборкаНоменклатура.НомерСтроки-1].Количество";
                Сообщение.Текст="У Вас на складе "+ВыборкаНоменклатура.КоличествоОстаток+" единиц товара,а Вы продаете "+ВыборкаНоменклатура.КоличествоДок+" единиц товара";
                Сообщение.Сообщить();
                Отказ=Истина;
             Иначе
                
                ВыборкаПартия = ВыборкаНоменклатура.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
                Пока ВыборкаПартия.Следующий() и КолСписать>0 Цикл
                   КолОстаток=ВыборкаПартия.КоличествоОстаток;
                   КолСписываем=Мин(КолСписать,КолОстаток);
                                                    
                   Если КолСписываем=КолОстаток Тогда
                      СуммаКСписанию=ВыборкаПартия.СуммаОстаток;
                   Иначе
                      СуммаКСписанию=?(КолОстаток=0,0,ВыборкаПартия.СуммаОстаток*КолСписать/КолОстаток);
                   КонецЕсли;
                   
                   КолСписать=КолСписать-КолОстаток;
                   Себестоимость=Себестоимость+СуммаКСписанию;
                   
                   Движение = Движения.ОстаткиНоменклатуры.ДобавитьРасход();
                   Движение.Период = Дата;
                   Движение.Партия=ВыборкаПартия.Партия;
                   Движение.Номенклатура = ВыборкаНоменклатура.НоменклатураДок;
                   Движение.Количество = КолСписываем;
                   Движение.Сумма = СуммаКСписанию;
                КонецЦикла;
             КонецЕсли;
          КонецЕсли;
          
          Если Отказ Тогда
             Продолжить;
          КонецЕсли;
          
          Движение = Движения.Продажи.Добавить();
          Движение.Период = Дата;
          
          Движение.Номенклатура = ВыборкаНоменклатура.НоменклатураДок;
          Движение.Количество = ВыборкаНоменклатура.КоличествоДок;
          Движение.Сумма = ВыборкаНоменклатура.СуммаДок;
          Движение.Себестоимость=Себестоимость;
       КонецЦикла;
       
    Иначе
       Сообщить("Учетная политика на "+Год(ТекущаяДата())+" год неопределена");
       Отказ=Истина;
    КонецЕсли;   
 КонецПроцедуры

 Также есть вопрос по отчетам. В отчете Продажи я видел, что добавляют параметр СтандартныйПериод, а Начало периода и Конец периода делают недоступными. Это будет считаться ошибкой или недочетом, если этого не делать?
Название: Re: Задача 1.01
Отправлено: poritskiy от Январь 02, 2015, 03:02:12 pm
1. "Движения.ОстаткиНоменклатуры.Очистить(); "
Эта запись не обязательна.
Достаточно "Движения.ОстаткиНоменклатуры.Записать(); "

2.   Запрос.УстановитьПараметр("Момент", МоментВремени());
Как по мне, более корректно писать: 
Запрос.УстановитьПараметр("Период",?(Режим = РежимПроведенияДокумента.Неоперативный,Новый Граница(МоментВремени(),ВидГраницы.Включая),Неопределено));

3.
"   Если КолСписать>ВыборкаНоменклатура.КоличествоОстаток Тогда
                Сообщение=Новый СообщениеПользователю;
                Сообщение.УстановитьДанные(ЭтотОбъект);
                Сообщение.Поле="СписокНоменклатуры[ВыборкаНоменклатура.НомерСтроки-1].Количество";
                Сообщение.Текст="У Вас на складе "+ВыборкаНоменклатура.КоличествоОстаток+" единиц товара,а Вы продаете "+ВыборкаНоменклатура.КоличествоДок+" единиц товара";
                Сообщение.Сообщить();
                Отказ=Истина;
             Иначе "
После строки "Отказ=Истина;" я бы добавил "Прервать;"

зачем продолжать обход цикла если и так документ не проведётся. 
Название: Re: Задача 1.01
Отправлено: poritskiy от Январь 02, 2015, 03:37:44 pm
Моё решение, прокомментируйте.
Название: Re: Задача 1.01
Отправлено: Solitar от Январь 02, 2015, 08:00:29 pm
Мое решение. Не смог придумать, как красиво сделать движение по РН "Продажи", т.к. добавление нового движения по продаже у меня должно было быть одновременно со списанием партии, то возникли сложности как посчитать сумму продажи. И в отчете "Остатки по товарам" не смог найти способ, как убрать надпись ИТОГО в самом низу.
Название: Re: Задача 1.01
Отправлено: poritskiy от Январь 03, 2015, 01:29:12 pm
Мое решение. Не смог придумать, как красиво сделать движение по РН "Продажи", т.к. добавление нового движения по продаже у меня должно было быть одновременно со списанием партии, то возникли сложности как посчитать сумму продажи. И в отчете "Остатки по товарам" не смог найти способ, как убрать надпись ИТОГО в самом низу.

1.У вас решение не на каркасной конфигурации.
2.В модуле док. Приходной накладной строка "Движения.ПартииТоваров.Очистить();" не обязательна.
3.В модуле док. расходной накладной строка "Движения.ПартииТоваров.Очистить(); и Движения.Продажи.Очистить();
" не обязательна.
4.Для чего этот фрагмент кода "
Если ДополнительныеСвойства.Проведен Тогда
      Движения.ПартииТоваров.БлокироватьДляИзменения = Истина;  //блокируем старые записи в ТЧ + для разделения итогов
   КонецЕсли;
"
Видел много решений но такое первый раз.
 5.  В запросе временные таблицы нужно обязательно индексировать за это снимают балы.
6. вместо параметра "Запрос.УстановитьПараметр("ТочкаИтогов", МоментВремени());"
я бы вам посоветовал писать
"Запрос.УстановитьПараметр("ТочкаИтогов",?(Режим=РежимПроведенияДокумента.Неоперативный,Новый Граница(МоментВремени(),ВидГраницы.Включая),Неопределено));
7. Вместо
"Если ОбщийМодуль.ПолучитьУчетнуюПолитику(Дата) = Перечисления.МетодыСписания.FIFO Тогда
      
      Запрос.Текст = СтрЗаменить(Запрос.Текст, "ПартииТоваровОстатки.Партия.МоментВремени УБЫВ",
      "ПартииТоваровОстатки.Партия.МоментВремени ВОЗР");   
      
   КонецЕсли;

"
Лучше писать например так
"Если РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).МетодСписания = Перечисления.УчетнаяПолитика.ФИФО Тогда
      Запрос.Текст = СтрЗаменить(Запрос.Текст, " УБЫВ", "");   
   КонецЕсли;    

"
8. Сообщение пользователю также не оптимально реализовано
вместо "
Сообщение = Новый СообщениеПользователю;
         Сообщение.Текст = "Товар " + ВыборкаИтоги.Номенклатура + " отсутствует.";  // х3 как вывести в итогах Представление наименования, это минус...
         Сообщение.Сообщить();

"
Лучше писать
"
Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Не доастаточно номенклатуры "+ВыборкаНоменклатура.Номенклатура+" в количестве "+(ВыборкаНоменклатура.Количество -ВыборкаНоменклатура.КолОст);
            Сообщение.Поле = "СписркНоменклатуры[ВыборкаНоменклатура.номерСтроки-1].Номенклатура";
            Сообщение.УстановитьДанные(ЭтотОбъект);
            Сообщение.Сообщить();

"
9. Цикл по обходу результата не оптимально сделан
Посмотрите мое решение там и найдете решение по заполнению регистра Продажи.
Название: Re: Задача 1.01
Отправлено: Solitar от Январь 05, 2015, 12:43:04 pm
poritskiy,

1. Это не минус. Не нужно будет смотреть настройки каркасной + я буду уверен в настройке всех метаданных.
2. Обязательно, сам Чистов про это говорил на своих курсах. Т.к. возможны ситуации, что с конфигурацией будут работать и в обычном, и в управляемом приложение. Разъяснения ниже.
3. К 2ому.
4. Чтобы не раздувалась таблица итогов
5. Палка на двух концах, смотря какие объемы данных. На эту тему можно подискутировать с экзаменатором.
6. Ничего про оперативность проведения не сказано
7. Кому как читабельнее

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

3. Почему Вы прерываете цикл если по какой то строке не будет товара? Возможно на экзамене это и пройдет, но Вы не анализируете следующие строки и не выводите сообщения по ним. Посмотрите типовые конфигурации.

4. СписатьСум = ?(ВыборкаДетальныеЗаписи.КоличествоОстаток=0,0,ВыборкаДетальныеЗаписи.СтоимостьОстаток*СписатьКол/ВыборкаДетальныеЗаписи.КоличествоОстаток) первое условие у Вас не должно никогда сработать, т.к. проверка на количествоОстаток у Вас сделана на уровне итогов.

5. Сообщение.Текст = " "+ВыборкаНоменклатура.Номенклатура+" Не хватает "+КолНеХватает*(-1) ; - за это снимут балы, т.к. не явно строится запрос к спр "Номенклатура". Для этого нужно в запросе использовать "Представление".

Для себя почерпнул идею с накоплением себестоимости в цикле.
Название: Re: Задача 1.01
Отправлено: ksandr от Январь 05, 2015, 10:31:05 pm
poritskiy,

6. Ничего про оперативность проведения не сказано

Дело не оперативности, а в том что система возьмет актуальные рассчитанные итоги (на 2999 год если мне не изменяет память) при оперативном проведении, а не будет их считать на момент времени, результат тот же, но нагрузки на систему меньше. Только там не границу надо, а просто момент времени.
Название: Re: Задача 1.01
Отправлено: evtgeniy от Март 05, 2015, 02:47:48 pm
Такой вопрос. У многих видел следующее. При проверке наличия остатков в цикле, когда остатка не хватает, все равно происходит заполнение наборов записей(отказ устанавливается в Истину). Что будет если сделать сначала проверку остатков по всем товарам, потом,если товаров хватает для выборки применить метод Сбросить() и начать новый обход уже с заполнением наборов записей?
Будет ли в этом какой-то выигрыш? С одной стороны не происходит создание и заполнение наборов записей, если этого не нужно, а с другой стороны два цикла
Название: Re: Задача 1.01
Отправлено: todd22 от Март 06, 2015, 10:03:07 am
" а в том что система возьмет актуальные рассчитанные итоги (на 2999 год если мне не изменяет память)"
С 8.3 на 5999 год.
Название: Re: Задача 1.01
Отправлено: ksandr от Март 08, 2015, 09:27:01 pm
" а в том что система возьмет актуальные рассчитанные итоги (на 2999 год если мне не изменяет память)"
С 8.3 на 5999 год.
С какой легкостью фирма 1С оперирует тысячелетиями:)
Название: Re: Задача 1.01
Отправлено: GROOVY от Март 09, 2015, 08:38:27 pm
" а в том что система возьмет актуальные рассчитанные итоги (на 2999 год если мне не изменяет память)"
С 8.3 на 5999 год.

На самом деле на 3999 год, а дата в плане запроса зависит от настроек смещения даты из-за "проблемы 2000 года". Но в подавляющем большинстве случаев, там правда 5999 год.
Название: Re: Задача 1.01
Отправлено: program1Cer от Март 10, 2015, 08:41:10 am
Такой вопрос. У многих видел следующее. При проверке наличия остатков в цикле, когда остатка не хватает, все равно происходит заполнение наборов записей(отказ устанавливается в Истину). Что будет если сделать сначала проверку остатков по всем товарам, потом,если товаров хватает для выборки применить метод Сбросить() и начать новый обход уже с заполнением наборов записей?
Будет ли в этом какой-то выигрыш? С одной стороны не происходит создание и заполнение наборов записей, если этого не нужно, а с другой стороны два цикла

В плане производительности выигрыш вряд ли будет. Сам считаю, что надо разделять, но в рамках выполнения экзамена, еще и играет время.
По новой методике, кстати, как раз проверка остатков идет отдельно от списания ( иногда даже по разным регистрам)
Название: Re: Задача 1.01
Отправлено: Good_Smile от Март 10, 2015, 10:07:07 am
Такой вопрос. У многих видел следующее. При проверке наличия остатков в цикле, когда остатка не хватает, все равно происходит заполнение наборов записей(отказ устанавливается в Истину). Что будет если сделать сначала проверку остатков по всем товарам, потом,если товаров хватает для выборки применить метод Сбросить() и начать новый обход уже с заполнением наборов записей?
Будет ли в этом какой-то выигрыш? С одной стороны не происходит создание и заполнение наборов записей, если этого не нужно, а с другой стороны два цикла

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

Разделение выборки влияет только на читаемость кода, думаю преподаватели могут прочитать код уже закрытыми глазами), а по поводу новой методики, это же оправдано только тогда, когда можно сделать запись в регистры без прочтения данных из базы(в том случае, когда не списывается себестоимость), да?
Название: Re: Задача 1.01
Отправлено: program1Cer от Март 10, 2015, 01:28:31 pm
http://1c.chistov.pro/2013/07/blog-post_25.html - хорошую статью не грех еще раз посоветовать.

Обрати внимание на пункты 16, 17. Это тоже применение новой методики. Это к вопросу, где используется новая методика в алгоритме списания, когда необходимо заранее получить остатки.
Название: Re: Задача 1.01
Отправлено: Good_Smile от Март 10, 2015, 05:23:06 pm
http://1c.chistov.pro/2013/07/blog-post_25.html - хорошую статью не грех еще раз посоветовать.

Обрати внимание на пункты 16, 17. Это тоже применение новой методики. Это к вопросу, где используется новая методика в алгоритме списания, когда необходимо заранее получить остатки.

Да, хорошая статья, читала её даже не один раз

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

да, она конкретно в их примерах не нужна (тонкий клиент, движений на форме нет) в общем без этой строчки код отрабатывает корректно,

и вопрос собственно в этой строчке: как вы считаете очищать или нет движения документа, и что при этом писать в пояснительной записке, и стоит ли вообще в пояснении акцентировать на этом внимание преподавателя?

-------
извините за комментарий не по задаче
Название: Задача 1.01
Отправлено: Наталья Б от Март 15, 2015, 05:30:07 pm
Мое решение, пожалуйста, поделитесь своими замечаниями и предложениями
Название: Re: Задача 1.01
Отправлено: program1Cer от Март 16, 2015, 10:23:00 am
А вот кстате по поводу статьи есть вопрос всегда хотела его задать
Павел, в пункте 2 очищает движения документа, потом движения записывает, он там подробно рассказывает для чего сначала нужно очистить движения, но на форуме многие говорят, что строчка Движения.Очистить() не нужна,

Я считаю, что нужно. Там в статье Павел как раз и явно показывает, когда движения могут быть не очищены.
Название: Re: Задача 1.01
Отправлено: debova от Март 25, 2015, 12:01:40 pm
Подскажите пожалуйста для чего в обработке проведения в запросе выводятся ИТОГИ? Без этого будет не правильно?
|ИТОГИ
        |   МАКСИМУМ(Услуга),
        |   МАКСИМУМ(Количество),
        |   МАКСИМУМ(Сумма),
        |   СУММА(КоличествоОстаток)
        |ПО
        |   Номенклатура";
Название: Re: Задача 1.01
Отправлено: ksandr от Март 29, 2015, 11:38:28 am
Подскажите пожалуйста для чего в обработке проведения в запросе выводятся ИТОГИ? Без этого будет не правильно?
|ИТОГИ
        |   МАКСИМУМ(Услуга),
        |   МАКСИМУМ(Количество),
        |   МАКСИМУМ(Сумма),
        |   СУММА(КоличествоОстаток)
        |ПО
        |   Номенклатура";
Перед формированием движений проверить достаточно ли необходимого количества товара в наличии.
Название: Re: Задача 1.01
Отправлено: BaHgaJI от Апрель 02, 2015, 11:33:01 am
Подскажите, эту задачу надо решать по новой методе или по старой? или по новой только там где это целесообразно(в других задачах)?
потому что, например, в этой задаче можно же решить по новой с двумя регистрами. Как правильней?
Название: Re: Задача 1.01
Отправлено: BaHgaJI от Апрель 07, 2015, 10:34:40 pm
Начал готовиться к спецу. Ребят, прокомментируйте плиз, кому не трудно, интересует есть ли грубые ошибки?
Название: Re: Задача 1.01
Отправлено: ThirdKing от Май 03, 2015, 10:37:24 pm
Начал готовиться к спецу. Ребят, прокомментируйте плиз, кому не трудно, интересует есть ли грубые ошибки?

Для начала это то что забыли про зависимость от метода учета.... что по ФИФО что по ЛИФО  - списание идет только по ФИФО.... нужно дописать пару строк типа:
      Если  ВычислениеПолитики.ПолучитьПолитику(Дата) = Перечисления.УчетнаяПолитика.ФИФО Тогда
         Запрос.Текст = СтрЗаменить(Запрос.Текст,"Партия УБЫВ","Партия ВОЗР");
      КонецЕсли;
Название: Re: Задача 1.01
Отправлено: ThirdKing от Май 03, 2015, 10:44:15 pm
Начал готовиться к спецу. Ребят, прокомментируйте плиз, кому не трудно, интересует есть ли грубые ошибки?

Далее при выводе сообщения о нехватке номенклатуры необходимо вместо ВыборкаНом.Номенклатура выбирать ПРЕДСТАВЛЕНИЕ на экзамене за это точно снимут, если не исправить.
Название: Re: Задача 1.01
Отправлено: ThirdKing от Май 03, 2015, 10:50:23 pm
А вот как я решил данную задачу, так же предлагаю вашему вниманию, просьба сообщить об ошибках если кто найдет.
Название: Re: Задача 1.01
Отправлено: Ikem от Май 05, 2015, 11:53:50 am
А вот как я решил данную задачу, так же предлагаю вашему вниманию, просьба сообщить об ошибках если кто найдет.

Сообщение о нехватке товара находится в обходе по группировкам. Следовательно нет никакого представления.

PS
Кроме того, за такое решение скорей всего снимут до 3 баллов.
1) Вводим документ поступление.
2) Указываем услугу
3) Услуга попадает в остатки номенклатуры
4) Невывод регистра в ноль.
Название: Re: Задача 1.01
Отправлено: Albert от Май 06, 2015, 09:22:54 pm
А вот как я решил данную задачу, так же предлагаю вашему вниманию, просьба сообщить об ошибках если кто найдет.
Давай по-порядку. Конструировать регистры нужно так, чтобы потом максимально просто и быстро получать отчеты. Простота извлечения данных - это основа решения.
Многие соискатели на специалиста сошлись в том, что если требуется контроль остатков, то делать отдельным регистром ОстаткиТоваров(Товар,Количество).и использовать новую методику оперативного проведения. Второй регистр СтоимостьТоваров (Товар,Партия,Количество,Стоимость), ну и третий Продажи(Товар,Количество,Стоимость,Выручка).
Товар(Номенклатура). Услугу проще сделать Булевым реквизитом.
Документы. Приходная. Запрос к ТЧ самого документа,группировка по Товару, исключить Услуги,индексировать по Товару.В обходе Выборки формируем движения. Все.Да,раз уж есть реквизит СуммаПоДокументу, то неплохо бы его считать и заполнять. или убрать его за ненадобностью.
Расходная. здесь ошибка "СуммаСписания = ?(Движение.Количество = ВыборкаСтроки.СуммаОстаток, ВыборкаСтроки.КоличествоОстаток,
               ВыборкаСтроки.СуммаОстаток/ВыборкаСтроки.КоличествоОстаток*Движение.Количество);"
непонятно,зачем накапливаешь "ИтогоМинимальноеКоличество" и "ИтогоСуммаСписания" - не используется нигде.
запрос на период МоментВремени(), без учета РежимаПроведения.
Пока все, на что хватило времени.
Название: Re: Задача 1.01
Отправлено: Albert от Май 07, 2015, 08:13:39 am
А вот как я решил данную задачу, так же предлагаю вашему вниманию, просьба сообщить об ошибках если кто найдет.
Вот решение этой задачи.
Название: Re: Задача 1.01
Отправлено: Mika_An от Май 11, 2015, 07:13:17 pm
День добрый!
Посмотрите, пожалуйста, и мое решение.
Название: Re: Задача 1.01
Отправлено: ThirdKing от Май 14, 2015, 10:38:12 am

Сообщение о нехватке товара находится в обходе по группировкам. Следовательно нет никакого представления.

PS
Кроме того, за такое решение скорей всего снимут до 3 баллов.
1) Вводим документ поступление.
2) Указываем услугу
3) Услуга попадает в остатки номенклатуры
4) Невывод регистра в ноль.
[/quote]

Спасибо за замечания. Я их поправил и предлагаю вниманию во вложении.
Название: Re: Задача 1.01
Отправлено: ThirdKing от Май 14, 2015, 10:43:34 am
А вот как я решил данную задачу, так же предлагаю вашему вниманию, просьба сообщить об ошибках если кто найдет.
Давай по-порядку. Конструировать регистры нужно так, чтобы потом максимально просто и быстро получать отчеты. Простота извлечения данных - это основа решения.
Многие соискатели на специалиста сошлись в том, что если требуется контроль остатков, то делать отдельным регистром ОстаткиТоваров(Товар,Количество).и использовать новую методику оперативного проведения. Второй регистр СтоимостьТоваров (Товар,Партия,Количество,Стоимость), ну и третий Продажи(Товар,Количество,Стоимость,Выручка).
Товар(Номенклатура). Услугу проще сделать Булевым реквизитом.
Документы. Приходная. Запрос к ТЧ самого документа,группировка по Товару, исключить Услуги,индексировать по Товару.В обходе Выборки формируем движения. Все.Да,раз уж есть реквизит СуммаПоДокументу, то неплохо бы его считать и заполнять. или убрать его за ненадобностью.
Расходная. здесь ошибка "СуммаСписания = ?(Движение.Количество = ВыборкаСтроки.СуммаОстаток, ВыборкаСтроки.КоличествоОстаток,
               ВыборкаСтроки.СуммаОстаток/ВыборкаСтроки.КоличествоОстаток*Движение.Количество);"
непонятно,зачем накапливаешь "ИтогоМинимальноеКоличество" и "ИтогоСуммаСписания" - не используется нигде.
запрос на период МоментВремени(), без учета РежимаПроведения.
Пока все, на что хватило времени.

Я обсуждал этот способ решения от Чистова (Видео с БИТа) с Белоусовым Павлом и не в даваясь в подробности (это связано с расчетом себестоимости и нет времени и желания сейчас расписывать об этом)скажу, что он считает это решение не верным. Однозначно он (Белоусов) считает, что регистров должно быть в данной задаче только 2!!
Название: Re: Задача 1.01
Отправлено: lyulko от Май 18, 2015, 12:57:43 pm
Добрый день, посмотрите пожалуйста реализацию задачи 1.01 мой вариант
Название: Re: Задача 1.01
Отправлено: lyulko от Май 18, 2015, 01:16:45 pm
забыл блокировку при списании, файл во вложении
Название: Re: Задача 1.01
Отправлено: Albert от Май 21, 2015, 05:07:23 pm
Добрый день, посмотрите пожалуйста реализацию задачи 1.01 мой вариант
Хорошее решение.
В РасходнойНакладной трижды очищенные записи Движения.ОстаткиНоменклатурыПартия.Очистить(); -это не ошибка, но...

 Запрос к незаблокированному регистру ОстаткиНоменклатурыПартия.   Вместо

"Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
                  Движения.ОстаткиНоменклатурыПартия.Очистить();
                  Движения.ОстаткиНоменклатурыПартия.Записать();
 КонецЕсли;"

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

в запросах выбранные поля из ресурсов обработать на ЕСТЬ NULL.
Название: Re: Задача 1.01
Отправлено: Albert от Май 21, 2015, 05:08:48 pm
забыл блокировку при списании, файл во вложении
ну я по поводу блокировки уже написал ))
Название: Re: Задача 1.01
Отправлено: Сеня от Июнь 05, 2015, 04:57:40 am
Прошу покритиковать моё решение, особенно обработку проведения в расходной накладной.
Название: Re: Задача 1.01
Отправлено: Сеня от Июнь 05, 2015, 05:37:40 am
забыл блокировку при списании, файл во вложении
а зачем в обработке проведения в РН все сделано в отдельных запросах? это не будет ошибкой?
Название: Re: Задача 1.01
Отправлено: Сеня от Июнь 05, 2015, 05:39:48 am
А вот кстате по поводу статьи есть вопрос всегда хотела его задать
Павел, в пункте 2 очищает движения документа, потом движения записывает, он там подробно рассказывает для чего сначала нужно очистить движения, но на форуме многие говорят, что строчка Движения.Очистить() не нужна,

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

Для очистки движений достаточно использовать Движения.Регистр.Записать();
Название: Re: Задача 1.01
Отправлено: olegio от Июнь 16, 2015, 12:48:18 am
Доброго времени суток, уважаемые форумчане!
Прокомментируйте пожалуйста прилагаемое решение на предмет ошибок. Заранее спасибо.
Название: Re: Задача 1.01
Отправлено: timeforlive от Июнь 16, 2015, 08:07:50 am
Вот мое решение. Что касается блокировки данных - не могу взять в толк, как ограничить только на конкретную номенклатуру. Если один пользователь обратился к РегиструНакопления.ОстаткиНоменклатуры (только один вид товара - "Куртка замшевая"), то второй пользователь уже вообще не может обратить к этому регистру (если товар другой, например, "Крупа манная").
Название: Re: Задача 1.01
Отправлено: timeforlive от Июнь 16, 2015, 08:20:44 am
Доброго времени суток, уважаемые форумчане!
Прокомментируйте пожалуйста прилагаемое решение на предмет ошибок. Заранее спасибо.

При беглом ознакомлении:
1. Учетная политика, думаю, реализовано лучше, чем у меня (безопаснее), но интересно узнать, что скажут остальные. У меня через функцию СрезПоследних(Дата)
2. Нет блокировки данных при чтении данных (перед запросом)
3. Граница МоментВремени у тебя "Исключает" сам документ, хотя должен включать его движения. А вдруг пользователь решит перепровести документ с введенными изменениями?

Остальное, вроде нормально.
Щас посмотрим, что про мое решение скажут. Я пока что пытаюсь освоить блокировку данных, понять когда нужно
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;а когда
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
Блокировка.Заблокировать();

Если что, вот полезные ссылки по блокировкам:
http://1c.chistov.pro/2010/06/1-82.html
http://1c.chistov.pro/2013/07/blog-post_25.html
Название: Re: Задача 1.01
Отправлено: olegio от Июнь 16, 2015, 12:28:56 pm
Благодарю за комментарий, но
2. Блокировка реализована как
        БлокировкаДанных = Новый БлокировкаДанных;
   ЭлементБлокировки = БлокировкаДанных.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
   ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
   ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
   ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
   БлокировкаДанных.Заблокировать();
отрабатывает как раз перед запросом.
3. На мой взгляд, если документ перепроводится (первоначальные движения будут заменены новыми), границу как раз включать не следует.
Название: Re: Задача 1.01
Отправлено: malikov_pro от Июнь 24, 2015, 10:13:52 am
Доброго времени суток, уважаемые форумчане.
Начинаю готовится к экзамену.
По решению:
1. Вынес расчет себестоимости и формирование РН Продажи в отдельную обработку, для контроля использую последовательность.
2. Запрос корректирую не заменой строки а схемой запроса.

Прошу прокомментировать мое решение на предмет ошибок, оптимальности решения.
Название: Мое решение Задачи 1.01
Отправлено: DmitryZzz от Июнь 26, 2015, 11:12:54 am
Приветствую форумчан!
Посмотрите и мое решение Задачи 1.01  :)
Название: Re: Мое решение Задачи 1.01
Отправлено: malikov_pro от Июнь 26, 2015, 11:57:28 am

1. В чем смысл дополнительного документа "ИзменениеУчетнойПолитики"?
2. В приходной нет проверки на услугу (ни при записи, ни через параметр выбора)
3. Городить левым соединением учетную политику излишне, проверка на то что она вообще есть отсутствует.
4. ВыборкаНоменклатура.Номенклатура - нужно через представление
5. И ОсталосьСписать <> 0 Цикл, если будет вход с минусом, то отработает некорректно, лучше наверно через "=>"
5. Стоимость = Списать / ВыборкаД, сначала умножаем, потом делим, объяснение в ветке есть.
6. в РН Остатки товаров, Продажи нет индекса по "Номенклатура"
7. Отчет остатки товаров, Номенклатура в полях не нужна, Расположение полей группировок Отдельно и только в итогах
Название: Re: Мое решение Задачи 1.01
Отправлено: DmitryZzz от Июнь 26, 2015, 12:07:32 pm

1. В чем смысл дополнительного документа "ИзменениеУчетнойПолитики"?
2. В приходной нет проверки на услугу (ни при записи, ни через параметр выбора)
3. Городить левым соединением учетную политику излишне, проверка на то что она вообще есть отсутствует.
4. ВыборкаНоменклатура.Номенклатура - нужно через представление
5. И ОсталосьСписать <> 0 Цикл, если будет вход с минусом, то отработает некорректно, лучше наверно через "=>"
5. Стоимость = Списать / ВыборкаД, сначала умножаем, потом делим, объяснение в ветке есть.
6. в РН Остатки товаров, Продажи нет индекса по "Номенклатура"
7. Отчет остатки товаров, Номенклатура в полях не нужна, Расположение полей группировок Отдельно и только в итогах

Благодарю! Все крайне конструктивно и по делу!
К сожалению, сейчас нет времени прокомментировать, вечером обязательно отпишусь!
Название: Re: Мое решение Задачи 1.01
Отправлено: DmitryZzz от Июнь 27, 2015, 10:40:22 am
1. В чем смысл дополнительного документа "ИзменениеУчетнойПолитики"?
2. В приходной нет проверки на услугу (ни при записи, ни через параметр выбора)
3. Городить левым соединением учетную политику излишне, проверка на то что она вообще есть отсутствует.
4. ВыборкаНоменклатура.Номенклатура - нужно через представление
5. И ОсталосьСписать <> 0 Цикл, если будет вход с минусом, то отработает некорректно, лучше наверно через "=>"
5. Стоимость = Списать / ВыборкаД, сначала умножаем, потом делим, объяснение в ветке есть.
6. в РН Остатки товаров, Продажи нет индекса по "Номенклатура"
7. Отчет остатки товаров, Номенклатура в полях не нужна, Расположение полей группировок Отдельно и только в итогах

Так-с, тоже по пунктам:
1) В видеокурсах Павла Чистова (далее ПЧ) именно таким способом задают учетную политику. Или это излишне усложняет задачу и может стать причиной снятия баллов?
2) По-невнимательности, конечно же нужно задать Параметр выбора в ТЧ для номенклатуры в Приходной накладной.
3) Опять же, делал по аналогии с видекурсами ПЧ. Но в последующих задачах выбираю отдельным запросом и проверяю.
4) Согласен. Тем самым избегаем еще одного неявного соединения.
5) Хмм, ПЧ рекомендовал именно так: Списать / КоличОст * СтоимостьОст. Почитаю ветку в поисках другого способа...
6) Индексировать нужно лишь те измерения, которые в последствие будем использовать в соединениях, да?
7) Да, так будет правильнее.

Во вложении исправленная версия.
Название: Re: Мое решение Задачи 1.01
Отправлено: malikov_pro от Июнь 27, 2015, 01:22:10 pm
1) В видеокурсах Павла Чистова (далее ПЧ) именно таким способом задают учетную политику. Или это излишне усложняет задачу и может стать причиной снятия баллов?
2) По-невнимательности, конечно же нужно задать Параметр выбора в ТЧ для номенклатуры в Приходной накладной.
3) Опять же, делал по аналогии с видекурсами ПЧ. Но в последующих задачах выбираю отдельным запросом и проверяю.
4) Согласен. Тем самым избегаем еще одного неявного соединения.
5) Хмм, ПЧ рекомендовал именно так: Списать / КоличОст * СтоимостьОст. Почитаю ветку в поисках другого способа...
6) Индексировать нужно лишь те измерения, которые в последствие будем использовать в соединениях, да?

1. на баллы не повлияет, но времени на остальное может не хватить,
в темах поднимался вопрос по учетной политике, в какой момент её можно задавать, что есть период "год" и.т.д,
можно попробовать несколько вариантов организации при тренировке, после на экзамене уточнить у экзаменатора как ему нужно.
3. РС..ПолучитьПоследнее() проще
5. списать 2 остаток 3 стоимость 6   
2/3 = дробь
6*2/3 = целое
6. Если записи таблицы по измерению отбираются (в соединении так же присутствует), то да,
в отчетах так же используются отборы, соотв если измерений не много то лучше по всем поставить индексирование.
Название: Re: Задача 1.01
Отправлено: ksandr от Июнь 30, 2015, 12:07:06 am
Уже не раз обсуждалось, правильным считается 2/3*6, но перед этим делать проверку на копейки, то есть если списуем все, то и считать ничего не надо, просто списуем весь остаток суммы.
Название: Re: Задача 1.01
Отправлено: Demy от Июнь 30, 2015, 09:45:56 am
Уже не раз обсуждалось, правильным считается 2/3*6, но перед этим делать проверку на копейки, то есть если списуем все, то и считать ничего не надо, просто списуем весь остаток суммы.
А можно поинтересоваться кем считается? Разговаривал с экзаменаторами, они сказали что проблему копеек можно решать любым способом.
Название: Re: Задача 1.01
Отправлено: ksandr от Июнь 30, 2015, 12:59:00 pm
И здесь обсуждалось со ссылками на конкретные ответы и на других профильных ресурсах, вот тема на местном форуме http://forum.chistov.pro/index.php?topic=1563.0 (http://forum.chistov.pro/index.php?topic=1563.0).
А вот из рекомендаций по подготовке к специалисту:
"7. Правильный порядок расположения операндов при расчете себестоимости. Проблема копеек. Есть мнение, что правильно делать так:

НоваяЗапись.Сумма = Выборка.КоличествоДокумент * Выборка.СуммаОстаток / Выборка.КоличествоОстаток;

То есть, умножение идет перед делением, что обеспечит в случае 3 * 10 / 3 число 10 а не число 9.99999999(9), как может быть при совсем неправильном порядке, однако методически такой способ не считается верным (это слова преподавателя из 1С), во-первых, деление по методике должно идти сначала, но деление не суммы на остаток количества, а количества к списанию на количество остатка, во-вторых, при равенстве количеств, лучше просто взять сумму, поэтому делая так, как ниже, проблем быть не должно:

НоваяЗапись.Сумма = ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток,
 Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток,2) * Выборка.СуммаОстаток);

"
Вообще как кому хочется так и делать, за ошибку не проходит, в любом случае надо перед расчетом проверять равенство количества остатка и списуемого.
Название: Задача 1.01
Отправлено: Mary от Июль 01, 2015, 12:42:17 pm
Всем привет!

Посмотрите, пожалуйста, моё решение на предмет оптимальности и наличии ошибок.
Буду рада любой помощи. Опыта в программировании мало.

При решении возник вопрос: в обработке проведения РН надо ли проверять заполнение реквизита Вид Номенклатура?
Название: Re: Задача 1.01
Отправлено: Mary от Июль 02, 2015, 03:44:50 pm
Выкладываю измененную версию. Добавила в свойствах реквизита Номенклатура отбор по Товару.

Опытных специалистов прошу проверить моё решение и написать замечания. Заранее спасибо.
Название: Re: Задача 1.01
Отправлено: Denis.Zubarev.1985 от Июль 03, 2015, 09:14:21 am
Всем привет!
Начал готовиться к спецу. Ребят, кому не трудно посмотрите, интересует есть ли грубые ошибки, что можно оптимизировать?
Название: Re: Задача 1.01
Отправлено: Albert от Июль 03, 2015, 02:34:27 pm
Всем привет!
Начал готовиться к спецу. Ребят, кому не трудно посмотрите, интересует есть ли грубые ошибки, что можно оптимизировать?
Грубовато , конечно...Регистр ОстаткиНоменклатуры нужен именно для контроля остатков, у Вас он используется формально,контролируете остатки по регистру ОстаткиНоменклатурыПоПартиям. Как раз фишка в том,чтобы его не блокировать почем зря, а записав движения по ОстаткамНоменклатуры,проверить, не ушли ли в "минуса", а потом считать себестоимость и т.д.
Очень подробная статья у ПвлаЧистова,посмотрите. http://expert.chistov.pro/public/195591/
Название: Re: Задача 1.01
Отправлено: malikov_pro от Июль 18, 2015, 10:16:56 am
Мой вариант решения, без наворотов

1. за двойную блокировку регистра ПартииТоваров могут балл снять? почему двойная,
первая при зачистке движений (блокирую номенклатуру старого документа)
вторая по временной таблице текущего документа

Буду благодарен если просмотрите на момент ошибок, недочетов.

p.s ошибку с непроверкой реквизита ВидНоменклатуры в спр. Номенклатура нашел.
p.s по блокировке решение: предполагаем что сначала блокируется Остатки товаров и соотв параллельно проводимый документ до партий не дойдет, блокирую только по ТЧ объекта.
Название: Re: Задача 1.01
Отправлено: Region_64 от Июль 30, 2015, 10:53:44 am
Парни, всем доброго времени суток!
Я как типичный новичок, который начал подготовку, прошу оценить мою первую решенную задачу) Вот...
Название: Re: Задача 1.01
Отправлено: clareon от Июль 30, 2015, 11:39:57 pm
Region_64, Аккуратное решение, мне нравиться. Пару помарок - движение по продажам у тебя количество не правильно ложится - "Движение.Количество = ВыборкаНоменклатура.Количество();" (ты функцию "количество()" вызываешь вместо количества. И второе, если у тебя отрицательные остатки и ты взводишь флаг "отказ = истина" - дальше незачем формировать движения, а ты в любом случае их формируешь...
Название: Re: Задача 1.01
Отправлено: clareon от Июль 31, 2015, 12:17:18 am
Denis.Zubarev.1985, С блокировками беда :
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
       .........
Иначе
    ..........
КонецЕсли;   

Что это??? Короче ты ни для Оперативного, ни для Неоперативного режима правильно не блокируешь.
В случае Неоперативного - поменяй дату проведенного документа вперед и перепроведи - ты прочитаешь остатки с учетом собственных движений(т.к. ты их не чистишь). В случае оперативного - просто перепроведи два раза в оперативном режиме, но второй раз поменяй номенклатуру - по новой номенклатуре не будет блокировки (заблокируется старая) - получишь грязное чтение( кто-то другой может в это же время поменять остаток по новой номенклатуре).
Название: Re: Задача 1.01
Отправлено: Region_64 от Июль 31, 2015, 11:40:13 am
количество не правильно ложится - "Движение.Количество = ВыборкаНоменклатура.Количество();"


 взводишь флаг "отказ = истина" - дальше незачем формировать движения, а ты в любом случае их формируешь...

Спасибо!!! Все учел.
Название: Re: Задача 1.01
Отправлено: klyukinyurij от Август 15, 2015, 12:25:25 am
Я новичок в 1С. Готовлюсь к спецу по платформе. Прошу проверить мое решение.
Название: Re: Задача 1.01
Отправлено: Demy от Август 15, 2015, 10:21:48 pm
И здесь обсуждалось со ссылками на конкретные ответы и на других профильных ресурсах, вот тема на местном форуме http://forum.chistov.pro/index.php?topic=1563.0 (http://forum.chistov.pro/index.php?topic=1563.0).
А вот из рекомендаций по подготовке к специалисту:
"7. Правильный порядок расположения операндов при расчете себестоимости. Проблема копеек. Есть мнение, что правильно делать так:

НоваяЗапись.Сумма = Выборка.КоличествоДокумент * Выборка.СуммаОстаток / Выборка.КоличествоОстаток;

То есть, умножение идет перед делением, что обеспечит в случае 3 * 10 / 3 число 10 а не число 9.99999999(9), как может быть при совсем неправильном порядке, однако методически такой способ не считается верным (это слова преподавателя из 1С), во-первых, деление по методике должно идти сначала, но деление не суммы на остаток количества, а количества к списанию на количество остатка, во-вторых, при равенстве количеств, лучше просто взять сумму, поэтому делая так, как ниже, проблем быть не должно:

НоваяЗапись.Сумма = ?(Выборка.КоличествоДокумент = Выборка.КоличествоОстаток, Выборка.СуммаОстаток,
 Окр(Выборка.КоличествоДокумент / Выборка.КоличествоОстаток,2) * Выборка.СуммаОстаток);

"
Вообще как кому хочется так и делать, за ошибку не проходит, в любом случае надо перед расчетом проверять равенство количества остатка и списуемого.
А тому что на заборе написано вы тоже верите? Верить нужно информации из официальных источников. Я понимаю что для вас я имею такой же уровень достоверности как и вышеупомянутый забор,  если так тогда сходите на консультацию к Павлу Белоусову и лично задайте ему этот вопрос, а потом вернитесь и отпишитесь о результате.
Название: Re: Задача 1.01
Отправлено: физ от Сентябрь 11, 2015, 10:30:38 am
Свое решение тоже на обсуждение выставлю
Название: Re: Задача 1.01
Отправлено: provadyuga от Сентябрь 16, 2015, 11:50:14 am
Добрый день!
Подскажите пожалуйста.
В обработке проведения расходной накладной платформа ругается на такую строчку:

   Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;

При проведении  расходной накладной из дебрей платформы выходит вот такое сообщение:
(http://s016.radikal.ru/i334/1509/be/21ddcb4dbfe7.jpg) (http://radikal.ru/big/f08c66b32e9f4c4ba478181ac93fa184)

В свойствах каркасной конфигурации режим управления блокировкой выставлен в «Автоматический».
(http://s019.radikal.ru/i629/1509/70/fa416003679e.jpg) (http://radikal.ru/big/37b569fd1c804a39b24299a5720bdb33)

Режим работы — файловый.
В опубликованных примерах решения задачи строка по блокировке есть.
Что не так ?
Изначально в каркасной  в свойствах конфигурации режим управления блокировкой выставлен в «Автоматический».
Можно ли в решении задачи изменить на «Управляемый» ?
Или категорически нельзя менять т.к.это как бы исходные данные не подлежащие изменению в ходе решения ?
Название: Re: Задача 1.01
Отправлено: zorky от Сентябрь 16, 2015, 02:52:39 pm
Нужно ставить в "Управляемый". Каркасную вообще много где менять можно и Нужно. Тут на форуме много про это написано, щас лень искать )) Это ещё от 2010 года сообщения поглядите.
Название: Re: Задача 1.01
Отправлено: provadyuga от Сентябрь 19, 2015, 07:39:44 am
Подскажите пожалйста нужно ли ставить в обработке проведения Приходной накладной строку

   Движения.ОстаткиНоменклатуры.Очистить();         ?

Свойство   Приходной накладной Удаление движений выставлено в «Удалять автоматически при отмене проведения».
(http://s009.radikal.ru/i307/1509/bf/1182b48abe75.jpg) (http://radikal.ru/big/3e93287df6c545a8bc231247cf1d5243)
         
Из статьи П.Чистова "Методика оперативного проведения и управляемые блокировки" (http://expert.chistov.pro/public/195591/), если я правильно понял, выходит, что нужно, т.к. при  данном  значении свойства документа его движения будут удаляться автоматически только при событии «Отмена проведения». А при событии «Проведение»  никакого автоматического удаления движений не будет происходить. Отсюда и возникает необходимость в вышеуказаной строке кода.

Однако и без этой строки в режиме предприятия при перепроведении дублей строк движений в регистре ОстаткиНоменклатуры не образуется. Т.е. что с этой строкой, что без нее — без разницы. На результат проведения это никак не влияет.

Может кто-нибудь объяснит почему ? И нужна ли эта строка в этом документе ?
Название: Re: Задача 1.01
Отправлено: zorky от Сентябрь 19, 2015, 12:49:31 pm
в Приходной нет, там только запись без чтения, поэтому движения перезапишутся.
В Расходной нужно, там читаем из регистра, старые движения при перепроведении(если изменили док-т, поменяли измерения,ресурсы) соединятся Левым Соединением с РегистромНакопления, получатся искажённые данные...Вроде того по моему, может кто чётче объяснит? )))
Иногда требуются 2 блокировки, как у Павла в задаче 1.6 - посмотрите, если сможете просто и на пальцах объяснить ЗАЧЕМ - буду рад, сам пока разбираюсь!!!! )



И встречный вопрос, кто подскажет:
есть обычный код:

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

   Блок = Новый БлокировкаДанных;
   ЭлБлока = Блок.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
   ЭлБлока.ИсточникДанных=Результат;
   ЭлБлока.ИспользоватьИзИсточникаДанных("Номеcvbcvbcbнклатур","ааиииаир");
   ЭлБлока.ИспользоватьИзИсточникаДанных("Паапvbvпапати","Парти");
   ЭлБлока.Режим=РежимБлокировкиДанных.Исключительный;
   Блок.Заблокировать();

1) в "ИспользоватьИзИсточникаДанных" - пишу всякую хрень, всё отрабатывает норм, без ошибок. Получается что просто блокировка НЕ СРАБАТЫВАЕТ? или как.
2) а второй вопрос, можно ли написать если хотим заблокировать по 2-м измерениям:
   ЭлБлока.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
   ЭлБлока.ИспользоватьИзИсточникаДанных("Партия","Партия");
ИЛИ можно ТАК:
        ЭлБлока.ИспользоватьИзИсточникаДанных(("Номенклатура","Партия"),("Номенклатура","Партия") );
Но судя по первому вопросу, ИспользоватьИзИсточникаДанных - ему вообще пофиг, что в параметрах написано  :-)))
Подскажите кто как думает.

А ещё вопросик:

  |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
       |            &Момент,
       |            (Номенклатура, Партия) В
       |               (ВЫБРАТЬ
       |                  ДокТЧ.Номенклатура,
       |                  ДокТЧ.Партия
       |               ИЗ
       |                  ДокТЧ КАК ДокТЧ)) КАК ОстаткиНоменклатурыОстатки
       |      ПО ДокТЧ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
       |         И ДокТЧ.Партия = ОстаткиНоменклатурыОстатки.Партия

В Параметрах ВТ Остатки можно так писать(работает) или писать через "И" т.е:

   ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
       |            &Момент,
       |            (Номенклатура В
       |               (ВЫБРАТЬ
       |                  ДокТЧ.Номенклатура,
       |               ИЗ
       |                  ДокТЧ КАК ДокТЧ))
                                                И
                                         (Партия В
       |               (ВЫБРАТЬ
       |                  ДокТЧ.Партия,
       |               ИЗ
       |                  ДокТЧ КАК ДокТЧ))
                                                 КАК ОстаткиНоменклатурыОстатки
       |      ПО ДокТЧ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
       |         И ДокТЧ.Партия = ОстаткиНоменклатурыОстатки.Партия

И если есть разница то в чем, мне как раз нужно что была пара: Номенклатура-Партия - как одно ЦЕЛОЕ, т.е.
Номенклатура-ДругаяПартия - уже не должна попадать в параметры.
Название: Re: Задача 1.01
Отправлено: Quantum81 от Сентябрь 19, 2015, 12:50:31 pm
Хотел отправить в документацию, да там все запутано-то как :)
provadyuga, у вас ощущуается пробел в теории. Объяснять долго. Попробуйте сделать движения документа используя лишь у примеру РегистрНакопленияНаборЗаписей. Может тогда станет понятней.
 Т.е. отобрать, прочитать, поменять, записать.
Название: Re: Задача 1.01
Отправлено: provadyuga от Сентябрь 19, 2015, 01:57:36 pm
Насколько я понял из вышеупомянутой статьи П.Чистова (http://expert.chistov.pro/public/195591/)  в обработке проведения РасходнойНакладной на регистр ОстаткиНоменклатуры нужно ставить две блокировки:

1-я — с помощью объекта БлокировкаДанных,  чтобы блокировку  установить еще перед запросом, чтобы не допустить  чтения данных другим клиентом, когда проводится документ т.е. еще до записи, когда еще только читаем данные запросом, чтобы получить остатки.
А метод   Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
блокирует только в момент записи, т. е. , например, при выполнении метода Движения.ОстаткиНоменклатуры.Записать();

и 2-я — на случай оперативного проведения. В этом случае нужно очистить старые движения., иначе система вылетит с ошибкой.
   // Отследим оперативное проведение и очистим старые движения.
   Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
   
      Движения.ОстаткиНоменклатуры.Очистить();
      Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
      Движения.ОстаткиНоменклатуры.Записать();
      
   КонецЕсли;

В 2-м случае  Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;  достаточно. Не нужно ваять  объект БлокировкаДанных.

Вот только тут походу возникает вопрос: А нужно ли блокировать 2-й блокировкой, если перед ней  1-я уже заблокировала регистр?
Название: Re: Задача 1.01
Отправлено: provadyuga от Сентябрь 19, 2015, 03:09:50 pm
Т.е. отобрать, прочитать, поменять, записать.
Ну вот тут попробуем т.сказать логически порассуждать. Все эти четыре действия должны выполняться в ОбработкеПроведения. Причем   «поменять»   - это будет «очистить» и «добавить новые». Если свойство документа выставлено в «Удалять автоматически», то это значит, что  «очистить» будет выполнено автоматически. А если — в «Удалять автоматически при отмене проведения», то при выполнении  ОбработкиПроведения  действие «очистить» уже не будет выполняться автоматически, а будет только «добавить новые». И с каждым новым перепроведением пойдут дубли движений в регистре. В этом случае движения  удаляются с помощью строки типа: Движения.ОстаткиНоменклатуры.Очистить();

Ладно, пойду устранять пробел в теории.
Название: Re: Задача 1.01
Отправлено: zorky от Сентябрь 19, 2015, 03:39:15 pm
Да !
А что скажете на мой вопрос?  А то никого нету ответить...Тишина) Суббота чтоль.
Название: Re: Задача 1.01
Отправлено: alex1248 от Сентябрь 19, 2015, 04:39:04 pm
Но судя по первому вопросу, ИспользоватьИзИсточникаДанных - ему вообще пофиг, что в параметрах написано  :-)))
У меня работает. Вот только что сфоткал с двумя вариантами ошибок (скрины внизу сообщения).
В чем может быть проблема причина у вас, не представляю, у меня в БУ регулярно ошибки выдает.
ЭлБлока.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
ЭлБлока.ИспользоватьИзИсточникаДанных("Партия","Партия");
Я написал бы так. Но это не боле, чем личное мнение.
       |            (Номенклатура, Партия) В
       |               (ВЫБРАТЬ
       |                  ДокТЧ.Номенклатура,
       |                  ДокТЧ.Партия
       |               ИЗ
       |                  ДокТЧ КАК ДокТЧ)) КАК ОстаткиНоменклатурыОстатки
Раз нужна пара, должно быть так.
Название: Re: Задача 1.01
Отправлено: provadyuga от Сентябрь 19, 2015, 04:46:35 pm
Попробую выдвинуть такую версию в качестве ответа ваш  вопрос.
В статье П.Чистова написано:
Цитировать
Установили блокировку. Теперь параллельно с нами никто не прочитает остатки по указанным товарам из регистра "СтоимостьТоваров". Обращаю внимание, так как мы не знаем заранее какие партии будут выбраны запросом, то фильтр по ним установить мы не можем и блокируем все партии. Чем меньше фильтров описано, тем больше данных блокируется.

Цитировать
Устанавливаем свойство "БлокироватьДляИзменения". Это позволит заблокировать от чтения те данные которые сейчас будут удалены из регистра, вдруг транзакция будет отменена, не хотим чтобы кто-либо вместе с нами работал с этими данными.
Подобное действие не помешает и при смене даты или времени документа, а не только при оперативном проведении.

Т.е. у вас просто меняется область в регистре по которой устанавливается блокировка в зависимости от того что вы пишите.
Тут также походу ответ на мой же вопрос вырисовывается.
Вот только тут походу возникает вопрос: А нужно ли блокировать 2-й блокировкой, если перед ней  1-я уже заблокировала регистр?
У управляемой блокировки и блоктировки по "БлокироватьДляИзменения" разные области данных, которые блокируются.   
По "БлокироватьДляИзменения" блокируется сугубо по движениям документа. А у управлемой область шире: по определенному перечню номенклатуры, по определенным номенклатуре и партиям, и т.д.
Название: Re: Задача 1.01
Отправлено: alex1248 от Сентябрь 19, 2015, 04:52:18 pm
Да !
А что скажете на мой вопрос?  А то никого нету ответить...Тишина) Суббота чтоль.
Может быть у вас такая ситуация (по части кода этого понять нельзя)?
Название: Re: Задача 1.01
Отправлено: Quantum81 от Сентябрь 19, 2015, 05:29:05 pm
Т.е. отобрать, прочитать, поменять, записать.
Ну вот тут попробуем т.сказать логически порассуждать. Все эти четыре действия должны выполняться в ОбработкеПроведения. Причем   «поменять»   - это будет «очистить» и «добавить новые». Если свойство документа выставлено в «Удалять автоматически», то это значит, что  «очистить» будет выполнено автоматически. А если — в «Удалять автоматически при отмене проведения», то при выполнении  ОбработкиПроведения  действие «очистить» уже не будет выполняться автоматически, а будет только «добавить новые». И с каждым новым перепроведением пойдут дубли движений в регистре. В этом случае движения  удаляются с помощью строки типа: Движения.ОстаткиНоменклатуры.Очистить();

Ладно, пойду устранять пробел в теории.
Движения.ОстаткиНоменклатуры
это наборзаписей в оперативной памяти.
После  Движения.ОстаткиНоменклатуры.Записать(); этот набор будет перенесен в регистр. Все лишнее оттуда будет удалено и так.
Удалять автоматически делает это перед проведением.
А действие Очистить() имеет отношение только к наборузаписей в оперативной памяти.


Название: Re: Задача 1.01
Отправлено: zorky от Сентябрь 19, 2015, 06:28:28 pm
Да !
А что скажете на мой вопрос?  А то никого нету ответить...Тишина) Суббота чтоль.
Может быть у вас такая ситуация (по части кода этого понять нельзя)?

Ничего не блокируется перед этим, обычная расходка по "старой". ))
Вот, щас проверил (это задача 1.3 из сборника)   - нормально всё проводит не ругается)))
если заменить тут: ЭлБлока = Блок.Добавить("РегистрНакопления.ОстаткиНоменклатуры111111111"); например -
то сразу ругается)))
Я выгружу файл с решением, можете убедится сами. Давайте всё же выясним эти моменты, ну а в правильности решения-уверен ;)
 И на 2-ой вопрос хочется ответа - обсудить...
Название: Re: Задача 1.01
Отправлено: ID443 от Октябрь 08, 2015, 10:27:37 am
В условиях запроса часто вот такая строка попадается: "РасходнаяНакладнаяСписокНоменклатуры.Ссылка = Ссылка". Что это условие означает?
Название: Re: Задача 1.01
Отправлено: zorky от Октябрь 08, 2015, 10:41:56 am
В условиях запроса часто вот такая строка попадается: "РасходнаяНакладнаяСписокНоменклатуры.Ссылка = Ссылка". Что это условие означает?

Это условие ГДЕ , для того чтобы в отбор попали записи ТОЛЬКО этого документа т.е  равные текущей Ссылке.
Если убрать это условие -то в результат попадут ВСЕ записи ВСЕХ Расходных Накладных, которых будет(или есть) много.
Название: Re: Задача 1.01
Отправлено: ID443 от Октябрь 08, 2015, 11:00:26 am
В условиях запроса часто вот такая строка попадается: "РасходнаяНакладнаяСписокНоменклатуры.Ссылка = Ссылка". Что это условие означает?

Это условие ГДЕ , для того чтобы в отбор попали записи ТОЛЬКО этого документа т.е  равные текущей Ссылке.
Если убрать это условие -то в результат попадут ВСЕ записи ВСЕХ Расходных Накладных, которых будет(или есть) много.
Спасибо!
Название: Re: Задача 1.01
Отправлено: Viktorka от Октябрь 14, 2015, 12:33:50 pm
Всем добрый день! Мое решение для обсуждения. Прошу прокомментировать  :).
Название: Re: Задача 1.01
Отправлено: ID443 от Октябрь 14, 2015, 04:06:44 pm
Всем добрый день! Мое решение для обсуждения. Прошу прокомментировать  :).
Зачем блокировка в Приходной накладной?
Название: Re: Задача 1.01
Отправлено: iipobaji от Октябрь 16, 2015, 04:24:40 pm
На всеобщее обозрение ;)
Название: Re: Задача 1.01
Отправлено: Дмитрий123123 от Ноябрь 09, 2015, 08:18:55 pm
День добрый, подскажите большая ли разница, если в отчете продажи код (колонка прибыль)
ВЫБОР
КОГДА ПродажиОбороты.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)
ТОГДА ПродажиОбороты.СуммаОборот - ОстаткиНоменклатурыОбороты.СуммаРасход
ИНАЧЕ ПродажиОбороты.СуммаОборот
КОНЕЦ КАК Прибыль
заменен на
ПродажиОбороты.СуммаОборот - ЕСТЬNULL(ОстаткиНоменклатурыОбороты.СуммаОборот, 0)

Т.е. отсутствие проверки ВидНоменклатуры сильно сказывается на производительности и является ли это ошибкой?

Прошу прощения, если вопрос задавался где-то выше
Название: Re: Задача 1.01
Отправлено: GPetr от Декабрь 03, 2015, 01:48:32 pm
На всеобщее обозрение ;)

1. в приходе не учитывается что пришло, услуга или товар.
2. насколько корректно брать метод списания на прямую как в 8.2 не скажу, лично я использую запрос.
3. Расход некорректен
4. Тестируй на больших данных

выкладываю свою версию... плюсы и минусы в студию.
спасибо.
Название: Re: Задача 1.01
Отправлено: Odin777 от Февраль 02, 2016, 06:34:51 pm
выкладываю свою версию... плюсы и минусы в студию.
спасибо.
1)В документе Приходная в ОбработкеПроведения "Движения.ОстаткиНоменклатуры.Записать();" для чего?
2)В документе Расходная в ОбработкеПроведения "ВЫБРАТЬ
      |   РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
      |   СУММА(ЕСТЬNULL(РасходнаяНакладнаяСписокНоменклатуры.Количество, 0)) КАК Количество,
      |   СУММА(ЕСТЬNULL(РасходнаяНакладнаяСписокНоменклатуры.Сумма, 0)) КАК Сумма
      |ПОМЕСТИТЬ ТЧ
" для чего проверять естьнулл для полей табличной части?
3)В запросе СКД отчет Продажи
ЕСТЬNULL(ПродажиОбороты.ВыручкаОборот - ПродажиОбороты.СебестоимостьОборот, 0) КАК Прибыль, можно на закладке вычисляемые поля произвести расчет поля Прибыль

ЗЫ Также мое решение, если есть вопросы и замечания пишите!
Название: Re: Задача 1.01
Отправлено: Calibrio от Февраль 03, 2016, 03:09:52 pm
ЗЫ Также мое решение, если есть вопросы и замечания пишите!

Мое мнение:

Шапка в отчетах не такая - надо самому рисовать
Итого - надо убрать

Проверки в расходной нет на режим проведения документа для установки параметра МоментВремени
Название: Re: Задача 1.01
Отправлено: Odin777 от Февраль 03, 2016, 10:38:49 pm
ЗЫ Также мое решение, если есть вопросы и замечания пишите!

Мое мнение:

Шапка в отчетах не такая - надо самому рисовать
Итого - надо убрать

Проверки в расходной нет на режим проведения документа для установки параметра МоментВремени
Не читал пока файл который скачал с сайта 1С под названием "Форма проведения экзамена "1С:Специалист" по платформе "1С:Предприятие 8" и требования к кандидатам". Поэтому пока отвечу так
1) шапка отчета - честно говоря не обратил внимание даже.
2) итого в отчете можно убрать если в СКД на закладке Ресурсы удалить поля
3) Для чего?  Исходя из текста задачи "при проведения Расходной при нехватке товара нужно выдавать сообщение ..... и не позволять проводить документ" я предположил, что мне достаточно получать всегда актуальные записи из регистра Остатки.

Ваш комментарий позволил заглянуть в обработку проведения Расходной и обнаружить ошибку
"МетодСписанияПартий = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(ТекущаяДата()).МетодСписания;"
здесь передается ТекущаяДата() а должна передаваться в качестве параметра Дата документа, т.к. мы можем теоретически добавить документ прошлогодней датой.
Название: Re: Задача 1.01
Отправлено: Calibrio от Февраль 04, 2016, 09:31:34 am
Почитал тему, многие расхваливают решение sv_mikh, но его решение зачем-то подтерли... очень хотелось увидеть так скажем эталон

2-я задача практически такая же, там решение sv_mikh есть
Название: Re: Задача 1.01
Отправлено: Calibrio от Февраль 04, 2016, 12:47:29 pm
1) шапка отчета - честно говоря не обратил внимание даже.

Ваш комментарий позволил заглянуть в обработку проведения Расходной и обнаружить ошибку
"МетодСписанияПартий = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(ТекущаяДата()).МетодСписания;"
здесь передается ТекущаяДата() а должна передаваться в качестве параметра Дата документа, т.к. мы можем теоретически добавить документ прошлогодней датой.

Вроде на экзамене отчет красивым делать не обязательно, чисто для тренировки макеты порисовать
Я рад, что косвенно помог найти ошибку )

Кстати Док-т УсановкаУчетнойПолитики лишний, все ведь прекрасно делается через сам регистр
Название: Re: Задача 1.01
Отправлено: Calibrio от Февраль 04, 2016, 04:31:41 pm
Мой вариант решения, все вроде как работает
Название: Re: Задача 1.01
Отправлено: Odin777 от Февраль 04, 2016, 07:55:26 pm
Мой вариант решения, все вроде как работает
1)В Приходной нет проверки в случае поступления услуг.
2)Нет документа Установка учетной политики. Мне кажется лучше не позволять пользователю напрямую работать с регистром.
3)В обработке проведения документа Расходная посмотрите вам нужно очистить движения документа по регистру Остатки и записать пустой набор, а также очистить движения по регистру Продажи.
   Движения.ОстаткиТоваров.Очистить();
   Движения.ОстаткиТоваров.Записать();
Движения.Продажи.Очистить();
Название: Re: Задача 1.01
Отправлено: Calibrio от Февраль 04, 2016, 09:12:37 pm
1)В Приходной нет проверки в случае поступления услуг.
2)Нет документа Установка учетной политики. Мне кажется лучше не позволять пользователю напрямую работать с регистром.
3)В обработке проведения документа Расходная посмотрите вам нужно очистить движения документа по регистру Остатки и записать пустой набор, а также очистить движения по регистру Продажи.
   Движения.ОстаткиТоваров.Очистить();
   Движения.ОстаткиТоваров.Записать();
Движения.Продажи.Очистить();

Спасибо за замечания )
1) Про услуги говорилось, что компания их предоставляет, я не заморачивался
2) Все допиливать можно до бесконечности, в задаче нет условия запрещать пользователю работать с регистром, при сдаче экзамена лишние действия - лишняя потеря времени
3) Каюсь, забыл... задачку перерешивал (3-е решение) и забыл )
Название: Re: Задача 1.01
Отправлено: Odin777 от Февраль 09, 2016, 09:08:21 am
1)В Приходной нет проверки в случае поступления услуг.
2)Нет документа Установка учетной политики. Мне кажется лучше не позволять пользователю напрямую работать с регистром.
3)В обработке проведения документа Расходная посмотрите вам нужно очистить движения документа по регистру Остатки и записать пустой набор, а также очистить движения по регистру Продажи.
   Движения.ОстаткиТоваров.Очистить();
   Движения.ОстаткиТоваров.Записать();
Движения.Продажи.Очистить();

Спасибо за замечания )
1) Про услуги говорилось, что компания их предоставляет, я не заморачивался
2) Все допиливать можно до бесконечности, в задаче нет условия запрещать пользователю работать с регистром, при сдаче экзамена лишние действия - лишняя потеря времени
3) Каюсь, забыл... задачку перерешивал (3-е решение) и забыл )
По пункту 2 из вашего комментария. Все таки это обычная практика насколько я могу знать, не позволять пользователю работать с регистрами непосредственно. Возможно это и не критично для данной задачи.
Название: Задача 1.01
Отправлено: NikemanNix от Февраль 09, 2016, 03:19:42 pm
Добрый день, недавно начал готовиться к Специалисту по Платформе. Пожалуйста, посмотрите решение 1.01 задачи.
Название: Re: Задача 1.01
Отправлено: Марк от Февраль 23, 2016, 11:26:53 am
Выкладываю свое решение. Посмотрите пожалуйста на наличие ошибок.
Название: Re: Задача 1.01
Отправлено: aevdovin от Март 15, 2016, 01:18:42 am
Всех приветствую!
Делюсь своим решением.

(Идеальное решение данной задачи в курсе подготовки Чистова (block0, sert_pl_82_02)
Перед решением задач из сборника сперва прошел Курс Чистова. Рекомендую!)

В своем решении задачи 1.1 использую аналогичную структуру регистров. Метод списание получаю в отдельной ф-ии. Есть вопросы к упр.блокировке. В качестве источника данных использую ТЧ д-та, а не рез.запрос...вроде это допустимо. Главное верно  указать  данные в методе ИспользоватьИзИсточникаДанных...
Название: Re: Задача 1.01
Отправлено: aevdovin от Март 15, 2016, 10:57:37 am
Добрый день, недавно начал готовиться к Специалисту по Платформе. Пожалуйста, посмотрите решение 1.01 задачи.

Вроде хорошо,
вот что отметил:
-В ПриходнойНакладной достаточно конструктором, мне кажется никто за запрос с группировкой по Н-те не похвалит, а драгоценное время потеряется.
- У регистра ОстаткиНоменлатуры не включен РежимРазделенияИтогов, это спец. было сделано?
новой методики проведения в этой задаче нет,  где св-во строго обязательно (http://expert.chistov.pro/public/196565/)
, но я привык в задачах всегда ставить св-во, даже когда самостоятельно блокировку накладываем,..что думаете по этому поводу?
- Н-та с признаком услуга можно исключить еще на этапе запроса, удобнее будет чем затем в списании контролировать услуга это или нет
-если есть возможность сделать проще, лучше делать, например отказаться от поле "Цена", его нет в отчетах, без него проще данные водить в ТЧ
Название: Re: Задача 1.01
Отправлено: Головлев Владислав от Март 18, 2016, 11:24:30 am
Здравствуйте! Посмотрите пожалуйста мое решение. Какие есть ошибки и что можно было бы сделать проще?
Название: Re: Задача 1.01
Отправлено: ComradeKite от Март 20, 2016, 07:50:14 pm
Здравствуйте! Посмотрите пожалуйста мое решение. Какие есть ошибки и что можно было бы сделать проще?

1. В Приходной накладной, думаю лишнее в ТЧ добавлять поле ВидНоменклатуры. Услуги не приходуются, а защиту от юзера лучше сделать в настройках выбора формы.

2. Блокировка описана не верно. Насколько я помню это уже минус 1 на экзамене. "Для изменения" это для новой методики проведения используется.
У вас старая методика. Надо описывать явно блокировку.

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

4. Ну и отчет не соответествует шаблону. Ну это я так понял не сильно важно)))
Название: Re: Задача 1.01
Отправлено: ComradeKite от Март 20, 2016, 07:53:21 pm
Постарался выполнить все требования к отчету. Потратил много времени. Задумался надо ли это делать в будущем.........
Название: Re: Задача 1.01
Отправлено: Головлев Владислав от Март 21, 2016, 06:19:05 am
Здравствуйте! Посмотрите пожалуйста мое решение. Какие есть ошибки и что можно было бы сделать проще?

1. В Приходной накладной, думаю лишнее в ТЧ добавлять поле ВидНоменклатуры. Услуги не приходуются, а защиту от юзера лучше сделать в настройках выбора формы.

2. Блокировка описана не верно. Насколько я помню это уже минус 1 на экзамене. "Для изменения" это для новой методики проведения используется.
У вас старая методика. Надо описывать явно блокировку.

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

4. Ну и отчет не соответествует шаблону. Ну это я так понял не сильно важно)))
Спасибо за замечания!)
Название: Re: Задача 1.01
Отправлено: NikemanNix от Март 23, 2016, 11:59:56 am
Добрый день, недавно начал готовиться к Специалисту по Платформе. Пожалуйста, посмотрите решение 1.01 задачи.

Вроде хорошо,
вот что отметил:
-В ПриходнойНакладной достаточно конструктором, мне кажется никто за запрос с группировкой по Н-те не похвалит, а драгоценное время потеряется.
- У регистра ОстаткиНоменлатуры не включен РежимРазделенияИтогов, это спец. было сделано?
новой методики проведения в этой задаче нет,  где св-во строго обязательно (http://expert.chistov.pro/public/196565/)
, но я привык в задачах всегда ставить св-во, даже когда самостоятельно блокировку накладываем,..что думаете по этому поводу?
- Н-та с признаком услуга можно исключить еще на этапе запроса, удобнее будет чем затем в списании контролировать услуга это или нет
-если есть возможность сделать проще, лучше делать, например отказаться от поле "Цена", его нет в отчетах, без него проще данные водить в ТЧ
Добрый день, спасибо большое за уделённое время. Теперь по пунктам:
1) Абсолютно с вами согласен, группировка по номенклатуре тут лишняя.
2) Думаю что РежимРазделенияИтогов должен быть включен, потому что теоретически возможно проведение нескольких документов в одно время и нужно распараллеливание проведений. Это моё упущение.
3) Да действительно в Расходной Накладной это сделать удобнее.
4) Не совсем понял замечание по поводу Цены. В отчётах все поля выведены точно как показано в задании. В модулях объекта документов в запросах я не обращаюсь к Цене. Где можно  отказаться от поля "Цена"?
Название: Re: Задача 1.01
Отправлено: NikemanNix от Март 23, 2016, 01:10:03 pm
Всех приветствую!
Делюсь своим решением.

(Идеальное решение данной задачи в курсе подготовки Чистова (block0, sert_pl_82_02)
Перед решением задач из сборника сперва прошел Курс Чистова. Рекомендую!)

В своем решении задачи 1.1 использую аналогичную структуру регистров. Метод списание получаю в отдельной ф-ии. Есть вопросы к упр.блокировке. В качестве источника данных использую ТЧ д-та, а не рез.запрос...вроде это допустимо. Главное верно  указать  данные в методе ИспользоватьИзИсточникаДанных...
Посмотрел решение.В целом неплохо. Выделил 2 момента:
1) При проведении документа Приходная Накладная если в ТЧ указана услуга, в регистр Остатки Номенклатуры записывается движение с пустой строкой "Номенклатура", но с заполненными количеством и стоимостью услуги. Это из за того, что в модуле объекта пишется из ТЧ в РН Остатки Номенклатуры.Это неверно нужен отбор,я делаю запросом.
2) В расходной накладной метод списания получается одной строкой МетодСписания = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).Значение;
Непонятно зачем эта функция, запрос и  цикл если можно получить всё одной строкой. У 1сщиков в примере также.
Название: Re: Задача 1.01
Отправлено: javer от Март 29, 2016, 03:06:13 pm
Добрый день. Прошу проверить мое решение. Кстати так и не понял нужно ли заморачиваться при решении с последовательностями.
Название: Re: Задача 1.01
Отправлено: glow2020 от Март 29, 2016, 03:53:05 pm
С определение учетной политики ошибка, даже если она не установлена расходная проводится по лифо. А в остальном хорошо, мне понравилось.
Название: Re: Задача 1.01
Отправлено: Rokky78 от Март 29, 2016, 04:05:11 pm
Кстати так и не понял нужно ли заморачиваться при решении с последовательностями.
В ноябре 2015 был на курсах по подготовке к экзамену. Белоусов прямым текстом сказал: "последовательность в задачах нужно делать только когда об этом явно сказано в задании". Он имел в виду экзаменационные билеты, а не задачи сборника. С его слов, за текстом билетов следят более тщательно и вносят поправки при неясностях (поэтому в задачнике могут быть разночтения). Еще что запомнилось, что задач с последовательностями на экзамене (где это именно ЯВНО указано) , с его слов, 1-2.
Название: Re: Задача 1.01
Отправлено: Rokky78 от Март 29, 2016, 04:15:35 pm
Раз уж тема оживилась, гляньте и мое решение, если не трудно. Хотя, на мой взгляд, задача несложная.
Название: Re: Задача 1.01
Отправлено: Rokky78 от Март 29, 2016, 04:35:58 pm
Добрый день. Прошу проверить мое решение. Кстати так и не понял нужно ли заморачиваться при решении с последовательностями.
Что заметил:
1. Интерфейс должен быть "Такси". На экзамене это обязательно. (если будете решать в 8.2 не забудьте потом переключиться в "Такси").
2. Документ "ИзменениеУчетнойПолитики" - лишнее в этой задаче.
3. В РН "ПродажиТоваров" я бы добавил количество. В отчете не придется изощряться с 2-мя наборами данных. А в итоге все равно количество оказанных услуг у вас не фиксируется.
Название: Re: Задача 1.01
Отправлено: javer от Март 29, 2016, 04:44:52 pm
Спасибо.
Название: Re: Задача 1.01
Отправлено: ComradeKite от Март 30, 2016, 05:06:51 pm
Раз уж тема оживилась, гляньте и мое решение, если не трудно. Хотя, на мой взгляд, задача несложная.

Rokky, у тебя регистр чистится, потом блокировка. Правильно будет заблокировать, а потом чистить.
Ну или иначе возможны коллизии.
Название: Re: Задача 1.01
Отправлено: Rokky78 от Март 31, 2016, 08:47:42 am
Раз уж тема оживилась, гляньте и мое решение, если не трудно. Хотя, на мой взгляд, задача несложная.

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

ComradeKite, Спасибо за проверку. Насчет последовательности действий при блокировке. Может быть вы и правы. Я глубоко в блокировки не вникал. Дело в том, что на курсах Белоусов дал некий шаблон действий при проведении при "старой" и "новой" методике (табличка в word'е). При проведении по старой - последовательность именно как в моем решении.
1. Программное удаление существующих движений при перепроведении документа путем записи «пустого набора»
2. Установка управляемых блокировок на записи тех таблиц информационной базы, к данным которых будут применены внутри транзакции операции и чтения, и записи
3. Получение необходимых данных для формирования набора записей регистра
.....

Сейчас про свое решение добавлю что в запросе расходной сортировать нужно по МоментуВремени.
Название: Re: Задача 1.01
Отправлено: temkiiiiin от Апрель 06, 2016, 04:21:55 pm
Проверьте, пожалуйста. Стоит ли вместе с очисткой старых движений по остаткам чистить и блокировать продажи? если да, то почему?
Название: Re: Задача 1.01
Отправлено: Rokky78 от Апрель 10, 2016, 01:14:42 am
temkiiiiin, все нормально. Разве что Движения.ОстаткиТоваров.БлокироватьДляИзменения = Истина; лишнее при старой методике проведения. И в сообщении пользователю нужно использовать представление, а не ссылку. Иначе получается запрос в цикле.
Стоит ли вместе с очисткой старых движений по остаткам чистить и блокировать продажи? если да, то почему?
Блокировать точно не стоит. Данные этого регистра нигде, кроме отчетов не участвуют и на достоверность данных при проведении не влияют (как в случае с регистром остатков). На счет очистки точно не уверен, но уже привык чистить наборы всех регистров перед проведением. Хуже не будет.
Название: Re: Задача 1.01
Отправлено: temkiiiiin от Апрель 10, 2016, 12:31:32 pm
Цитата с одного из форумов: "По новой схеме расчет списания себестоимости производится фоновым заданием". Так ли это? или это необходимо применять в другой задаче?
Название: Re: Задача 1.01
Отправлено: Rokky78 от Апрель 10, 2016, 09:05:35 pm
Цитата с одного из форумов: "По новой схеме расчет списания себестоимости производится фоновым заданием". Так ли это? или это необходимо применять в другой задаче?
Неправильно выбранная методика проведения - это -1 балл. Выбрать очень просто. По умолчанию нужно всегда стараться использовать новую методику. Если это невозможно - старую. Старую методику используем если нам необходимо сначала читать, а затем писать данные одного и того же регистра. При расчете себестоимости это происходит всегда. Единственный вариант, когда можно применить новую методику при проведении - это когда себестоимость рассчитывается позже (не важно регламентным заданием или обработкой). Но в этом случае в билете явно будет об этом сказано, как например в задаче 1.7 сборника.

Цитировать
При  проведении  документа  «Расходная  накладная»  необходимо
производить  только  списание  товара  со  склада.  В  том  случае,  когда  товара  не
хватает,  документ  проводиться  не  должен.  Расчет  себестоимости  списанного
товара должен происходить позднее с помощью регламентной обработки «Расчет
себестоимости».
Название: Re: Задача 1.01
Отправлено: Andrey_R91 от Апрель 15, 2016, 01:39:07 pm
Проверьте пожалуйста мое решение. Заранее спасибо
Название: Re: Задача 1.01
Отправлено: temkiiiiin от Апрель 16, 2016, 08:37:18 am
Цитата с одного из форумов: "По новой схеме расчет списания себестоимости производится фоновым заданием". Так ли это? или это необходимо применять в другой задаче?
Неправильно выбранная методика проведения - это -1 балл. Выбрать очень просто. По умолчанию нужно всегда стараться использовать новую методику. Если это невозможно - старую. Старую методику используем если нам необходимо сначала читать, а затем писать данные одного и того же регистра. При расчете себестоимости это происходит всегда. Единственный вариант, когда можно применить новую методику при проведении - это когда себестоимость рассчитывается позже (не важно регламентным заданием или обработкой). Но в этом случае в билете явно будет об этом сказано, как например в задаче 1.7 сборника.

Цитировать
При  проведении  документа  «Расходная  накладная»  необходимо
производить  только  списание  товара  со  склада.  В  том  случае,  когда  товара  не
хватает,  документ  проводиться  не  должен.  Расчет  себестоимости  списанного
товара должен происходить позднее с помощью регламентной обработки «Расчет
себестоимости».

лучший
Название: Re: Задача 1.01
Отправлено: Kretinin Ruslan от Апрель 30, 2016, 01:00:51 pm
Коллеги, доброго времени суток!
Начал подготовку к экзамену, решил задачу с учетом предыдущих замечаний в этом разделе.
Прошу Вас проверить и дать свои замечания/рекомендации по решению.
В ходе решения возникли следующие вопросы:
1. Есть сомнения: надо ли накладывать блокировку на регистр "Продажи": в решении блокировку не накладывал
2. Насколько корректно реализовал механизм отображения расходных накладных в списке по номенклатуре в ТЧ.

Буду благодарен за грамотную проверку.
Всем хорошего дня!)
Название: Re: Задача 1.01
Отправлено: Fat_Mike от Апрель 30, 2016, 03:36:23 pm
Коллеги, доброго времени суток!
Начал подготовку к экзамену, решил задачу с учетом предыдущих замечаний в этом разделе.
Прошу Вас проверить и дать свои замечания/рекомендации по решению.
В ходе решения возникли следующие вопросы:
1. Есть сомнения: надо ли накладывать блокировку на регистр "Продажи": в решении блокировку не накладывал
2. Насколько корректно реализовал механизм отображения расходных накладных в списке по номенклатуре в ТЧ.

Буду благодарен за грамотную проверку.
Всем хорошего дня!)
Добрый день!
1. На сколько я понял, блокировка будет избыточна т.к нет конкуренции за ресурсы.
2. В принципе не обязательно, времени как я понял на экзамене мало...
Удаче в подготовке!
Название: Re: Задача 1.01
Отправлено: nonameforme от Май 04, 2016, 11:41:01 am
Критика приветствуется )
Название: Re: Задача 1.01
Отправлено: Orest93 от Май 26, 2016, 10:54:15 am

Подскажите пожалуйста как делать отбор в форме списка Расходной. Делаю через критерий отбора, но ничего не получается<p><b>

Это нужно делать в свойствах динамического списка... Не нужно делать произвольный запрос... просто та есть доступные некоторие возможности СКД там уже просто :)
Название: Re: Задача 1.01
Отправлено: Orest93 от Май 26, 2016, 11:16:31 am
Коллеги, доброго времени суток!
Начал подготовку к экзамену, решил задачу с учетом предыдущих замечаний в этом разделе.
Прошу Вас проверить и дать свои замечания/рекомендации по решению.
В ходе решения возникли следующие вопросы:
1. Есть сомнения: надо ли накладывать блокировку на регистр "Продажи": в решении блокировку не накладывал
2. Насколько корректно реализовал механизм отображения расходных накладных в списке по номенклатуре в ТЧ.

Буду благодарен за грамотную проверку.
Всем хорошего дня!)

Правильно зделал. Там и не нужна блокировка. Много о ней читал и искал ответов на вопрос для чево всьо таки нужна блокировка и зделал такие виводы
1) Блокировка нужна когда ми делаем проверку есть ресурс который нам нужен штобы когда ми продаем товар, а хто то не опередил нас (паралельный сеанс), и в итоге ми не ушли в минус...
2) так как в регистре Продажи ми не проверяем на остаток то и блокировка не нужна...
Удачи в подготовке
Название: Re: Задача 1.01
Отправлено: Tektronix от Май 26, 2016, 03:30:58 pm
Коллеги, доброго времени суток!
Начал подготовку к экзамену, решил задачу с учетом предыдущих замечаний в этом разделе.
Прошу Вас проверить и дать свои замечания/рекомендации по решению.
В ходе решения возникли следующие вопросы:
1. Есть сомнения: надо ли накладывать блокировку на регистр "Продажи": в решении блокировку не накладывал
2. Насколько корректно реализовал механизм отображения расходных накладных в списке по номенклатуре в ТЧ.

Буду благодарен за грамотную проверку.
Всем хорошего дня!)

Блокировку на запись в регистр Продажи ставить не надо, так как 1С её ставит автоматически.
Название: Re: Задача 1.01
Отправлено: Orest93 от Май 26, 2016, 04:12:03 pm
Критика приветствуется )
Себестоимость в регистре продажи неверно расчитиваеш...
Нужно новую переменную например ТекСебестоимость = 0
в конце цикла по записи движений в регОстатки нужно для каждой номенклатрури сумировать
ТекСебестоимость = ТекСебестоимость + Движение.Стоимость... а так то на мой взгляд хорошо..
Ну и ее конешно записывать в регПродажи
Название: Re: Задача 1.01
Отправлено: Orest93 от Май 26, 2016, 04:23:30 pm
Критика приветствуется )
И я думаю такоє не понравится екзаменаторам
Название: Re: Задача 1.01
Отправлено: Orest93 от Май 27, 2016, 10:53:29 am
Критика приветствуется )
И я думаю такоє не понравится екзаменаторам
Я надеюсь все знают почему вискакивает вот такая ошыбка... (в запросе в итоги надо выбирать и поле номер строки так как обход результата идет по групировкам...)
Название: Re: Задача 1.01
Отправлено: alfalume от Июнь 11, 2016, 08:44:42 am
Мое решение.
Название: Re: Задача 1.01
Отправлено: nifendervan от Август 24, 2016, 07:51:40 pm
Мое решение задачи.
Название: Re: Задача 1.01
Отправлено: erdem.badluev от Сентябрь 12, 2016, 11:08:42 am
Мое решение задачи.
В вашем решении я оприходовал услуги и благополучно их реализовал, т.е. при проведении приходной накладной нет фильтра по виду номенклатуры.
На счет блокировок. Может лучше их ставить в самом начале проведения, чтобы кто-нибудь еще случайно не прочитал наши не правильные отрицательные остатки?

И заодно моё решение. Жду критики.
Название: Re: Задача 1.01
Отправлено: nifendervan от Сентябрь 13, 2016, 10:03:08 am
Мое решение задачи.
В вашем решении я оприходовал услуги и благополучно их реализовал, т.е. при проведении приходной накладной нет фильтра по виду номенклатуры.
На счет блокировок. Может лучше их ставить в самом начале проведения, чтобы кто-нибудь еще случайно не прочитал наши не правильные отрицательные остатки?

И заодно моё решение. Жду критики.
1. В задании не сказано прямым текстом, что услуги могут оприходываться. Говорится только про продажу, поэтому в Приходной накладной не делал фильтра. Но установить его труда не составит.
2. По поводу блокировок. Вы о блокировках на какой регистр говорите?
Название: Re: Задача 1.01
Отправлено: erdem.badluev от Сентябрь 13, 2016, 10:36:08 am
Мое решение задачи.
В вашем решении я оприходовал услуги и благополучно их реализовал, т.е. при проведении приходной накладной нет фильтра по виду номенклатуры.
На счет блокировок. Может лучше их ставить в самом начале проведения, чтобы кто-нибудь еще случайно не прочитал наши не правильные отрицательные остатки?

И заодно моё решение. Жду критики.
1. В задании не сказано прямым текстом, что услуги могут оприходываться. Говорится только про продажу, поэтому в Приходной накладной не делал фильтра. Но установить его труда не составит.
2. По поводу блокировок. Вы о блокировках на какой регистр говорите?

Извините, увидел:
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Название: Re: Задача 1.01
Отправлено: nifendervan от Сентябрь 13, 2016, 02:10:41 pm
Извините, увидел:
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;

Эта строка кода ничего не блокирует на самом деле. Исключительная блокировка накладывается платформой при записи набора данных, т.к. используется управляемый режим.
Вот есть статья по поводу свойства БлокироватьДляИзменения http://expert.chistov.pro/public/196565/
Название: Re: Задача 1.01
Отправлено: Andronav от Октябрь 18, 2016, 11:41:43 am
Неправильно выбранная методика проведения - это -1 балл. Выбрать очень просто. По умолчанию нужно всегда стараться использовать новую методику. Если это невозможно - старую.

В приведённых последних примерах все используют старый способ проведния. Хотя эту задачу вполне можно решить и новой методой, ценной вопроса будет дополнительный регистр. Возникает вопрос, а что всё таки правильнее? Лишний регистр но новая методика или старая но с двумя регистрами?
Название: Re: Задача 1.01
Отправлено: kuzyara от Октябрь 18, 2016, 12:07:17 pm
Возникает вопрос, а что всё таки правильнее? Лишний регистр но новая методика или старая но с двумя регистрами?
Согласно принципу KISS - старая.
Название: Re: Задача 1.01
Отправлено: Andronav от Октябрь 21, 2016, 03:25:17 am
Цитировать
Согласно принципу KISS - старая.

Т.е. новая методика не в приоритете? Ведь по сути решение от Чистова http://1c.chistov.pro/2013/07/blog-post_25.html это  костяк задачи 1.1. Из плюсов явно "боевые" регистры будут подвергаться меньшим блокировкам, запросы без проверок на NULL, из минусов вижу что база будет разбухать от лишнего регистра. ИМХО это решение в "бою" должно быть интереснее, хотя конечно я не владею статистикой сравнения. 
Хотелось бы конечно от преподавателей 1с узнать позицию по этому вопросу. Может кто из вас уже задавался подобным вопросом и знает ответ?
Название: Re: Задача 1.01
Отправлено: Головлев Владислав от Октябрь 26, 2016, 02:44:24 pm
Цитировать
Согласно принципу KISS - старая.

Т.е. новая методика не в приоритете? Ведь по сути решение от Чистова http://1c.chistov.pro/2013/07/blog-post_25.html это  костяк задачи 1.1. Из плюсов явно "боевые" регистры будут подвергаться меньшим блокировкам, запросы без проверок на NULL, из минусов вижу что база будет разбухать от лишнего регистра. ИМХО это решение в "бою" должно быть интереснее, хотя конечно я не владею статистикой сравнения. 
Хотелось бы конечно от преподавателей 1с узнать позицию по этому вопросу. Может кто из вас уже задавался подобным вопросом и знает ответ?
По новой методике не получится посчитать себестоимость, т.к. сначала списываем, а потом лезем в регистр, а в регистре уже количество=общее количество-списано
Название: Re: Задача 1.01
Отправлено: alex1248 от Октябрь 26, 2016, 05:57:08 pm
Хотелось бы конечно от преподавателей 1с узнать позицию по этому вопросу.
Позиция экзаменаторов - новая методика с использованием доп регистра  = -1 балл.
Название: Re: Задача 1.01
Отправлено: Andronav от Октябрь 27, 2016, 04:07:03 am
По новой методике не получится посчитать себестоимость, т.к. сначала списываем, а потом лезем в регистр, а в регистре уже количество=общее количество-списано

Я имею ввиду использование новой методике в плане проверки остатков, себестоимость  списываем позднее. Собственно как и описывает П. Чистов в своей статье http://1c.chistov.pro/2013/07/blog-post_25.html.

Позиция экзаменаторов - новая методика с использованием доп регистра  = -1 балл.

Ок. Спасибо. Поставлю себе зарубку )). Хотя странно конечно, как я понимаю в последних релизах УТ используется именно новая методика (хотя не берусь утверждать, сам ещё не копал, со слов П.Чистова на одном из форумов. Какая-то не состыковка получается. Казалось бы человек в тренде, показывает последние тенденции, а ему "на -1 балл" ;).

Название: Re: Задача 1.01
Отправлено: Головлев Владислав от Октябрь 27, 2016, 06:43:33 am
По новой методике не получится посчитать себестоимость, т.к. сначала списываем, а потом лезем в регистр, а в регистре уже количество=общее количество-списано

Я имею ввиду использование новой методике в плане проверки остатков, себестоимость  списываем позднее. Собственно как и описывает П. Чистов в своей статье http://1c.chistov.pro/2013/07/blog-post_25.html.

Хм, тогда у меня встречный вопрос, в каких случаях требуется рассчитывать себестоимость при списании, а когда после? просто Чистов в статье http://1c.chistov.pro/2010/06/1-82.html пишет про новую методику следующее: "Однако не стоит думать, что такая технология может быть применена повсеместно. На секунду задумайтесь, что в этой задаче необходимо еще и себестоимость рассчитать при списании, и Вы придете к выводу, что необходим «старый» метод контроля остатков."
Название: Re: Задача 1.01
Отправлено: Andronav от Октябрь 27, 2016, 10:44:18 am
Хм, тогда у меня встречный вопрос, в каких случаях требуется рассчитывать себестоимость при списании, а когда после? просто Чистов в статье http://1c.chistov.pro/2010/06/1-82.html пишет про новую методику следующее: "Однако не стоит думать, что такая технология может быть применена повсеместно. На секунду задумайтесь, что в этой задаче необходимо еще и себестоимость рассчитать при списании, и Вы придете к выводу, что необходим «старый» метод контроля остатков."

Я честно говоря и сам не понял эту его фразу "себестоимость рассчитать при списании, и Вы придете к выводу, что необходим «старый» метод контроля остатков." Он сам же здесь  http://1c.chistov.pro/2013/07/blog-post_25.html применил новый метод контроля остатков и  списал себестоимость )). Видимо неудачно выразился.  Суть ясна конечно.
Название: Re: Задача 1.01
Отправлено: Головлев Владислав от Октябрь 28, 2016, 08:03:38 am
Хм, тогда у меня встречный вопрос, в каких случаях требуется рассчитывать себестоимость при списании, а когда после? просто Чистов в статье http://1c.chistov.pro/2010/06/1-82.html пишет про новую методику следующее: "Однако не стоит думать, что такая технология может быть применена повсеместно. На секунду задумайтесь, что в этой задаче необходимо еще и себестоимость рассчитать при списании, и Вы придете к выводу, что необходим «старый» метод контроля остатков."

Я честно говоря и сам не понял эту его фразу "себестоимость рассчитать при списании, и Вы придете к выводу, что необходим «старый» метод контроля остатков." Он сам же здесь  http://1c.chistov.pro/2013/07/blog-post_25.html применил новый метод контроля остатков и  списал себестоимость )). Видимо неудачно выразился.  Суть ясна конечно.
По моему мне стало понятно: если требуется списывать себестоимость + требуется оперативное проведение - то только старая методика, а если оперативное проведение не требуется, тогда можно и новой)
Название: Re: Задача 1.01
Отправлено: mic_net от Декабрь 16, 2016, 11:50:55 am
Хотелось бы конечно от преподавателей 1с узнать позицию по этому вопросу.
Позиция экзаменаторов - новая методика с использованием доп регистра  = -1 балл.
Доброго дня. Можно немного подробнее почему? http://expert.chistov.pro/public/195591/ Тут вот похожая задача с расчетом себестоимости по новой методике.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Январь 10, 2017, 10:42:53 am
Добрый день, джентльмены.
Посмотрите, пожалуйста мое решение 1.1 задачи по оперативному учету.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Январь 10, 2017, 12:38:35 pm
Коллеги, подскажите, а разве не надо сейчас все расчеты выносить на сервер? А то я смотрю решения которые народ выкладывает - все делают прям в в модуле документа. Я  в своем решении запросы выполняю (ресурсоемкие) на сервере в общем модуле, а движения в самом документе или сейчас можно прям в модуле документа все делать?
Название: Re: Задача 1.01
Отправлено: alex1248 от Январь 10, 2017, 05:49:20 pm
... все делают прям в в модуле документа...
Вроде, процедуры модуля документа на сервере и выполняются?  :)
Если расчет выполняется один раз, какой смысл выносить его в общий модуль?
Название: Re: Задача 1.01
Отправлено: JohnSilver от Январь 10, 2017, 05:55:31 pm
... все делают прям в в модуле документа...
Вроде процедуры модуля документа на сервере и выполняются?  :)
Если расчет выполняется один раз, какой смысл выносить его с общий модуль?

Верно на сервере. Но в одной из тем я встретил слова господина GROOVY о том, что необходимо все ресурсоемкие выносить в общий модуль.
http://forum.chistov.pro/index.php?topic=4021.0
 (http://forum.chistov.pro/index.php?topic=4021.0)
Конечно 100%. Только если Вы будете стараться. Входные требования все же есть. Если объясните мне что такое ПВХ  и для чего оно нужно, и почему расчет надо делать в общем модуле, думая я смогу дать гарантию 99.999999%

На этом основании я и использовал общий модуль. Или я неверно интерпретировал слова автора?
Название: Re: Задача 1.01
Отправлено: alex1248 от Январь 10, 2017, 07:40:14 pm
... расчет надо делать в общем модуле...
Предполагаю, что имеется ввиду расчетная задача.
В ней действительно настоятельно рекомендуется использовать общий модуль. Почему, уже забыл, тут где-то это подробно обсуждалось. Возможно, разъяснения по этому вопросу можно найти по ссылке, что у меня в подписи.  :)
Название: Re: Задача 1.01
Отправлено: MariaZhev от Январь 13, 2017, 10:08:45 am
Добрый день, джентльмены.
Посмотрите, пожалуйста мое решение 1.1 задачи по оперативному учету.
1. У Вас в отчет Продажи не попадают Услуги
2. Регистр Продажи, на мой взгляд, должен быть оборотным с регистратором Расходная накладная, измерениями Номенклатура и Партия
Название: Re: Задача 1.01
Отправлено: JohnSilver от Январь 19, 2017, 06:46:14 pm
Добрый день, джентльмены.
Посмотрите, пожалуйста мое решение 1.1 задачи по оперативному учету.
1. У Вас в отчет Продажи не попадают Услуги
2. Регистр Продажи, на мой взгляд, должен быть оборотным с регистратором Расходная накладная, измерениями Номенклатура и Партия
Спасибо, но почитав тему повнимательней начал сомневаться в модуле проведения РН. Увидел что тут рекомендуют использовать старую методику проведения а у меня новая. Причем в большинстве решений я увидел два регистра Остатки (с разрезом Партия - у меня остатки без партии) и Продажи (оборотный). А у меня 2 регистра - оба остатки, причем себестоимость я вычисляю в запросе как разницу суммы расхода и суммы начальной.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Январь 19, 2017, 09:03:29 pm
Коллеги, добрый день.
Почитав форум решил сделать по старой методике. Но заткнулся на одном моменте.
   Движения.ОстаткиНоменклатуры.Очистить();
Без этой строки в начале модуля документа РасходнаяНакладная  запрос по остаткам товаров считывает и движения этого документа. (В запрос я передаю МоментВремени()) Так надо или нет?
То есть верно ли я добавил эту строчку или надо искать где то ошибку?
Название: Re: Задача 1.01
Отправлено: GROOVY от Январь 19, 2017, 09:14:30 pm
1. Так экзамен Вы не сдадите.
2. Это нормально при перепроведении, если в свойствах документа не установлено автоматическое удаление движений.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Январь 20, 2017, 10:25:14 am
1. Так экзамен Вы не сдадите.
2. Это нормально при перепроведении, если в свойствах документа не установлено автоматическое удаление движений.
1. Так это как? Как в приложенном мной файле?
2. Посмотрел в документ, увидел что там стоит "Удалять автоматически при отмене проведения", выбрал "Удалять автоматически" - помогло. Я верно сделал или надо еще где то подкрутить?
Название: Re: Задача 1.01
Отправлено: mariB от Январь 25, 2017, 01:45:26 pm
Добрый день, участникам форума.
Посмотрите, пожалуйста мое решение 1.1 задачи по оперативному учету.
Название: Re: Задача 1.01
Отправлено: MariaZhev от Февраль 14, 2017, 03:48:14 pm
Коллеги подскажите, пожалуйста, в каких именно случаях снимают 0,5 бала за установку отборов по неиндексированным полям?
Название: Re: Задача 1.01
Отправлено: vaasec от Февраль 15, 2017, 10:25:48 am
Коллеги подскажите, пожалуйста, в каких именно случаях снимают 0,5 бала за установку отборов по неиндексированным полям?

Индексировать надо поля виртуальных таблиц, которые потом будут использоваться при соединении или в отборах.
Например, при проведении документа в запросе вы в начале получаете табличную часть документа и группируете по номенклатуре и помещаете в виртуальную таблицу. Далее данную таблицу можно использовать в качестве отбора (получение остатков меньше 0, при новой методике проведения) или при левом соединении (при получении остатков).
Поле номенклатура необходимо индексировать. Если вы этого не сделаете, то будут снимать балы.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Февраль 15, 2017, 07:30:31 pm
Добрый день.
Прошу проверить новую редакцию задачи 1.1.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Февраль 15, 2017, 08:37:29 pm
Добрый день, участникам форума.
Посмотрите, пожалуйста мое решение 1.1 задачи по оперативному учету.
Добрый день.
Я сейчас тоже готовлюсь к экзамену, чуть выше выложил свое решение.
Судя по всему теперь этот форум не такой активный как раньше, поэтому предлагаю помогать друг другу по мере возможности.
У меня есть ряд вопросов по Вашему решению:
1. https://cloud.mail.ru/public/GGji/zeTCyLZxx - это ваши настройки
https://cloud.mail.ru/public/GGji/zeTCyLZxx - это мои настройки.
Вы их сами меняли или они уже такие были? И если сами то с какой целью?
2. Не уверен что при проведении РН необходимо очищать регистр Продажи.
3. Вы уверены что установку блокировки, признак записи и очистку регистров необходимо выполнять до исполнения запроса?
4. В Вашем решении нет строки    Движения.ОстаткиНоменклатуры.Записать(); после очистки регистра. По моему без записи очистка не имеет смысла.
5.          Если Отказ Тогда
            Продолжить;
         КонецЕсли;
можно писать сразу в условии где Отказ`у присваивается Истина.
6. Списать = 0; лишнее объявление
7. Движение.Стоимость = ?(Списать = ВыборкаГрупп.КоличествоОстаток, Выборка.СтоимостьОстаток, Списать / Выборка.КоличествоОстаток * Выборка.СтоимостьОстаток); сложная строка для восприятия, главное чтобы экзаменатор не докопался.

 
Название: Re: Задача 1.01
Отправлено: alex1248 от Февраль 15, 2017, 08:55:14 pm
Судя по всему теперь этот форум не такой активный как раньше ...
Вообще говоря, народ больше тусуется в ветках по актуальным билетам, а не сборниковским задачам, которые часто лишь отдаленно напоминают экзаменационные.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Февраль 15, 2017, 09:15:33 pm
Судя по всему теперь этот форум не такой активный как раньше ...
Вообще говоря, народ больше тусуется в ветках по актуальным билетам, а не сборниковским задачам, которые часто лишь отдаленно напоминают экзаменационные.

Я видел тему - Актуальные билеты, готовиться по билетам конечно оно продуктивнее, но меня смущает то что написано большими красными буквами в билетах -

https://docs.google.com/document/d/19Cv6COjMRcN_qDLbiWmYwp686IXpxE9GHHzQkpa2rME/edit

мол теперь билеты компонуются случайным образом. Вопрос остается только в том - все ли вопросы участвуют при компоновке билетов или участвуют только те вопросы, которые ранее уже были привязаны к конкретным билетам?
Название: Re: Задача 1.01
Отправлено: alex1248 от Февраль 15, 2017, 09:35:31 pm
мол теперь билеты компонуются случайным образом
Билеты компонуются случайным образом из задач из того файлика с Актуальными билетами.
Сборник к этому не имеет никакого отношения.
Название: Re: Задача 1.01
Отправлено: JohnSilver от Февраль 15, 2017, 09:46:58 pm
Спасибо за уточнение.
Название: Re: Задача 1.01
Отправлено: andrig от Февраль 27, 2017, 05:30:06 pm
Здравствуйте, друзья!
Прошу прокомментить.
Название: Re: Задача 1.01
Отправлено: jonik от Май 03, 2017, 06:01:02 pm
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Название: Re: Задача 1.01
Отправлено: nifendervan от Май 15, 2017, 06:57:34 pm
Переработал задачу.
Название: Re: Задача 1.01
Отправлено: АлексДС от Июль 04, 2017, 02:57:35 pm
Добрый день, коллеги!
Посмотрите, пожалуйста, мой вариант решения.
Название: Re: Задача 1.01
Отправлено: famous от Июль 20, 2017, 06:51:52 pm
Добрый день! Кто может помочь решить данную задачу!? Уже как неделю пытаюсь, но ничего не получается.
Название: Re: Задача 1.01
Отправлено: vaasec от Июль 21, 2017, 08:41:11 am
Добрый день! Кто может помочь решить данную задачу!? Уже как неделю пытаюсь, но ничего не получается.
http://v2.ax-online.ru/Exams/AttPlatf/Task-1.1.aspx (http://v2.ax-online.ru/Exams/AttPlatf/Task-1.1.aspx)
Название: Re: Задача 1.01
Отправлено: famous от Июль 21, 2017, 08:47:30 am
Добрый день! Кто может помочь решить данную задачу!? Уже как неделю пытаюсь, но ничего не получается.
http://v2.ax-online.ru/Exams/AttPlatf/Task-1.1.aspx (http://v2.ax-online.ru/Exams/AttPlatf/Task-1.1.aspx)
На этом сайте она решена с ошибками, у меня ничего не проводиться!
Название: Re: Задача 1.01
Отправлено: vaasec от Июль 21, 2017, 10:07:36 am
На этом сайте она решена с ошибками, у меня ничего не проводиться!
а в чем заключается ошибка?
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 22, 2017, 08:03:57 pm
Переработал задачу.

В движении приходной нет проверки на услугу, у тебя услуги в регистр попадут, прям сразу огромный минус.
Что в движение расходной написал, это вообще кошмар. Такое ощущение что из разных решений все скидал
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 22, 2017, 08:20:55 pm
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
В Приходной, нет проверки на услугу, по регистру продажи у тебя вообще движений нету, Приходная делает движения по двум регистрам, как ты собираешься списывать товар, если в регистре продаж записи не добавляются из поступления? Задачи то хоть тестируйте, а не только код копипасте.
В расходной, зачем получаешь метод списания из регистра учетная политика на момент времени?? У данного регистра нету регистратора. Почитай хорошо, что такое момент времени и когда он применяется. Из данного регистра получаем данные на Дату.
Ну а дальше вообще ничего не правильно. Т.к из условия задачи, мы можем получить себестоимость товара из расходной, не залазия в другие регистры или документы, то мы используем новую методику списания.
Сначала записываем данные в регистр остатки, а потом проверяем ушли мы в минус или нет.
Регистр остатки с продажами перепутал.  В общем посмотри в интернете новый метод списания, у тебя вообще ерунда какая то написана.
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 22, 2017, 08:28:57 pm
Добрый день.
Прошу проверить новую редакцию задачи 1.1.
Похоже друг у друга скопировали все((
Тоже самое что и выше, Приходная у тебя делает движения по одному регистру, должна по двум. Плюс нет проверки на услугу.
В расходной, не надо писать  РС = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата);
Получение данных через точку, сразу минус влепят.
Надо получать данные с помощью запроса.
Ну а дальше бред пошел. Снова повторюсь, читай новый метод списания.
Вы откуда все копируете? почему у вас у всех у регистра остатки партия появляется? В регистре "Остатки", хранится информация об остатках товара. Т.е там только номенклатура и количество, все а вот в регистре продажи, хранится: Номенклатура, партия, количество и сумма
Название: Re: Задача 1.01
Отправлено: alex1248 от Сентябрь 22, 2017, 10:10:35 pm
Получение данных через точку, сразу минус влепят.
Надо получать данные с помощью запроса.
Либо я не понял, либо вы не корректно сформулировали (если что, я не смотрел решения, так что могу написать невпопад, сорри).
Данные через точку получать, вообще говоря, не запрещено.
Грубой ошибкой является использование запроса в цикле. А "получение данных через точку" - и есть запрос. Поэтому такую конструкцию в цикле использовать не следует. Если же получение такой информации разовое, то никаких проблем не будет.
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 23, 2017, 08:27:03 am
Получение данных через точку, сразу минус влепят.
Надо получать данные с помощью запроса.
Либо я не понял, либо вы не корректно сформулировали (если что, я не смотрел решения, так что могу написать невпопад, сорри).
Данные через точку получать, вообще говоря, не запрещено.
Грубой ошибкой является использование запроса в цикле. А "получение данных через точку" - и есть запрос. Поэтому такую конструкцию в цикле использовать не следует. Если же получение такой информации разовое, то никаких проблем не будет.

В 1с ничего не запрещено, ты у себя в базе можешь хоть все через точку находить, но когда экзамен сдаешь, снимают балы, если видят что получены данные через точку. Даже если ты напишешь Док.Дата, уже бал снять могут, если можно было получить эту дату в запросе.
Название: Re: Задача 1.01
Отправлено: logo23 от Сентябрь 23, 2017, 05:21:20 pm
Добрый день. Буду благодарен за комментарии к моему решению.
Название: Re: Задача 1.01
Отправлено: alex1248 от Сентябрь 23, 2017, 07:54:17 pm
Получение данных через точку, сразу минус влепят.
Надо получать данные с помощью запроса.
Либо я не понял, либо вы не корректно сформулировали (если что, я не смотрел решения, так что могу написать невпопад, сорри).
Данные через точку получать, вообще говоря, не запрещено.
Грубой ошибкой является использование запроса в цикле. А "получение данных через точку" - и есть запрос. Поэтому такую конструкцию в цикле использовать не следует. Если же получение такой информации разовое, то никаких проблем не будет.

В 1с ничего не запрещено, ты у себя в базе можешь хоть все через точку находить, но когда экзамен сдаешь, снимают балы, если видят что получены данные через точку. Даже если ты напишешь Док.Дата, уже бал снять могут, если можно было получить эту дату в запросе.
Слава Богу, экзамен я сдал давно, а вы не правы.
Название: Re: Задача 1.01
Отправлено: Clition от Сентябрь 24, 2017, 08:33:22 am
Грубой ошибкой является использование запроса в цикле. А "получение данных через точку" - и есть запрос. Поэтому такую конструкцию в цикле использовать не следует. Если же получение такой информации разовое, то никаких проблем не будет.
Получение данных через точку - это запрос, который выбирает все поля объекта. Запросом выбирать рекомендуется только те поля, которые будут задействованы в прикладной логике. Если нам нужны все поля объекта, то разницы нет как их выбирать запросом или через точку. Что же касается использования конструкции через точку в цикле, то запрос будет выполнен только один раз (первый). Вроде бы так.
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 28, 2017, 04:01:41 pm
Вот задача, может что пропустил, хотя должно быть все идеально
Название: Re: Задача 1.01
Отправлено: Clition от Сентябрь 29, 2017, 02:35:40 pm
должно быть все идеально
Выборка.МетодСписания="ФИФО" У Вас МетодСписания перечисление
В запросе для создания движений по РН ОстаткиТоваров Вы не группируете номенклатуру.
У спр Номенклатура реквизит Услуга булево. Для этого в каркасной есть перечисление ВидыНоменклатуры. Но за это врядли снижают.
Табличную часть расходной получаете сначала для формирования движений в РН ОстаткиТоваров, затем второй раз при проверке остатков. Раз вы все равно используете МВТ, то ТЧ лучше поместить в ВТ еще в первом запросе.
Учет ведется в разрезе складов, а в регистре остатки у вас нет измерения Склад и при проверке остатков, соответственно, не проверяете склад.
В запросе для создания движений по партиям используете левое соединение и не проверяете на NULL.
Если Режим = РежимПроведенияДокумента.Оперативный то у Вас два раза Движения.Партии.Очистить();
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 29, 2017, 02:48:45 pm
должно быть все идеально
Выборка.МетодСписания="ФИФО" У Вас МетодСписания перечисление
В запросе для создания движений по РН ОстаткиТоваров Вы не группируете номенклатуру.
У спр Номенклатура реквизит Услуга булево. Для этого в каркасной есть перечисление ВидыНоменклатуры. Но за это врядли снижают.
Табличную часть расходной получаете сначала для формирования движений в РН ОстаткиТоваров, затем второй раз при проверке остатков. Раз вы все равно используете МВТ, то ТЧ лучше поместить в ВТ еще в первом запросе.
Учет ведется в разрезе складов, а в регистре остатки у вас нет измерения Склад и при проверке остатков, соответственно, не проверяете склад.
В запросе для создания движений по партиям используете левое соединение и не проверяете на NULL.
Если Режим = РежимПроведенияДокумента.Оперативный то у Вас два раза Движения.Партии.Очистить();

У меня услуга это галка, мало ли что в конфигурации есть, я могу использовать пустую базу.  Поэтому логичнее использовать галочку а не перечисление. Если бы у нас было 3 вида номенклатуры хотя бы, тогда есть смысл перечисление использовать, а так лишний гемор.
Учет не ведется по складам!
Про временную, да, надо в первом запросе менеджер ставить а не во втором.
Если учет правильно ведется то NULL будет только если  номенклатура услуга, а если услуга то мы значения которые будут NULL не тянем, соответственно ошибка не выйдет. Но конечно, кто то может запись в регистре затереть и тогда могут косяки вылезти. Добавлю проверку
Про очистить, вечером гляну, про второе очистить не помню.
Название: Re: Задача 1.01
Отправлено: Clition от Сентябрь 29, 2017, 03:29:12 pm
я могу использовать пустую базу.
По отзывам такого права больше нет.

Учет не ведется по складам!
Да, попутал с первой задачей из актуальных.

Если учет правильно ведется то NULL будет только если  номенклатура услуга, а если услуга то мы значения которые будут NULL не тянем, соответственно ошибка не выйдет.
Цитировать
При списании себестоимости вы делаете еще одну проверку остатков, но уже по регистрам Управленческий и СебестоимостьНоменклатурыОстатки. Надо ли это делать?
Как было разъяснено на этом форуме, проверку на остатки необходимо делать по каждом учетном регистру ибо нет синхронизации между ними.
Мне думается, что не сослаться на правильное ведение учета на экзамене не удастся.
Название: Re: Задача 1.01
Отправлено: Demora от Сентябрь 29, 2017, 03:53:49 pm
Вот задача, может что пропустил, хотя должно быть все идеально

Подскажите, пожалуйста, зачем используется доп регистр "Партии", а не учитываем все в регистре "Продажи"?
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 29, 2017, 04:10:58 pm
Задачу нету скинул(( А то смотрю что за регистр Партии)
Вот моя задача, добавил только проверку на NULL.
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 29, 2017, 04:13:43 pm
Вот задача, может что пропустил, хотя должно быть все идеально

Подскажите, пожалуйста, зачем используется доп регистр "Партии", а не учитываем все в регистре "Продажи"?
3 регистр нам нужен для того что бы отчет сформировать. Т.к нам нужно вывести себестоимость номенклатуры за период, а она нигде не хранится, а только рассчитывается. Поэтому заводится еще один регистр, в который помещаем номенклатуру, количество, себестоимость и сумму продажи. В итоге из этого регистра легко собрать отчет
Название: Re: Задача 1.01
Отправлено: Demora от Сентябрь 29, 2017, 04:57:30 pm
Вот задача, может что пропустил, хотя должно быть все идеально

Подскажите, пожалуйста, зачем используется доп регистр "Партии", а не учитываем все в регистре "Продажи"?
3 регистр нам нужен для того что бы отчет сформировать. Т.к нам нужно вывести себестоимость номенклатуры за период, а она нигде не хранится, а только рассчитывается. Поэтому заводится еще один регистр, в который помещаем номенклатуру, количество, себестоимость и сумму продажи. В итоге из этого регистра легко собрать отчет

Еще раз, лично для меня дурной, почему не 2 регистра: "Продажи" - номенклатура, Количество, Себестоимость, Сумма продажи - по нему выводим обороты с суммой и "Остатки" - Номенклатура, Партия, Количество, Сумма? З
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 29, 2017, 05:29:53 pm
Вот задача, может что пропустил, хотя должно быть все идеально

Подскажите, пожалуйста, зачем используется доп регистр "Партии", а не учитываем все в регистре "Продажи"?
3 регистр нам нужен для того что бы отчет сформировать. Т.к нам нужно вывести себестоимость номенклатуры за период, а она нигде не хранится, а только рассчитывается. Поэтому заводится еще один регистр, в который помещаем номенклатуру, количество, себестоимость и сумму продажи. В итоге из этого регистра легко собрать отчет

Еще раз, лично для меня дурной, почему не 2 регистра: "Продажи" - номенклатура, Количество, Себестоимость, Сумма продажи - по нему выводим обороты с суммой и "Остатки" - Номенклатура, Партия, Количество, Сумма? З
Зачем в регистре Остатки, партия?  Регистр остатки должен содержать только остатки по номенклатуре, т.е содержать номенклатуру и остаток, больше ничего. Можете конечно все в кучу свалить, лично я разделяю данные.
Название: Re: Задача 1.01
Отправлено: angelivoin от Сентябрь 29, 2017, 07:24:10 pm
Заходите  в рубрикаторе в задачу 1.2, закинул свою.
Название: Re: Задача 1.01
Отправлено: jonik от Октябрь 02, 2017, 10:38:01 am
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
В Приходной, нет проверки на услугу, по регистру продажи у тебя вообще движений нету, Приходная делает движения по двум регистрам, как ты собираешься списывать товар, если в регистре продаж записи не добавляются из поступления? Задачи то хоть тестируйте, а не только код копипасте.
В расходной, зачем получаешь метод списания из регистра учетная политика на момент времени?? У данного регистра нету регистратора. Почитай хорошо, что такое момент времени и когда он применяется. Из данного регистра получаем данные на Дату.
Ну а дальше вообще ничего не правильно. Т.к из условия задачи, мы можем получить себестоимость товара из расходной, не залазия в другие регистры или документы, то мы используем новую методику списания.
Сначала записываем данные в регистр остатки, а потом проверяем ушли мы в минус или нет.
Регистр остатки с продажами перепутал.  В общем посмотри в интернете новый метод списания, у тебя вообще ерунда какая то написана.

Уважаемый, angelivoin, учите матчасть :(
1) В приходной услуга отсекается в параметрах выбора Номенклатуры.
2) Приходная делает движения по оборотному регистру Продажи? Что правда? :o При приобретении товара что вы продаете, если не секрет? Деньги?
3) по поводу даты в регистре сведений: не буду спорить, можно поставить на дату, т.к. учетная политика действует год. МоментВремени() не является ошибкой, пишу его уже на рефлексе.
Посмотрел ваше решение...Эххх :-\
4)Если Режим = РежимПроведенияДокумента.Оперативный ТогдаЧитаем форум
5) 3 регистра, мда. Особенно понравился регистр Себестоимость. Внимательно изучите как правильно(!!!) строится структура регистров, считается себестоимость.
Окр(Списываем /ВыборкаСписания.Количество,2)*ВыборкаСписания.СебестоимостьПросто песня
6) старую методику никто не отменял

П.С. Перед тем как критиковать, сами разберитесь в методах решения.
Название: Re: Задача 1.01
Отправлено: alex1248 от Октябрь 02, 2017, 12:33:45 pm
6) старую методику никто не отменял
Скажу больше, использование новой методики в такой задаче на экзамене наверняка принесет штраф в 1 балл.
Название: Re: Задача 1.01
Отправлено: angelivoin от Октябрь 02, 2017, 05:26:26 pm
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
В Приходной, нет проверки на услугу, по регистру продажи у тебя вообще движений нету, Приходная делает движения по двум регистрам, как ты собираешься списывать товар, если в регистре продаж записи не добавляются из поступления? Задачи то хоть тестируйте, а не только код копипасте.
В расходной, зачем получаешь метод списания из регистра учетная политика на момент времени?? У данного регистра нету регистратора. Почитай хорошо, что такое момент времени и когда он применяется. Из данного регистра получаем данные на Дату.
Ну а дальше вообще ничего не правильно. Т.к из условия задачи, мы можем получить себестоимость товара из расходной, не залазия в другие регистры или документы, то мы используем новую методику списания.
Сначала записываем данные в регистр остатки, а потом проверяем ушли мы в минус или нет.
Регистр остатки с продажами перепутал.  В общем посмотри в интернете новый метод списания, у тебя вообще ерунда какая то написана.

Уважаемый, angelivoin, учите матчасть :(
1) В приходной услуга отсекается в параметрах выбора Номенклатуры.
2) Приходная делает движения по оборотному регистру Продажи? Что правда? :o При приобретении товара что вы продаете, если не секрет? Деньги?
3) по поводу даты в регистре сведений: не буду спорить, можно поставить на дату, т.к. учетная политика действует год. МоментВремени() не является ошибкой, пишу его уже на рефлексе.
Посмотрел ваше решение...Эххх :-\
4)Если Режим = РежимПроведенияДокумента.Оперативный ТогдаЧитаем форум
5) 3 регистра, мда. Особенно понравился регистр Себестоимость. Внимательно изучите как правильно(!!!) строится структура регистров, считается себестоимость.
Окр(Списываем /ВыборкаСписания.Количество,2)*ВыборкаСписания.СебестоимостьПросто песня
6) старую методику никто не отменял

П.С. Перед тем как критиковать, сами разберитесь в методах решения.

1)Можно и так сделать. Вот такой момент, мы купили товар у поставщика и все время сами привозили товар, а вот тут решили заказать еще и доставку, куда мы ее должны записать?
2) Я не посмотрел что два регистра используешь, тут поторопился.
3) Тут я не знаю, снимают или нет за некорректный параметр
4) Что тут не правильно? При оперативном проведении по регистру остатки товаров параметр дата = неопределено, т.е остатки будут браться на дату 3999 год. Если мы не очистим движения документа, то они попадут в общее количество товара, а нам это не надо. Надо получить остатки не учитывая движения документа.
А если проводим неоперативно, нам очищать не надо движения, т.к мы получаем остатки на момент времени, а следовательно движения документа не попадут в отбор.
Будущей датой документы у нас провести нельзя, т.к стоит разрешить оперативное проведение.
Можно без проверки очищать записи не учитывая оперативное или нет проведение, но я думаю даже запись пустого набора занимает ресурсы и время.
5) Гилев в своей статье писал, что лучше всего делать 3 регистра, остатки, продажи и себестоимость. Он не рекомендует объединять остатки и себестоимость, т.к в реальной работе, списание себестоимости идет в разрезе организаций, подразделений и еще кучи измерений. А остатки не надо засорять различными лишними измерениями. В остатках должен быть минимальный набор измерений. Поэтому у меня 3 регистра.
6) Лучше вы хорошо почитайте про списание копеек, вот ссылка http://expert.chistov.pro/public/102366/
Где парень описывает как должны списываться копейки. Ему сказал преподаватель 1с. Почитайте для ознакомления.
7) А кто говорит что ее отменили? Если есть возможность использовать новую методику, то надо ее и использовать
На этом форуме уже кто то скидывал, что использовал не правильный метод списания на экзамене и ему балы сняли

Я каждый пункт обосновал, почему я сделал так а не иначе. Вы кроме, смешно, учи матчасть, читай форум и остальные банальные слова, не привели ни одного аргумента почему не правильно у меня.
Название: Re: Задача 1.01
Отправлено: angelivoin от Октябрь 02, 2017, 05:39:19 pm
6) старую методику никто не отменял
Скажу больше, использование новой методики в такой задаче на экзамене наверняка принесет штраф в 1 балл.
А ты обоснуй, за что должны снять бал? Новая методика работает быстрее и если ее можно использовать, то с какого за ее использование  должны бал снять?
Название: Re: Задача 1.01
Отправлено: alex1248 от Октябрь 02, 2017, 05:50:53 pm
6) Лучше вы хорошо почитайте про списание копеек, вот ссылка http://expert.chistov.pro/public/102366/
Где парень описывает как должны списываться копейки. Ему сказал преподаватель 1с. Почитайте для ознакомления.
jonik прав - бредятина.
Название: Re: Задача 1.01
Отправлено: angelivoin от Октябрь 02, 2017, 06:39:31 pm
6) Лучше вы хорошо почитайте про списание копеек, вот ссылка http://expert.chistov.pro/public/102366/
Где парень описывает как должны списываться копейки. Ему сказал преподаватель 1с. Почитайте для ознакомления.
jonik прав - бредятина.
Чем бред? Курсы проходить будете, вам препод тоже так же скажет списывать копейки. Они говорят что по методологии с начало должно идти деление и только потом умножение. Сделаете по своему лишитесь бала
Название: Re: Задача 1.01
Отправлено: Clition от Октябрь 03, 2017, 08:27:32 am
6) Лучше вы хорошо почитайте про списание копеек, вот ссылка http://expert.chistov.pro/public/102366/
Где парень описывает как должны списываться копейки. Ему сказал преподаватель 1с. Почитайте для ознакомления.
jonik прав - бредятина.
По указанной ссылке есть коммент (85), в которой описана ошибка. Округление действительно бред.
Вопрос по поводу порядка деление или умножение. Имеет значение на экзамене? Описанные в статье проблемы не воспроизводится ни под каким соусом.
Что 3 * 10 / 3 = 10, что 3 / 3 * 10 = 10.
Название: Re: Задача 1.01
Отправлено: alex1248 от Октябрь 03, 2017, 09:22:33 am
Вопрос по поводу порядка деление или умножение. Имеет значение на экзамене? Описанные в статье проблемы не воспроизводится ни под каким соусом.
Что 3 * 10 / 3 = 10, что 3 / 3 * 10 = 10.
С формулой типа
СумСписать = ? (КолСписать = Выборка.КолОст, Выборка.СумОст, КолСписать / Выборка.КолОст * Выборка.СумОст);
проблем быть не должно.
Вариант с умножением сначала рискован тем, что если множители достаточно большие, снизится точность итогового результата. Хотя, нужна ли она, не знаю. Во всяком случае вот эта часть ? (КолСписать = Выборка.КолОст, Выборка.СумОст, как раз и является подстраховкой на все варианты со слишком большими/маленькими числами.
Название: Re: Задача 1.01
Отправлено: jonik от Октябрь 03, 2017, 09:56:29 am
6) Лучше вы хорошо почитайте про списание копеек, вот ссылка http://expert.chistov.pro/public/102366/
Где парень описывает как должны списываться копейки. Ему сказал преподаватель 1с. Почитайте для ознакомления.
jonik прав - бредятина.
Чем бред? Курсы проходить будете, вам препод тоже так же скажет списывать копейки. Они говорят что по методологии с начало должно идти деление и только потом умножение. Сделаете по своему лишитесь бала

Судя по тому, что 3 пользователя пытаются донести одну и ту же мысль,включая специалиста по платформе 8.3 alex1248, но безуспешно, думаю дискуссию можно закрывать. Небольшая просьба: angelivoin не комментируйте мои решения. Заранее спасибо.
Название: Re: Задача 1.01
Отправлено: jonik от Октябрь 03, 2017, 10:09:29 am
6) Лучше вы хорошо почитайте про списание копеек, вот ссылка http://expert.chistov.pro/public/102366/
Где парень описывает как должны списываться копейки. Ему сказал преподаватель 1с. Почитайте для ознакомления.
jonik прав - бредятина.
По указанной ссылке есть коммент (85), в которой описана ошибка. Округление действительно бред.
Вопрос по поводу порядка деление или умножение. Имеет значение на экзамене? Описанные в статье проблемы не воспроизводится ни под каким соусом.
Что 3 * 10 / 3 = 10, что 3 / 3 * 10 = 10.

Это математика: действия * и / равноправны, поэтому выполняются последовательно. Выражение 10/3*6 = 19,(9), в то время как 10*6/3 = 20. Проверяется отладчиком. Поэтому грамотнее сначала умножать.
Название: Re: Задача 1.01
Отправлено: angelivoin от Октябрь 03, 2017, 12:03:50 pm
6) Лучше вы хорошо почитайте про списание копеек, вот ссылка http://expert.chistov.pro/public/102366/
Где парень описывает как должны списываться копейки. Ему сказал преподаватель 1с. Почитайте для ознакомления.
jonik прав - бредятина.
Чем бред? Курсы проходить будете, вам препод тоже так же скажет списывать копейки. Они говорят что по методологии с начало должно идти деление и только потом умножение. Сделаете по своему лишитесь бала

Судя по тому, что 3 пользователя пытаются донести одну и ту же мысль,включая специалиста по платформе 8.3 alex1248, но безуспешно, думаю дискуссию можно закрывать. Небольшая просьба: angelivoin не комментируйте мои решения. Заранее спасибо.
Да бога ради, сдались вы мне.
Списание копеек я взял из ссылки выше. Где там указано, что преподаватель фирмы 1С сказал, что с начало умножение ставить некорректно, ставить надо с начало деление. Я не из головы это выдумал и скинул. Я экзамен не сдавал, я не знаю что правильно что нет, я так же ищу везде информацию.  И пытаюсь из кучи ответов собрать правильный.
Название: Re: Задача 1.01
Отправлено: angelivoin от Октябрь 03, 2017, 12:44:07 pm
Нашел на форуме тему по списанию копеек. оптимальная формула: КолСписываем/КолОстаток*Себестоимость
Название: Re: Задача 1.01
Отправлено: angelivoin от Октябрь 05, 2017, 07:32:25 am
Переделал задачу на два регистра. Отчеты скорее всего не работают, они простые не стал с ними возиться.
Название: Re: Задача 1.01
Отправлено: bkmz от Ноябрь 11, 2017, 07:19:24 pm
Скажите пожалуйста, те кто сдал экзамен, точно. В этой задаче нужно использовать новую методику проведения или нет? Если нет то почему и если да то почему?

Какие допущены у меня ошибки?
Название: Re: Задача 1.01
Отправлено: jonik от Ноябрь 20, 2017, 11:11:46 am
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Подкорректировал
Название: Re: Задача 1.01
Отправлено: olya_0701 от Июнь 01, 2018, 04:10:21 pm
Здравствуйте.
По заданию  в отчете Продажи должны быть также видны услуги.
Необходимо по ним делать отдельную выборку и циклом вносить записи в регистр?
Название: Re: Задача 1.01
Отправлено: angelivoin от Июнь 02, 2018, 05:43:11 pm
Здравствуйте.
По заданию  в отчете Продажи должны быть также видны услуги.
Необходимо по ним делать отдельную выборку и циклом вносить записи в регистр?

Приветствую. В регистре продажи(или как вы его назвали) должны попадать записи по услугам, единственно что по услугам партий не будет
Название: Re: Задача 1.01
Отправлено: melada от Сентябрь 27, 2018, 04:30:52 pm
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Подкорректировал

Я только изучаю, так что объясните, пожалуйста, если вопрос глупый.
Почему нельзя в расходной накладной сначала сделать блокировку, а потом сделать пакет запросов вместе двух разных? Так же правильнее, насколько я знаю
Название: Re: Задача 1.01
Отправлено: ultra от Ноябрь 25, 2018, 10:51:59 pm
Добрый вечер. Начал решать задачи по оперативному учету. Хотел бы для себя внести ясность, перед тем как решать. Посмотрел видео Белоусова и совсем запутался, с его слов я должен отдавать предпочтение новой методике проведения документов. Есть ли смысл создавать отдельно регистр для учета остатков, без учета себестоимости, в нем реализовывать новую методику проведения документов. А затем уже выполнять списание по партиям в отдельном регистре? Получается я практически любую задачу могу решать таким образом, учитывать остатки в отдельном регистре. С точки зрения блокировок я буду выигрывать. Как расставлять приоритеты оптимизации? Все-таки лишний регистр...
Название: Re: Задача 1.01
Отправлено: eiffil от Ноябрь 27, 2018, 11:54:33 am
Добрый вечер. Начал решать задачи по оперативному учету. Хотел бы для себя внести ясность, перед тем как решать. Посмотрел видео Белоусова и совсем запутался, с его слов я должен отдавать предпочтение новой методике проведения документов. Есть ли смысл создавать отдельно регистр для учета остатков, без учета себестоимости, в нем реализовывать новую методику проведения документов. А затем уже выполнять списание по партиям в отдельном регистре? Получается я практически любую задачу могу решать таким образом, учитывать остатки в отдельном регистре. С точки зрения блокировок я буду выигрывать. Как расставлять приоритеты оптимизации? Все-таки лишний регистр...


В этом смысла нет, т.к. при проведении по регистру с партиями вам в любом случае нужно будет делать проведение по старой методике и в этом случае такое дублирование регистров теряет смысл (оно используется в современных конфигурациях с отложенным проведением, но этого на экзамене нет). Поэтому если нужно получать данные из регистров для проведения (партии или суммы) - это всегда старая методика. Если можно сформировать движения и после записи только проверить остатки - это новая.
Название: Re: Задача 1.01
Отправлено: ВладимирВВВ от Декабрь 05, 2018, 02:52:34 pm
Добрый день. Сделал через пакет запросов. Что скажите, какие замечания?
Название: Re: Задача 1.01
Отправлено: ultra от Декабрь 12, 2018, 11:06:26 am
Добрый день. Сделал через пакет запросов. Что скажите, какие замечания?

Спасибо.
Название: Re: Задача 1.01
Отправлено: Shaker84 от Январь 26, 2020, 11:44:23 am
Друзья, посмотрите мое решение задачи. Какие могут быть замечания и на что обратить внимание?
Всем спасибо.
Название: Re: Задача 1.01
Отправлено: bkmz от Август 22, 2020, 08:38:53 pm
Решение задачи 1.1. https://www.youtube.com/watch?time_continue=1676&v=vxhKSw_VREo&feature=emb_logo
Название: Re: Задача 1.01
Отправлено: Евгений_нвкз от Сентябрь 07, 2020, 04:38:36 am
Доброго времени суток, гляньте, какие есть ошибки плиз)
Название: Re: Задача 1.01
Отправлено: ProhorP от Март 16, 2021, 05:31:23 pm
Здравствуйте, сдал экзамен на 4 10.03.2021
Вот смотрите сравнивайте, все задачи что прорешал по задачнику https://yadi.sk/d/o9yY_sqBEWM_Rw
Времени на подготовку ушло 74 дня, более 330 часов на прорешивание задач ушло.
Если хотите сдать на удачу как Профессионала - вам не сюда