Имя: Пароль:
1C
1С v8
задача 1.2 из сборника спеца по платформе 8.2
0 Dmitry017
 
20.05.13
21:58
Прорешиваю задачи из сборника на спеца по платформе. задача 8.2. Не могу создать отчёт № 2 как в задании. систему компоновки данных видимо криво настроил. Тыкаюсь - идеал никак не получается получить. Подскажете как?
Вот скрин того что надо получить
http://i46.fastpic.ru/big/2013/0520/5c/af91e8f62c04036298424c6e8db8c45c.jpg

и вот скрин того, что получилось
http://i47.fastpic.ru/big/2013/0520/6b/15cfd1dfaede0f58f38ce23001b6036b.jpg


Вот dt-шка. Можете глянуть? Может подскажете, какие я ошибки совершил, кроме того что блокировку не сделал и отчёт по времени не настроил (с 1 июля по 1 августа, например)
http://zalil.ru/34518272


thank you
1 Dmitry017
 
20.05.13
21:59
вот условие задачи 1.2:



Компания занимается оптовой торговлей. Поступление товаров отражается
документом «Приходная накладная», продажа - «Расходная накладная». Помимо
продажи товара, могут оказываться дополнительные услуги, например по доставке.
И услуги и товары указываются в одной табличной части.
Складской учет товаров не ведется.
При проведении расходной накладной при нехватке товара необходимо
выдавать соответствующее предупреждение с указанием количества нехватки и не
позволять проводить документ.
Списание себестоимости товаров должно быть организовано по партиям, а
зависимости от текущего значения принятого на этот год в учетной политике
метода списания себестоимости (FIFO или LIFO) и указанной в документе (в шапке
документа) партии. Еще раз подчеркивается - учетная политика действует год. На
следующий год метод списания может смениться. В первую очередь должен
списываться товар из указанной в шапке партии. В случае, если товара по
выбранной партии не хватает (или нет), то товар списывается в соответствии с
текущей учетной политикой.
Необходимо построить отчет по продажам товаров за период и остаткам
товара на указанную дату.
2 EugeniaK
 
20.05.13
23:07
(0) По отчету как-то много у тебя галочек в настройках. Снимаешь все и:
Ставишь в настройках "Расположение полей группировок: отдельно и только в итогах"
Переименовываешь поля на закладке "Набор данных"

Но вообще внешний вид не важен для экзамена. Главное, чтобы отчет выдавал данные в нужном разрезе.

По коду достаточно неплохо. Из того, что бросается в глаза:

В приходной забыл фильтр на тип товара. Приходуются услуги и зависают в остатках.

В расходной:

1. Сортировка в расходной накладной не по Партия, а по Партия.МоментВремени. Поле "Партия" это ссылка, оно не связано с датой документа.

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

3. Для ЛИФО, видимо, даже не тестировал. Вылетает запрос. Пробел добавь.

4. В запросе получается 2 одинаковые выборки из таблицы РасходнаяНакладнаяСписокНоменклатуры (одна получение данных, вторая для фильтра в виртуальной таблице). Желательно использовать временные таблицы.

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

Если ВыборкаНоменклатура.КоличествоОстаток < ВыборкаНоменклатура.КоличествоПродаж Тогда
   Отказ = Истина;
   Сообщить("Номенклатуры " + ВыборкаНоменклатура.Номенклатура + " не хватает на складе в количестве "
   + НехваткаНоменклатуры + " шт.");
   Возврат;
КонецЕсли;
"Возврат" делать не нужно. Может быть недостача по нескольким строкам, а не по одной. Нужно пройтись по всем строкам и выдать сообщение о каждой недостаче в документе.
ВыборкаНоменклатура.Номенклатура - в данной переменной ссылка. Чтобы вывести сообщение система делает лишнее обращение к серверу. Желательно изначально отбирать из базы строку Представление(ВыборкаНоменклатура.Номенклатура) КАК ПредставлениеНоменклатура и выводить в сообщение строку, а не ссылку.

6. Движение.Количество = СписаноНоменклатуры;
По-моему тут количество номенклатуры лишнее. Лучше пиши просто 0 или количество из документа по конкретной услуге.
3 Dmitry017
 
21.05.13
19:57
Спасибо. И вот еще такой вопрос хотел задать. Вот нужно в запросе получить данные из табличной части текущего документа и дальше эти данные связать с другими таблицами.
Ну по сути надо прописать условие:
| ГДЕ ПриходнаяНакладная.ТабличнаяЧастьТовары.Ссылка = Ссылка

ну как-то так. Но только вот в чём вопрос.
Когда пишешь:
Запрос.УстановитьПараметр("Ссылка", Ссылка), то передаётся ссылка не на нужную табличную часть, а ссылка на документ. Как бы всё таким образом работает, и видел, что всегда именно так такие вещи и делаются, только немножко непонятно как данное сравнение вообще может производиться.
Ну то есть, вот строка:
ПриходнаяНакладная.ТабличнаяЧастьТовары.Ссылка = Ссылка

Слева по сути Ссылка на тибличную часть документа, с права ссылка на документ (тип ДокументСсылка).
Я наверно где-то здесь ошибся в рассуждениях. Можете поправить?
4 EugeniaK
 
21.05.13
20:01
(3)
На сервере есть отдельная таблица ПриходнаяНакладная.ТабличнаяЧастьТовары со строками всех приходных накладных.
Поле "Ссылка" табличной части это и есть ссылка на документ, которому эта табличная часть принадлежит.
Т.е. условием ПриходнаяНакладная.ТабличнаяЧастьТовары.Ссылка = Ссылка  ты выбираешь строки именно нужного тебе документа.
Ключ строки это "ссылка на документ" + "номер строки".
Отдельной "ссылки на строку табличной части" не существует.