-
Мое решение задачи 1.02 если кто может прокомментируйте?
Вложения:
Zadacha1.02_SVP.dt
-
Я тоже не останусь в стороне, мой вариант:
Добавлено (19.07.2010, 13:55)
---------------------------------------------
Quote
Мое решение задачи 1.02 если кто может прокомментируйте?
1) У меня эта задача из сборника на 8.1, там сказано, что в первую очередь списывается товар по партии указанной в шапке документа, у тебя я этого не увидел.... хотя возможно, что для 8.2 другие условия
2) Два запроса в Расх.Накл - не есть гуд, можно все необходимое выбрать одним запросом
3) В Прих. накладной
Code
Движения.ОстаткиНоменклатуры.Очистить();
- это можно не писать, т.к. новые записи будут добавляться "поверх" старых, т.е. старые записи сами собой затрутся 4) В отчете ОстаткиТоваров "Количество" должно суммироваться только по номенклатуре, но не в общих итогах
Кто может, проверьте мой вариант, свежим взглядом всегда лучше видно
Вложения:
1Cv8_102_1CCode.dt
-
Quote (pershinsergei)
Решил задачу 1.2 из сборника по 8.2.
Прошу покритиковать мое решение
Вариант с поправками
Если в расходной накладной разрешить оперативное проведение, то при оперативном проведении записи в РН ОстаткиТоваров не очищаются и учитываются при повторном проведении, я также допустил эту ошибку в задаче 1_1, но уже исправил. Опять же нет проверки метода списания на текущий год. При внесении количества и цены в расходной выскакивают ошибки.
Вот мое решение 1_2, гляньте может тоже чего подскажите.
Добавлено (18.08.2010, 13:29)
---------------------------------------------
Quote (1C_CoderVamp)
Кто может, проверьте мой вариант, свежим взглядом всегда лучше видно
При приходе нет проверки, что номенклатура не является услугой, получается что можно оприходовать услугу ).
При расходе нет проверки, что на текущий год задана политика списания, проверка идет на срез последних, но в срезе может быть значение прошлого века )
В конфигурации стоит автоматический режим блокировок, хотя должен быть управляемый.
Вроде усе.
Вложения:
1_2_u2006.dt
-
Мое решение..., кому не лень покритикуйте. Сравнивал с U2006, почти одинаково, но вот я в задачах оперативного учета не заморачиваюсь со списанием копеек...
Вложения:
Quest_1_2.dt
-
ut2k5,
1) При выводе сообщение о нехватке товара, в задаче просят сообщить количество нехватки.
2) Мне вот кажется что номенклатура с видом "Услуга" не должна появляться в отчете "Остатки Номенклатуры".
-
Amali, а ты опытный тестер, сенькс
это ж надо найти такие ошибки...
а второй пункт ты как реализовал? наверное путем поступления услуги?...
-
версия вторая, с исправлением ошибок от Amali,
Вложения:
9462459.dt
-
Аналогична примеру в сборнике, только партия в шапке + услуги.
Вложения:
1.02.dt
-
Мое решение
Вложения:
Task_1_2.dt
-
И мое решение задачи 1.02 если кто может прокомментируйте?
Вложения:
1.2.dt
-
AndreiPiter, в общем
1) нет подсистем (входит в список ошибок)
2) Вытаскиваешь учетную политику на дату а надо на МоментВремени() (входит в список ошибок,-0,5 бала)
3) Незнаю зачем соединяешь две расходные между собой в 1 пакете, как я понял чтоб вытащить партию приоритетную,можно указать Партию как параметр (-балл, лишнее соединение)
4) Ну собственно весь алгоритм усложнен, можно решить гораздо проще сначала по возрастанию приоритетную партию, а далее как обычно фифо лифо
5) Регистр продажи на мой взгляд ресурс себестоимость лишний, его можно получить при соединении с остатками.
6) Отчет ОСтаткиНоменклатуры В выбранных полях нужно только ресурсы оставить, т.к. по измерениям идет группировка, и вместо детальных записей партии группировка.
-
SINISTER_STAR, спасибо,
1) подсистемы пока не создаю
2) можно поподробней, я беру учётную полику на дату документа, что тут неправильного (в примере решения из задачника делается именно так)
3) да,согласен, исправил. (убрал приоритетную партию).
5) не очень понял, ведь себестоимость в Продажах это себестоимость списанного товара.
6) можно на примере?
Вложения:
2860963.dt
-
Quote (AndreiPiter)
Прикрепления: 2860963.dt(155Kb)
давайте будет правильно называть файлики, вы не против?
Например так: АндрейПитер_20101210_11_18. Вы как-будто не программисты 1С что вот это значит: 2860963? С виду набор цифр. Это раз, а второе - у меня например ваших 666666-файлов уже штук 5, вот думаю как их запомнить-то где чей По теме:
2. SINISTER_STAR, а зачем учетную политику вытаскивать на МоментВремени() ? У нее значение меняется раз в год, как правило момент изменения ну никак не приходится на середину дня, когда один документ приходится на старое значение, а другой - на новое. Следовательно даты будет достаточно.
5. AndreiPiter, регистр Продажи нужен для того чтобы там отражать продажи, как правило все продажи. Для продаж себестоимость не нужна, совершенно не важно за сколько вы купили товар. Важно за сколько вы его продали, и что еще вы продали вместе с ним (например, услуги: доставка, завертка, улыбки и т.д.). Я так понимаю вы это сделали для того чтобы при обращении к регистру Продажи заодно можно было вытащить и себестоимость? Тут я соглашусь с SINISTER_STAR, себестоимость нужно получать при соединении товара из регистра Продажи с регистром Остатки... Хотя ваш вариант конечно проще.
6. С отчетом все нормально, только вот циферки у вас там зачем? 1 и 2 в колонке Партия. На примере там пустые ячейки должны быть
-
Gyd, имя файла 2860963, сайт сам сгенерировал, одна из причин этого - совпадение имени загружаемого файла с именем уже имеющимся на сайте.
-
Quote (sada)
имя файла 2860963, сайт сам сгенерировал
да, похоже так и есть ну-ка попробуем... есть ограничение по кол-ву символов.
Вложения:
AP_20101210.dt
-
Gyd,
Quote (Gyd)
2. SINISTER_STAR, а зачем учетную политику вытаскивать на МоментВремени() ? У нее значение меняется раз в год, как правило момент изменения ну никак не приходится на середину дня, когда один документ приходится на старое значение, а другой - на новое. Следовательно даты будет достаточно.
Однозначно будет достаточно.
Quote (Gyd)
5. AndreiPiter, регистр Продажи нужен для того чтобы там отражать продажи, как правило все продажи. Для продаж себестоимость не нужна, совершенно не важно за сколько вы купили товар. Важно за сколько вы его продали, и что еще вы продали вместе с ним (например, услуги: доставка, завертка, улыбки и т.д.). Я так понимаю вы это сделали для того чтобы при обращении к регистру Продажи заодно можно было вытащить и себестоимость? Тут я соглашусь с SINISTER_STAR, себестоимость нужно получать при соединении товара из регистра Продажи с регистром Остатки... Хотя ваш вариант конечно проще.
Cм. пример решения из задачника, ситуция с отчётом по продажам аналогична.
Quote (Gyd)
6. С отчетом все нормально, только вот циферки у вас там зачем? 1 и 2 в колонке Партия. На примере там пустые ячейки должны быть
Это колонка Номенклатура, там "Товар для проверки 1" и "Товар для проверки 2"
-
Quote (AndreiPiter)
Это колонка Номенклатура
я вам про колонку Партия говорил, а не про Номенклатура
Quote (AndreiPiter)
Cм. пример решения из задачника
спасибо, уже посмотрел.
-
мое решение задачи 1.2
Вложения:
8692373.dt
-
Мое решение
Вложения:
1974096.dt
-
Моё решение, если не сложно прокомментируйте
Особенно для меня важна правильность работы с блокировками в расходной:
Code
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
Движения.Продажи.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записать();
Движения.ОстаткиНоменклатуры.Записать();
Добавлено (22.01.2011, 14:51)
---------------------------------------------
rus, что я заметил:
1)В приходной накладной нет проверки на тип номенклатуры, и значит можем оприходывать услугу на склад, не знаю снижаются ли за это баллы.
2)В карксной конфе есть специальное перечисление тип номенклатуры, его обязательно использовать? Или можно как у тебя Булевым ревизитом. Через булево удобней.
3)В табличных частях автомат м не считается сумма
4)Запрос в расходной - явно усложнено. Можно сделать намного проще.
5)В расходной накладной не удаляешь остатки перед запросом - как следствие, при перепроведении документа будут некорректные остатки.
6)Не используются блокировки.
Мож где не прав.
Вложения:
_1.02.dt
-
Quote (Gulf_Stream)
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
Блокировка.Заблокировать();
не установлено соответствие поля пространства блокировки полю источника данных, т. е пропущена строка
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");Добавлено (23.01.2011, 11:50)
---------------------------------------------
Quote (Gulf_Stream)
1)В приходной накладной нет проверки на тип номенклатуры, и значит можем оприходывать услугу на склад, не знаю снижаются ли за это баллы.
Снижаются.
Quote (Gulf_Stream)
2)В карксной конфе есть специальное перечисление тип номенклатуры, его обязательно использовать?
По логике, если уже есть в каркасной то нужно использовать.
-
Quote (AndreiPiter)
Quote (Gulf_Stream)1)В приходной накладной нет проверки на тип номенклатуры, и значит можем оприходывать услугу на склад, не знаю снижаются ли за это баллы. Снижаются.
Это достоверная информация? Из каких источников?
-
Quote (Matcoder)
Это достоверная информация? Из каких источников?
Последствия этого приводят к тому что регистр не выходит ноль - см.список ошибок до 2,0 балов.
-
Причем тут это. Оприходовать услугу на склад можно только специально или по глупости. Я могу придумать еще десяток возможностей напортачить если задаться целью. Просто на экзамене времени делать защиту от дурака не будет, поймите вы это! Нужно реализовывать все по минимуму, только то, что написано в задании.
Я по крайней мере этого делать не буду. Если останется свободное время, то лучше вон в приходной, табличную часть запросом сгруппировать. А нет - так и конструктором сгодится.
-
Все замечания справедливы.При решении задачи я основное внимание уделял модулю расходной накладной.На остальные моменты не уделял внимания.За основу алгоритма был взят пример из сборника задач по подготовке к экзамену.
-
использую один запрос. в некоторых ответах видела,что используют два запроса (отдельно по товарам и отдельно по услугам). мне кажется,что одним запросом не так громоздко
Вложения:
1-02-.dt
-
Вот, уже вторую задачу решил. Надеюсь кто-нибудь посмотрит, а то и первую никто не посмотрел, боюсь вдруг чего неправильно:)
Вложения:
Gr0ck_Task_1_2.dt
-
Вопрос следующий почему все обычно в начале проведения расходной затирают регистр остатки номенклатуры(Движения.ОстаткиНоменклатуры.Записать()), а регистр продажи не трогают .
-
gr0ck,
Quote (joky)
Вот, уже вторую задачу решил. Надеюсь кто-нибудь посмотрит, а то и первую никто не посмотрел, боюсь вдруг чего неправильно:)
Я не специалист и к моему мнению прислушиваться нужно осторожно, но может чем помогу.
Вот что я заметила:
1. Не нашла блокировку на регистр Продажи Движения.Продажи.БлокироватьДляИзменения = Истина;
2. В регистре Продажи нет себестоимости и соответственно в отчете ты получаешь её через соединение с регистром Остатки. Конечно в рамках данной задачи это правильно, но в одной из лекций Павла Чистова я слышала такую мысль (А если по-мимо документа расходной есть документ на списание товаров, тогда себестоимость меняется, но это не продажа или товар украли и т.д. Идея такова: Необходимо сделать движения по ОстаткамНоменклатуры, затем Движения.ОстаткиНоменклатуры.Записать(), а затем запрос к Остаткам с извлечением себестоимости с условием регистратор = Ссылка). Потом отчет вообще за 2 клика можно сделать. Это конечно не факт, что так надо на экзамене.
3. Пытаюсь списать не существующий товар К примеру в приходной нет холодильника Атлант, а я его хочу продать и продаю!!! Он попадает в продажи хотя на складе его нет. (Предварительно установила, что Атлант Товар). Здесь должна быть ошибка, товара нет на складе. Я на том же споткнулась еще не поправила. Можно попробывать так Если Недостаток > 0 ИЛИ Выборка.КолОст = 0 Тогда
4.Отбор = Новый Структура("Вид",1); Это очень правильно. Я так ещё не умею. 5+
В остальном я ошибок не нашла .
-
Прошу опытных товарищей просмотреть мое решение. Буду рад любой критике. Заранее спасибо.
Вложения:
ikem_1_2.dt
-
Quote (Matcoder)
Причем тут это. Оприходовать услугу на склад можно только специально или по глупости. Я могу придумать еще десяток возможностей напортачить если задаться целью. Просто на экзамене времени делать защиту от дурака не будет, поймите вы это!
на экзамене можно и не делать, а вот в тренировочных задачах думаю стоит... надо же учиться всё правильно делать
---------------------------------------------
Quote (Ikem)
Буду рад любой критике. Заранее спасибо.
Очистить() не обязательно, достаточно - Движения.Продажи.Записать()
---------------------------------------------
Quote (garden)
1. Не нашла блокировку на регистр Продажи Движения.Продажи.БлокироватьДляИзменения = Истина;
а зачем она нужна? вы же не будете к нему обращаться потом.
-
Доброго времени суток... Прошу специалистов уделить время на рассмотрение моего решения. Буду рад конструктивной критике. Спасибо.
Вложения:
karagi_1_2.dt
-
Quote (karagiosis)
Буду рад конструктивной критике.
ну поехали
об этой ошибке уже говорили:
Code
Запрос.УстановитьПараметр("Период", Дата);
вот это:
Code
ЗапросДляБлокировки = Новый Запрос;
ЗапросДляБлокировки.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
| И РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Товар)";
ЗапросДляБлокировки.УстановитьПараметр("Ссылка", Ссылка);
НоменклатураВБлокировке = ЗапросДляБлокировки.Выполнить();
можно заменить на это:
или вы тренировались в использовании запроса для блокировки?
а в остальном нормально.
-
Gyd, спасибо... На счет Даты - я уже понял, переделаю. А подобный запрос для определения номенклатуры в блокировке я видел в статье Павла Белоусова здесь: http://kb.1c.ru/articleView.jsp?id=30. Он делает так только для того, чтобы отсеивать дубли номенклатуры, наверное и иметь возможность наложить произвольное условие на выборку запроса...
-
Quote (karagiosis)
А подобный запрос для определения номенклатуры в блокировке я видел в статье Павла Белоусова здесь: http://kb.1c.ru/articleView.jsp?id=30.
Нам туда не попасть
Вариант интересный конечно, но у него есть один минус - это время.
Quote (karagiosis)
Gyd, спасибо.
Да не за что... вот если бы мне преподаватели в своё время отвечали как я вам...
-
Коллеги! Прошу посмотреть мое решение задачи 1.2. Заранее благодарю за критику!
Вложения:
DoctorRoza_1_2.dt
-
Я бы выделили следующие ошибки, которые проверяют регламентно преподаватели:
1. Построенная в решении учетная схема принципиально не позволяет одновременно вывести в ноль все ресурсы регистра накапливающего информацию об остатках. -2Бала
Можно оприходовать Доставку в прих. Нак а расход не предусмотрен.
2. В задачах получения данных из информационной базы установка отборов по неиндексированным полям -0,5
В менеджере временных таб нужно индексировать измерения
3. Не реализована возможность корректного перепроведения документов задним числом -1
Наверно все таки нужно использовать штатный механизм последовательности
4. Конфигурация должна устойчиво работать при наличии дублей строк (номенклатуры или сотрудников или т.п.) в документах.-0,5
В прих нак нет группировки
5. Использование автоматических блокировок в транзакции или неправильное использование управляемых блокировок данных в транзакции при проведения документов -1.
В 8.2 только в модуле обработки проведения можно использовать БлокироватьДляИзменения
Движения.СтоимостьНоменклатуры.БлокироватьДляИзменения
6.Наличие ошибок в программном коде 0,25-3
Получение учетной политики можно делать в запросе с списанием товара например пакетом. Повторяющийся код
7. Если при проведении документа используются каким-то образом данные, считываемые из регистров, обязательно требуется предусмотреть получение таких данных на момент проведения документа -1
Необходимо при оперативном проведении указывать неопределенно
8. Нет отбора по номенклатуре в списке расх нак.
Мне лично понравилось нестандартное решение отбора партии.
Посмотрите мое, решение может, быть тоже что-то бросится в глаза
Отбор постарался выполнить на уровне виртуальных таблиц, чтобы удовлетворить требованию.
Использование механизма соединения таблиц вместо того, чтобы задать значения параметров виртуальных таблиц.
На сколько, это эффективно не знаю
-
База
Вложения:
kow19762.dt
-
Ух! Большой запрос в расходной.
Зачем в запросе добавлять кусок кода, по нахождению номенклатуры, которой нет в табчасти документа? Эт лишнее .. Вроде остальное логично ..
-
Первый нахожу партии где есть заданная партия и заданная номенклатура- номенклатуру которая есть в партии из шапки
Во втором нахожу есть заданная номенклатура и нет заданной партии - номенклатуру которая есть не в партии заданной в шапке.
Если можно оттестируйте на разных наборах, данных на предмет работоспособности
Вложения:
0792685.sel
-
Quote (kow1976)
4. Конфигурация должна устойчиво работать при наличии дублей строк (номенклатуры или сотрудников или т.п.) в документах.-0,5
В прих нак нет группировки
А зачем в приходной накладной группировки? Это разве критично?
Quote (kow1976)
3. Не реализована возможность корректного перепроведения документов задним числом -1
Наверно все таки нужно использовать штатный механизм последовательности
А вот про это можно по-подробнее? Не совсем понимаю назначение последовательности в этом случае, и что там (в базе) разве некорректно переводятся документы?
-
Я имел ввиду что лишние записи в регистре лишняя работа для таб итогов.
В 1с есть штатный механизм восстановления последовательности
Определяет в режиме использования, что она нарушена и автоматически препроводит все доки.
Программно код писать не надо. Нужно в конфигураторе определить объект последовательность, и какие доки входят.
Я не утверждаю, что за эти ошибки снимут балы, но намой взгляд, они подходят под эти требования
-
kow1976,Если явно в задаче не указано про последовательность, ее использовать не нужно на экзамене. Сам в свое время спрашивал, тех, кто сдавал..потом сдавал сам и претензий к "неиспользованию" последовательностей не было.
-
Quote (kow1976)
Не реализована возможность корректного перепроведения документов задним числом
По-моему здесь речь не о последовательности. Подразумевается обычное перепроведение документа введенного ранее, либо введенного задним числом (у проведенного документа меняется дата). На момент проведения документ должен учесть итоги (остатки) которые были в тот момент, и исходя из этого сделать соответствующие проверки и движения.
-
Возможно, вы правы. Но под одну «ошибку от 1с» можно подвести несколько ситуаций .
Я не пойму такую неприязнь форумчан к последовательностям на их создание нужно ровно 15секунд. Зато появляется возможность видеть дату последнего неоперативно проведенного документа и автоматически перепроводить все неактуальные документы. Программно с ними можно неработатьДобавлено (13.07.2011, 22:41)
---------------------------------------------
Приведу пример
Прих1 -2ед
Прих2-3ед
Прих3-2ед
Расх 1 - 4ед
Расх2 - 3 ед
Пользователь открывает прих 2 и пишет неоперативно пришло 1ед.
Все некорректное проведение задним числом (пришло 5 продали 7). Система не отслеживает данной ситуации.
-
kow1976, Конечно, если ты введешь последовательность это не будет ошибкой. Просто это необязательно.
-
Quote (kow1976)
Я не пойму такую неприязнь форумчан к последовательностям
Последовательность больше пользователям нужна чем нам. А нам - только если ее нужно явно использовать в решении.
-
Появился такой вопрос как раз по этому заданию. Я решаю его так сначало нахожу номенклатуру из данной партии, потом номенклатуру без данной партии, объединяю их, упорядочить второй запрос я не могу!!! ибо упорядочить будет действовать для всего запроса, в виртуальную таблицу запихнуть нельзя, он требует "первые" когда пытаюсь упорядочить, в подзапросе тоже самое... я решил таким образом, создал в запросе поле "ДатаПорядка", для указаннойпартии сую туды либо "01.01.0001" либо "31.12.3999" в зависимости от метода списания, потом спокойно сортирую весь запрос, группирую и подбиваю итоги... вопрос: а на экзамене это не будет считаться ошибкой?
-
mkanaev, Почему именно дата "ДатаПорядка", а не числовое поле "Порядок" 0,1,2... ? :)
-
Сегодня начал свою подготовку, опыта мало так что отвел себе 3-4 месяца.
Помогите если не трудно с проверкой. Будет обидно с самого начала натаскивать себя на ошибки!
И еще вопрос как быть решая несколько задач в одной базе? Закомментировать часть кода или мучиться
со встраиванием. Т.е. два списания остатков по бух и опер учету как совмещать(к примеру)?! Если есть где подобное
описание ткните в ссылку.
С уважением LEOON! (Сергей)
Вложения:
Leoon_1.02.dt
-
Quote (LEOON)
Т.е. два списания остатков по бух и опер учету как совмещать(к примеру)?!
Задачи у вас должны самостоятельно, независимо друг от друга работать. Бух и опер у вас пересекаться не будут, одна задача по одним регистрам, другая - по другим.
-
Quote (LEOON)
, опыта мало так что отвел себе 3-4 месяца.
Однако .. Вы, значит, мегамозг, что 3-4 месяца отвели на решение 150 задач! Я вот заранее заложился на 8-9 месяцев!
-
Quote (DoctorRoza)
Я вот заранее заложился на 8-9 месяцев!
Я тоже понял что это песня долгая, так что можно особо не спешить
-
DoctorRoza,
Я работаю в основном дома, да и начальник разгрузил максимально.
Так что могу уделять подготовке, максимум времени. Тем более что, думаю если закладываться на 3-4 месяца в конце будешь немного не готов. И готовя себя к 8 месяцам все равно будешь не готов
Подгоняю себе в основном я сам.
-
Вот мой вариант. Если Вам не сложно, Gyd взгляните пожалуйста. Меня интересует правильно ли я: Списываю себестоимость, и избавляюсь от пустых движений. Ну и кончено все другие помарки и недочёты, включая мелкие. Заранее спасибо!
P.S. DoctorRoza, LEOON - счастливые Вы люди! у меня на подготовку 56 дней! Активно готовится тока начал.
Вложения:
1_2_Oliver.dt
-
Спецы, в модуле расходной накладной есть у меня очевидные косяки?
Вложения:
1Cv8_ex1_2.dt
-
Задач на экзамене пока намного меньше чем 150, они тут есть в списке актуальных билетов (на экзамене правда бывает отличаются немного но в сторону упрощения).
Например, этой задачи в экзаменационных билетах сейчас нет.
-
Добрый день.
Вот решил взяться за подготовку к сдаче на специалиста у меня есть ровно месяц, остановился на задаче 1.2 ищу правильный вариант решения ))
Рассмотрев работы других участников форума возникла каша в голове по поводу запросов в документе расчетная. Каким самым оптимальным способом необходимо построить запрос? Специалисты покажите решение т.к. эту задачу можно решать по разному но какой способ будет самым правильным не знаю.
Заранее спасибо за ответ.
-
Quote (loky30)
Специалисты покажите решение т.к. эту задачу можно решать по разному но какой способ будет самым правильным не знаю.
Никто не возьмет на себя смелость сказать "мой вариант самый правильный". Вам надо решать, думать, анализировать. Через какое-то время поймете что правильно, а что - нет.
А "каша в голове" - это нормально, у всех также
-
Еще такой интересный вопрос:
В регистр продажи должны ли попадать услуги?
Я смотрел лекции Чистова там он показывает подобный пример, там услуги не попадают не в регистр не в отчет, является ли это ошибкой?
-
Quote (loky30)
В регистр продажи должны ли попадать услуги?
Я смотрел лекции Чистова там он показывает подобный пример, там услуги не попадают не в регистр не в отчет, является ли это ошибкой?
Code
Пример отчета из задачи 1.2:
Номенклатура Кол-во Себестоимость Продажа Прибыль
Куртка замшевая 3 300 620 320
Портсигар 3 30 50 20
Доставка 1 - 100 100
Доставка - это услуга.
Лекции Павла априори не могут включить в себя условия всех задач сборника, он показывает наиболее интересные, ключевые моменты.
Если сомневаетесь (это касается всех без исключения задач) - решите разными способами, лишним не будет.
-
Gyd спасибо за ответ.
Не внимательно я смотрел условия задачи. В следующий раз буду внимательней.
-
Выкладываю свое решение. Думаю, что оно довольно правильное
Вложения:
Great_1.2.dt
-
Грейт, а то что у вас в продажи если с разных партий списывать попадает две записи по одноик и тому же товару.. это допустимо? .. они то в итоге сгруппируются но всё же.
У меня вопрос, как лучше формировать движения .. 1) построчным добавлением в коллекцию движений 2) сформировать таблицу с движениями максимально сгруппированную и затем загрузить её в движения регистра.
-
Подправил
Вложения:
chili_1_2.dt
-
to chilli
Не знаю ошибка это или нет, но что у вас что у других очень часто встречаю проверку на услугу реализованную вот так
"ВыборкаИтоги.Номенклатура.Услуга"
При обращении через точку система делает каждый раз неявный запрос по номенклатуре, что бы получить значение услуги.
В "Сообщение.Текст = "Не хватает товара: " + ВыборкаИтоги.Номенклатура + " в количестве: "
ВыборкаИтоги.Номенклатура тоже обращается к базе что бы получить представление номенклатуры.
А это вроде как попадает под не оптимальное решение, лучше в запросе сразу получать значение услуги и представления.
И не проще ли получать методСписания так, меньше строк когда да и сразу обходится момент если не заполнена учетная политика в регистре.
МетодСписания = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).МетодСписания;
Если МетодСписания = Перечисления.УчетнаяПолитика.ЛИФО Тогда
ПорядокПартии = "УБЫВ";
Иначе
ПорядокПартии = "ВОЗР";
КонецЕсли;
Ну и для организации движения по регистру ОстаткиНоменклатуры вы два раза обходите результат запроса, а для движения по регистру продаж еще раз создаете запрос и обходите не оптимально. Да и искать в выборке данные по партии тоже не кашерно, выборку нужно обходить.
-
aveego, Спасибо за Ваши мысли. Доведем программу до оргазма!
Где то встречался список за что баллы снижают на аттестации...
-
вот официальный файл как проходит экзамен в нем есть информация и по ошибкам http://www.1c.ru/rus/partners/training/files/ATT82PL.zip
-
Будьте любезны оцените, буду рад любой критике
Вложения:
aveego_1_2.dt
-
aveego,
в общем понравилось, пару советов по кодингу
Если ВыборкаНоменклатура.Услуга = 0 Тогда
Если НЕ ВыборкаНоменклатура.Услуга Тогда
аналогично Если "ВыборкаНоменклатура.Услуга" Вместо "Если ВыборкаНоменклатура.Услуга=что-то", за это люто бешенно казнят во всех языках,
т.к синтаксис "Если (булево) Тогда" - ВыборкаНоменклатура.Услуга уже булево, не надо сравнивать с 1,0, истина, ложь
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.КоличествоВдокументе;
Движение.Себестоимость = Себестоимость;
Движение.Продажа = ВыборкаНоменклатура.СуммаВдокументе;
Иначе
// добавляем услугу
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.КоличествоВдокументе;
Движение.Продажа = ВыборкаНоменклатура.СуммаВдокументе;
КонецЕсли;
для экономии места можно вынести запись продаж из условия и получится один блок
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаНоменклатура.Номенклатура;
Движение.Количество = ВыборкаНоменклатура.КоличествоВдокументе;
Движение.Продажа = ВыборкаНоменклатура.СуммаВдокументе;
Движение.Себестоимость = ?(Выборка.НоменклатураУслуга, 0, Себестоимость);
-
aveego
Движения.ОстаткиНоменклатуры.Записать();
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
А надо так:
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Записать();
Иначе пустой набор не будет записан.
-
Кенгуру, Romdavid Огромное спасибо, ошибки понял советы взял на вооружение.
Добавлено (14.10.2011, 08:22)
---------------------------------------------
Romdavid по справке вы правы а вот на практике получается что можно записывать и так как у меня;
Проверил.
Во вложении простая конфигурация, начальный остаток 10 делаем реализацию 7 и при перепроведении если есть
Движения.ОстаткиНоменклатуры.Записать();
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Система дает записать, если закомментировать
Движения.ОстаткиНоменклатуры.Записать();
То выдает сообщение о нехватке.
Вложения:
8145132.dt
-
aveego
Действительно, если написать
Движения.ОстаткиНоменклатуры.Записать();
Движения.ОстаткиНоменклатуры.Записывать = Истина;
то работает аналогично. Хотя в справке написано:
Quote
Записывать (Write)
Использование:
Чтение и запись.
Описание:
Тип: Булево.
Ложь - не происходит записи набора в информационную базу при вызове Записать коллекции движений документа, которой принадлежит набор, а также при стандартной обработке проведения документа, если значение свойства метаданного документа "Запись движений при проведении" в Конфигураторе выставлено в "Записывать выбранные".
А изначально Записывать установлено в "Ложь".
-
Движения.ОстаткиНоменклатуры.Записать(); - движения будут записаны всегда, при любых флагах.
Движения.Записать() - будет записано только те наборы у которых свойство записывать установлено в истина.
-
Oliver, спасибо за разъяснение
-
Я так понял, для добавления нужной партии из шапки добавляем в выборку новое поле и в первую очередь сортируем уже по нему. А есть ли способ сначала выбрать партии в нужном нам порядке (FIFO или LIFO) а затем уже через объектную модель поменять 2 элемента местами ?
-
Моё решение задачи. Старался выполнить все условия, "до мелочей". Если что-то упустил - пишите. Ну а уж если что-то не верно решено то тем более!)
В ходе решения у меня возникло два вопроса:
1. В запросе для того чтоб избежать нулевых записей я делаю такое условие:
//|ИМЕЮЩИЕ
//| СУММА(ВлЗапрос2.Количество) <> 0 И
//| СУММА(ВлЗапрос2.Сумма) <> 0
У Вас появляются нулевые записи?
2. Необходимо ли при решении оперативных задач выставлять свойство "Разрешить разделение итогов".
P.S. Файл подцепился с именем из цифр, т.к. я уже выкладывал свое "сырое" решение ранее.
Вложения:
3949695.dt
-
Мое решение
Вложения:
crabzzy_1.2.dt
-
Только начал подготовку к экзамену! Вот моя "проба пера". Решил сделать еще доп. РН "ПродажиСебестоимость", очень интересует критика на этот счет, ну и вообще по решению целиком.
Заранее спасибо
Вложения:
Teriban_1.02.dt
-
Teriban, почитай ветку форума по этой задаче и проанализируй свой код - найдешь достаточно мелких, но "косяков". смотрел у тебя только ОбработкаПроведения в расходной накладной.
думаю, что отдельный регистр накопления для учета себестоимости имеет смысл только в практическом решении, но не для сдачи экзамена
прокомментируйте, плиз, мое решение.
Вложения:
Alexander88_DK.dt
-
Alexander88_DK, спасибо что посмотрел! Если не сложно, открой тайну про мелкие косяки.
-
Teriban, по мелочам:
1) бросилось в глаза - это строка "Момент = ?(ЭтоНовый(),Дата,МоментВремени());" Метод ЭтоНовый() возвращает истину только когда документ еще не записан, а обработка проведения срабатывает уже после проведения.
2) в проверке на нехватку товара вместо новой переменной КО можно было сразу присваивать Истина переменной Отказ.
3) проходить 2 раза по одной и той же выборке - не айс. все тоже самое можно было сделать и в одном:
Пока ВыборкаИтог.Следующий() Цикл
// твоя проверка
...
Если Отказ Тогда
Продолжить;
КонецЕсли;
Выборка = ВыборкаИтог.Выбрать();
Пока Выборка.Следующий() Цикл
// движения
КонецЦикла;
КонецЦикла;
это типа шаблона ))
4) не суть важно наверно, но все же... гилев в видео-курсах говорил, что сначала должно производиться умножение, а потом деление. лично я это запомнила и теперь всегда так пишу. пример он привел простой: 10/3*3=9,(9) и 3*10/3=10Добавлено (13.02.2012, 22:47)
---------------------------------------------
и да, про регистр ПродажиСебестоимость. в рамках экзамена он не обязательный, а время ты на него потеряешь )
-
lubja, спасибо!!! Но все же:
1) Согласен!
2) Согласен! Экзаменатору наверное не важно, но время на мелочах потерять можно.
3) Ну почему, вот иду я по выборке пока все гуд делаю "чего-то", а тут бах и отказ=истина, а зачем тогда все то что я уже сделал и еще наделаю?
4) Вот хрен их всех поймешь одни так другие этак. На инфостарте другое совсем написано!!! http://expert.chistov.pro/public/102366/
ИМХО копейки так лучше побеждаются!
5) Да, чем механизм проще тем он надежнее.
-
Приветы. Покритикуйте, пожалуйста. Специально не смотрел примеры предыдущие, хотел сам дойти до решения.
Сейчас погляжу кто как сделал.
Вложения:
hukola_1.2.dt
-
Teriban, по третьему пункту: вот идешь ты по выборке, все хорошо. в какой-то момент все плохо, Отказ = Истина. и с этого моменты в детальную выборку уже не заходишь, т.к. стоит условие "Если Отказ Тогда Продолжить; КонецЕсли;" а только ходишь по итоговой выборке, проверяешь на наличие остатков товара по другим позициям. а так как Отказ истина, то и те движения, которые мы успели сделать, не запишутся, и все гуд у нас.
Добавлено (17.02.2012, 15:58)
---------------------------------------------
hukola, сильно не вдавалась, но главной ошибкой в запросе у тя будет то, что в параметрах виртуальных таблиц нет условия по номенклатуре. за это сколько-то баллов снимают. посмотри, как большинство написало этот запрос.
-
lubja, у меня соединение к табличной части документа таблицы остатков левое, там в любом случае выберется только то что есть в документе.
-
hukola,
Установка параметров виртуальной таблицы необходима чтобы повысить быстродействие, так что это не будет лишним, даже если вы соединяетесь с ТЧ документа
-
Можно и выбрать, раз этого требуется.
А кто нибудь может еще глянуть?
-
hukola,
Сегодня я уже вряд ли посмотрю, может завтра или в понедельник...
-
hukola, к примеру в доке у тя 3 строки, а на остатках в регистре 1000 позиций. если в параметрах виртуальной таблицы остатков не отобрать сразу по номенклатуре, то 3 строки дока будут соединяться с 1000 строк из регистра... а потом лишние строки будут отсеиваться. а если сразу отобрать, то все будет намного быстрее ))
-
Я понял да. Переписал этот момент. Через менеджер временных таблиц.
Интересует такой момент, вот суммы у меня не просчитывает по документу, не делал я этого - это ошибка?
Не сделаны подсистемы - это ошибка?
-
hukola,
1. Про суммы я не, понял Вы имеете ввиду СуммаПоДокументу, если да то необязательно.
Лично я уже руку набил...
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаПоДокументу = СписокНоменклатуры.Итог("Сумма");
КонецПроцедуры
Не сделаны подсистемы - это ошибка. Обязательно должен быть настроен интерфейс.
У вас используется метод Сообщить(); нужно использовать СообщениеПользователю.
//***
З.Ы. Имхо перемудрили немножко в расходной
Достаточно было в запросе создать поле Порядок:
ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Партия = &Партия
ТОГДА 1
ИНАЧЕ 2
КОНЕЦ
Упорядочить по нему, а затем по партии, не соединяя с остатками 2 раза. Обойти все партии.
-
Quote (lubja)
Teriban, по третьему пункту: вот идешь ты по выборке, все хорошо. в какой-то момент все плохо, Отказ = Истина. и с этого моменты в детальную выборку уже не заходишь, т.к. стоит условие "Если Отказ Тогда Продолжить; КонецЕсли;" а только ходишь по итоговой выборке, проверяешь на наличие остатков товара по другим позициям. а так как Отказ истина, то и те движения, которые мы успели сделать, не запишутся, и все гуд у нас.
Ну можно и так. Но мне кажется что это не так принципиально, я привык делать сначала проверку потом движения.
-
LEON
Quote (LEOON)
hukola,
1. Про суммы я не, понял Вы имеете ввиду СуммаПоДокументу, если да то необязательно.
Лично я уже руку набил...
Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
СуммаПоДокументу = СписокНоменклатуры.Итог("Сумма");
КонецПроцедуры
Не сделаны подсистемы - это ошибка. Обязательно должен быть настроен интерфейс.
У вас используется метод Сообщить(); нужно использовать СообщениеПользователю.
//***
З.Ы. Имхо перемудрили немножко в расходной
Достаточно было в запросе создать поле Порядок:
ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Партия = &Партия
ТОГДА 1
ИНАЧЕ 2
КОНЕЦ
Упорядочить по нему, а затем по партии, не соединяя с остатками 2 раза. Обойти все партии.
Спасибо, учту.
-
Мой вариант
Вложения:
sv_mikh_01_02.dt
-
sv_mikh,
Хороший способ отсечь номенклатуру в приходнойДобавлено (12.03.2012, 21:20)
---------------------------------------------
Расходная в вашем решении делает движение по остаткам при продаже услуги.
Вложения:
s4499762.jpg
-
Quote (kow1976)
sv_mikh,
Хороший способ отсечь номенклатуру в приходной
Добавлено (12.03.2012, 21:20)
---------------------------------------------
Расходная в вашем решении делает движение по остаткам при продаже услуги.
Спасибо Учел и исправил
Вложения:
sv_mikh_01_02_2.dt
-
Посмотрите пожалуйста и моё решение
-
Посмотрите пожалуйста и моё решение
Вложения:
TTandrey_1_2.dt
-
Посмотрите пожалуйста буду признательный за комментарии...
Добавлено (04.04.2012, 17:07)
---------------------------------------------
Сори не в ту тему добавил)
Вложения:
Zadacha1_1.dt
-
Здравствуйте. Предлагаю вариант решения данной задачи, буду благодарен за указание недочетов.
P.S.
Не учел проблему копеек в обработке проведения РасходнойНакладной
вместо
Движение.Стоимость = ВыборкаДетальныеЗаписи.СтоимостьОстаток*Списываем/ВыборкаДетальныеЗаписи.КоличествоОстаток;
нужно
//контроль копеек
Если ВыборкаДетальныеЗаписи.КоличествоОстаток = 0 Тогда
Движение.Стоимость = 0;
Иначе
Движение.Стоимость = ?(Списываем=ВыборкаДетальныеЗаписи.КоличествоОстаток,
ВыборкаДетальныеЗаписи.СтоимостьОстаток,
Списываем*ВыборкаДетальныеЗаписи.СтоимостьОстаток/ВыборкаДетальныеЗаписи.КоличествоОстаток);
КонецЕсли;
)))
Вложения:
1Cv8-1_2-.dt
-
Вторая задача
Вложения:
RoMeL_1.2.dt
-
Списал решение у sv_mikh.
Нашёл такие недочёты:
1. При продаже услуги списывается себестоимость прошлого товара.
2. В запросе расчитываются итоги по сумме регистра остатков - не используются.
Понравилось:
В приходной отрезаются услуги с помощю параметров выбора.
Вложения:
7134653.dt
-
Не понимаю 1 момент. В Условиях задачи сказано, что в первую очередь должен списываться товар с партии ,указанной в шапке документа.Если товара не хватает(или нет), то в соотв. с текущей учетной политикой.
В решениях выложенных здесь этот вопрос решается сортировкой по Партии
...
ВЫБОР КОГДА ОстаткиНоменклатуры.Остатки.Партия = &ФлагПартия Тогда 0
ИНАЧЕ 1
КОНЕЦ как ФлагПартия
...
Запрос.УстановитьПараметр("ФлагПартия", Партия); Партия = ПрихНак02
Если до этой сортировки картина была след:
ПрихНак01 (КолОст)-12 (СуммаОст) - 1000
ПрихНак02 (КолОст)-13 (СуммаОст) - 1100
ПрихНак03 (КолОст)-14 (СуммаОст) - 1200
То теперь :
ПрихНак02 (КолОст)-13 (СуммаОст) - 1100
ПрихНак01 (КолОст)-12 (СуммаОст) - 1000
ПрихНак03 (КолОст)-14 (СуммаОст) - 1200
Так вот, надо списать 15 единиц товара..Так в приор.Партии не хватает товара. Народ берет и списывает до 0 приоритетную, потом ПрихНак01 2ост. единицы.
А в условии, если не хватает, то в соотв. с учетной политикой. Не надо ли сортировать запрос заново, без учета ПриоритетнойПартии?
-
Quote (Ettern0)
Не надо ли сортировать запрос заново, без учета ПриоритетнойПартии?
Не надо
-
Посмотрите пожалуйста. Если есть косяки говорите ....
Вложения:
1-2_XilDen.dt
-
Доброго времени суток.
Кому не сложно, посмотрите мой вариант.
Вложения:
0757277.dt
-
Tsar, как минимум обнаружил что не считаются суммы по документам что Расход, что Приход.
-
Saint89, в качестве повышения образованности... а где написано, что они должны считаться (я имею ввиду суммы по документам)?
-
Всем привет) вот мой вариант решения, если не тяжело гляньте на наличие ошибок)
Вложения:
Istari_1.2.dt
-
Quote (Istari)
Всем привет) вот мой вариант решения, если не тяжело гляньте на наличие ошибок)
Временная таблица РН в принципе неправильно построена - только для того, чтобы реквизит Партия из шапки взять, да к реквизитам ТЧ добавить, две таблицы(да еще левым внешним соединением) связывать???!!! - экзаменаторы жирный минус поставят за такое, а то и вообще попрут с сертификации. Оставь только одну таблицу с ТЧ, а Партию возьми из Ссылка.Партия - из Шапки.
Выше приведенный мой пример не совсем правильный, не-е-е, работает стопудово правильно, но избыточная сложность в нем для 1.2, экзаменаторы могут тоже балл снизить, мол недопонимает соискатель. Этот пример я сделал(слегка подправив) из задачи 1.4, там Партия находится в ТЧ( а в 1.2 - в Шапке документа). Эти задачи отличаются в реализации только Запросами. Для 1.4 этот Запрос в "самый раз" будет(и без избыточной сложности), только "Ссылка." из него в двух местах надо убрать. Ну и поле ввода Партия убрать из шапки и ввести в ТЧ.
Добавил для сравнения 1.4
Вложения:
3793219.dt
_1.4.dt
-
Привет всем, коллеги!
Стало на одного готовящегося к экзамену больше =)
Товарищи специалисты, посмотрите пожалуйста мое первое самостоятельное решение (до этого прочитал ветку по задаче 1.01 и попытался из нее что-то вынести ).
Заранее благодарю!
Вложения:
XKOPBUHX_1.02.dt
-
А почему МоментВремени присваивается в РежимеПроведения НЕоперативный, в Оперативном - неопределено. Вроде бы наоборот, в неоперативном он не нужен. В Сборнике задач(в Примере к нему) этот Момент тупо присваивается функцией и все, никаких анализов не делается на Режим. Я этого не понимаю, вот и спрашиваю.
Конфу еще пришлось отлаживать - не "пошла" с первого раза.
-
Mar ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! tin, благодарю, что нашли время глянуть!
Quote (Mar ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! tin)
А почему МоментВремени присваивается в РежимеПроведения НЕоперативный, в Оперативном - неопределено. Вроде бы наоборот, в неоперативном он не нужен.
Наоборот -)
В решениях экзаменационных задач при оперативном проведении момент времени лучше не указывать (узнал об этом, прочитав в какой-то ветке данного форума). Для неоперативного - обязательно!
Quote (Mar ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! tin)
Конфу еще пришлось отлаживать - не "пошла" с первого раза.
Объясните пож-та, что было не так. Вроде у меня никаких ошибок не выдавалось, проверил все перед написанием здесь...
-
Quote (XKOPBUHX)
Объясните пож-та, что было не так. Вроде у меня никаких ошибок не выдавалось, проверил все перед написанием здесь...
Да ничего особенного, в запросе ЭтоТоварЭ(по-моему так) было... Забери свое вложение, если интересно, да сам посмотри, это недолго...
А про Момент времени мне все-равно непонятно, как он может быть не нужен, если используется в качестве Периода в Запросе для виртуальной таблицы ...СрезПоследних - как можно получить правильный срез последних(обязательно на какую-то дату) без даты? Тогда давайте нигде даты не ставить в таблицах .СрезПоследних - нонсенс, однако... Посмотреть бы на ту ветку, где ты это видел, может там речь не о том шла, или нюансы какие есть...
-
Quote (Mar ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! tin)
А про Момент времени мне все-равно непонятно, как он может быть не нужен, если используется в качестве Периода в Запросе для виртуальной таблицы ...СрезПоследних - как можно получить правильный срез последних(обязательно на какую-то дату) без даты? Тогда давайте нигде даты не ставить в таблицах .СрезПоследних - нонсенс, однако... Посмотреть бы на ту ветку, где ты это видел, может там речь не о том шла, или нюансы какие есть...
Лови: http://forum.chistov.pro/index.php?topic=1746.msg1#msg1
-
Класс.
А я то думал, почему это у меня проводится неоперативно расх.накл., хотя товара недостаточно из-за проведенной расх.накл чуть позже по времени, конфа не видела 2-ю проведенную накл. Дело в МоментеВремени было.
Я эспериментально выяснил, что нужно проставить:
Режим = Неоперативный ----- Неопределено, Режим = Оперативный ----- МоментВремени().
Там в ветке они то так, то эдак пишут, сами видимо "слышали звон, да не знают откуда он", противоречат себе вовсю. Тебе тоже не советую слепо списывать с веток рекомендации, не проверив их у себя экспериментально, тем более, если там в ветке явные противоречия наставлены...Поправь у себя в проге, у тебя наоборот назначается.
А вообще то, мне думается, что не надо везде это условие ставить, а только там, где это явно требуют, в задаче 1.5, например.Добавлено (11.12.2012, 17:02)
---------------------------------------------
В какой-то ветке прочитал, что из задач 1.1-1.5 в билеты вошла только задача 1.5, первые 4 приведены так, "для общего развития".
По-моему самый сложный Запрос в задаче 1.4...
-
Quote (Mar ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! tin)
Временная таблица РН в принципе неправильно построена - только для того, чтобы реквизит Партия из шапки взять, да к реквизитам ТЧ добавить, две таблицы(да еще левым внешним соединением) связывать???!!!
не знал просто что из табличной части можно получить доступ к реквизитам шапки документа. спасибо
-
Mar ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! tin, это решение зависит от того, каким образом у тебя документы пишут движения в регистры.
В том случае если у тебя у РН и ПН выставлено свойство "Оперативное проведение" как Разрешить тогда у тебя в регистре Остатки номенклатуры не сможет быть движений будущим числом, следовательно можно получать остатки которые уже расчитаны.
Для этого просто не указывают период на который строить таблицу остатков (передают параметром Неопределено).
В таком случае получается:
Если документ проводится оперативно --- Неопределено, если неоперативный режим --- МоментВремени()
-
Выкладываю свое решение, может, кому пригодится. У кого-то на форуме подсмотрел интересное решение, как партию из шапки, которую надо списать первой, расположить первой, а остальные партии - по учетной политике. Для этого надо при формировании запроса передать в него эту партию и в запросе добавить дополнительный столбец, в который заносить 1, если партия из регистра совпала с партией из шапки документа. Далее отсортировать по номенклатуре, нашему столбцу с 1-ками в порядке убывания, и только потом по партиям.
Из особенностей:
1. При проведении расходной накладной вся информация получается одним запросом с двумя пакетами. Перебор этого запроса происходит один раз - делаются движения по регистрам остатков и продаж. Услуги движений по регистру остатков не формируют.
2. Отчеты максимально приближены к той форме, которая приведена в задачнике.
3. На мой взгляд, данные в документы лучше вводить реальные из отчетов задачи, чтоб экзаменаторам было легче проверять.
4. Проведение приходной сделал конструктором (надо бы - запросом, но я поленился).
Вложения:
vasv1_1_02.dt
-
Посмотрите, кому интересно, может что не так.
Вложения:
1.2__7__.dt
-
Выполнил почти самостоятельно в отличии от первой задачи. vasv1, надо попробовать и тот способ который вы описали с запросом выполнить самостоятельно. Моя база прилагается, запрос у меня громоздкий получился, в текстовом файле краткое определение:
- Новой методики списания
- Отличия между «БлокироватьДляИзменения» и «Блокировка данных»
- Свойство документа Удаление движений
Вложения:
Odin777_1.2.dt
0340541.txt
-
Odin777, в расходной удаление движений "Удалять автоматически" - для экзамена, слышал, это не айс. С запросом в расходной перемудрил, имхо, не надо 2 раза к остаткам обращаться...
Если ВыборкаПартия.Номенклатура.ВидНоменклатуры - Вид номенклатуры надо было в запросе получать, а не через точку... Вообще, весь алгоритм списания упростить бы.
В отчете по остаткам нет получения на конец дня. В отчете по продажам не предусмотрен вывод услуг после товаров.
Выкладываю свое решение. Любая критика приветствуется.Добавлено (07.03.2013, 15:59)
---------------------------------------------
Kot78, директива компиляции в общем модуле ни к чему. СебестоимостьИтого = 0 в расходной надо писать до того, как решил услуга это или нет, иначе если услуга окажется на первом месте в выборке, то к моменту создания движения там будет Неопределено. В отчете по остаткам нет получения на конец дня. В отчете по продажам не предусмотрен вывод услуг после товаров.
Вложения:
fimanich_01_02.dt
-
Извините за тупой вопрос. Никак не могу понять эту конструкцию. Кому несложно объясните
Код
ВЫБОР
КОГДА Список.Партия = ОстаткиНоменклатурыОстатки.Партия
ТОГДА 1
ИНАЧЕ 2
КОНЕЦ
Допустим она приняла значение 1, какая связь между этой цифрой и партией которая указана в табл.части,почему первой списывается именно партия указанная в табл.части?
-
Renegade, предполагаю, что потом по этому поле идет упорядочивание, поищи далее конструкцию Упорядочить По
-
fimanich, спасибо за то что нашли время посмотреть базу.
Добавлено (13.03.2013, 19:52)
---------------------------------------------
fimanich, посмотрите свой запрос, не указана связь временной таблицы с таблицей регистра остатков, также при проверке на нехватку товара в условии ЕСЛИ ТОГДА надо добавить
Код
Если Отказ Тогда
Продолжить;
КонецЕсли;
для того что бы проверить всю номенклатуру из выборки на нехватку количество для списания в условии.
-
Odin777, большое спасибо.
Цитата (Odin777)
посмотрите свой запрос, не указана связь временной таблицы с таблицей регистра остатков
Да, грубейшая ошибка, всё спешка (хотя нет мне оправдания). Поправил.
Цитата (Odin777)
также при проверке на нехватку товара в условии ЕСЛИ ТОГДА надо добавить
У меня тоже самое просто немного по-другому сделано, вместо Если Отказ Тогда Продолжить КонецЕсли; у меня Если НЕ Отказ Тогда ... Списание... КонецЕсли;
Исправленную базу креплю.
Вложения:
fimanich_02_01_.dt
-
упс.. базу не с той задаче прикрепил, исправляю
Вложения:
fimanich_01_02_.dt
-
Мое решение
Вложения:
1_02.dt
-
МоеРешение
Вложения:
bilateral_upr_2.dt
-
Посмотрите плз мой вариантик,
особо интересно мнение по запросу в расходной накладной.
Тоже сделал все в одном запросе, но другим способом.
Вложения:
2187326.dt
-
bilateral у тебя в решении фифо это убыв .а должно наоборот быть
Добавлено (09.06.2013, 13:23)
---------------------------------------------
Цитата (Mar ЕСЛИ ВЫ ПОДЕЛИЛИСЬ СВОЕЙ ПОЧТОЙ, УДАЛИТЕ СООБЩЕНИЕ НЕМЕДЛЕННО ИЛИ БУДЕТЕ ЗАБАНЕНЫ. ЧИТАЙТЕ ПРАВИЛА!!! tin)
А почему МоментВремени присваивается в РежимеПроведения НЕоперативный, в Оперативном - неопределено
В методичке 1с оперативный
Добавлено (09.06.2013, 13:29)
---------------------------------------------
ВЫБОР
| КОГДА ОстаткиНоменклатурыОстатки.Партия = &Партия
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Приоритет
|ИЗ
| Док КАК Док
-
Вот мое решение
-
Мое решение - критике буду рад
Вложения:
0830887.dt
-
Мое решение - критике буду радПрикрепления: 0830887.dt(158Kb)
приходная не пишет в регистр . расходная потянет .но нах в параметрах пустую дату указывать не врублюсь?
-
patchwork, Спасибо, что нашли время глянуть мое решение! Насчет приходной - она пишет в регистр,если у номенклатуры ВидНоменклатуры - "Товар" стоит.Когда указываем пустую дату, то запрос строится к таблице основных итогов регистра, которые рассчитаны на 3999 год. Производительность системы будет быстрее,когда мы сразу обратимся к рассчитанным итогам,нежели будем пересчитывать итоги на МоментВремени() проведения документа.Это при оперативном проведении.При неоперативном - рассчитываем итоги на момент проведения документа.
-
Вот мое. Пожалуйста проверьте
Вложения:
Runner_01_02.dt
-
подкорректированное решение
Вложения:
0521342.dt
-
Прокомментируйте пожалуйста решение задачи!
Вложения:
1Cv8__Kaiser_1..dt
-
Здавствуйте! Прокомментируйте решение, пожалуйста.
-
вложение
Вложения:
1Cv8_1_2.dt
-
Всем привет! Прошу проверить моё решение
Вложения:
Pro100KoT_1.2.dt
-
Привет всем. Посмотрите мое решение пожалуйста
Вложения:
4060178.dt
-
Коллеги, прокомментируйте мое решение задачи 1,2
Вложения:
__1.2.dt
-
giotto,
1. У Вас услуги не попадают в продажи, хотя по условию должны (см. отчёт "Продажи" в задании)
2. В самом отчёте ("Продажи") период не доступен в пользовательских настройках.
3. В цикле после проверки наличия товара я бы добавил:
Если Отказ Тогда
Продолжить;
КонецЕсли;
поскольку иначе, например, если не хватает только первой позиции товара, то документ всё равно не проведётся, а лишние действия по формированию движений всё равно будут выполняться. Не уверен, что на экзамене это критично, но всё же...
В остальном всё вроде бы нормально.
-
Цитата ARMchair (
)
ARMchair, спасибо, я в принципе то же самое и думал
Добавлено (24.03.2014, 14:55)
---------------------------------------------
Емое, не научился ишшо с этим форумом разбираться
-
Посмотрите, пожалуйста
От 1.1 отличается только одним условием, которое является порядком сортировке в запросе
Вложения:
CeHbKA_1.2.dt
-
Коллеги, прокомментируйте мое решение задачи
Вложения:
2489033.dt
-
мое решение задачи 1.2. Буду рад комментариям.
Вложения:
1.2_Solitar.dt
-
YFred, посмотрел твое решение. Ошибок не обнаружил, но есть два замечания:
1. Слишком мудреное списание. Если в запросе добавить дополнительное поле сортировки:
Код
ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Партия = &Партия
ТОГДА 1
ИНАЧЕ 2
КОНЕЦ КАК Порядок
тогда все было бы проще.
2. Зачем такое чудовище:
Код
?(ВыборкаПартий.КоличествоОстаток-Движение.Количество=0,ВыборкаПартий.СуммаОстаток, Окр(Движение.Количество*ВыборкаПартий.СуммаОстаток/ВыборкаПартий.КоличествоОстаток,2))
проще нужно быть!
3. И вдогонку, сообщение о недостатке товаров не совсем корректно, ведь товар может измеряться не только в штуках. Добавлено (02.05.2014, 22:13)
---------------------------------------------
Solitar, посмотрел твое решение.
1. В приходной накладной можно сделать проще, если в свойствах реквизита "Номенклатура" установить "Параметры выбора" дабы выбирался только товар. Кстати, я уже как-то спорил на форуме о формировании движений запросом, что ты об этом думаешь? Тем не менее формирование движений конструктором сэкономит время.
2. В расходной накладно я не понял создание менеджера временных таблиц и разделение запроса, зачем это?
3. В запросе при определении вида номенклатуры:
Код
ВЫБОР
КОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
ТОГДА 1
ИНАЧЕ 0
КОНЕЦ КАК ВидНоменклатуры
можно заменить на:
Код
ВЫБОР
КОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ВидНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
ТОГДА ИСТИНА
ИНАЧЕ ЛОЖЬ
КОНЕЦ КАК ЭтоУслуга
но это чисто с эстетической точки зрения, а то выглядит как в 7.7.
-
Выкладываю свой вариант решения. Критикуйте. Заранее благодарен.
Вложения:
Demy_1_02.dt
-
Вид номенклатуры лучше вообще делать булевым реквизитом (Услуга), а не перечислением.
-
ну и тут тоже выкладываю свое решение... тоже рад буду комментариям
https://yadi.sk/d/edeP_TL1Z54yM
-
Для написания отчета по продажам в некоторых решениях используют 1 регистр накопления с 3 ресурсами: себестоимость, количество, СуммаПродажи, но есть и второй регистр накопления остатков в котором по сути есть уже информация о себестоимости и количестве. В первом случае мы увеличиваем таблицу оборотов, но упрощаем получение информации для построения отчета, а во втором случае (отказавшись от дублирования информации - удалили ресурсы из регистра продаж) уменьшили таблицу оборотов продажи, но увеличили время получения информации для отчета. Как в данной ситуации лучше поступать?
-
Регистр накопления с ресурсом сумма продажи - это ошибка. сумма продажи будет накапливаться в регистрах и не списываться никогда. За это снимут 2 балла. Продажи нужно хранить в оборотном регистре.
-
Denis_D
"Регистр накопления с ресурсом сумма продажи - это ошибка."
Позволю себе заметить, что что оборотный регистр, это тоже регистр накопления. :)
EfKonstanin
Пишите себестоимость в два регистра. Хотя вопрос не совсем однозначный, даже если не ошибаюсь Павел Чистов, в своих высказываниях не был категоричен, но рекомендовал делать именно таким образом. Запись уже рассчитанной (для регистра ОстаткиНоменклатуры) себестоимости в регистр Продажи практически не займет время, только место, а судя по тенденции для 1С сейчас важнее скорость работы, чем размер базы.
-
да, правильное замечание. я имел ввиду что в регистре накопления с видом остатки нельзя хранить продажи.
-
Да я собственно говоря и не предлагал хранить сумму продажи в регистре накопления с видом остатки, я имел ввиду, что в некоторых решениях встречал использование 2 регистров с одними и теми же ресурсами, а это означает, что в регистре накопления Остатки есть 2 измерения: номенклатура и партия с ресурсами количество и себестоимость, а в оборотном используются те же самые измерения, только уже 3 ресурса - как раз те которые нужны нам по заданию для вывода в отчет: количество, себестоимость и сумма продажи, но в 1 таблице с видом остатки уже есть вирт. таблица оборотов следовательно коло-во и себестоимость можно взять оттуда и связать это со 2 регистром и взять оттуда сумму продажи. Т.е. получается 2 решения со своими плюсами и минусами, и что использовать непонятно.
-
Еще два аргумента в пользу того, чтобы писать себестоимость в два регистра. Во-первых, если смотреть типовые конфигурации, то очевидно, что есть тенденция на дублирование информации, для того чтобы в последствии можно было легко получать отчеты. При этом конечно стоить отметить, что судя по всему, на экзамене аргумент "так делают в типовой" совсем не аргумент. Но тем не менее тенденция говорит именно о этом: каждый показатель - отдельный регистр. Во-вторых, на экзамене быстрее построить отчет при дублировании информации, т.к. нет необходимости делать соединения, соответственно меньше вероятность сделать ошибку.
-
Просто в оборотном не нужны Количество и Себестоимость.
-
Просто в оборотном не нужны Количество и Себестоимость.
Оборотный это Продажи? а как без количества и себестоимости?
всё брать из регистра остатки? смотреть количество и сумма расход за период по регистру остатки плюс левым соединением залезать в продажи за суммой продаж?
Зачем такое извращение? посмотрите регистр Продажи в типовой хотя бы УПП там всё пишется
-
Задание 1.2, насколько я понял не особо отличается от 1.1 только запрос в Расходной накладной немного скорректировал.
Вложения:
0261000.dt
-
Подскажите пожалуйста, что делаю не так? После проведения документа, количество из одной и той же партии списывается 2 раза. Во вторую выборку почему-то попадает запись, которая уже должна быть списана. http://joxi.ru/EA4pdpYhOJ7YAb
З.Ы. В базе реализовано только списание по фифо\лифо, остальные механизмы пока что не реализовывал.
-
Подскажите пожалуйста, что делаю не так? После проведения документа, количество из одной и той же партии списывается 2 раза. Во вторую выборку почему-то попадает запись, которая уже должна быть списана. http://joxi.ru/EA4pdpYhOJ7YAb
З.Ы. В базе реализовано только списание по фифо\лифо, остальные механизмы пока что не реализовывал.
Конкретно на этот вопрос, в параметрах РБ не задан момент времени, остатки надо брать на какое-то время, грубо говоря.
Второй запрос в выполняется в цикле, грубая ошибка, да и в целом сама обработка не совсем хороша, рекомендую Вам просмотреть пару выложенных уже решенных задач.
-
Прокомментируйте моё решение
-
Прокомментируйте моё решение
Для определения вида номенклатуры лучше использовать уже имеющееся в системе перечисление.
В РН остатки не установлена галочка "Разрешить разделение итогов".
В ПН правильней будет запретить через параметры выбора услуги, чем отсекать их в ОП.
В РН, зачем из ТЧ брать номер строки?
Почему "Период" - граница и почему "Включая", это же не по новой методике проведение?
"Сообщение.Поле = "СписркНоменклатуры[ВыборкаНоменклатура.номерСтроки-1].Номенклатура";" - работает?
Итоги по СумОст можно не брать, там же номер строки опять.
Движение.Регистратор = Ссылка, это лишнее.
-
Прокомментируйте моё решение
Для определения вида номенклатуры лучше использовать уже имеющееся в системе перечисление.
В РН остатки не установлена галочка "Разрешить разделение итогов".
В ПН правильней будет запретить через параметры выбора услуги, чем отсекать их в ОП.
В РН, зачем из ТЧ брать номер строки?
Почему "Период" - граница и почему "Включая", это же не по новой методике проведение?
"Сообщение.Поле = "СписркНоменклатуры[ВыборкаНоменклатура.номерСтроки-1].Номенклатура";" - работает?
Итоги по СумОст можно не брать, там же номер строки опять.
Движение.Регистратор = Ссылка, это лишнее.
"Для определения вида номенклатуры лучше использовать уже имеющееся в системе перечисление."- читал на форуме что на экзамене это не считается ошибкой.
"В ПН правильней будет запретить через параметры выбора услуги, чем отсекать их в ОП."- расскажите как, так как я только начинаю разбираться
"Почему "Период" - граница и почему "Включая", это же не по новой методике проведение?"-согласен лишнее.
"В РН, зачем из ТЧ брать номер строки?"- для того что бы использовать при выводе сообщения Сообщение.Поле = "СписркНоменклатуры[ВыборкаНоменклатура.номерСтроки-1].Номенклатура система тогда определяет строку в которой введены неправильные данные, визуально прикольно выглядит.
"Движение.Регистратор = Ссылка, это лишнее." - согласен
-
Это не ошибка, но при минимальных различиях в затратах времени на реализацию снимает вопрос - почему не используете уже имеющийся инструмент в каркасной конфигурации.
В свойствах реквизита номенклатура ТЧ есть "Параметры выбора", задать там отбор по Вашему решению "ЭтоУслуга = Ложь" или по моему "ВидНоменклатуры = Товар".
Про номер строки протупил, согласен, давно не расписывал по сообщению пользователю. А по Сообщение.Поле должно быть так Сообщение.Поле = "Таблица[" + Индекс + "].Количество"; Думаю Ваше строка не работает, СписркНоменклатуры ну и индекс вставлен неверно. В рамках решения задач если не сказано делать, то и не стоит делать, как и красивости в отчетах:).
-
Думаю Ваше строка не работает, СписркНоменклатуры ну и индекс вставлен неверно. В рамках решения задач если не сказано делать, то и не стоит делать, как и красивости в отчетах:).
СписркНоменклатуры тут ошибка согласен исправил
а вот про индекс вы не правы, это новые возможности платформы 1с83
"СписокНоменклатуры[ВыборкаНоменклатура.номерСтроки-1].Номенклатура" - отработает правильно
Попробуйте сами и увидите...
-
Дошли руки, проверил. Работает то оно работает, это хорошо, но если в ТЧ есть больше одной ошибки то при переходе по стрелкам в окне сообщения само сообщение не переходит на следующую строку, а вот по старой методике все норм, так что делаем все по старому. Проверял на 8.3.5.1383.
-
Добрый день! Взялась готовиться к спецу по платформе. прокомментируйте мое решение пожалуйста. Я постаралась сделать минимальный требуемый функционал по условиям задачи. Может что-то стоит добавить? :)
-
Добрый день! Взялась готовиться к спецу по платформе. прокомментируйте мое решение пожалуйста. Я постаралась сделать минимальный требуемый функционал по условиям задачи. Может что-то стоит добавить? :)
В принципе все хорошо, есть пару мелочей.
Зачем это в цикле "Движения.Остатки.Записывать = истина;"?
В обоих отчетах не выведены в форму параметры дат.
В запросе РН из временной таблицы рекомендуют брать не "Номенклатура", а представление, хотя если брать "Номенклатура" как у Вас то можно не брать поле "Услуга" так как в запросе оно будет доступно через точку. Ну и партию думаю тоже стоит проиндексировать, так как дальше она используется.
-
Доброго вечера! Прокомментируйте мое решение, пожалуйста.
-
Вид номенклатуры лучше вообще делать булевым реквизитом (Услуга), а не перечислением.
Почему??? Если в стартовой конфе уже даже есть нужные перечисления.
-
<!--uzquote--><div class="bbQuoteBlock"><div class="bbQuoteName" style="padding-left:5px;font-size:7pt"><b>Quote</b> (<span class="qName"><!--qn-->Ettern0<!--/qn--></span>)</div><div class="quoteMessage" style="border:1px inset;max-height:200px;overflow:auto;height:expression(this.scrollHeight<5?this.style.height:scrollHeight>200?'200px':''+(this.scrollHeight+5)+'px');"><!--uzq-->Не надо ли сортировать запрос заново, без учета ПриоритетнойПартии?<!--/uzq--></div></div><!--/uzquote-->
Не надо <img src="http://s10.ucoz.net/sm/10/biggrin.gif" border="0" align="absmiddle" alt="biggrin" />
Почему не надо?
У меня кстати такие же мысли, как у спрашивающего:
Если по партии, указанной в шапке товара не хватило, то нужно списывать в соответствии с учетной политикой, а ведь эта партия в общем случае не будет первой, а будет n-ой
Кому нибудь попадалась эта задача на экзамене? Действительно условие нужно трактовать так, как реализовали большинство на форуме?
-
Прошу прокомментировать мое решение
-
Добрый день, уважаемые знатоки. Прокомментируйте пожалуйста мое решение.
-
Ребята, у меня важный вопрос. Не знаю как у вас, но у меня и вот здесь (примеры решения задач):
http://v2.ax-online.ru/Exams/AttPlatf/Task-1.1.aspx
http://v2.ax-online.ru/Exams/AttPlatf/Task-1.2.aspx
есть крупная проблема, о которой, возможно никто не задумывался или не замечал.
По условию задачи можно выбирать партию в РН, а если не хватает товара для списания с партии, то списывается по учетной политике, например, по ФИФО.
По логике такая ситуация, если мы указали партию №1, а в ней не хватает товара, то по ФИФО должно начаться списание с партии №1, затем с партии №2 и т.д.
НО!
Запрос составляет все не так. Если указать УБЫВ при упорядочивании, то мы получим обратный эффект - наша партия будет в самом конце.
Я пока что изучаю этот маленький вопрос в перерыве с работой, если есть идеи, можете выкладывать, я напишу свои (но похоже уже завтра).
Вот код процедуры РН, важен сам запрос (УБЫВ):
Процедура ОбработкаПроведения(Отказ, Режим)
// объявление переменных
МоментИтогов = "";
Себестоимость = 0;
Выручка = 0;
Буфф = "";
ПорядокСортировки = "";
// учетная политика
ФИФО = Перечисления.УчетнаяПолитика.ФИФО;
ЛИФО = Перечисления.УчетнаяПолитика.ЛИФО;
УчетнаяПолитика = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).МетодСписания;
Если НЕ ЗначениеЗаполнено(УчетнаяПолитика) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не установлена учетная политика на этот год! Работа будет завершена.";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
// моментитогов
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
МоментИтогов = Неопределено;
Иначе
МоментИтогов = новый Граница(МоментВремени(),ВидГраницы.Включая);
КонецЕсли;
// работаем дальше:
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Очистить();
Движения.ОстаткиНоменклатуры.Записать(); // удаляем старые движения документа
Движения.Продажи.Записать(); // удаляем старые движения документа
// Блокировка данных (ОстаткиНоменклатуры)
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
Блокировка.Заблокировать();
// запрос
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ЭтоУслуга,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоПродажа,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаПродажа,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Представление КАК ПредставлениеДокумент
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ЭтоУслуга,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Представление
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ.Номенклатура КАК Номенклатура,
| ВТ.НоменклатураЭтоУслуга КАК ЭтоУслуга,
| ЕСТЬNULL(ВТ.КоличествоПродажа, 0) КАК КоличествоПродажа,
| ЕСТЬNULL(ВТ.СуммаПродажа, 0) КАК СуммаПродажа,
| ОстаткиНоменклатурыОстатки.Партия КАК Партия,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
| ВТ.ПредставлениеДокумент,
| ОстаткиНоменклатурыОстатки.Номенклатура.Представление КАК ПредставлениеНоменклатура,
| ВЫБОР
| КОГДА ОстаткиНоменклатурыОстатки.Партия = &Партия
| ТОГДА 1
| ИНАЧЕ 0
| КОНЕЦ КАК Порядок
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &МоментИтогов,
| Номенклатура В
| (ВЫБРАТЬ
| ВТ.Номенклатура
| ИЗ
| ВТ КАК ВТ)) КАК ОстаткиНоменклатурыОстатки
| ПО ВТ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Порядок,
| ОстаткиНоменклатурыОстатки.Партия.МоментВремени УБЫВ
|ИТОГИ
| МАКСИМУМ(ЭтоУслуга),
| МАКСИМУМ(КоличествоПродажа),
| МАКСИМУМ(СуммаПродажа),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура";
Запрос.УстановитьПараметр("МоментИтогов", МоментИтогов);
Запрос.УстановитьПараметр("Партия", Партия);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
// Если ЛИФО, то ничего не изменяем в запросе
Буфф = УчетнаяПолитика = ЛИФО; // по УБЫВ
Текст1 = "ОстаткиНоменклатурыОстатки.Партия.МоментВремени УБЫВ";
Текст2 = "ОстаткиНоменклатурыОстатки.Партия.МоментВремени";
Запрос.Текст = ?(Буфф,Запрос.Текст,СтрЗаменить(Запрос.Текст, Текст1, Текст2));
РезультатЗапроса = Запрос.Выполнить();
////ТестТЗ = РезультатЗапроса.Выгрузить();
////Буфф = 0;
Если РезультатЗапроса.Пустой() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Отсутствуют данные в документе и (или) в базе данных";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// АЛГОРИТМ
Пока Выборка.Следующий() Цикл
ТекСебестоимость = 0;
ОсталосьСписать = Выборка.КоличествоПродажа;
Если НЕ Выборка.ЭтоУслуга Тогда
Если Выборка.КоличествоПродажа > Выборка.КоличествоОстаток Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст =
"Не хватает """ + Выборка.ПредставлениеНоменклатура +
""" в количестве: " + (Выборка.КоличествоПродажа - Выборка.КоличествоОстаток) +
". Всего в наличии имеется: " + Выборка.КоличествоОстаток;
Сообщение.Сообщить();
Отказ = Истина;
Продолжить;
КонецЕсли;
ВыборкаДетальныеЗаписи = Выборка.Выбрать();
Пока (ОсталосьСписать > 0) И ВыборкаДетальныеЗаписи.Следующий() Цикл
ТекСписание = мин(ВыборкаДетальныеЗаписи.КоличествоОстаток, ОсталосьСписать);
// регистр ОстаткиНоменклатуры Расход
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
Движение.Количество = ТекСписание;
Движение.Сумма = (ТекСписание * ВыборкаДетальныеЗаписи.СуммаОстаток) / ВыборкаДетальныеЗаписи.КоличествоОстаток;
ТекСебестоимость = ТекСебестоимость + Движение.Сумма;
ОсталосьСписать = ОсталосьСписать - ТекСписание;
КонецЦикла;
КонецЕсли; // КОНЕЦ: НЕ Выборка.ЭтоУслуга //
// регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.КоличествоПродажа;
Движение.Себестоимость = ТекСебестоимость;
Движение.Выручка = Выборка.СуммаПродажа;
КонецЦикла;
КонецПроцедуры
-
...
По условию задачи можно выбирать партию в РН, а если не хватает товара для списания с партии, то списывается по учетной политике, например, по ФИФО.
По логике такая ситуация, если мы указали партию №1, а в ней не хватает товара, то по ФИФО должно начаться списание с партии №1, затем с партии №2 и т.д.
НО!
Запрос составляет все не так. Если указать УБЫВ при упорядочивании, то мы получим обратный эффект - наша партия будет в самом конце.
Я пока что изучаю этот маленький вопрос в перерыве с работой, если есть идеи, можете выкладывать, я напишу свои (но похоже уже завтра).
...
Обещал - сделал.
Разбил на 3 запроса и использовал МенеджерВременныхТаблиц.
Логика следующая:
1 запрос - это ВТ, состоящая из Расходной накладной (РН)
2 запрос - это получение нашей партии и данных из РН
проверка количество в РН и остатков в партии
3 запрос - сбор всей информации по партиям, РН и т.д. (продолжение 1 запроса, другими словами).
В качестве параметра "Партия" в 3 запрос передается либо ссылка на ПН (приходную накладную), если по 2му запросу можно списывать, либо "1", если нельзя
Процедура ОбработкаПроведения(Отказ, Режим)
// объявление переменных
МоментИтогов = "";
Себестоимость = 0;
Выручка = 0;
Буфф = "";
ПорядокСортировки = "";
// учетная политика
ФИФО = Перечисления.УчетнаяПолитика.ФИФО;
ЛИФО = Перечисления.УчетнаяПолитика.ЛИФО;
УчетнаяПолитика = РегистрыСведений.УчетнаяПолитика.ПолучитьПоследнее(Дата).МетодСписания;
Если НЕ ЗначениеЗаполнено(УчетнаяПолитика) Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не установлена учетная политика на этот год! Работа будет завершена.";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
// моментитогов
Если Режим = РежимПроведенияДокумента.Оперативный Тогда
МоментИтогов = Неопределено;
Иначе
МоментИтогов = новый Граница(МоментВремени(),ВидГраницы.Включая);
КонецЕсли;
// работаем дальше:
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.Продажи.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Очистить();
Движения.ОстаткиНоменклатуры.Записать(); // удаляем старые движения документа
Движения.Продажи.Записать(); // удаляем старые движения документа
// Блокировка данных (ОстаткиНоменклатуры)
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура","Номенклатура");
Блокировка.Заблокировать();
МенеджерВТ = Новый МенеджерВременныхТаблиц;
// Отберем нашу Расходную накладную
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура КАК Номенклатура,
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ЭтоУслуга КАК ЭтоУслуга,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК КоличествоПродажа,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК СуммаПродажа,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Представление КАК ПредставлениеДокумент,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Партия КАК Партия
|ПОМЕСТИТЬ ВТ
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.ЭтоУслуга,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Представление,
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка.Партия
|
|ИНДЕКСИРОВАТЬ ПО
| Номенклатура,
| Партия";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.Выполнить();
// проверка остатков в выбранной партии
Запрос2 = Новый Запрос;
Запрос2.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос2.Текст =
"ВЫБРАТЬ
| ОстаткиНоменклатурыОстатки.Партия,
| ВТ.Номенклатура,
| СУММА(ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0)) КАК КоличествоОстаток,
| ВТ.ЭтоУслуга,
| СУММА(ЕСТЬNULL(ВТ.КоличествоПродажа, 0)) КАК КоличествоПродажа
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &МоментИтогов,
| Партия В
| (ВЫБРАТЬ
| ВТ.Партия
| ИЗ
| ВТ КАК ВТ)) КАК ОстаткиНоменклатурыОстатки
| ПО (ОстаткиНоменклатурыОстатки.Номенклатура = ВТ.Номенклатура)
|ГДЕ
| НЕ ВТ.ЭтоУслуга
|
|СГРУППИРОВАТЬ ПО
| ОстаткиНоменклатурыОстатки.Партия,
| ВТ.ЭтоУслуга,
| ВТ.Номенклатура";
Запрос2.УстановитьПараметр("МоментИтогов", МоментИтогов);
РезультатЗапроса2 = Запрос2.Выполнить();
ВыборкаДетальныеЗаписи2 = РезультатЗапроса2.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// проверяем, можно ли списать с партии
СписыватьВыбраннойПартии = ИСТИНА;
Пока ВыборкаДетальныеЗаписи2.Следующий() Цикл
Если ВыборкаДетальныеЗаписи2.КоличествоПродажа > ВыборкаДетальныеЗаписи2.КоличествоОстаток Тогда
СписыватьВыбраннойПартии = ЛОЖЬ;
Прервать;
КонецЕсли;
КонецЦикла;
// выбираем ВСЕ партии
Запрос.Текст =
"ВЫБРАТЬ
| ВТ.Номенклатура КАК Номенклатура,
| ВТ.ЭтоУслуга КАК ЭтоУслуга,
| ЕСТЬNULL(ВТ.КоличествоПродажа, 0) КАК КоличествоПродажа,
| ЕСТЬNULL(ВТ.СуммаПродажа, 0) КАК СуммаПродажа,
| ОстаткиНоменклатурыОстатки.Партия КАК Партия,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток,
| ЕСТЬNULL(ОстаткиНоменклатурыОстатки.СуммаОстаток, 0) КАК СуммаОстаток,
| ВТ.ПредставлениеДокумент КАК ПредставлениеДокумент,
| ОстаткиНоменклатурыОстатки.Номенклатура.Представление КАК ПредставлениеНоменклатура,
| ВЫБОР
| КОГДА ОстаткиНоменклатурыОстатки.Партия = &Партия
| ТОГДА 0
| ИНАЧЕ 1
| КОНЕЦ КАК Порядок
|ИЗ
| ВТ КАК ВТ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиНоменклатуры.Остатки(
| &МоментИтогов,
| Номенклатура В
| (ВЫБРАТЬ
| ВТ.Номенклатура
| ИЗ
| ВТ КАК ВТ)) КАК ОстаткиНоменклатурыОстатки
| ПО ВТ.Номенклатура = ОстаткиНоменклатурыОстатки.Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Порядок,
| ОстаткиНоменклатурыОстатки.Партия.МоментВремени УБЫВ
|ИТОГИ
| МАКСИМУМ(ЭтоУслуга),
| МАКСИМУМ(КоличествоПродажа),
| МАКСИМУМ(СуммаПродажа),
| СУММА(КоличествоОстаток),
| СУММА(СуммаОстаток)
|ПО
| Номенклатура";
ПартияСсылка = ?(СписыватьВыбраннойПартии,Партия,"1"); // если с партии нельзя списать, то "отключаем" отбор по партиям
Запрос.УстановитьПараметр("МоментИтогов", МоментИтогов);
Запрос.УстановитьПараметр("Партия", ПартияСсылка);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
// Если ЛИФО, то ничего не изменяем в запросе
Буфф = УчетнаяПолитика = ЛИФО; // по УБЫВ
Текст1 = "ОстаткиНоменклатурыОстатки.Партия.МоментВремени УБЫВ";
Текст2 = "ОстаткиНоменклатурыОстатки.Партия.МоментВремени";
Запрос.Текст = ?(Буфф,Запрос.Текст,СтрЗаменить(Запрос.Текст, Текст1, Текст2));
РезультатЗапроса = Запрос.Выполнить();
////ТестТЗ = РезультатЗапроса.Выгрузить();
////Буфф = 0;
Если РезультатЗапроса.Пустой() Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Отсутствуют данные в документе и (или) в базе данных";
Сообщение.Сообщить();
Отказ = Истина;
Возврат;
КонецЕсли;
Выборка = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
// АЛГОРИТМ
Пока Выборка.Следующий() Цикл
ТекСебестоимость = 0;
ОсталосьСписать = Выборка.КоличествоПродажа;
Если НЕ Выборка.ЭтоУслуга Тогда
Если Выборка.КоличествоПродажа > Выборка.КоличествоОстаток Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст =
"Не хватает """ + Выборка.ПредставлениеНоменклатура +
""" в количестве: " + (Выборка.КоличествоПродажа - Выборка.КоличествоОстаток) +
". Всего в наличии имеется: " + Выборка.КоличествоОстаток;
Сообщение.Сообщить();
Отказ = Истина;
Продолжить;
КонецЕсли;
ВыборкаДетальныеЗаписи = Выборка.Выбрать();
Пока (ОсталосьСписать > 0) И ВыборкаДетальныеЗаписи.Следующий() Цикл
ТекСписание = мин(ВыборкаДетальныеЗаписи.КоличествоОстаток, ОсталосьСписать);
// регистр ОстаткиНоменклатуры Расход
Движение = Движения.ОстаткиНоменклатуры.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
Движение.Период = Дата;
Движение.Номенклатура = ВыборкаДетальныеЗаписи.Номенклатура;
Движение.Партия = ВыборкаДетальныеЗаписи.Партия;
Движение.Количество = ТекСписание;
Движение.Сумма = (ТекСписание * ВыборкаДетальныеЗаписи.СуммаОстаток) / ВыборкаДетальныеЗаписи.КоличествоОстаток;
ТекСебестоимость = ТекСебестоимость + Движение.Сумма;
ОсталосьСписать = ОсталосьСписать - ТекСписание;
КонецЦикла;
КонецЕсли; // КОНЕЦ: НЕ Выборка.ЭтоУслуга //
// регистр Продажи
Движение = Движения.Продажи.Добавить();
Движение.Период = Дата;
Движение.Номенклатура = Выборка.Номенклатура;
Движение.Количество = Выборка.КоличествоПродажа;
Движение.Себестоимость = ТекСебестоимость;
Движение.Выручка = Выборка.СуммаПродажа;
КонецЦикла;
КонецПроцедуры
-
Прошу прокомментировать и мое решение :)
немного подправил решение
-
Тоже попытаю удачу с комментированием. Какие Есть недочеты?
-
Тоже попытаю удачу с комментированием. Какие Есть недочеты?
Бегло просмотрел:
1) При проведении приходной ошибка, нет регистра "ОбщиеОстатки"
2) Зачем усложнять приходную суммой? Если явно не указано в задании, то достаточно номенклатуры, количества и стоимости + нет отсечения услуги (как вариант - параметр выбора)
3) РН ОстаткиПоПартиям не проиндексированы измерения Номенклатура, Партия
4) Расходная: проверка на уч. политику - строку Если ПустаяСтрока(УЧТ.ВидУчета) Тогда я бы заменил на Если ЧТ.ВидУчета = Перечисления.ВидУчета.ПустаяСсылка() Тогда, но, кмк, лучше вообще запросом с проверкой.
5) Избегать обращения через точку, все заранее выбирать в запросе - Номенклатура.Услуга и Номенклатура.Представление (в сообщение при нехватке)
6) Не учитываете то, что форма может проводиться в толстом клиенте - необходимо очищать наборы записей всегда:
Движения.ОстаткиПоПартиям.Записывать = Истина;
Движения.ОстаткиПоПартиям.Очистить();
Движения.Продажи.Записывать = Истина;
Движения.Продажи.Очистить();
7) При оперативном проведении необходимо записывать пустой набор - Движения.ОстаткиПоПартиям.Записать()
8) Необходимо обнулять СебестоимостьИтого перед проверкой на услугу, иначе себестоимость может образоваться и у услуги. (как у вас сейчас)
9) В отчете "Остатки" можно обойтись без дополнительного параметра "ПериодКонец", существующего "Период" вполне достаточно.
10) В отчете "Продажи" следует добавить новый параметр, например "ПериодОтчета" с типом "СтандартныйПериод" и завязать с "НачалоПериода" и "КонецПериода".
-
Тоже попытаю удачу с комментированием. Какие Есть недочеты?
Бегло просмотрел:
1) При проведении приходной ошибка, нет регистра "ОбщиеОстатки"
2) Зачем усложнять приходную суммой? Если явно не указано в задании, то достаточно номенклатуры, количества и стоимости + нет отсечения услуги (как вариант - параметр выбора)
3) РН ОстаткиПоПартиям не проиндексированы измерения Номенклатура, Партия
4) Расходная: проверка на уч. политику - строку Если ПустаяСтрока(УЧТ.ВидУчета) Тогда я бы заменил на Если ЧТ.ВидУчета = Перечисления.ВидУчета.ПустаяСсылка() Тогда, но, кмк, лучше вообще запросом с проверкой.
5) Избегать обращения через точку, все заранее выбирать в запросе - Номенклатура.Услуга и Номенклатура.Представление (в сообщение при нехватке)
6) Не учитываете то, что форма может проводиться в толстом клиенте - необходимо очищать наборы записей всегда:
Движения.ОстаткиПоПартиям.Записывать = Истина;
Движения.ОстаткиПоПартиям.Очистить();
Движения.Продажи.Записывать = Истина;
Движения.Продажи.Очистить();
7) При оперативном проведении необходимо записывать пустой набор - Движения.ОстаткиПоПартиям.Записать()
8) Необходимо обнулять СебестоимостьИтого перед проверкой на услугу, иначе себестоимость может образоваться и у услуги. (как у вас сейчас)
9) В отчете "Остатки" можно обойтись без дополнительного параметра "ПериодКонец", существующего "Период" вполне достаточно.
10) В отчете "Продажи" следует добавить новый параметр, например "ПериодОтчета" с типом "СтандартныйПериод" и завязать с "НачалоПериода" и "КонецПериода".
1)Общие остатки я вначале сделал, потом удалил и забыл отредактировать ПНК
3)зачем партию индексировать? там же соединение по номенклатуре помоему и индексирвоать тоже надо по ней(просто с другого пк сейчас сижу) З.Ы. открыл конфигу запрос проиндексирован по номенклатуре
5) получается можно тогда взять из запроса представление и его выводить?
6,8)спасибо, учту
9) не совсем достаточно, если учитывать как я сделал (формат даты только дата без времени=> остатки будут считаться на начало дня а не на конец, а чтобы считалось на конец дня то надо вводить доп параметр(по другому не умею)), но можно оставить стандартный формат даты с указанием времени, но решил повыпендриваться)))))
10) а зачем? зачем привязывать к началу? он если не ошибаюсь привязан к концу(мой параметр) и сделан аналогично с пунктом 9.
Небольшой ньюанс, во 2 запросе у нас есть условие
ВЫБОР
КОГДА ОстаткиПоПартиямОстатки.Партия = &ПартияСписания
ТОГДА 1
ИНАЧЕ 2
КОНЕЦ
что он нам дает? (это условие я подсмотрел и несовсем догоняю его), можете кто нить объяснить?
-
3)зачем партию индексировать? там же соединение по номенклатуре помоему и индексирвоать тоже надо по ней(просто с другого пк сейчас сижу) З.Ы. открыл конфигу запрос проиндексирован по номенклатуре
5) получается можно тогда взять из запроса представление и его выводить?
9) не совсем достаточно, если учитывать как я сделал (формат даты только дата без времени=> остатки будут считаться на начало дня а не на конец, а чтобы считалось на конец дня то надо вводить доп параметр(по другому не умею)), но можно оставить стандартный формат даты с указанием времени, но решил повыпендриваться)))))
10) а зачем? зачем привязывать к началу? он если не ошибаюсь привязан к концу(мой параметр) и сделан аналогично с пунктом 9.
Небольшой ньюанс, во 2 запросе у нас есть условие
ВЫБОР
КОГДА ОстаткиПоПартиямОстатки.Партия = &ПартияСписания
ТОГДА 1
ИНАЧЕ 2
КОНЕЦ
что он нам дает? (это условие я подсмотрел и несовсем догоняю его), можете кто нить объяснить?
3) да, действительно, соединяем только по номенклатуре (перепутал с задачей 1.3), так что индексирования по номенклатуре достаточно;
5) ага;
9) если на конец дня и без времени, то вроде бы все ок. Но по условию задачи не сказано что на конец дня, поэтому, кмк, можно и не усложнять;
10) Тип СтандартныйПериод уже возьмет остатки на конец дня
По последнему:
Это условие задает порядок списания партий, сначала мы списываем партии из шапки, а уже потом все оставшиеся
-
Мой вариант решения задачи.
Буду благодарен за просмотр и указания на ошибки, недочеты.
-
И свой вариант выложу
-
На всеобщее обозрение ;)
-
На всеобщее обозрение ;)
При запросе остатков из виртуального регистра можно обращаться к временной таблице для установки параметра отбора номенклатуры, не стоит, наверное, повторно обращаться к документу. Кроме того не нужно ставить условие в этом параметре на отбор по типу товара, в остатках услуг нету.
-
На всеобщее обозрение ;)
При оперативном проведении МоментВремени = Неопределено;
Выкладываю свой вариант.
Плюсы и минусы в студию)
Спасибо.
-
На всеобщее обозрение ;)
При оперативном проведении МоментВремени = Неопределено;
Выкладываю свой вариант.
Плюсы и минусы в студию)
Спасибо.
Попробуйте расходную накладную два раза подряд проведите по какому-нибудь товару на оставшееся количество. Первый раз проводится второй раз нет. Надо очищать движения по регистру остатков номенклатуры при оперативном проведении, а вот кстати при неоперативном наверное необязательно, если использовать границу с видом "исключая".
А вообще обязательно оставлять возможность оперативного проведения, кто-нибудь знает?
У меня вот вариант без оперативного проведения.
-
Вот вариант решения в котором получаем в одном запросе все нужные данные а после проверяем в условии номенклатура = услуга и т.д. смотрите базу, жду вопросов и замечаний
-
В общем такая же задачка, как и первая, только выбор первой партии для списания добавляется пользователю
Если есть время - посмотрите
-
Вот вариант решения в котором получаем в одном запросе все нужные данные а после проверяем в условии номенклатура = услуга и т.д. смотрите базу, жду вопросов и замечаний
Привет!
1) Усложнили опять задачу созданием дока УстановкаУчетнойПолитики
В доке Расходная:
2) Режим проведения так и не проверяете при установке параметра МоментВремени, здесь же МоментВремени это функция МоментВремени()
3) Зачем-то считаете себестоимость 2 раза, при первом подсчете можно кинуть себестоимость в переменную (как Вы делали с кол-м) и, проходя по партиям, складывать. Только надо будет не забыть ее обнулить при переходе на некст товар
4) ошибка с делением на 0 при расчете себестоимости для доставки
5) не чистите остатки в партии при списании под 0, могут залипнуть копейки
-
Вот вариант решения в котором получаем в одном запросе все нужные данные а после проверяем в условии номенклатура = услуга и т.д. смотрите базу, жду вопросов и замечаний
Привет!
1) Усложнили опять задачу созданием дока УстановкаУчетнойПолитики
В доке Расходная:
2) Режим проведения так и не проверяете при установке параметра МоментВремени, здесь же МоментВремени это функция МоментВремени()
3) Зачем-то считаете себестоимость 2 раза, при первом подсчете можно кинуть себестоимость в переменную (как Вы делали с кол-м) и, проходя по партиям, складывать. Только надо будет не забыть ее обнулить при переходе на некст товар
4) ошибка с делением на 0 при расчете себестоимости для доставки
5) не чистите остатки в партии при списании под 0, могут залипнуть копейки
Постараюсь ответить по пунктам:
1) Напрямую с регистром чтобы пользователи не работали использую документ, считаю более обоснованным вариантом, для защиты от непреднамеренного изменения(удаления) записи;
2) Получаю только актуальные остатки по регистру. По условию задачи не "увидел" необходимости проверять по другому. МоментВремени у меня переменная со значением равным Неопределено;
3) В чем преимущество, не особо понял. Я думаю более читабельный код тот что есть, на это опираюсь;
4) Видимо от невнимательности возможно такой код будет достаточен:
// Движение.Себестоимость = ?(НоменклатураУслуга, 0, [расчет себестоимости если это не услуга] //
5) Не совсем понял. Может уточните? Постараюсь объяснить ту логику которую я представляю себе: мы получаем некий коэффициент когда делим количествоДокумента на количествоОстатокИзРегистра и умножаем на суммуОстатокВРегистре, пример
а)3/3 * 10
1) 3/3 = 1;Коэффициент = 100% (значит всю сумму спишем по номенклатуре)
2) 1 * 10 = 10
б)2/3*10
1)2/3 = 0,6666666666666667
2)0,6666666666666667 * 10 = 6,666666666666667
уже при записи в регистр с учетом точности заданного для числа (ресурса регистра) результат будет округляться. Следовательно, у меня точность ресурса со значением число равна 2, результат примера Б будет 6,67 с учетом округления.
ЗЫ Спасибо за ваш комментарий.
Если кто-либо в моем комментарии заметил ошибки, прошу исправить, чтобы этот комментарий не сбил с "истинного пути" начинающих.
-
В общем такая же задачка, как и первая, только выбор первой партии для списания добавляется пользователю
Если есть время - посмотрите
1) В ОбработкеПроведения док Приходная нет проверки вида Номенклатура = ЭтоУслуга при записи движений документа;
2) В ОбработкеПроведения док Расходная не выполняете запись пустого набора(который вы очистили) в регистр ОстаткиНоменклатуры.
Движения.ОстаткиТоваров.Очистить();
с помощью этой строки кода мы можем очистить записи набора ОстаткиНоменклатуры который хранится в свойстве документа "Движения", но не в самом регистре ОстаткиНоменклатуры.
Для того чтобы пустые записи попали в базу данных нужно добавить Движения.ОстаткиТоваров.Записать();
, после того как очистим набор записей ОстаткиТоваров из коллекции "Движения".
3) Если ВыборкаНоменклатура.КоличествоПродажи > ВыборкаНоменклатура.КоличествоОсталось И НЕ Услуга Тогда
немного громоздкое условие, при этом далее
Если Не Услуга Тогда
. Посмотрите мое решение использую одно условие "НоменклатураУслуга" в начале.
-
Мое решение данной задачи. Прошу проверить на наличие ошибок.
-
Очень простая.
-
Кстати, почему большинство в отчете по остаткам приводит дату к началу следующего дня?
Есть ли в правилах экзамена про это что-либо? Время пользователь и сам выставить может.
-
Кстати, почему большинство в отчете по остаткам приводит дату к началу следующего дня?
Есть ли в правилах экзамена про это что-либо? Время пользователь и сам выставить может.
Предпологаю что так делается исходя из того, что пользователь при указании даты отчета будет ожидать получение в отчете сведений и за дату отчета.
-
задача 1.2
Аналогично 1.1, с дополнением, что в первую очередь приоритет в списание отдается партии из шапки.
Не знал, что порядок строк в закладке "Порядок" имеет значение, если МоментВремени будет первым, то Приоритет уже не важен..
-
Очень простая.
А для каких целей считаете ПередЗаписью СуммуПоДокументу в Приходной и Расходной ?...
-
Очень простая.
axel_work, не красиво следующее утверждение при проведении реализации:
| МАКСИМУМ(ВЫБОР
| КОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ) КАК ЭтоУслуга
обычно добавляют в справочнике "Номенклатура" галочку "Услуга" и запросы становятся красивее и проще.
-
Очень простая.
axel_work, не красиво следующее утверждение при проведении реализации:
| МАКСИМУМ(ВЫБОР
| КОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ) КАК ЭтоУслуга
обычно добавляют в справочнике "Номенклатура" галочку "Услуга" и запросы становятся красивее и проще.
Вот я что то сомневаюсь в использовании "галочки", ведь не просто так присутствует перечисление "ВидыНоменклатуры", думаю лучше использовать то, что уже есть
-
Очень простая.
axel_work, не красиво следующее утверждение при проведении реализации:
| МАКСИМУМ(ВЫБОР
| КОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ) КАК ЭтоУслуга
обычно добавляют в справочнике "Номенклатура" галочку "Услуга" и запросы становятся красивее и проще.
Вот я что то сомневаюсь в использовании "галочки", ведь не просто так присутствует перечисление "ВидыНоменклатуры", думаю лучше использовать то, что уже есть
этот вопрос из разряда стиля кода. авторы каркасной конфы предлагают перечисление, но с ним не удобно работать и при его использовании получается малочитаемый код. Потом этот код будет проверять специалист и если он всетретит выражения типа "масло масленное", что он скажет или подумает? Я ведь не написал, что запрещено использовать перечисление. Я просто сказал, что так некрасиво. Ведь на экзамене еще и смотрят на стиль кода.
-
Очень простая.
axel_work, не красиво следующее утверждение при проведении реализации:
| МАКСИМУМ(ВЫБОР
| КОГДА РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Вид = ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)
| ТОГДА ИСТИНА
| ИНАЧЕ ЛОЖЬ
| КОНЕЦ) КАК ЭтоУслуга
обычно добавляют в справочнике "Номенклатура" галочку "Услуга" и запросы становятся красивее и проще.
Вот я что то сомневаюсь в использовании "галочки", ведь не просто так присутствует перечисление "ВидыНоменклатуры", думаю лучше использовать то, что уже есть
этот вопрос из разряда стиля кода. авторы каркасной конфы предлагают перечисление, но с ним не удобно работать и при его использовании получается малочитаемый код. Потом этот код будет проверять специалист и если он всетретит выражения типа "масло масленное", что он скажет или подумает? Я ведь не написал, что запрещено использовать перечисление. Я просто сказал, что так некрасиво. Ведь на экзамене еще и смотрят на стиль кода.
Мне так не кажется, перечисление универсальнее. Завтра появится материал, комплект.... уже галка не пойдет.
Всего лишь надо запомнить заклинание "ЗНАЧЕНИЕ(Перечисление.ВидыНоменклатуры.Услуга)"
-
Тогда почему в типовых конфигурациях УТ и БП используется именно булево для этого случая?
Наверное, из вредности: чтоб не так как на экзамене...
Я так понимаю, что каркасная конфа - это предложение, а вот воспользоваться им или нет - дело программиста. Ведь всем известно, что в каркасной есть специально неправильно установленные настройки.
-
Тогда почему в типовых конфигурациях УТ и БП используется именно булево для этого случая?
Наверное, из вредности: чтоб не так как на экзамене...
Это не ко мне вопрос))
-
задача 1.2
Аналогично 1.1, с дополнением, что в первую очередь приоритет в списание отдается партии из шапки.
При проведении реализации избыточно условие:
Если ЗначениеЗаполнено(Партия) И Партия.Проведен Тогда
Запрос.УстановитьПараметр("ПартияИзШапки", Партия);
Иначе
Запрос.УстановитьПараметр("ПартияИзШапки", Документы.ПриходнаяНакладная.ПустаяСсылка());
КонецЕсли;
достаточно всего:
Если Партия.Проведен Тогда
...
КонецЕсли;
-
Прошу проверить решение. Вопрос если политику меняю документом, хотя в задании этого не требуется, является ли это ошибкой?
И еще, когда делаешь проводку прихода проверку на услугу можно ли делать как это реализовано у меня в задании? (Если НЕ ТекСтрокаТЧ.Номенклатура.Услуга Тогда).
И надо ли делать последовательность?
-
Исправил косяк с услугами
-
Интересно, будет ли считаться подобное выражение Выборка.ВидНоменклатуры = Перечисления.ВидНоменклатуры.Товар в цикле ошибкой. Как понимаю, при первой итерации Перечисления.ВидНоменклатуры.Товар считывается из базы и хранится в кеше, а последующие обращения читаются из него. И по времени это не быстрее, чем сохранять Перечисления.ВидНоменклатуры.Товар в переменной. Или я ошибаюсь?
-
Господа, скачал 5 решений из этой ветки и ни в одном не увидел правильной реализации отчета по продажам? Нигде нет вычисляемых полей. Кто нибудь решил этот вопрос? В частности интересует вопрос по полю "Срок" - как узнать дату формирования отчета кроме как вводить свой параметр и выводить его на форму?
-
Господа, скачал 5 решений из этой ветки и ни в одном не увидел правильной реализации отчета по продажам? Нигде нет вычисляемых полей. Кто нибудь решил этот вопрос? В частности интересует вопрос по полю "Срок" - как узнать дату формирования отчета кроме как вводить свой параметр и выводить его на форму?
Дата формирования отчета задается в разделе "Параметры", например, как "Период".
А обратиться к параметру можно таким образом "&Период".
-
Господа, скачал 5 решений из этой ветки и ни в одном не увидел правильной реализации отчета по продажам? Нигде нет вычисляемых полей. Кто нибудь решил этот вопрос? В частности интересует вопрос по полю "Срок" - как узнать дату формирования отчета кроме как вводить свой параметр и выводить его на форму?
)))))))))
Я бы например как минимум задумался)))))
Походу ты перепутал задачу 1.2 и задачу 1.3.
Качаешь решения с задачей 1.2 из этой ветки, а поле "Срок" есть в задаче 1.3.
Вообщем повнимательней, а то методом "брутфорса" далеко не уедешь)))
-
сорри, на этом форуме недавно. неправильно понял названия тем. Думал что в этой ветке обсуждается задача по ОУ из билета 2
-
Добрый день.
Мой вариант решения. Гляньте?
-
EgorovIN .Добрый день.
Мой вариант решения. Гляньте?
Думается если вы указали конкретную партию в запросе как параметр в блокировке надо ее указать как Установить значение("Партия", Партия).
-
мое решение
-
EgorovIN .Добрый день.
Мой вариант решения. Гляньте?
Думается если вы указали конкретную партию в запросе как параметр в блокировке надо ее указать как Установить значение("Партия", Партия).
Добрый день.
Я не указывал партию как параметр к блокировке, я передаю партию для упорядочивания.
Я блокирую всю номенклатуру из документа по всем партиям, зачем мне еще дополнительно блокировать конкретную?
-
Почему при проведении РасходнойНакладной в запросе в итогах ставим МАКСИМУМ(Услуга)? Ведь если в документ затесалась услуга и товары, то он вообще не проведется, а ведь можно просто при обходе делать проверки на услуга и исключить ее, но провести товары, присутствующие в табличной части?
-
Добрый день! Посмотрите пожалуйста мое решение, спасибо большое!
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
1.в приходной нет проверки на услугу.
2.если не хватает то выводит первую номенклатуру и прерывается, а может быть там несколько номенклатуры не хватает
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
1.в приходной нет проверки на услугу.
2.если не хватает то выводит первую номенклатуру и прерывается, а может быть там несколько номенклатуры не хватает
1. В параметрах выбора установлен отбор по услуге
2. Неважно скольких номенклатур не хватает: если нет хотя бы 1 позиции, то документ не проводится. Диагностическое сообщение предназначено ровно для пользователя.
-
Добрый день. Посмотрите пожалуйста мое решение. Интересно мнение кто как определял приоритет указанной в расходнйо накладной партий при списании. Ресурс себестоимость добавил в РН Продажи, дабы не отчет продажи выполнялся быстрее, т.к. все данные берутся из одной таблицы БД.
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Списание вообще неправильно сделано.
С начало надо сделать движение в регистр остатки, затем проверить что в минус не ушли, а потом списывать товар.
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Списание вообще неправильно сделано.
С начало надо сделать движение в регистр остатки, затем проверить что в минус не ушли, а потом списывать товар.
Спасибо за ответ)
В чем не правильно?))
Перед чтением остатков я заблокировал таблицу РН, чтобы другие сеансы не сделали туда никаких записей. Проверил хватает ли мне. Записал набор в РН. После чего блокировка снялась в конце транзакции.
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Списание вообще неправильно сделано.
С начало надо сделать движение в регистр остатки, затем проверить что в минус не ушли, а потом списывать товар.
Я использую старую методику проведения
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Списание вообще неправильно сделано.
С начало надо сделать движение в регистр остатки, затем проверить что в минус не ушли, а потом списывать товар.
Спасибо за ответ)
В чем не правильно?))
Перед чтением остатков я заблокировал таблицу РН, чтобы другие сеансы не сделали туда никаких записей. Проверил хватает ли мне. Записал набор в РН. После чего блокировка снялась в конце транзакции.
Судя по всему, это ответ на мое решение... :o :)
-
Вот задача, должно быть идеально.
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Списание вообще неправильно сделано.
С начало надо сделать движение в регистр остатки, затем проверить что в минус не ушли, а потом списывать товар.
Я использую старую методику проведения
Если есть возможность, то надо использовать новую методику. За неправильную методику списания снимают балы
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Списание вообще неправильно сделано.
С начало надо сделать движение в регистр остатки, затем проверить что в минус не ушли, а потом списывать товар.
Спасибо за ответ)
В чем не правильно?))
Перед чтением остатков я заблокировал таблицу РН, чтобы другие сеансы не сделали туда никаких записей. Проверил хватает ли мне. Записал набор в РН. После чего блокировка снялась в конце транзакции.
В приходной лучше делать через запрос, т.к ты при проверке услуги, каждый раз через точку проверяешь равно ли перечислению. Если будет 1000 записей запрос в разы быстрее отработает. Всегда, если можно сделать выборку данных через запрос, лучше делать через него.
При получении учетной политики, отбор на дату а не на момент времени. Тем более у регистра нету регистратора. И не надо проверять режим тут. Просто на дату документа смотришь!
Блокировку вообще поставил в начале, ты даже учетную политику не получил, вдруг ты на ней откатишься, а ты уже заблокировал регистр, сразу минус бал. Регистр блокируется перед чтением, записью, а не заранее.
Плюс, в этой задаче возможно использовать новую методику списания, значит ее надо использовать. У вас нет выбора, хочу старую, хочу новую использовать, приоритет новая методика. Если ее невозможно использовать, только тогда старую используем
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Списание вообще неправильно сделано.
С начало надо сделать движение в регистр остатки, затем проверить что в минус не ушли, а потом списывать товар.
Я использую старую методику проведения
Если есть возможность, то надо использовать новую методику. За неправильную методику списания снимают балы
Если есть возможность, то надо использовать новую методику
Не совсем: если новая методика более эффективна в плане структуры решения, то нужно выбирать ее.
За неправильную методику списания снимают балы
Если не сложно, приведите пример правил экзамена, где это написано или цитату экзаментатора.
-
За неправильную методику списания снимают балы
Если не сложно, приведите пример правил экзамена, где это написано или цитату экзаментатора.
Снимают, но снимут не у вас. ;D
-
За неправильную методику списания снимают балы
Если не сложно, приведите пример правил экзамена, где это написано или цитату экзаментатора.
Снимают, но снимут не у вас. ;D
Почему? ???
-
За неправильную методику списания снимают балы
Если не сложно, приведите пример правил экзамена, где это написано или цитату экзаментатора.
Снимают, но снимут не у вас. ;D
Почему? ???
Снимают на основании вот этого пунктика
Использование менее эффективной методики проведения документов 1,0
А не у вас, потому что по крайней мере во всех задачах с расчетом себестоимости надо использовать старую методику. Лично я принцип определения методики формулирую так: "Новая методика в том случае, если для ее применения не надо создавать дополнительных регистров и даже доп ресурсов в существующих регистрах. Если есть необходимость создания доп объектов исключительно для новой методики, использование новой методики на экз скорее всего будет признано неэффективным".
-
За неправильную методику списания снимают балы
Если не сложно, приведите пример правил экзамена, где это написано или цитату экзаментатора.
Снимают, но снимут не у вас. ;D
Почему? ???
Снимают на основании вот этого пунктика
Использование менее эффективной методики проведения документов 1,0
А не у вас, потому что по крайней мере во всех задачах с расчетом себестоимости надо использовать старую методику. Лично я принцип определения методики формулирую так: "Новая методика в том случае, если для ее применения не надо создавать дополнительных регистров и даже доп ресурсов в существующих регистрах. Если есть необходимость создания доп объектов исключительно для новой методики, использование новой методики на экз скорее всего будет признано неэффективным".
alex1248, если использовать два регистра то старая методика, а если я использую три регистра и регистр остатки состоит только из номенклатуры и количества. Почему я не могу новую применить методику? Я могу сразу сделать движение по остаткам и увидеть, что остатки в минус ушли и дальше не идти списывать по партиям. У меня получается комбинация, с начало новую использую, если в минус не ушел, тогда использую старую уже для списания партий
-
За неправильную методику списания снимают балы
Если не сложно, приведите пример правил экзамена, где это написано или цитату экзаментатора.
Снимают, но снимут не у вас. ;D
Почему? ???
Снимают на основании вот этого пунктика
Использование менее эффективной методики проведения документов 1,0
А не у вас, потому что по крайней мере во всех задачах с расчетом себестоимости надо использовать старую методику. Лично я принцип определения методики формулирую так: "Новая методика в том случае, если для ее применения не надо создавать дополнительных регистров и даже доп ресурсов в существующих регистрах. Если есть необходимость создания доп объектов исключительно для новой методики, использование новой методики на экз скорее всего будет признано неэффективным".
alex1248, если использовать два регистра то старая методика, а если я использую три регистра и регистр остатки состоит только из номенклатуры и количества. Почему я не могу новую применить методику? Я могу сразу сделать движение по остаткам и увидеть, что остатки в минус ушли и дальше не идти списывать по партиям. У меня получается комбинация, с начало новую использую, если в минус не ушел, тогда использую старую уже для списания партий
Я всё написал в предпоследнем на данный момент сообщении в ветке "Билет 1...."
Повторюсь лишь, что это не моё мнение, а мнение экзаменаторов и довольно однозначное, вряд ли получится их переубедить теми аргументами, что вы приводили здесь.
Да, и не советую искать инфу по этому экз по всему тырнету, она на 90% некачественная, т.к. очень многие (как и вы сейчас) свою имху выдают за абсолютную истину.
Достаточно достоверная инфа лишь на этом форуме, и то надо отсеивать.
-
За неправильную методику списания снимают балы
Если не сложно, приведите пример правил экзамена, где это написано или цитату экзаментатора.
Снимают, но снимут не у вас. ;D
Почему? ???
Снимают на основании вот этого пунктика
Использование менее эффективной методики проведения документов 1,0
А не у вас, потому что по крайней мере во всех задачах с расчетом себестоимости надо использовать старую методику. Лично я принцип определения методики формулирую так: "Новая методика в том случае, если для ее применения не надо создавать дополнительных регистров и даже доп ресурсов в существующих регистрах. Если есть необходимость создания доп объектов исключительно для новой методики, использование новой методики на экз скорее всего будет признано неэффективным".
Наглядный пример необходимости применения новой методики - задачи 1.6(решена Гилевым на сайте) и 1.24. Я определяюсь так: если мы "возвращаемся" к какому-либо разрезу учета(остаточного регистра) в процессе списания, то нужна новая методика.
-
Так как все-таки жить?
Живите просто - используйте новую методику только в тех задачах, где ее использование очевидно - это задачи только на количество, вроде бы их 3 в актуальных.
Еще совет - на Гилева не ссылайтесь, его утверждения не будут весомым аргументом, если экзаменатор будет с вами не согласен. Также не ссылайтесь на типовые конфы, на иные авторитетные, на ваш взгляд, источники.
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Подкорректировал
-
Всем привет. Мой вариант решения, кто что скажет?)
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
Подкорректировал
Спасибо за вариант с приоритетом по партии в запросе - лаконично и просто)
-
Добрый день, коллеги. Буду рад услышать конструктивные отзывы
1.в приходной нет проверки на услугу.
2.если не хватает то выводит первую номенклатуру и прерывается, а может быть там несколько номенклатуры не хватает
на Сколько я верно прочитал условие, в приходной и не должно быть услуги, так что какой смысл там её проверять? может я что то не понимаю в задании
-
Всем привет. Мой вариант решения, кто что скажет?)
В "ПриходнаяНакладная" доделайте , либо при проведении либо через СписокНоменклатуры -> Номенклатура -> Параметры Выбора, чтобы Услуга не попадала в регистр Остатки,
не большие мелочи , Учетная политика не выведена на форму, чтобы можно было менять , и по умолчанию лучше поставить ФИФО, хотя я точно не знаю это чисто мое мнение,
остальное с моей точки зрения работает правильно по условию задачи. (тестировал несколько раз)
Если не трудно в двух словах прокомментируйте запрос
-
Спасибо за подсказку по поводу регистра, надо будет переделать.
По поводу моего запроса, там доп поле создается, все остатки по партии из шапки нумеруется "1", остальной "2", потом упорядочивается по возрастанию, и получается, что вначале идут остатки по партии из шапки, и списывается от туда в первую очередь (по условию так), а потом по остальным партиям идет списание.
-
Спасибо за подсказку по поводу регистра, надо будет переделать.
По поводу моего запроса, там доп поле создается, все остатки по партии из шапки нумеруется "1", остальной "2", потом упорядочивается по возрастанию, и получается, что вначале идут остатки по партии из шапки, и списывается от туда в первую очередь (по условию так), а потом по остальным партиям идет списание.
Можно еще перед формированием движений в переборе детальных записей запроса использовать ВыборкаДетальные.НайтиСледующий (Партия, "Партия") и формировать движения по партии из шапки. Потом ВыборкаДетальные.Сбросить(). При формировании движений по остальным строкам выборки ставить условие на не равенство ВыборкаДетальные.Партия <> ЭтотОбъект.Партия и ИНАЧЕ продолжить.
-
Коллеги, добрый день, посмотрите, пожалуйста, моё решение. Спасибо!
-
Коллеги, добрый день, посмотрите, пожалуйста, моё решение. Спасибо!
День добрый! В общем все ок. Есть недостатки, на мой взгляд:
1. В проведении расходной накладной запись пустого набора в регистр "Продажи" не имеет смысла.
- Движения.Продажи.Записать(); - 5 строка Обработки проведения.
Запись пустого набора нужна только в том случае, когда для проведения нужны данные из регистра без учета движений самого документа (традиционная методика проведения).
Ошибка не серьезная, и даже не факт что заметят, но Белоусов точно заметит и будет задавать вопросы на понимание.
А нарветесь на вопрос экзаменатора при очной сдаче (-0,5 балла).
- В качестве параметра используется объект Граница с параметром МоментВремени, включая по умолчанию. Нужно просто МоментВремени(). Это тоже вопрос от экзаменатора на понимание механизма традиционной методики проведения и почему используется именно МоментВремени документа, а не его правая граница. Это связано с получением остатков. В выбранном Вами варианте могут быть получены не корректные остатки при перепроведении документа. Это грубая ошибка.
2. Движения в регистр Продажи пишутся неправильно. Количество разбивается по партиям, а сумма по каждой записи общая по всему количеству. Тут два момента - раздута таблица движений, в отчете появляется не корректная сумма продаж. Количество по услугам не попадает в регистр, это логическая ошибка Вашего решения. Если не разберетесь сами, то пишите - помогу.
3. По отчетам:
- оформление отчета должно быть таким же как в примере, приведенном в задаче. Надо обращать внимание на положение текста в ячейке, границы ячеек, болды и т.д.
- обратите внимание на представление поля "Партия" отчета Остатки Товаров. Это тоже не архи важно, но терять баллы на этом тоже не стоит.
Я не докапываюсь, просто пока тренируетесь, лучше доводить до идеала. Если останется время на экзамене, то отчеты можно и зализать. Тогда будет пятерка.
P.S. В режиме исполнения добавил одну расходную накладную и провел ее. Результат Вы видите на скринах.
-
День добрый! В общем все ок. Есть недостатки, на мой взгляд:
Тимофей, добрый день, спасибо за обратную связь.
Насчет конструкции "Новый Граница(МоментВремени()", Вы правы это для проведения по новой методике, исправил на МоментВремени(). Насчет не корректных остатков, а почему так? Я же записал пустой набор записей в ОстаткиНоменклатуры, значит остатки на левую и на правую границу документа равны. Или и я не прав?
Насчет отчетов Вы абсолютно правы, лучше при подготовке отработать на 5. Кстати, в этом случае, как лучше реализовать?
Добавить в "Выражение представления": "Прих. Накл № " + ОбщийМодульСервер.УдалитьЛидирующиеНули(Партия.Номер)? Не универсально, но других партий у нас и нет
-
Насчет не корректных остатков, а почему так? Я же записал пустой набор записей в ОстаткиНоменклатуры, значит остатки на левую и на правую границу документа равны. Или и я не прав?
Имеется ввиду, что при использовании конструкции Новый Граница (МоментВремени()) будут получены остатки на правую границу интервала. Тут важно понимать, что документ может быть пререпроведен когда угодно, например на следующий день. В этом случае он будет проводиться неоперативно, его дата и время не изменятся. Таким образом при перепроведении в этот интервал могут попасть и другие документы, введенные позже, что приведет к некоректному получению остатков. А значит надо использовать только МоментВремени(). Это в традиционной методике.
Добавить в "Выражение представления": "Прих. Накл № " + ОбщийМодульСервер.УдалитьЛидирующиеНули(Партия.Номер)? Не универсально, но других партий у нас и нет
Очень даже и универсально для приходных накладных. Я так и делал. Только получал представление поля целиком и не парился.
Проведение по регистру Продажи смотрели?
-
Имеется ввиду, что при использовании конструкции Новый Граница (МоментВремени()) будут получены остатки на правую границу интервала. Тут важно понимать, что документ может быть пререпроведен когда угодно, например на следующий день. В этом случае он будет проводиться неоперативно, его дата и время не изменятся. Таким образом при перепроведении в этот интервал могут попасть и другие документы, введенные позже, что приведет к некоректному получению остатков. А значит надо использовать только МоментВремени(). Это в традиционной методике.
А почему дата и время не изменяются при не оперативном проведении? Новый Граница (МоментВремени()) это правая граница документа, а МоментВремени() это левая, но если очистить движения документа по регистру конструкцией: Движения.ОстаткиНоменклатуры.Записать();. То значения должны быть равны. Разве нет?
Добавить в "Выражение представления": "Прих. Накл № " + ОбщийМодульСервер.УдалитьЛидирующиеНули(Партия.Номер)? Не универсально, но других партий у нас и нет
Очень даже и универсально для приходных накладных. Я так и делал. Только получал представление поля целиком и не парился.
Не универсально, в том смысле, что если добавится новый документ "Приходная накладная по Экспорту", то из "Выражения представления" в запрос нужно будет переносить в конструкцию ВЫБОР КОГДА ТОГДА. Что-то вроде такого:
ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Партия ССЫЛКА Документ.ПриходнаяНакладная ТОГДА "Прих. Накл №"
ИНАЧЕ "Что-то другое №"
КОНЕЦ
Тимофей, насчет получения поля целиком не понял как Вы это делали, можете рассказать?
Проведение по регистру Продажи смотрели?
Да, перенёс в цикл по Номенклатуре и исправил заполнение количества по документу. Так что всё ок.
-
А почему дата и время не изменяются при не оперативном проведении?
При не оперативном проведении платформа не обеспечивает уникальность положения документа на оси времени. Даже если в метаданных Оперативное проведение = Разрешить, или программно используется метод объекта Записать (РежимЗаписи.Проведение, РежимПроведения.Оперативный), но дата документа меньше Даты текущего сеанса, то документ будет проводиться не оперативно.
Новый Граница (МоментВремени()) это правая граница документа, а МоментВремени() это левая, но если очистить движения документа по регистру конструкцией: Движения.ОстаткиНоменклатуры.Записать();. То значения должны быть равны. Разве нет?
Когда Ваш документ проводится/перепроводиться оперативно текущей датой, то разницы действительно нет. Ему будет присвоена оперативная отметка времени, которая всегда на 1 с больше последнего проведенного документа. Его положение на оси времени уникально и после него ничего нет. Раньше вообще получали актуальные остатки при оперативном проведении. Но когда Дата документа меньше Даты текущего сеанса, документ будет проводиться / перепроводиться не оперативно, дату пользователь может поменять вручную (программно это никак не ограничено). Вот тогда разница будет и в этот интервал [МоментВремени(), ПраваяГраница] могут попасть движения других документов, которые изменяли остатки позже.
Методически правильно использовать МоментВремени(). Инфа с курса подготовки к Специалисту по платформе. Как-то так.
Тимофей, насчет получения поля целиком не понял как Вы это делали, можете рассказать?
Создавал вычисляемое поле и получал для него значение с помощью экспортной функции из общего модуля. Но зато можно допилив немного эту функцию, получать значения для этого поля любых документов, определяя тип значения ссылки получаемой функцией в качестве аргумента. Как Вы говорите, немного более универсальный подход. Вы почти так же делали, в общем-то.
-
Создавал вычисляемое поле и получал для него значение с помощью экспортной функции из общего модуля. Но зато можно допилив немного эту функцию, получать значения для этого поля любых документов, определяя тип значения ссылки получаемой функцией в качестве аргумента. Как Вы говорите, немного более универсальный подход. Вы почти так же делали, в общем-то.
Тимофей, насчет момента времени понял, так и буду делать :)
Насчет Партии, нашёл ещё одно решение без экспортных функций, вдруг кому пригодится. В "Выражение представления" для "Партии", можно использовать такую конструкцию:
"Выбор Когда ЗначениеЗаполнено(Партия) Тогда "Прих. Накладная №" + Строка(Вычислить(Партия.Номер)) Иначе "" Конец"
-
Насчет Партии, нашёл ещё одно решение без экспортных функций, вдруг кому пригодится. В "Выражение представления" для "Партии", можно использовать такую конструкцию:
"Выбор Когда ЗначениеЗаполнено(Партия) Тогда "Прих. Накладная №" + Строка(Вычислить(Партия.Номер)) Иначе "" Конец"
Да, прикольно. Мне понравилось. Метод Вычислить особенно, о нем не знал. Правда у меня, как и у Вас, стоит запрет незаполненных значений у обоих измерений регистра Остатки. Поэтому можно и без выбора обойтись.