Финальное домашнее задание – Теперь с решениями!
Финальное домашнее задание базового курса по программированию.
Задание коренным образом отличается от обычных ДЗ, которые мы решали в ходе курса.
Внимание: прием решений уже завершен. Но, думаю, всем будет полезно посмотреть на возможные решения :)
Финальное домашнее задание состоит трех частей:
1. Решить практическую задачу (см. ниже), плюс написать по ней отчет. Что должно быть в отчете – указано в самом задании.
2. Вы уже достаточно опытные специалисты, поэтому наступает момент не только впитывать новые знания, но отдать их во внешний мир, поделиться информацией с другими людьми.
Мы предлагаем Вам два варианта, как это можно сделать:
- Провести для своих клиентов/коллег по цеху мини-семинар (30-ти минут достаточно) на тему «Основные фишки платформы 8.2». В качестве отчета – вполне подойдут фотографии с этого мероприятия.
- Помочь разобраться со сложным вопросом на каком-либо форуме по 1С. При этом нужно детально подойти к решению проблемы. Идеальный вариант – это видео-разбор какой-либо проблемы. Для записи можно использовать Jing (http://www.techsmith.com/jing/, он дает возможность бесплатно записывать мини-уроки до 5 минут). Нам нужно будет предоставить ссылку на обсуждение.
3. Ответить на ряд вопросов по прохождению базового курса (вопросы – в задании).
Текст задания доступен по ссылке.
ИБ для выполнения первой части задания скачивайте по ссылке.
Update.
Шаг 2 финального домашнего задания. Поступило несколько просьб придумать еще один вариант выполнения этого шага. Т.к. не всегда возможно устроить публичную презентацию, либо “повисеть” на форумах (сам захожу туда уже около года).
Можно написать небольшую статью на любую интересную вам тему по платформе “1С:Предприятие 8.2”. Статью нужно будет опубликовать на сайте с соответствующей тематикой, например, http://nashe1c.ru/, http://infostart.ru/.
Ps. Конечно прямой перевод наших видео-материалов в текст с картинками мы не одобряем. Правильным было бы написать о том механизме, который у вас наиболее срезанировал во время обучения. Причем написать со своей точки зрения.
Pps. Отчет о ДЗ нужно писать прямо в этой ветке. Многие участники уже начали писать отчеты, но не удивляйтесь, что вы не видите их комментарии – так и задумано :)
Ppps. В отчете по первой части финального ДЗ нужно привести список ошибок М.Н. Выгрузку базы присылать не нужно.
Задание 1
1) Регистратором для регистра накопления «ТоварыНаСкладе» (вид регистра: остатки) служит документ «ПокупкаТоваров».
Следует регистраторами сделать 2 документа: «ПокупкаТоваров» и «ПродажаТоваров», которые будут регистрировать как приход товара, так и его уход.
2) При выборе товара для поля серия отбор по владельцу осуществляется только в табличной части документа «ПокупкаТоваров»
Следует также для поля серия установить отбор по полю владельцу товар в табличной части документа «ПродажаТоваров».
3) Для заполнения контрагента по умолчанию в документе «ПокупкаТоваров» необходимо сделать серверную процедуру для считывания предопределенного элемента.
4) В свойствах общего модуля «ПроверкаДокументовСервер» следует установить флаг вызов сервера
5) Отсутствие автонумерации для справочника «Серии» вследствие чего элементы справочника могут дублироваться. В свойствах справочника «Серии» на вкладке «Нумерация» поставить флаг «Контроль уникальности».
6) Отсутствие в табличных частях документов «ПокупкаТоваров» и «ПродажаТоваров» реквизитов табличной части «Цена».
7) В тексте серверного общего модуля используется процедура «Предупреждение»
Следует использовать «СообщениеПользователю»
8) Запись движений документом «ПокупкаТоваров» в регистр «ТоварыНаСкладе» не производится
Добавить в процедуру ОбработкаПроведения() модуля объекта документа строку Движения.ТоварыНаСкладе.Записывать = Истина;
9) При недостатке товара и записи в регистр данных о количестве имеющегося в наличии товара, данные в документе должны автоматически меняться на записанные в регистре количество и сумму.
10) Разрешена проводка документов «ПродажаТоваров» с товарами, у которых нет данных о поступлении и которых фактически в наличии нет.
Запретить проведение документов, у которых какого-либо товара в табличной части нет в наличии совсем.
11) Команда «ЗаполнитьТовары» формы документа «ПокупкаТоваров» не выведена на форму, хотя процедура по обработке нажатия на кнопку создана
12) Неправильно указан параметр функции Тип в модуле формы документа «ПокупкаТоваров»
ВвестиЗначение(Основание, “Выберите документ-основание”, Тип (“Документ.ПокупкаТоваров”));
Исправить на Тип(«ДокументСсылка.ПокупкаТоваров»)
13) В документе «ПродажаТоваров» при контроле остатков следует учитывать режим проведения документа: оперативный и неоперативный (получение остатков на границу.включая от момента времени документа)
14) В документе «Продажа товаров» не работает кнопка « Заполнить товары». Для устранения ошибки в обработчике события вызываем серверную процедуру, выполняющую очищение табличной части( предварительно предупреждая пользователя) и заполнение табличной части из выбранного документа.
Док = ДокументОснование.ПолучитьОбъект();
тз = Новый ТаблицаЗначений;
тз = Товары.Выгрузить();
Объект.Товары.Загрузить(ТЗ);
15) В заявленном Функционале конфигурация позволяет списывать товар со склада, однако в конфигурации не обнаружено таких решений . Создаем документы «Инвентаризация», «Списание», «Оприходование». В Инвентаризацию попадают данные из регистра ТоварыНаСкладе, по результатам инвентаризации необходимо создать документы списания и оприходования
16) Реализацию контрагента по умолчанию в форме документа «ПокупкаТоваров» лучше организовать не через предопределенные элементы, а через константу с типом значения «СправочникСсылка.Контрагенты»(либо в форме списка контрагентов сделать возможность устанавливать какого-либо контрагента основным, для этого вводится новый реквизит типа булево и модуль контроля чтобы истина была установленна только у одного контрагента).
17) В документе «Продажа товара» кнопка «Проверка документа» решает не те задачи которые нужно, в табличной части в полях количество и др. цифровых полях запрещаем вводить отрицательные суммы, а кнопка проверка документа будет использоваться для проверки наличия товара на складах (контроль остатков), контроля заполненности необходимых реквизитов, контроля нулевых количеств номенклатуры.
18) Программа позволяет записывать элементы справочника «Серии» без указания серий номенклатуры.
19) В справочнике «Серии» срок годности можно ставить меньше текущей даты (в принципе эта возможность нужна при вводе товаров «задним числом», но тогда необходимо выдавать предупреждение или позволить задавать(изменять) прошлую дату только определенным пользователям).
20) У кнопки «Заполнить товары» обработчик события имеет следующий код :
Если НЕ Основание.Пустая()» заменить на Основание Неопределено.
п. 14.
Получение объекта – лишнее.
Правильно так – Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
Шаг 1 финального ДЗ – зачет.
Итак, господа, вы просили обратной связи по итогам курса
Что нового вы узнали в базовом курсе?
Пожалуй самое важное – та самая карта объектной модели платформы. До курса я работал с платформой большей частью по наитию, давил опыт на семерке. Теперь же свободно ориентируюсь в синтаксис помощнике и без индекса ;).
От каких заблуждений избавились?
1. По инерции от 7.7 не понимал взаимодействия форм и прикладных объектов. Работал в плане построения интерфейсов не от логики платформы, а по устоявшимся «обрядам». Изучение правил взаимодействия форм с прикладными объектами дало огромный толчок для построения юзабельных интерфейсах.
2. «Разработка потребует 2 недели» – страшное заблуждение
Если работает на практике, то каких результатов достигли?
Стал тратить меньше времени на проектирование и гораздо меньше времени на реализацию за счет понимании логики и событийной модели. Кроме того понял как можно эмулировать технологии ООП, что позволило увеличить повторное использование кода. Кроме того результатом стало то, что в коллективе я стал источником инновации и экспериментов при решении задач.
Насколько удобен формат обучения по сравнению с очным форматом?
Очный формат проигрывает по всем статьям кроме одного – размеренности. Взятый темп очень тяжело выдержать в условиях нормальной занятости на работе. Во всем же остальном просто прекрасно. К любой лекции можно вернуться, обратная связь с преподавателем просто отличная.
Постараюсь в ближайшие дни сделать вам запись живого голоса, чтобы и эмоции передать. А пока хочу сказать спасибо за проделанную работу. С нетерпением жду открытия продаж продвинутого курса.
Евгений, спасибо за ответы на вопросы.
Зачисляю вас в финалисты базового курса и поздравляю с этим!!
Заметил ошибку в Шаге 1. Вместо
Если Выборка.КолДок = Выборка.КолОст Тогда
Запись.Сумма = Выборка.СумОст;
следует поставить
Если Запись.Количество = Выборка.КолОст Тогда Запись.Сумма = Выборка.СумОст;
Т.е. если списываем всё оставшееся количество (пусть меньшее, чем в документе), то нужно списать и всю оставшуюся сумму.
Ок !
Вторая часть ДЗ
http://infostart.ru/forum/messages/forum26/topic35183/message390024/?result=edit#message390024
По второму шагу – зачет.
Отчет по Шагу 2 “Помощь ближним”:
http://forums.kuban.ru/forum/viewtopic_new.php?t=3093086&pf=1&all=all
Пост 11 от 10.09.2010 – 18:12
Шаг 2. Принимается.
Далее продолжу с легкого )), отвечу на третий пункт:
Часть третья:
Что нового Вы узнали из базового курса по программированию?
Базовый курс я полностью не прошел, прошел около 70 %. Ранее работал и работаю с 8.1. Для меня новым было использование конструкций компиляторов модулей, их связь. Так же интересна работа с формами, вызов команд, настройка интерфейсов. Разобрался в самих объектах метаданных – для чего же каждый из них предназначен, ранее не мог понять зачем, например, нужен СправчникМенеджер и СправочникОбъект. Самое же интересное, что я узнал это сама технология программирования. Т.е. как правильно нужно думать, с чего начинать, именно как правильно продумать код чтобы не загружать систему лишний раз, собственно говоря, чтобы написать так чтобы самому понравилось . До этого, думаю что программирование я знал поверхностно, сейчас узнал много тонкостей, пытаюсь «видеть» ход работы программы, понимать что она делает в каждый конкретный момент. Тогда становится понятна сама логика, удается избежать многих ошибок. В Курсах я увидел как должен программист профессионально программировать и правильно думать, это наиболее ценное, и думаю, еще не скоро появятся подобные курсы у кого-то еще.Твердо намерен проделать все домашние задания, несмотря на то что вы обещаете закрыть коменты, но все самое основное уже есть в Сессиях и в Темах МГ, а так же в коментах выполнивших ДЗ. Поэтому вопросов практически не возникает, так как практически все подсказки есть в видеоуроках, многие смотрю по несколько раз. Так же понравились очень выступления по монетизации, очень все упорядочилось в голове, по-другому стал смотреть на волнующие вещи, более трезво и ясно. С нетерпением жду следующих выпусков. Бонусы тоже очень радовали. Хочу поблагодарить за сам подход – верно было подмечено, что это то о чем мы долго мечтали, но никому не говорили )). Очень приятно, что подход серьезный, что готовились заранее, а не с бухты-барахты и не галопом по Европе, множество материалов и большая глубина освещаемых вопросов. Радует именно то, создатели курса не поставили целью для себя ободрать как липку студентов, а именно донести полноту информации, обогатить знаниями, и не только донести их, но и закрепить.
От каких заблуждений избавились?
От того, что никогда не научусь программировать )), это правда. Появился оптимизм, уверенность, что смогу выполнить, если потребуется и сложное задание.
Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
вам удалось применить новые навыки (какие результаты были достигнуты);
Стал больше программировать, стал понимать логику работы программы, куда смотреть, чтобы достичь желаемого. Стал быстрее выполнять задачи, не терять время на изучение базовой теории. Стал активнее пользоваться синтаксис-помощником и горячими клавишами, научился читать справку. 8.2 у себя пока еще не внедряли, но переход не за горами. А переводить есть что, есть самописная упр. База, так что скоро придется хорошенечко поработать.
Если Вы пока не работаете реальных проектах по внедрению решений на
«1С:Предприятии 8», то, что оказалось неожиданным из материалов курса?
Неожиданным оказалась быстрота с которой преподаватели в тестовых примерах решали поставленные задачи. То, на что ранее тратил часы, на моих глазах решалось за несколько минут. Это является для меня эталоном, то есть планкой, к которой нужно стремиться. Быстрота и эффективностью Ранее, когда я работал у франчайзи остро ощущалась нехватка квалифицированных программистов, для выполнения простой задачи приходилось тратить по полдня, а иногда и более.
Насколько удобен, оказался формат обучения в сравнении с очным форматом? Формат обучения удобен. То, что я отстаю – больше сам виноват. Тем не менее понимаю, чтобы действительно в срок все сделать, прослушать все материалы, нужно тратить на обучение не менее 5 часов в день, они у меня не всегда есть. В любом случае, разрыв мог бы быть по крайней мере вполовину меньше. С другой стороны такой темп обучения заставляет мобилизоваться и не отставать. То есть этот процесс не вяло текущий, он активный. Думаю, что одной из причин выбранного темпа – было расшевелить «ленивых» программеров. Очный формат считаю затратным и малоэффективным. Всегда нужно время чтобы осмыслить и продумать полученную информацию, понять как применить. Если исходить от обратного хочу сказать , что при заочном формате обучения не считаю что мы вообще что-то пропустили.
Игорь, спасибо за развернутые ответы!
Пока не вижу отчета по шагу 2, сообщите как у вас успехи в этом направлении.
Дополнение к части первой: Чтобы сделать поле «Номер серии» в справочнике «Серии» обязательным для заполнения, необходимо открыть стандарные реквизиты справочника и для поля Код установить занчение поля Проверка Заполнения в значение “Выдавать ошибку”.После этого пользователь не сможет записать элемент с пустой серией.
Все верно!
Часть первая:
1.{Документ.ПокупкаТоваров.Форма.ФормаДокумента.Форма(4,18)}: Переменная не определена (Справочники) Объект.Клиент = <>Справочники.Клиенты.ОсновнойПокупатель; – Обращение из клиента к объекту СправочникМенеджер, который недоступен на клиенте. Предложение – производить это действие на сервере. Нужно создать серверную (без контекста) Функцию, которая бы возвращала объект, а на клиенте уже бы присваивалось значение через возвращаемую переменную.
2. Документ.ПокупкаТоваров не формирует движения по регистру ТоварыНаСкладе. В Модуле объекта, в процедуре ОбработкаПроведения забыли добавить строчку Движения.ТоварыНаСкладе.Записывать = Истина;
3. Документ.ПокупкаТоваров – на форму не выведена команда ЗаполнитьТовары
4. Документ.ПокупкаТоваров, после вывода кнопки «Заполнить Товары» на форму, при нажатии на эту кнопку выдается ошибка. Необходимо Тип(“Документ.ПокупкаТоваров”) заменить на Тип(“ДокументСсылка.ПокупкаТоваров”).
5. Документ.ПокупкаТоваров ФормаДокумента процедура ЗаполнитьТоварыНаСервере должна быть просто &НаСервере, а не &НаCервереБезКонтекста. Сама процедура ЗаполнитьТоварыНаСервере должна быть изменена. Так как Объект уже известен, его нет необходимости передавать. Строку Объект = ТекущийДокумент.ПолучитьОбъект(); нужно удалить. Так как для Объект.Товары доступен метод Загрузить, необходимо использовать этот метод. Строку ДокументОснование.Товары нужно заменить на ДокументОснование.Товары.Выгрузить().
6. Документ ПродажаТоваров не указан как регистратор для регистра ТоварыНаСкладе.
7. Документ ПродажаТоваров, в табличной части нет связи Серии и Товара по владельцу, т.е. нужно заполнить поле СвязиПарметровВыбора, установив отбор по Владельцу – Товар
8. Поле Сумма в табличной части документа ПродажаТоваров нигде в движениях не используется. Видимо речь идет о сумме продажи, исходя из названия документа. Для учета суммы продажи необходимо заводить отдельный регистр, аналогичный ТоварыНаСкладе, только название другое.
9. В Модуле объекта, документ ПродажаТоваров в процедуре ОбработкаПроведения в запросе в необходимо задать параметр &МоментВремени и установить его значение позицией момента времени из ссылки документа. В Запросе лучше вместо итогов использовать группировку, тогда не нужно будет делать несколько обходов запроса, а достаточно сделать один. Группируем по товарам и по сериям, количество и суммуостаток суммируем , а КолОст –не суммируем а устанавливаем МАКСИМУМ(ТоварыНаСкладеОстатки.КоличествоОстаток) КАК КолОст, Соответственно, в обходим запрос уже в одном цикле, по группировкам не надо обходить, так как мы уже получаем итоговые записи по товару и по сериям. Запрос станет проще. По КолОст – проверяем, достаточно ли товаров для списания.
10. При проведении документа ПродажаТоваров с количеством товара превышающем на складе движения документа формируются, на самом деле документ не должен проводиться.
11. Так же, для того, чтобы не создавались пустые записи в регистре ТоварыНаСкладе, формировать движения по регистру нужно только при выполнении условия ОсталосьСписать > 0
12. В регистре ТоварыНаСкладе для измерений необходимо проставить запрет незаполненных значений.
13. В Документах ПродажаТоваров и ПокупкаТоваров необходимо проставить обязательное заполнение реквизитов табличной части Товар и Серия. В Модуле объекта определить процедуру ОбработкаПроверкиЗаполнения () и там описать что в случае незаполненных реквизитов Отказ = Истина;.
14. Документ Продажа товаров, кнопка «Проверка документов» неверно реализован механизм. Во-первых, на сервере нельзя выдавать предупреждение. Во-вторых, запросом проверяется уже записанный документ, а отрицательное количество может быть в незаписанном документе. Поэтому было бы правильно реализовать механизм проверки на самом клиенте, перебирая данные коллекции Объект.Товары , и оттуда брать значение количества.
15. Документ ПродажаТоваров, модуль объекта, синтаксическая ошибка в сообщении: «Недостаточно товава»
16. Не информативно настроен рабочий стол пользователя, командная панель. Не используются подсистемы, как следствие бедный интерфейс Нужно добавить хотя бы одну подсистему, вывести кнопки создания новых документов, настроить рабочий стол. Так же нет ролей, прав, их так же необходимо внести и разработать.
17. Кроме того для работы с конфигурацией не хватает отчетов по движению и остатков товаров, журналов документов. Сами остатки товаров правильнее было хранить еще в разрезе мест хранения, для этого в регистре ТоварыНаСкладе нужно было бы предусмотреть измерение Склад. Судя по названию регистра, он должен там быть .
п. 9
>В Запросе лучше вместо итогов использовать группировку
А вообще группировку лучше делать в вложенном запросе, а еще лучше – во временной таблице.
По остальным пунктам согласен. Шаг 1 – принято.
Мои впечатления и мысли по поводу обучения
-10 лет я работала с самописной конфигурацией на платформе 7.7. Сейчас на горизонте маячит переход на восьмерку,и я пытаюсь ее освоить.
– Прежде всего, обращает на себя внимание добротность предложенного материала.
– Преподаватели курса имеют большой практический опыт и проявляют удивительную щедрость, делясь им,и подробно показывая и рассказывая,как и что надо делать.
– Ни один курс, предполагающий очную работу преподавателя, не может обеспечить такой большой объем материала.
Данный Базовый курс включает около 80 часов лекций. Стандартный вузовский семестровый курс предполагает 34 часа
лекций из расчета 2 часа в неделю. Таким образом, мы получили объем лекционного материала, соответствующий 2.5 семестрам. И это без учета разбора дополнительных тем.
Большой объем позволяет рассматривать все очень подробно, останавливаясь на самых незначительных деталях.
То есть мы имеем, по сути энциклопедический материал по данному вопросу.
Были рассмотрены темы, которые обычно во всех руководствах обходят стороной, но которые в практической деятельности важны – работа с файлами, с бинарными данными и тд. При этом даже там, где я разобралась
самостоятельно раньше, в ходе лекции узнала новые подробности и приемы.
– Упор в лекциях сделан на практическое применение. Все мы читали документацию. Но из нее не всегда можно понять, где и как использовать заявленные методы и свойства. А в лекциях не только рассказывают, но и сразу все подробно показывают на примерах.
– Лекции читаются понятным языком, без “зауми”, сложные вещи объясняют просто. Когда-то один профессор говорил,
что только тот, кто сам хорошо понимает, о чем речь, может и другим объяснить просто.
– Удачным решением является разбивка материала на небольшие фрагменты. Маленькие порции информации легче
воспринимаются, к ним можно вернуться потом, просмотреть еще раз. Прервать занятия, а затем вернувшись, точно спозиционироваться на месте останова. Удобно.
– Во время лекций создается полное впечатление присутствия. Задачу решают здесь и сейчас. Это очень важно.
Мастер пустил нас в свою мастерскую, и мы можем видеть, как все происходит на деле.
Для меня было полезным наблюдать за приемами работы и отладки. Синтаксис-помощник сильно развился и работа с ним
теперь не такая очевидная как раньше. Тоже можно сказать и об отладке.
– Важной частью обучения была работа с вопросами слушателей. Приятно отметить, что уделялось внимание всем вопросам. Даже самым примитивным. Хорошо, что доступны не только ответы на мои вопросы, но и на вопросы остальных. Очевидно, что если сейчас этот вопрос не возник, то он может возникнуть позже. Чем опытнее слушатели,тем интересней вопросы. Причем, важна оперативность, с которой поступают ответы преподавателя. Сессии с ответами
проводились трижды в неделю.
– Я впервые столкнулась с обучением в мастер-группе. Это, безусловно, очень эффективная форма.Ни одна очная форма не может предоставить такого внимательного отношения к каждому слушателю.
У нас аудитория собралась неоднородная, с различным исходным уровнем знаний и опыта. Работа с такой аудиторией для преподавателя всегда представляет сложность. Тем не менее, у обучаемого возникает впечатление, что учебный
процесс настроен именно на него.
– Для меня очень интересным был процесс создания универсальных документов и их отладка. Работа с ними крайне неприятна, но в типовых конфигурациях они встречаются постоянно.
– Новым было все, что связано с управляемыми формами и особенностями работы с 8.2
– Также уточнила некоторые подробности решения расчетных задач. С расчетами на практике раньше сталкиваться не приходилось.
-Для улучшения обучения может быть стоит издать лекции в виде книги. Ее хорошо использовать в качестве справочника.
– С нетерпением жду продвинутого курса.
Загорская Татьяна Федоровна, кандидат наук, доцент
Москва
10.09.2010
Татьяна Федоровна, спасибо за детальное изложение.
В свою очередь, поздравляю вас, как финалиста базового курса, и желаю успехов в работе!!
Господа, а пойдет в зачет второй части это:
http://forums.kuban.ru/forum/viewtopic_new.php?t=2721675&pf=2&all=all&sort=13
Просто вот так сразу в сообществе найти проблему сложно…
Шаг 2 принимается.
4. Евгений, Фарит. Спасибо огромное за весь этот курс. Я давно искала толковую информацию по программированию. Информации на удивление мало. А бОльшая часть того, что есть, является разновидностью стандартных книг по языку, предоставляемых фирмой 1С. Я считала, что большинство программистов с 7-ки легко переходят на 8-ку самостоятельно, поэтому в таких курсах, книгах и т.д. просто нет необходимости. Как оказалось – есть. Данным курсом Вы не то, что удачно заняли нишу. Вы её попросту создали.
На тему эмоций, про которые Вы говорили в орг.видео.
Я не оставляла комментарии в темах по монетизации и пожеланий. У меня ситуация, не сильно отличающаяся от других. А повторять уже сказанное нет смысла. Это пользы не принесет. Но хочу сказать вот что.
Я стандартный наемный работник, занимающийся 1с-кой “от.. и до..”. От выяснения мыслей и потребностей пользователя до приема благодарного “Спасибо!”. (Лирическое отступление: на работе меня зовут Катерина, и никогда, даже за спиной, не называют “наш программист”. И на различных совещаниях говорят не “надо спросить у программиста”, а “надо спросить у Катерины”. Про это еще весной говорил Фарит.) Есть несколько калымных контор, требующих моего присутствия с очень разной периодичностью.
По жизни у меня нельзя сказать, что всё замечтательно. Но в пределах моих возможностей всё идет так, как я считаю нужным. У меня нет ничего, чтобы мне прям вот требовалось бы изменить. Всё, что требовалось, я уже изменила. Но в голове давно сидит тема, что работать надо самостоятельно. Чтобы количество работы, время работы и т.д. можно было определять самостоятельно. Идеальным вариантом был бы тандем с программистом, который не терпит работу с пользователями. В этом случае мы были бы спасением друг для друга. И в глубине мозга сидит мысля, что это и есть то, что еще надо менять в жизни. Что нет свободы. В том её понимании, что человек свободен, когда может не делать то, чего не хочет. Вот не хочу я вставать рано утром (не по мне это), а приходится. В мире столько еще мест, в которые хочется съездить, а отпуск всего два раза в год. Ну и т.д.
Я не жалуюсь никогда и ни на кого не обижаюсь. Так что негативных эмоций эта нереализованная мысля мне не доставляет. Она как-то существует сама по себе. Но когда в видео по Проектированию информационного продукта к запуску Фарит говорил о том, что у каждого оплатившего курс есть подспудная мечта, та, ради которой всё и происходит, я задумалась.
Зачем я связалась с этим курсом? Думала-думала. И поняла, что нет её – подспудной мечты, ради которой изучаю программирование. Умение кодировать для меня – это инструмент, помогающий решать более глобальные задачи (например, по автоматизированию учета) в той конторе, в которой я работаю уже 7 лет. Из тех мечтаний, которые перечислял Фарит, я каждое примеряла на себя.
Мне не требуется повышать свою квалификацию только для того, чтобы вырасти по служебной лестнице (у меня её попросту нет. Из 1с-ников я тут одна. Хоть в трудовой у меня и записано громкое “начальник отдела информационных систем”).
Мне не приходится добиваться признания у сослуживцев. Оно и так огромно. Никто передо мной не заискивает, не льстит ни в чем. Но от уборщицы, до ген. директора холдинга все здороваются по имени. “Здравствуйте, Катя” или “привет, Катюш”. В день рождения я не стала и начинать работать, потому что были постоянные звонки с поздравлениями от сотрудников.
У меня нет острой потребности в деньгах. Зарплата у меня в два раза больше, чем средняя. У части своих знакомых я занимаюсь 1с-кой бесплатно. (Когда меня просят помочь, я помогаю. А за помощь деньги не берут.)
Единственное, что у меня в голове могло быть – это как раз та мысль о своей работе. Но ведь если мне что-то надо, то я просто пытаюсь этого добиться. А если до сих пор я ничего не сделала для её осуществления, значит, оно мне и не надо. И все мои мысли на тему “мне плохо. я не свободна” какие-то вялые.
На самом деле я осознанно работаю по этой профессии. За свою жизнь я успела перепробовать 9 разных специальностей. Эта мне подходит больше всего. Причем именно в этой фирме. Здесь есть масштабы и разнообразие потребностей. Здесь отличный коллектив. Умное, грамотное, человечное руководство. Люди, способные поставить интересные задачи.
Фарит говорил, что мерилом востребованности может служить размер ресурсов, которые получаешь от окружающего мира. По всем критичным для меня вопросам этих ресурсов достаточно. Вставать утром рано? Ну выбила я себе график работы на полчаса позже, чем у всех. Отпуск? Езжу три раза в год (летом в горы, зимой в горы. Плюс новогодние каникулы). Денег не хватает? Года два назад я подумала, что что-то мне не так в жизни, и решила по старой привычке для разнообразия работу поменять. Когда до начальства дошли слухи о том, что я хочу уйти, мне существенно подняли зп. И т.д.
А еще я уже три года отказываюсь от предложений перейти на другую работу. Я осознанно работаю именно в этой фирме, именно по этой специальности. Мне очень хочется осилить проект по УПП с её распределением затрат и бюджетированием, с путанным ведением бух. и упр. учета по всем фирмам в одной базе.
То бишь у меня всё хорошо. И нечего той мыслЕ глодать меня. У всех свои потребности и возможности. Для кого-то работа в офисе по трудовой книжке – дурацкая каторга, отголосок нашей русской традиции: крепостного права. Ну так каждому своё.
Для меня это еще один огромный результат от прохождения курса.
Каждому свое :))
Спасибо за философские мысли.
Екатерина вас поздравляю с поднятием на еще одну ступеньку – финалист базового курса.
Добрый день…
Выкладываю ошибки, обнаруженные в тестовой конфигурации
1.
Инициализация ошибки:
Синтаксический контроль модулей.
Объект:
ОбщийМодуль.ПроверкаДокументовСервер.Модуль(21,3)
Ошибка:
Процедура или функция с указанным именем не определена (Предупреждение)
Комментарий:
Общий модуль «ПроверкаДокументовСервер» имеет признак выполнения на сервера, команда предупреждение имеет доступность «Тонкий клиент, веб-клиент, толстый клиент»
Исправление:
а) у общего установить дополнительно флажок «Клиент» (только ради предупреждения не целесообразно).
б) вынести предупреждение в другой общий модуль или выполнить в контексте формы, откуда вызвана процедура
в) изменить способ оповещения пользователя, например на метод «Сообщить»
2.
Инициализация ошибки:
Синтаксический контроль модулей.
Объект:
Документ.ПокупкаТоваров.Форма.ФормаДокумента.Форма(4,18)
Ошибка:
Переменная не определена (Справочники)
Комментарий:
Из процедуры с директивой &НаКлиенте идет обращение к объекту БД «Справочники.Клиенты.ОсновнойПокупатель»
Исправление:
Обращение к объектам БД должно выполняться в серверных функциях модуля или из Серверных общих модулей
3.
Инициализация ошибки:
Синтаксический контроль модулей.
Объект:
Документ.ПродажаТоваров.Форма.ФормаДокумента.Форма(4,2)
Ошибка:
Переменная не определена (ПроверкаДокументовСервер)
Комментарий:
Из процедуры с директивой &НаКлиенте идет обращение к Серверному общему модулю
Исправление:
а) создать в модуле формы серверную процедуру и сделать обращение из нее
б) установить у Общего модуля признак «Вызов сервера»
4.
Инициализация ошибки:
Анализ корректности кода
Объект:
Общий модуль процедура «ПроверитьДокумент»
Ошибка:
В цикле по строкам табличной части вызывается Предупреждение
Комментарий:
В случае если в документе 1000 строк с ошибками клиенту будет необходимо 1000 раз нажимать ОК или ждать 5000 сек.
Исправление:
импользовать метод Сообщить() или класс СообщениеПользователю
5.
Инициализация ошибки:
Анализ корректности кода
Объект:
Общий модуль процедура «ПроверитьДокумент»
Комментарий:
Процедура проверки заполнения формы документа построена на основании запроса к Документу. Т.е. проверяет уже записанные данные. По смыслу задачи нам нужно проверять данные до проверки
Исправление:
Использовать проверку перебором строк в цикле.
6.
Инициализация ошибки:
Анализ формы документа
Объект:
Документ ПокупкаТоваров ФормаДокумента
Ошибка:
Команда «ЗаполнитьТовары» не выведена на форму
7.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПокупкаТоваров, МодульФормы, Процедура «ЗаполнитьТовары»
Ошибка:
3-ий параметр метода ВвестиЗначение — тип выбираемых данных. Тип «Документ.ПокупкаТоваров» – неверный
Исправление:
Указать правильный тип «ДокументСсылка.ПокупкаТоваров»
8.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПокупкаТоваров, МодульФормы, Процедура «ЗаполнитьТовары»
Ошибка:
Если при выполнении команды «Ввести значение» пользователь отказался от ввода, то переменная «Основание» будет по прежнему иметь значение «Неопределено». Далее по коду идет проверка переменной «Основание» на пустую ссылку. Это возможно только у ссылочных типов данных.
Исправление:
Правильной будет такая проверка:
Если ВвестиЗначение(…) Тогда
….
КонецЕсли
9.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ «ПокупкаТоваров», МодульФормы, Процедура ЗаполнитьТоварыНаСервере
Ошибка:
Объект.Товары.Загрузить(ДокументОснование.Товары)
Комментарий:
Объект.Товары — это ТабличнаяЧасть. Метод «Загрузить()» ТабличнойЧасти позволяет выполнить загрузку из ТаблицыЗначений. В качестве парамента передается ДокументОснование.Товары. А это табличная часть, а не ТаблицаЗначений
Исправление:
Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить())
10.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ «ПокупкаТоваров», МодульФормы, Процедура ЗаполнитьТовары
Ошибка:
В вызове процедуры ЗаполнитьТоварыНаСервере в качестве первого параметра передается ссылка на текущий объект. Если документ еще не записан, то ссылка будет пустая.
Исправление:
а) перед вызовом записывать документ
б) Изменить директиву процедуры «ЗаполнитьТоварыНаСервере» на «&НаСервере», опустить первый параметр, т.к. в процедуре будет доступен Объект. След. код процедуры:
ОбъектДокумента = ДанныеФормыВЗначение(ОбъектФормы,Тип(«ДокументОбъект.ПокупкаТоваров»));
ОбъектДокумента.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
ЗначениеВДанныеФормы(ОбъектДокумента, ОбъектФормы);
11.
Инициализация ошибки:
Анализ настроек объектов конфигурации
Объект:
Документ ПродажаТоваров
Ошибка:
Не выбран регистр, по которому будут проводится движения документа
Исправление:
Установить флаг проведения по регистру ТоварыНаСкладах
!!!Ошибочка!!!
Правильный текст:
12.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПродажаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
В запросе, в таблице ПродажаТоваровТовары нужно не указан отбор по текущему документу
Комментарий:
В выборку запроса попадут данные из всех документов ИБ
Исправление:
Добавить условие:
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылкауказать параметр «Период»
13.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПродажаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
В запросе, в таблице ТоварыНаСкладахОстатки не указана дата получения остатков
Комментарий:
В выборку будут включаться только актуальные остатки товаров, а не остатки на момент перед проведением документа
Исправление:
В параменты виртуальной таблицы РегистрНакопления.ТоварыНаСкладе.Остатки указать параметр «Период»
14.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПродажаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
Итоги в запросе
Комментарий:
Разработчик в секции «ИТОГИ» получает итоги по Товару, тогда как в постановке задачи указано, что контроль нужно вести в разрезе и Товаров и Серий. А также в поле суммы не указана стоимость
Исправление:
ИТОГИ
СУММА(КолДок),
СУММА(КолОст),
СУММА(СумОст)
ПО
Товар,
Серия
В целом запрос нужно весь переписать. Вместо Итогов предпочтительнее было бы использование Группировки в отчете. Тогда можно сразу определить отрицательные остатки, рассчитать стоимость списаваемого товара
15. Еще ошибка в запросе
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПродажаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
Соединение в запросе
Комментарий:
В запросе используется ВНУТРЕНЕЕ СОЕДИНЕНИЕ между таблицами. Т.о. если товара на остатках 0, то в выборку эта позиция не попадет
Исправление:
Использовать ЛЕВОЕ СОЕДИНЕНИЕ
16.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПродажаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
Обработка данных запроса. Проверка по количеству ведется на уровне группировки «Товар»
Комментарий:
В поставленной задаче нужно вести учет по товару и по сериям
Исправление:
Проверку нужно вести на уровне второй группировки «Серия»
17.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПродажаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
Обработка данных запроса. Ведется постепенное списание Серий от общего количества по Товару
Исправление:
Необходимо четко списывать остаток по реквизитам Товар, Серия
18.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПродажаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
При определении ошибки по нехватке товара, не выполняется отказ от проведения
Комментарий:
Документ сообщит о нехватке, но все равно проведется. Кроме специфичных случаев — эта ситуаций неприемлема
Исправление:
При обнаружении ошибки выставлять:
Отказ = Истина
19.
Инициализация ошибки:
Анализ корректности кода
Объект:
Документ ПокупкаТоваров МодульОбъекта
Процедура ОбработкаПроведения
Ошибка:
Не выставляется флаг записи регистра
Исправление:
Добавить строку:
Движения.ТоварыНаСкладе.Записывать = Истина;
20.
Инициализация ошибки:
Анализ настроек
Объект:
Документ Продажа товаров. Реквизит ТЧ – Серия
Ошибка:
Не указана Связь параментов выбора
Исправление:
Заполнить свойство реквизита «Связи параметров выбора»: «Отбор.Владелец(Товары.Товар)»
Просьба Вилоы Григорьевны:
Справочник «Серии» – Модуль объект – Добавляем процедуру:
Процедура ПередЗаписью(Отказ)
Если ПустаяСтрока(Код) или Код = 0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = «Не заполнен номер сертификата»;
Сообщение.Поле = «Код»;
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры
п. 2. Или использовать неявный серверный вызов – ПредопределенноеЗначение(…)
п. 10. А почему бы не такой вариант:
Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
По остальным замечаниям согласен на 100%.
По шагу 1 – зачет!
Алексей, не вижу шага 2 и 3..
Часть 2
Провел 09.09.2010 для коллег доклад/мини-семинар по теме “Фишки 1С Предприятия 8.2”.
Был мандраж, т.к. были товарищи, которые гораздо лучше меня разбираются в программировании на платформе 1С Предприятие 8. Доклад проводился во время еженедельного собрания сотрудников, поэтому был лимит времени в 20 минут.
Фото с мероприятия остались?
Отправил на Spec8.RU DOG gmail.com
Отлично!
Теперь могу вас поздравить с успешным окончанием базового курса. Вы – финалист :)
Часть 1.
Ошибка №1.
Процедура «ПроверитьДокумент» общего модуля «ПроверкаДокументовСервер»
В обходе в результатов запроса используется метод глобального контекста «Предупреждение».
Данный метод не подходит по двум причинам:
1. Не может быть вызван на сервере
2. Вывод предупреждения происходит путем вывода модального окна. Для пользователей это будет слишком жестко)))
Решение: Использовать класс «СообщениеПользователю»
Ошибка №2.
Процедура «ПроверкаДокументов» модуль формы документа «ПродажаТоваров»
Вызов из клиентской процедуры процедуры общего модуля, компилируемого только на сервере.
Решение: либо поставить флажок «Вызов сервера» в свойствах общего модуля, либо в модуле формы создать серверную процедуру и из нее осуществлять вызов общего модуля.
Ошибка №3.
Реквизит «Серия» документ «ПродажаТоваров»
Не заполнено свойство «Связи параметров выбора»
Решение: заполнить свойство значением отбора по реквизиту «Товар»
Ошибка №4.
Процедура «ПроверкаДокументов» модуль формы документа «ПродажаТоваров»
При вызове данной процедуры не учитываются изменения, которые были сделаны пользователем в табличной части «Товары», но еще не были записаны в информационную базу.
Решение: принудительная запись документа в базу перед вызовом процедуры «ПроверитьДокумент» общего модуля «ПроверкаДокументовСервер
Ошибка №5.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
Документ может проводиться в «минус».
Решение: в условии «Если Недостача>0 Тогда» необходимо установить параметр «Отказ» равным «Истина»
Ошибка №6.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
В запросе необходимо поставить условие на табличную часть документа.
Решение: |ГДЕ
| ПродажаТоваровТовары.Ссылка = &Ссылка.
Ошибка №7.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
В запросе используется внутренне соединение между таблицами регистра накопления и табличной части.
Решение: Необходимо использовать левое соединение по табличной части.
Ошибка №8.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
В запросе нет обработки на появления значения NULL для данных, получаемых из регистра накопления.
Решение: | ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0) КАК КолОст,
| ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0) КАК СумОст.
Ошибка №9.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
В запросе в виртуальную таблицу остатков не передается параметр «Период».
Решение: задать параметр &МоментВремени. В установке параметров запроса добавить строку:
Запрос.УстановитьПараметр(“МоментВремени”, МоментВремени());
Ошибка №10
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
В параметр «Условие» виртуальной таблицы остатков необходимо наложить условие на серию. В результате условие будет выглядеть следующим образом:
Товар В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ПродажаТоваровТовары.Товар
ИЗ
Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка)
И Серия В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ПродажаТоваровТовары.Серия
ИЗ
Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка)
Ошибка №11.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
Перед выполнением запроса не удаляются движения текущего документа из регистра накопления.
Решение: Движения.ТоварыНаСкладе.Очистить();
Движения.ТоварыНаСкладе.Записать();
Ошибка №12.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
В строке:
Запись.Сумма = ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество;
есть возможность получения деления на ноль.
Решение: ?(ВыборкаСерии.КолОст = 0,0,ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество)
Ошибка №13.
Процедура «ОбработкаПроведения» модуль объекта документа «ПродажаТоваров»
В тех. задании сказано, что учет количества и суммы ведется в разрезе товара и серии. При формировании запроса это требование не отражено.
Решение: Необходимо добавить в запрос итоги по серии. Доработать обход результата запроса с учетом добавления итогов по сериям.
Ошибка №14.
Процедура «ЗаполнитьКлиента» модуль формы документа «ПокупкаТоваров»
Обращение к базе данных из клиентской процедуры.
Решение: создать серверную процедуру и в ней обращаться к базе данных.
Ошибка №15.
Реквизит «Количество» документ «ПокупкаТоваров»
Тип реквизита «Строка»
Решение: поменять тип реквизита на «Число», длина 15, точность 3.
Ошибка №16.
Процедура «ЗаполнитьТовары» модуль формы документа «ПокупкаТоваров»
Неверный параметр функции «Тип»
Решение: в качестве параметра должна быть задана строка «ДокументСсылка.ПокупкаТоваров»
Ошибка №17.
Процедура «ЗаполнитьТовары» модуль формы документа «ПокупкаТоваров»
При вызове данной процедуры в новом не записанном документе ссылки на документ еще нет, будет выходить сообщение об ошибке.
Решение: выводить вопрос о необходимости записи документа в базу. При утвердительном ответе записывать новый документ.
Ошибка №18.
Процедура «ЗаполнитьТоварыНаСервере» модуль формы документа «ПокупкаТоваров»
В качестве параметра метода «Загрузить» передается табличная часть.
Решение: вместо «ДокументОснование.Товары» необходимо написать «ДокументОснование.Товары.Выгрузить()»
Ошибка №19.
Процедура «ЗаполнитьТоварыНаСервере» модуль формы документа «ПокупкаТоваров»
Код :
Объект = ТекущийДокумент.ПолучитьОбъект();
Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
подразумевает под собой, что заполнение табличной части происходит непосредственно в документе-объекте. После успешного выполнения данного кода пользователь ничего не увидит в форме документа.
Решение: изменить процедуру «ЗаполнитьТоварыНаСервере» следующим образом:
&НаСервере
Процедура ЗаполнитьТоварыНаСервере(ДокументОснование)
Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
КонецПроцедуры // ЗаполнитьТоварыНаСервере()
При этом у нас попутно отпадет необходимость в решении проблемы №10.
Ошибка №20.
Процедура «ЗаполнитьТовары» модуль формы документа «ПокупкаТоваров»
Заполнение табличной части происходит вне зависимости от того, есть в ней данные или нет.
Решение: необходимо предусмотреть проверку на заполненность табличной части с возможностью отказа от дальнейшего выполнения процедуры. (пользователь случайно вызвал процедуру заполнения табличной части в правильно заполненном документе)
Ошибка №21.
Документ «ПокупкаТоваров»
Команда «ЗаполнитьТовары» не выведена в форму документа. Возникает вопрос в целесообразности нахождения данной команды и процедур «ЗаполнитьТовары» и «ЗаполнитьТоварыНаСервере» в документе.
Решение: Либо вывести данную команду на форму документа, при условии ее необходимости, либо удалить «лишние» команды и процедуры.
Ошибка №22.
Процедура «ОбработкаПроведения» модуль объекта документа «ПокупкаТоваров»
Не формируются движения по регистру накопления «ТоварыНаСкладе»
Решение: установить свойство «Записывать» регистра накопления в значение «Истина»
Ошибка №23.
Движение по регистру накопления «ТоварыНаСкладе» формирует только документ «ПокупкаТоваров».
Решение: добавить в качестве регистратора для регистра накопления документ «Продажа товаров».
Ошибка №24.
Ресурс «Количество» регистр накопления «ТоварыНаСкладе»
Точность реквизита = 2.
Решение: поставить точность реквизита в значение 3.
Для главного бухгалтера компании Виолы Григорьевны:
Открыть список стандартных реквизитов справочника «Серии», открыть свойства реквизита код и установить значение свойства «Проверка заполнения» в позицию «Выдавать ошибку»
>Ошибка №4.
Более гуманно модифицировать алгоритм проверки.
>Ошибка №9.
Желательно не забыть, что документ может проводиться оперативно, тогда передавать параметр Неопределено.
>Ошибка №10
При таком условии будут выбираться лишние данные.
Правильнее: (Товар, Серия) В (Выбрать …)
По всем остальным пунктам – согласен.
Шаг 1 – 100% зачет.
Отчет по первой части:
Сначала то, что несколько резануло глаза: Привык на 8.2 все вязать к подсистемам, поэтому отсутствие подсистем, а, как следствие, не очень симпатичный управляемый интерфейс бросается в глаза. Так или иначе сразу поправил бы, а то никакой логики в интерфейсе.
Итак ошибки.
1. Документ «Покупка товаров».
1.1 У реквизита «Количество» табличной части «Товары» ошибочно указан тип данных «Строка» – меняем на тип данных «Число» дл.15 точ.3;
Реквизитам табличной части «Сумма» и «Количество» можно установить флаг «Неотрицательное».
1.2 Непривычно не видеть в табличной части реквизита «Цена»… В принципе ошибкой не является.
1.3 Документов не формируются движения. Причина: в обработке проведения не установлен флаг записи набора движений. Добавляем строку «Движения.ТоварыНаСкладе.Записывать = Истина».
1.4 Само формирование движений в обработке проведений не учитывает возможности наличия в документе строк с одинаковыми парами Товар+Серия. Логичнее было бы свернуть ТЧ документа по полям «Товар,Серия». Так и сделал – выгрузка ТЧ в ТЗ, свертка ТЗ, загрузка ТЗ в таблицу движений.
2.Документ ПродажаТоваров.
2.1 Документ не является регистратором для регистра накопления «ТоварыНаСкладах» – В свойствах документа или в свойствах регистра проставляем необходимую галочку: добавляем документ в список регистраторов.
Реквизитам табличной части «Сумма» и «Количество» можно установить флаг «Неотрицательное».
2.2 Ошибки в процедуре «ОбработкаПроведения»:
В запросе:
2.2.1 Лучше сперва поместить в виртуальную таблицу табличную часть документа сгруппировав строки по номенклатуре и серии – чтобы избавиться от дублей.
2.2.2 В параметрах виртуальной таблицы «ТоварыНаСкладеОстатки» в накладываемом условии “Товар В(ВЫБРАТЬ…)” в запросе списка товаров добавляем слово РАЗЛИЧНЫЕ, т.е. “Товар В (ВЫБРАТЬ РАЗЛИЧНЫЕ …)” – ускорит выборку.
2.2.3 Для виртуальной таблицы «ТоварыНаСкладеОстатки» не указан и не задан параметр «Период» – указываем его в параметрах, и после запроса устанавливаем в него значение МоментВремени() документа.
2.2.4 Нет проверки запрашиваемых полей виртуальной таблицы «ТоварыНаСкладеОстатки» на значение типа NULL – загоняем эти поля в функцию ЕстьNULL(ИмяПоля, 0).
2.2.5 Связь двух используемых таблиц: ПОЛНОЕ СОЕДИНЕНИЕ, хотя здесь нужно ЛЕВОЕ СОЕДИНЕНИЕ – указываем левое соединение.
2.2.6 Из-за итогов в запросе контроль остатков ведется в разрезе только товаров, серии не учитываются. Т.е. возможен косяк: есть «Товар1 серия1 100шт», «Товар1 серия2 100шт». Продаем «Товар1 серия1 150шт», «Товар1 серия2 30шт» – и все успешно продастся – это ошибка. Изменил запрос: убрал итоги, свел все к обычному линейному обходу, контроль остатков сделал на пару Товар+Серия.
2.2.7 В случае недостачи товара сообщение выдается, но отказа от проведения и продолжения цикла нет, а значит даже если возникает ошибка, идет попытка создания записей, которая, в свою очередь, будет неудачной. Для исправления в случае возникновения недостачи устанавливаем «Отказ=Истина» и ниже, «Если Отказ Тогда Продолжить; КонецЕсли;»
2.2.8 Есть попытка привязки сообщения о нехватке товара к конкретной строке. Но ошибка в строке “Сообщение.Поле = “Товары.Количество”;”. Чтобы все заработало нужно указать индекс конкретной строки к которой привязываем сообщение, например “Сообщение.Поле = “Товары[3].Количество”;”. Для этого нам нужно дописывать индекс строки ТЧ, а для этого в запросе нужно вытащить еще и номер строки табличной части, чтобы можно было указать индекс строки как (НомерСтроки-1).
В запросе добавляем поле «ДокТЧ.НомерСтроки». Исправляем код: «Сообщение.Поле = “Товары[“+Строка(ВыборкаТовары.НомерСтроки-1)+”].Количество”;»
2.2.9 В сообщении об ошибке допущена опечатка: “Нехватка това>>>В<<<а". Исправляем на «Недостаточно товара»
2.2.10 Раз уж контроль ведется в разрезе товар+серия в сообщении о нехватке товара логично добавить и указание на серию. Исправляем: "Сообщение.Текст = "Недостаточно товара "+ВыборкаТовары.Товар+ " номер серии: "+ВыборкаТовары.Серия +" в количестве "+Недостача;"
2.2.11 Не производится очистка движений документа по регистру «ТоварыНаСкладе» до выполнения запроса. При таком варианте при перепроведении документа запрос будет учитывать его собственные движения и выдавать ложные данные об остатках. Исправляем: Добавляем перед запросом очистку и запись пустых движений по регистру остатков.
3. Кнопка «Заполнить клиента» на форме документа «Покупка товаров».
В процедуре «ЗаполнитьКлиента» допущена ошибка обращения к предопределенному элементу справочника на стороне клиента. В результате при работе в тонком клиенте получим ошибку.
Нужно или делать вызов серверной процедуры, которая произведет заполнение, или воспользоваться функцией ПредопределенноеЗначение(): Объект.Клиент = ПредопределенноеЗначение("Справочник.Клиенты.ОсновнойПокупатель");
4. У формы документа «Покупка товаров» определена команда «ЗаполнитьТовары», но она не вынесена на форму. Выносим команду на форму в виде кнопки.
5. В процедуре «ЗаполнитьТовары» допущены ошибки:
5.1 Код "Тип("Документ.ПокупкаТоваров")" не отработает: неверно указана строка описания типа. Нужно "Тип("ДокументСсылка.ПокупкаТоваров")".
5.2 В процедуре «ЗаполнитьТоварыНаСервере» осуществляется попытка загрузки ТЧ документа основания в ТЧ текущего документа. Но код «Объект.Товары.Загрузить(ДокументОснование.Товары)» ошибочен – загружать нужно Таблицу значений, а не табличную часть. Т.е. нужно «Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить())»
5.3 В серверную процедуру «ЗаполнитьТоварыНаСервере» в качестве параметра передается «Объект.Ссылка». Однако, если документ новый, то у него еще нет ссылки – получим ошибку.
Меняем директиву процедуры «ЗаполнитьТоварыНаСервере» с «&НаСервереБезКонтекста» на «&НаСервере». В процедуру передаем только один параметр «Основание». Затем в процедуре преобразуем данные формы «Объект» в прикладной объект. Осуществляем загрузку данных из ТЧ документа основания. И обратно преобразуем прикладной объект в данные формы:
ДокументОбъект = ДанныеФормыВЗначение(Объект, Тип("ДокументОбъект.ПокупкаТоваров"));
ДокументОбъект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
ЗначениеВДанныеФормы(ДокументОбъект,Объект);
6. Кнопка «ПроверкаДокумента» на форме документа «Продажа товаров».
6.1 В процедуре «ПроверкаДокумента» осуществляется вызов процедуры из общего модуля с компиляцией только "Сервер". Для возможности такого вызова необходимо выставить флаг "Вызов сервера" у общего модуля "ПроверкаДокументовСервер".
6.2 В процедуре "ПроверитьДокумент" общего модуля осуществляется попытка вызова функции "Предупреждение", однако данная процедура не доступна на сервере. Заменяем на СообщениеПользователю, которое, к тому же, позволяет привязать ошибку к конкретной строке с отрицательным количеством.
Теперь о просьбе главбуха:
Номер серии – это стандартный реквизит «Код» справочника «Серии». Собственно идем в Стандартные реквизиты справочника «Серии», и там у реквизита «Код» свойство «Проверка заполнения» устанавливаем в значение «Выдавать ошибку». Теперь записать серию с пустым номером не удастся.
Отчет по второй части "Помощь ближним":
http://www.forum.mista.ru/topic.php?id=504141
Yorokonde – это я.
Отчет по третьей части "Обратная связь":
• Что нового Вы узнали из базового курса по программированию?
Кучу нового :) Как уже отписывался по каждому блоку индивидуально – много всяких мелочей и фишек.
Помимо этого блок расчетных и бухгалтерских задач – все в новинку.
• От каких заблуждений избавились?
2 главных мегазаблуждения: "Расчетные и бухгалтерский задачи – это оч сложно" :)
• Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом вам удалось применить новые навыки (какие результаты были достигнуты);
Занимался лишь оперативными задачами, а сейчас вдруг подвернулось внедрение бухгалтерской конфигурации, так что блок бух. задач очень помог. Отдельное спасибо за вводную теоретическую часть по бух учету. Не знал о нем ничего… Азы понял, пока их хватает.
• Если Вы пока не работаете реальных проектах по внедрению решений на «1С:Предприятии 8», то, что оказалось неожиданным из материалов курса?
—
• Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Именно в моем случае намного более удобен.
Собственно всё, надеюсь отчет по первой части не оказался слишком сумбурным… :)
>Логичнее было бы свернуть ТЧ документа по полям «Товар,Серия».
Вот этого я бы делать не стал. Все-таки менять пользовательские данные система должна в крайних случаях. Лучше учитывать дубли в запросе.
Собственно это ниже вы и предлагаете :)
>2.2.3 Для виртуальной таблицы «ТоварыНаСкладеОстатки» не указан и не задан параметр «Период»
Для оперативно проводимых документов лучше и не указывать. Помните МГ?
>2.2.5 Связь двух используемых таблиц: ПОЛНОЕ СОЕДИНЕНИЕ
Если более точно – в текущей реализации внутреннее соединение, что неправильно.
>2.2.9 В сообщении об ошибке допущена опечатка
ОК )))
>ДокументОбъект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
А ведь Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить()); тоже бы сработало?
Шаг 1, 2 – зачет.
Игорь спасибо за ответы на наши вопросы.
Настала очередь вас поздравить со статусом “Финалист базового курса”! Ура )))
Накосячил… Времени было мало, торопился… Буду апать внимательность)
Всех еще разок поздравляю с окончанием базового :)
Ура! Ура! Ура!
з.ы. подписка на комментарии – вещь! :) Намного удобнее читать мегакомменты этой теме в виде писем ))
Список ошибок конфигурации:
1. Нет рабочего стола и вообще не используются преимущества управляемого клиента, тестовые данные заполнены значениями типа «тест», что затрудняет проверку конфигурации.
2. В тонком клиенте не работают формы документов – при разработке похоже о клиент-серверном взаимодействии и доступности типов данных М.Н. не подумал
3. Проведение «Поступления товаров» не делает движений по регистру остатков потому, что при формировании движения для набора записей регистра накопления не устанавливается признака необходимости записи его
4. Документ продажи невозможно провести – в коде происходит обращение к набору движений по регистру, для которого документ не является регистратором
5. У М.Н. нет привычки указывать представления для объектов конфигурации, что замедлит генерацию форм клиентами
6. Справочник товаров/контрагентов не лишне будет сделать иерархическим
7. Формы объектам тоже лучше делать, чтобы не нагружать клиенты их генерацией на лету
8. Для контрагентов было бы неплохо либо завести новый реквизит «ИНН» либо хранить его в коде.
9. При учете серий номер ее должен быть текстовым реквизитом, причин много, основная – возможность применять для текстовых кодов различные префиксы и служебные символы.
10. Серии кодов установлены в пределах всего списка серий, что видимо неверно, так как номера серий на разные товары могут и пересекаться.
11. Контроля уникальности номера серии не осуществляется
12. Система сертификации содержит методическую бомбу – один сертификат может быть в теории выдан на несколько серий номенклатуры. Из задания на самом деле не понятно однозначно, какая тут связь – один к одному или один ко многим.
13. Методика заполнения контрагента по умолчанию в документе закупки на мой взгляд не верна. Реализация на базе предопределенного реквизита справочника не позволит пользователям изменить клиента по умолчанию в будущем. Нужно было сделать механизм хотя бы используя константу для хранения глобальной настройки конфигурации, не говоря уже о механизме хранения настроек пользователей.
14. Реализация заполнения товаров документа закупки сделана в корне неверно – нужно было использовать механизм ввода на основании и предопределенную процедуру объекта «ОбработкаЗаполнения()»
15. Проверка корректности заполнения документа продажи также выполнена сомнительным путем. Начнем с того, что суть проверки – поиск отрицательного количества в табличной части. Отгрузка с отрицательным количеством не имеет физического смысла, поэтому такая проверка не нужна, хватило бы ограничения типа данных реквизита «количество» табличной части. Но даже если бы была необходимость именно в проверке – то реализовывать ее нужно было в предопределенной процедуре объекта «ОбработкаПроверкиЗаполнения()», которую вызывать из формы методом документа «ПроверитьЗаполнение()». Так мы могли бы проверять документ стандартными средствами и не нужно было бы его записывать для проверки. Кроме того нужно помнить, что если проверка заполнения реквизитов формы документа отличается от общей проверки документа – то для этого тоже есть стандартные события возникающие при записи в форме.
16. Обработчик проведения документа реализации – это просто боль и печаль:
a. Не используется стандартная методика контроля остатков принятая для решений на 8.2, когда движения сначала записываются все, и только после этого происходит поиск полученного отрицательного результата
b. Запрос, построенный для получения остатков товаров из регистра использует внутреннее соединение что приводит к тому, что если на остатке нет товара, указанного в табличной части – документ проведется, но в движения не попадет такой товар. И пользователю о такой ситуации никто не расскажет. Данные в регистре будут несогласованны с данными документа.
c. Контроль остатков производится для товаров, но не для серий, что нарушает требования вывода регистров в ноль
d. Контроль остатков не привязан к строкам документа и производится сводно, что не позволяет привязать сообщение об ошибке к конкретному реквизиту (а уж про грамматические ошибки в этом сообщении я и не упоминаю).
e. При списании товаров, количество строк с движениями будет равно количеству серий на остатках, при этом будут движения с нулевыми суммой и количством – все потому, что неверно описано условие цикла формирования движений по сериям
f. Текущий алгоритм списывает серии как Бог на душу положит, а должен бы списывать те серии, которые пользователь указал в документе. Таким образом это еще одно место где возникает рассогласование данных в регистре и документе
g. Контроль отрицательных остатков не прерывает проведения документа ни в одном из режимов. Я склонен считать это методической ошибкой.
Я бы рекомендовал следующий алгоритм проведения:
• В запросе получаем остатки регистра по количеству и сумме, при этом наложив условие на виртуальную таблицу остатков о вхождении товара и серии в табличную часть документа.
• Полученные остатки левым соединением цепляем к табличной части документа при этом сразу получая суммовую оценку товаров и сопоставляя ее с количеством табличной части
• Тот же запрос дополняем константами необходимыми для заполнения набора записей по регистру
• Результат запроса напрямую записываем в набор записей
• В случае оперативного проведения принудительно пишем набор записей в базу данных и выполняем поиск отрицательных остатков по результатам проведения
17. В информационной системе нет ни одного отчета. Как минимум нужно реализовать ведомость по регистру.
18. Для учета себестоимости, возможно, имело бы смысл хранить данные о ней в отдельном регистре. Но в текущей задаче это не сыграет никакой роли, т.к. партионного учета нет и в задании не предвидится.
Проверку заполнения номера серии организуем очень просто – включаем ее в свойствах реквизита.
Со всеми пунктами согласен.
Евгений, по шагу 1 – зачет.
В документе «ПродажаТовара»
1.Необходимо указать регистр накопления «ТоварыНаСкладе» по которому будем делать движение.
2.В процедуре «обработкаПроведения» в запросе необходимо указать «ЛевоеСоединение»
3.В процедуре «обработкаПроведения» в запросе для поля «КолОст» необходимо указать ЕСТЬNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0)
4.В процедуре «обработкаПроведения» в запросе для поля «СумОст» необходимо указать ЕСТЬNULL(ТоварыНаСкладеОстатки.СуммаОстаток,0)
5.В процедуре «обработкаПроведения» возникает деление на ноль – исправленная строка
Запись.Сумма = ?(ВыборкаСерии.КолОст*Запись.Количество=0,0,ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество);
6.Сообщение не привязывается к полю количество.В сообщении нужно указать строку на которую ссылаемся Сообщение.Поле = “Товары[“+(ВыборкаТовары.НомерСтроки-1)+”].Количество”;
Для этого в запросе нужно добавить поле «НомерСтроки» из табличной части «Товары»
7.Необходимо запрос сгруппировать по «Товар,Серия». Чтобы правильно определялся остаток, когда есть две одинаковые строки.
8.В запрос надо добавить еще одно итоговое поле СУММА(СумОст)
9.Проверку на нехватку товара нужно делать не в «ВыборкаТовара», а в «ВыборкаСерии»
10.Когда делаем запись в регистр для реквизита «Количество» вместо «КолОст» нужно указывать «КолДок» «Запись.Количество = Мин(ОсталосьСписать, ВыборкаСерии.КолДок);»
11.В тонком клиенте Процедура «ПроверкаДокумента» обращается к серверному общему модулю к которому нельзя обращаться с клиента . Необходимо разрешить такое обращение, а лучше обращаться из серверной процедуры формы документа.
12.Команда «Предупреждение» не работает в серверных процедурах. Необходимо вывести эту команду на клиента в модуль формы документа.
13.Если товаров не хватает на складе, нужно запретить запись движений, для этого нужно присвоить Отказ = Истина
14.При вводе в табличную часть серии открывшийся справочник серий должен быть отобран по товару в данной строке (нужно указать «СвязиПараметровВыбора»)
15. В обычном приложении толстом клиенте при проведении документа предыдущие движения не очищаются. Нужно предварительно очищать командой
Движения.ТоварыНаСкладе.Очистить();
А чтобы правильно посчитались остатки добавим еще строку Движения.ТоварыНаСкладе.Записать();
16. В запросе в виртуальной таблице остатков не задана дата на которую необходимо получить остатки. Я передал параметр «граница».
Граница=Новый Граница(Дата,ВидГраницы.Исключая);
17. При проведении документа если количество=0, то движения делать не надо по этой строке.
В Документе «ПокупкаТоваров»
18. В процедуре «обработкаПроведения» необходимо указать Движения.ТоварыНаСкладе.Записывать=Истина;
19. В документе «ПокупкаТоваров» по кнопке заполнить контрагента правильнее было-бы подставлять основного поставщика, а не покупателя. Нужно добавить предопределенный элемент «ОсновнойПоставщик» и подставлять его.
20. В документе «ПокупкаТоваров» по кнопке заполнить контрагента в тонком клиенте выходит ошибка т.к. к данным можно обращаться только в серверной процедуре
&НаСервере
Процедура ЗаполнитьКлиентаНаСервере()
ОбъектФ=РеквизитФормыВЗначение(“Объект”);
ОбъектФ.Клиент = Справочники.Клиенты.ОсновнойПоставщик;
ЗначениеВРеквизитФормы(ОбъектФ,”Объект”);
КонецПроцедуры
21. В обычном приложении толстом клиенте при проведении документа предыдущие движения не очищаются. Нужно предварительно очищать командой
Движения.ТоварыНаСкладе.Очистить();
В справочнике серии в стандартных реквизитах для реквизита «Код» Проверка заполнения выставим в ВыдаватьОшибку.
>9.Проверку на нехватку товара нужно делать не в «ВыборкаТовара», а в «ВыборкаСерии»
Я бы больше сказал – итоги в запросе не нужны. Тогда и выборка будет одна.
>16. В запросе в виртуальной таблице остатков не задана дата на которую необходимо получить остатки.
А для оперативного проведения передавать параметр – Неопределено.
>20. В документе «ПокупкаТоваров» по кнопке заполнить контрагента в тонком клиенте выходит ошибка т.к. к данным можно обращаться только в
Константин, здесь все проще.
Возвращаете в серверном внеконтекстном методе предопределенный элемент.
А на клиенте Объект.Контрагент = ПолучитьОсновогоПоставщика();
По шагу 1 – зачет.
Не вижу отчета по шагу 2 и 3.
А также нет данных о выполнении ДЗ базового курса..
3.
1. Что нового? Новое – практически всё! (даже в нулевом блоке было несколько незнакомых моментов). 8-ку я изучала с зимы этого года, но по остаточному принципу, когда удавалось выкроить время от текущих рабочих дел. С программированием у меня всегда было тяжко. Я хороший постановщик задач, аналитик, а непосредственное кодирование всегда идет с напрягом и медленно. Придумать структуру данных, подготовить алгоритм занесения и обработки данных – это моё. А как надо перевести ту же блок-схему в слова языка – начинаются заковырки. Поэтому в изучении языка программирования продвинулась не далеко. И материалы этого курса были как никогда вовремя. Особенно полнота и системность информации.
2. Заблуждения. Я считала, что построение запроса с помощью конструктора легче, чем просто написать запрос вручную. Мне почему-то оказалось понятнее сначала представить, что откуда и с каким условием надо взять, описать это словами, а потом проверить правильность через конструктор.
3. На практике уже вовсю использую полученные знания. Одну калымную контору в начале лета начала переводить с “7.7.Торговля и склад” на 8-чную Управление торговлей. Сейчас они уже полностью в ней работают. Но там всё стандартно, дописывать и переписывать практически ничего не требовалось, в основном настраивать. А на работе внедряем УПП, перетаскиваем в неё бухгалтерию. Команда внедренцев занята глобальными делами, а я клепаю мелочи. Перегрузка из 7-ки в 8-ку отдельных видов документов, внешние обработки заполнения табличных частей для автозаполнения на основании выбранного документа, отчеты и т.д. (В УПП кроме кодирования занимаюсь перестройкой документооборота компании для возможности получения всех необходимых отчетов, уменьшения трудозатрат и исключения ошибок в работе пользователей. Но это не по курсу.)
Но самое главное для меня достижение – я не чувствую себя в конфигураторе 8-ки как в гостях. Это уже своё, родное. Знание принципов, свойств, методов, того, что можно, а чего нельзя – всё это экономит огромную массу времени! Когда надо понять, почему тот или иной документ работает не так, как ожидалось, в литературе информации нет, а внедренцы сами это еще не изучили, то приходится открывать конфигуратор и докапываться. Или когда надо сделать что-то новое, то умом-то я понимаю, как и что надо сделать, а вот сказать словами (встроенного языка) быстро не могу. И это время очень жалко. Считаю его просто потерянным.
Теперь времени будет уходить всё меньше и меньше.
5. Формат обучения. По мне – формат этого курса просто идеальный.
Во-первых, учиться можно тогда и там, когда и где есть время.
Во-вторых, пересматривать информацию можно столько раз, сколько необходимо.
В-третьих, каждый под себя подгоняет процент теории и практики в обучении. Практику возможно использовать именно в тех пунктах курса, где это необходимо конкретному обучающемуся.
В- четвертых, бесценны общедоступные ответы на вопросы. Я отправляла к Вам всего два вопроса, на оба Вы записали подробнейшие ответы. Поскольку сильно отставала от общего потока, то меньшая часть моих вопросов была рассмотрена раньше, чем я до них дошла, а бОльшая часть еще и не возникла (было недостаточно практики, чтобы я наткнулась на все заковырки). Но в основном у многих возникают одни и те же вопросы. Не сейчас, так позже. А ответ уже есть в копилке. Лежит, среди аккуратно отсортированных по папкам.
В-пятых, очень помогает высокий темп учебы. При медленном темпе всегда находится что-нибудь более важное и срочное. И при полностью самостоятельной работе обучение всегда откладывается на потом. В данном же варианте Вы поставили жесткие временнЫе рамки. И я понимала, что если сейчас решу заниматься в удобном мне темпе, то продвинутый придется проходить во втором потоке (как минимум). Ждать придется долго. В результате всё это растянется на неопределенное время. Конечно три месяца в таком напряженном темпе, когда заняты почти все вечера и выходные, не весело. Но оно того стоит! Мне, кстати, было немного легче, чем домочадцам. Я-то за идею боролась. А они страдали из сочувствия. Когда я сказала, что “досмотрела 4-й блок”, муж закричал:”УРРААА!! 8-е марта закончилось!”
>Я считала, что построение запроса с помощью конструктора легче, чем просто написать запрос вручную.
Но ведь как раз с помощью конструктора запросы строить легче. Вспомните эти слова когда будете работать с запросом на 5 экранов :)
>Мне, кстати, было немного легче, чем домочадцам.
Домочадцам можно выдохнуть…ненадолго =))
Спасибо за подробнейшие ответы на вопросы.
К сожалению, не успеваю. :( Внедрение УПП, а ручек-то маловато и опыта маловато…Ну да это дело наживное, но, увы, не так быстро… Огромное Вам спасибо. На продвинутом курсе обязательно буду учиться и по администрированию хочется. Как бы не пропустить.
Спасибо, Людмила!
Удачи на проекте!
1. Документ ПокупкаТоваров – в табл части реквизит кол-во имеет тип строка вместо числа.
2. Обработка проведения документа ПокупкаТоваров – не записываются движения по регистру «Товары на складе» при проведении. Движения.ТоварыНаСкладе.Записать();
3. В документе ПродажаТоваров в свойствах движения не указано, что он является регистратором движений по регистру ТоварыНаСкладе.
4. В документе ПродажаТоваров в свойствах реквизита табличной части Серия не заполнено свойство «Связи параметров выбора» – Отбор.Владелец(Товары.Товар)
5. Некорректный запрос для проверки остатков на складе при списании товаров. Из-за внутреннего соединения при отсутствии товара серии на складе запрос ничего не выводит – в следствие чего ситуация не обрабатывается и пользователю не выдается никакого диагностического сообщения. Документ имеет статус проведен, но нет движений. В запросе так же отсутствует группировка по товару и серии для устранения повторяющихся строк табличной части. Так же нет информации о номере строки для вывода сообщения об ошибке.
В параметрах виртуальной таблицы ТоварыНаСкладеОстатки нет указания периода и условие должно содержать отбор по паре (товар, серия) :
(Товар, Серия) В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ПродажаТоваровТовары.Товар,
ПродажаТоваровТовары.Серия
ИЗ
Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка)
6. В этом же документе установлена возможность оперативного проведения, а момент времени в запросе отсутствует
7. Помимо этого есть еще многочисленные ошибки в обработке проведения:
Не требуется иерархического обхода результата запроса.
8. При Недостаче не устанавливается «Отказ» в «Истина»
9. При выводе сообщения об ошибке строка Сообщение.Поле = “Товары.Количество”; не содержит индекса строки табличной части.
10. В строке Сообщение.Текст = “Недостаточно товава “+ВыборкаТовары.Товар+” в количестве “+Недостача; не выводится информация о серии
11. При формировании записи в регистр в строке Запись.Сумма = ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество; нет проверки на равенство нулю ВыборкаСерии.КолОст , а запросе нет обработки значений КолОст и СумОст на Null
12. Проверка документа «ПродажаТоваров» вызывает серверную процедуру общего модуля в запросе – тем самым проверка отрицательных значений количества в табличной части не происходит у не записанного документа. Проверку стоит осуществлять либо на клиенте в процедуре ПроверкаДокумента
Для каждого Строка из объект.товары цикл
Если Строка.Количество<0 Тогда
Предупреждение("Ошибка в строке № "+Строка.НомерСтроки+" количество не может быть отрицательным!", 5);
КонецЕсли;
КонецЦикла;
либо, что более логично, в обработке проверки заполнения. А самый простой способ — выставить в свойствах реквизита табличной части количество свойство «неотрицательный» – тогда проверка вообще не нужна.
13. В документе ПокупкаТоваров процедура ЗаполнитьКлиента() выполняется &НаКлиенте. В тонком клиенте недоступен объект типа СправочникМенеджер, к которому происходит обращение в этой процедуре. Для корректной работы требуется сделать серверный вызов.
14. В процедурах ЗаполнитьКлиента() и ЗаполнитьТовары() происходит изменение данных, но не устанавливается свойство модифицированности формы, что может привести к потере изменений при закрытии формы. В конце обеих процедур надо добавить Модифицированность = Истина;
15. Так как в задании сказано, что ИБ должна корректно работать во всех клиентах — для работы в толстом клиенте обычное приложение необходимо создать обычные формы для объектов конфигурации или установить флаг использовать управляемые формы в обычном приложении.
16. Для обеспечения обязательности заполнения поля «Номер серии» в свойствах стандартного реквизита Код установить свойство «Проверка заполнения» в «Выдавать ошибку»
17. В документе ПокупкаТоваров команда ЗаполнитьТовары не вынесена на форму.
18. В обработчике данной команды в строке ВвестиЗначение(Основание, "Выберите документ-основание", Тип("Документ.ПокупкаТоваров")); написан неправильно тип. Правильно — Тип("ДокументСсылка.ПокупкаТоваров")
19. Условие проверки введенного значения «Если НЕ Основание.Пустая() Тогда» будет выдавать ошибку если пользователь откажется от выбора, нажав Escape или закрыв окно. Основание в этом случае будет равно «Неопределено».
20. Процедура ЗаполнитьТоварыНаСервере не будет работать корректно, так как в строке Объект = ТекущийДокумент.ПолучитьОбъект(); для не записанного документа будет выдаваться ошибка.
21. А для записанного — в строке Объект.Товары.Загрузить(ДокументОснование.Товары); неверный тип аргумента – должна быть ТаблицаЗначений.
Корректно будет работать процедура:
&НаСервере
Процедура ЗаполнитьТоварыНаСервере(ДокументОснование)
Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
КонецПроцедуры
часть2
http://forum-1c.ru/index.php?topic=4699 к сожалению получилось весьма сумбурно, из-за невозможности пост-редактирования поста и спешки, что кто-то успеет ответить быстрее меня:) Но тем не менее человеку вроде помогло:)
часть 3
ответы на вопросы
1. В виду небольшого опыта работы с платформой, было очень много нового — особенно тема расчетов (с ней не сталкивался и на платформе 7.7)
2.От часто повторяемого заблуждения, что навыки работы в 7.7 не только не помогают, а даже мешают при работе с новой платформой. Так же осознал, что отладчик в 1С 8х по сравнению с 7.7 стал по-настоящему полезным инструментом для разработки и отладки.
3.В данный момент при внедрении КА были написаны модули для работы с внешними программами — источниками данных, автоматизированный перенос информации, создание нужных документов, элементов справочников, движений по регистрам и т.д.
4. Был приятно удивлен удобностью подобного способа обучения. Несколько высоковат был темп, но это по причине общей загруженности на текущих проектах. В целом очень понравился способ и качество изложения материала. Большое спасибо за базовый курс. С нетерпением жду возможности приобрести продвинутый.
>Проверку стоит осуществлять либо на клиенте
А вот этот нюанс мы будем разбирать на курсе продвинутом.
С данными, отображаемыми в таблице формы, никогда не следует работать на клиенте. Web-клиент может “умереть” от избыточного трафика.
Но об этом позже :)
По остальным пунктам согласен. Первый шаг – зачет.
Шаг 2 – результат достигнут :)
Спасибо за ответы на вопросы.
Дмитрий, поздравляю вас! Вы – финалист базового курса!! :)
2. С этим заданием справиться сложнее. На работе рассказать о преимуществах 8.2 некому :( Дома по вечерам я постоянно об этом рассказываю, но фотографий, к сожалению, делать не догадывалась :)
До советов в сложных вопросах я пока не доросла, а простых народ не задает. Нашла один посильный – http://infostart.ru/forum/forum26/topic34133/.
Мой комментарий – от имени Андрея Кузнецова. Эти имя и фамилия вымышленные, но ник у оставившего комментарий climepost, и эта учетка на Инфостарте действительно моя (http://infostart.ru/profile/76249/). :( Понимаю, что это обсуждение нельзя принимать в зачет выполнения ДЗ.
По второму шагу – с натяжкой, но все же зачет.
1.
Справочник.Серии
– у элементов справочника Серии можно изменить владельца. Для корректного ведения учета необходимо установить запрет на изменение владельца, если данная серия уже засветилась в документах.
Документ.ПокупкаТоваров.
– модуль основной формы в клиентской процедуре ЗаполнитьКлиента() происходит обращение к прикладным объектам (Справочники)
Исправление:
&НаСервереБезКонтекста
Функция ЗаполнитьКлиентаНаСервере()
Возврат Справочники.Клиенты.ОсновнойПокупатель;
КонецФункции
&НаКлиенте
Процедура ЗаполнитьКлиента(Команда)
Объект.Клиент = ЗаполнитьКлиентаНаСервере();
КонецПроцедуры
– модуль объекта процедура ОбработкаПроведения. Не хватает строки Движения.ТоварыНаСкладе.Записывать = Истина;
– В форме документа не выведена кнопка Заполнить товары
– В модуле формы документа в процедуре ЗаполнитьТовары неправильное обращение к типам данных.
Исправление:
ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”));
– процедура ЗаполнитьТоварыНаСервере в методе Загрузить параметром служит табличная часть документа-ссылки, а не документа-объекта. Исправление: использовать метод ЗначениеВДанныеФормы.
– В серверном общем модуле ПроверкаДокументовСервер происходит обращение к интефрейсу приложения (метод Предупреждение)
Исправление:
Функция ПроверитьДокумент(Документ) Экспорт
…стр. с 3 по 18…без изменений..
ТекстСтр=””;
Пока Выборка.Следующий() Цикл
ТекстСтр=””+ТекстСтр+Выборка.НомерСтроки+”, “;
КонецЦикла;
Возврат ТекстСтр;
КонецФункции
Документ.ПродажаТоваров.
– модуль основной формы из клиентской процедуры ПроверкаДокумента вызывается серверный общий модуль. Исправление:
&НаСервере
Функция ПроверкаДокументаНаСервере(Док)
Возврат ПроверкаДокументовСервер.ПроверитьДокумент(Док);
КонецФункции
&НаКлиенте
Процедура ПроверкаДокумента(Команда)
ТекстСтр1=ПроверкаДокументаНаСервере(Объект.Ссылка);
Если СтрДлина(ТекстСтр1)>0 Тогда
Предупреждение(“Ошибка в строке(ах) № “+ТекстСтр1+” количество не может быть отрицательным!”,5);
КонецЕсли;
КонецПроцедуры
– в форме документа в табличной части в графе Серия при выборе выводится список всех серий без отбора по владельцу. Для исправления у реквизита Серия у таб. части Товары документа ПродажаТоваров в свойстве Связи параметров выбора необходимо указать связь по владельцу.
– в свойствах документа на закладке Движения у регистра накопления ТоварыНаСкладе не стоит галка о возможности записи движений по этому регистру.
– Проверка документа на отрицательное количество в строках производится по ссылке документа, т.е. при проверке измененного, но не записанного документа, проверяется старая (записанная) версия строк. Для исправления можно либо предварительно записывать документ (с соответствующим запросом согласия пользователя), либо передавать не ссылку, а таб. часть, выгруженную в таблицу значений.
Модуль документа.
– модуль объекта стр. 44 Сообщение.Текст = “Недостаточно товава “+… ошибка в слове “товара”
– поскольку движения по регистру проводятся после контроля по остаткам, то для получения корректных остатков при повторном проведение документа необходимо перед запросом указать
Движения.ТоварыНаСкладе.Очистить();
Движения.ТоварыНаСкладе.Записать();
– в обработке результатов запроса мы не знаем, к какой строке документа относится данный обход выборки. Но даже если мы и найдем необходимую строку, то в документе может быть несколько строк с одинаковой серией. Поэтому нет смысла привязывать сообщение к полю Серия.
– запрос по остатку и сумме товаров из таб. части. В данном варианте обработки результатов запроса алгоритм такой, что если в таб.части есть две строки с одинаковым товаром, но с разными сериями, то списание будет происходить без учета серий. И если в документе есть несколько строк с одинаковой серией, то каждая строка сравнивается с одним и тем же остатком, не уменьшающимся предыдущими строками.
– запрос можно сформулировать без товаров, поскольку серия уникальна и подчинена товару. Обработка такого запроса будет следующей:
ВыборкаТовары = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
Пока ВыборкаТовары.Следующий() Цикл
Недостача = ВыборкаТовары.КолДок – ВыборкаТовары.КолОст;
Если Недостача>0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Недостаточно товара “+ВыборкаТовары.Серия.Владелец+” серия “+ВыборкаТовары.Серия+” в количестве “+Недостача;
Сообщение.Сообщить();
Иначе
Запись = Движения.ТоварыНаСкладе.ДобавитьРасход();
Запись.Период = Дата;
Запись.Товар = ВыборкаТовары.Серия.Владелец;
Запись.Серия = ВыборкаТовары.Серия;
Запись.Количество = Мин(ВыборкаТовары.КолДок, ВыборкаТовары.КолОст);
Запись.Сумма = ВыборкаТовары.СумОст/ВыборкаТовары.КолОст*Запись.Количество;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
– Для того, чтобы сделать номер серии обязательным для заполнения, надо открыть Стандартные реквизиты у справочника Серии, и в свойствах реквизита Код в свойстве Проверка заполнения выбрать вариант Выдавать ошибку.
>Функция ПроверкаДокументаНаСервере(Док)
Нужно было еще учесть, что проверка должна производиться для новых документов.
По шагу 1 – зачет.
ШАГ №1
1. В “продажа товаров” при выборе серии нет отбора по номенклатура, можно выбрать серию другого товара
2. Документ “Продажа товаров” не проводится, т.к. разработчик не указал его в качестве регистратора по регистру “ТоварыНаСкладе”
3. В модуле формы “Продажа товаров” процедура “ПроверкаДокумента” должна производится в контексте сервера
4. Реквизит в табличной части “Продажа товаров” строковый
5. В обработке проведения “Продажа товаров” отсутсвует строка “Движения.ТоварыНаСкладе.Записывать = Истина;”
6. Вместо проверки на отрицательность в процедуре “ПроверитьДокумент()” лучше просто поставить галочку “Неотрицательное” для реквизита табличной части “Количество”
7. Не работает контроль остатков – если на то нет специального указания заказчика документ не должен проводится “в минус”.
7.1 – Перед контролем остатков необходимо очистить проводки документа.
7.2 – В запросе для получения остатков не указан момент на который их нужно получать
7.3 – отсутвует защита от дублирования строк в документе
7.4 – отсутвует проверка на NULL
7.5 – не правильно настроена связь таблиц в запросе -> Нет контроля нехватки того чего вообще нет на складе и не отработана ситуация деления на ноль при расчете цены списания.
7.6 – не решена проблема последней копейки
8. В форме документа “ПокупкаТоваров” существует процедура “ЗаполнитьТовары” не выведенная в командную панель, после её вывода система выдает ошибку.
9. В самой процедуре “ЗаполнитьТовары” не правильно определен тип – должно быть Тип(“ДокументСсылка.ПокупкаТоваров”), кроме того М.Н. путает что можно делать на клиенте и сервере.
10. Серьёзное замечание к прогамме – отсутвует отчет о состоянии склада, заказчик однозначно будет не рад.
Для выполнения пожелания Виолы Григорьевны необходимо в справочнике “Серии” для реквизита “СрокГодности” установить свойство проверка заполнения на “выдавать ошибку”
ШАГ №2
Это было проще всего – загнал в класс ЦСО стажеров и мучал их больше часа :)
ШАГ №3
– Наконец то осознал зачем в 8.2 появились &Клиенте &НаСервере, до этого понимал с трудом и писал их наавось.
– Основной материал был уже знаком, т.к. “1С:Специалист” по платформе у меня уже сдан. Самое “вкусное” было в Мастер-Группе. Тема “Монетизации” вызвала состояние слюнявого восторга. :) ХОЧУ ЕЩЕ!!!
– В ближайшее время планирую написать для клиентов две конфигурации “с нуля” на платформе 8.2
– “мини уроки” очень удобный формат обучения, но все же хотелось бы что бы в курс входил не альбом слайдов, а краткий конспект описывающий содержимое каждого урока. К сожалению для меня темп оказался высоковат. Что бы догнать группу по ДЗ мне пришлось эти три дня на работе только и делать что подгонять хвосты…
Шаг 1 – зачет.
Шаг 2 – стажеры были в восторге? :)
Шаг 3. Спасибо за ответы на вопросы.
Алексей поздравляю вас с успешным окончанием курса и вступлением в ряды финалистов!!
Стажеры хотят добавки :)
Отлично :))
3) Ответы на вопросы:
В1: что нового узнал?
О1: отличия 1С 8.2 от 8.1 и другое, что ранее не применял не практике: УФ, тонкий-WEB клиенты, СКД, сложные запросы, учет по регистрам расчетов, различные тонкости при работе с платформой 1С 8.Х;
В2: от каких заблуждений избавился?
О2: в принципе, таковых не было :)
В3: что нового уже применил на практике?
О3: СКД, стараюсь делать отчеты только с использованием СКД, т.к. очень удобно и быстро для достижения.
В4: насколько удобен формат обучения?
О4: это самое лучшее, что можно было придумать, т.к. обучаться можно в любой момент и в любом месте, на работе или дома.
Также удобно задавать вопросы по почте, потому что ответы оперативны и, естественно, исчерпывающие и профессиональные. Кроме того, всегда можно заново посмотреть тот материал, с чем на практике пока есть проблемы.
Спасибо за ответы, Сергей!
Наступил торжественный момент, поздравляю с успешным окончанием базового курса и получением статуса “финалист базового курса”.
Добрый день, Евгений и Фарит. можно ли с Вашего разрешения оставить пока 2 Шага по домашнему заданию, так как улетаю в командировку. Если будет свободная минутка вечером постараюсь осуществить 2 Шаг. Спасибо. А пока Шаг1 и Шаг3.
1. нет проверки на обязательное заполнение поля Номер серии в справочнике Серии.
2. В регистре накопления ТоварыНаСкладах не установлены флажки Запрет незаполненных значений.
3. В регистре накопления ТоварыНаСкладах свойство Проверка заполнения установлен «Не проверять».
4. Процедура ЗаполнитьКлиента(Команда) – выполняется на клиенте, а лучше бы выполнить на сервере.
5. В модуле проведения документа Покупка товаров в процедуре ОбработкаПроведения(отказ, режим) перед циклом должна быть строчка Движения. ТоварыНаСкладе.Записывать = Истина ; поэтому регистр не двигается.
6. я бы в документе Покупка товаров указала, что обязательно нужно заполнять Клиента
7. Тоже самое – в документе Продажа товаров (клиент – обязательный реквизит)
8. в документе Продажа Товаров – процедура Проверка документов может сработать только для записанного в базу документа, так как Ссылка для нового документа не определена.
9. в документе Продажа Товаров в табличной части при выборе Серии не указан владелец Товар
10. в документе Продажа Товаров при выполнении процедуры Проверка товара необходимо было использовать объект СообщениеПользователю, чтобы потом при ошибке указать строчку, где количество <0.
11. для документа Продажа Товаров не указан регистр, который будет двигаться при проведении.
12. в запросе в модуле проведения документа Продажа товаров необходимо было сделать Левое соединение таблицы «ТоварыНаСкладеОстатки» с таблицей «ПродажаТоваровТовары».
13. в запросе в модуле проведения документа Продажа товаров для виртуальной таблицы «ТоварыНаСкладеОстатки» не указан параметр «Период»
14. в запросе в модуле проведения документа Продажа товаров для виртуальной таблицы «ТоварыНаСкладеОстатки» в параметрах можно было бы также указать ограничение на серии, которые берутся также из проводимого документа.
15. я считаю, что запрос построен неправильно. Не нужно было использовать «итоги». Задача была поставлена так: Себестоимость должна определяться по средней в рамках серии товара. А тут получается серия – как детальная запись.
16. в модуле проведения документа Продажа товаров при формировании записи в регистр ТоварыНаСкладе, Запись.Сумма = ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество; думаю, что необходимо было сделать проверку на ВыборкаСерии.КолОст 0.
17. в модуле проведения документа Продажа товаров при формировании записи в регистр ТоварыНаСкладе, Запись.Сумма = ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество; при таком вычислении Суммы для списания может возникнуть «копейки», при нулевом количестве. Можно было сначала сделать умножение, потом деление.
18. в строчке Запись.Сумма = ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество, не очень разумно обращаться к количеству как Запись.Количество.
19. Тоже самое в строчке ОсталосьСписать = ОсталосьСписать-Запись.Количество, необходимо было определить переменную КоличествоСписать, чтобы потом к ней обращаться.
20. В запросе в модуле проведения документа Продажа товара необходимо проверять на isNull ТоварыНаСкладеОстатки.КоличествоОстаток КАК КолОст, и
| ТоварыНаСкладеОстатки.СуммаОстаток КАК СумОст, так как остатков может и не быть.
21. Хотелось бы еще добавить, что можно было бы создать Подсистему, определить рабочую область рабочего стола. Считаю, что «разработчик» не справился с поставленной задачей :) Настоятельно рекомендую программисту М.Н. поупражняться в запросах :):).
ШАГ 3.
1.Что нового Вы узнали из базового курса по программированию?
Новое было то, что я вообще узнала про функционал 8.2, какие возможности платформа предоставляет клиенту. Новое узнала и про Расчет. Если была необходимость работать в «зарплате», то делала это методом «посмотреть где-то – уже похожее кто-то сделал». Узнала, как правильно и компактно писать модули. Особенно помогли последние уроки в 4 модуле по расчету. Узнала, что такое Клиент-Сервер.
2. От каких заблуждений избавились?
Избавилась от заблуждения, что Регистры расчета – это сложно.
3.Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
вам удалось применить новые навыки (какие результаты были достигнуты);
Я стала использовать метод компактного написания: если идет повторение каких-либо действий, то выносить нужно в общий модуль и по возможности писать один общий запрос. Поменьше обращаться к базе данных. Мне стало легче «читать» модули, написанные другими программистами. Стала обращать на «тонкие моменты» в написании процедур : вплоть до читабельности.
4Если Вы пока не работаете реальных проектах по внедрению решений на
«1С:Предприятии 8», то, что оказалось неожиданным из материалов курса?
5.Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Да, несомненно, формат удобен. Можно использовать любую свободную минуту для изучения материалов. Единственная проблема с распределением времени на прохождение курса. Курс достаточно обширен. Хотя информация вся полезна. Не все мастер-группы успела прослушать. Я очень довольна и материалом и результатами. Так как способ изложения достаточно доступен и дает возможность «уложиться» новой информации. Спасибо еще раз. Жду продвинутого.
Шаг 1. Пожелания М.Н. переданы :))
Шаг 3. Спасибо за обратную связь.
Валентина, ждем от вас информацию по шагу 2.
Успехов!
По вопросам:
1. Очень много новой информации. Не совсем до сих пор уложилось Клиент – Сервер. Постоянно забываюсь.
2. Что хорошие программисты никогда не ошибаются :)
3. Что то усовершенствовал в своей работе. Некоторые алгоритмы стал писать по другому, более понятно и легче стало работать.
4. Очень полезны бонусные материалы. Всегда кстати.
5. Удобно. Но или расхалаживает или я организоваться не могу. Для таких как я, возможно стоит сделать график по реальным урокам с учетом времени по курсу, выполнению ДЗ, повторению и изучению бонусов.
Например:
1 день
Изучение курса с 1.0 по 2.3 – итого 2 часа
Изучение бонуса 1 час.
2 день
Изучение курса с 2.4 по 2.13 – итого 2 часа
Выполнение ДЗ 1 час.
Таким образом и Вы заметите где перекос происходит. Я вроде как и не халтурил, но катастрофически не успевал. :(
Артур, шаг 3 – зачет.
Не вижу отчета по шагу 2.
Часть № 1:
Документ “Покупка товаров”
1. В табличной части “Товары” реквизит “Количество” имеет тип “Строка”, а необходим тип “Число”,
т.к. документ делает движения по регистру “ТоварыНаСкладе”, у которого есть ресурс “Количество”.
2. В форме документа в процедуре “ЗаполнитьКлиента” ошибка обращения к предопределенному элементу справочника “Номенклатура”, т.к. контекст исполнения процедуры “НаКлиенте”,
то необходимо использовать метод глобального контекста “ПредопределенноеЗначение()”. Так же при вызове предопределенного значения объект методанных указывается в виде строки в единственном значении:
ПредопределенноеЗначение(“Справочник.Клиенты.ОсновнойПокупатель”);
3. Не выведена на форму команда “ЗаполнитьТовары”.
4. В процедуре “ЗаполнитьТовары” при вызове метода “ВвестиЗначение()” неправильно описан тип вводимого значения. Првильно: ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”));
5. В процедуре “ЗаполнитьТовары” неправильная проверка на выбранное значение. Првильно:
Если ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”)) Тогда
ЗаполнитьТоварыНаСервере(Объект.Ссылка, Основание);
КонецЕсли;
или
Если Основание Неопределено Тогда
ЗаполнитьТоварыНаСервере(Объект.Ссылка, Основание);
КонецЕсли;
6. Процедура “ЗаполнитьТоварыНаСервере” должна выполняться “НаСервере”, т.к. необходим контекст формы (объект документ м/б еще и незаписан).
7. В процедуру “ЗаполнитьТоварыНаСервере” должен передаваться параметр “Основание” для заполнения, а ссылка ненужна, т.к. будет контекст формы.
8. Необходимо преобразовать процедуру “ЗаполнитьТоварыНаСервере” для заполнения табличной части в вид:
&НаСервере
Процедура ЗаполнитьТоварыНаСервере(ДокументОснование)
ОбъектДок = РеквизитФормыВЗначение(“Объект”);
ОбъектДок.Товары.Загрузить(ДокументОснование.Товары.выгрузить());
ЗначениеВРеквизитФормы(ОбъектДок,”Объект”);
КонецПроцедуры
Документ “Продажа товаров”
1. Необходимо на закладке “Движения” документа указать что документ делает движения по регистру “ТоварыНаКладах”;
1. Вызов метода “ПроверитьДокумент” из общего модуля “ПроверкаДокументовСервер” будет невозможен при работе в тонком клиенте, т.к. контекст компиляции модуля “Сервер”.
2. Команда “ПроверкаДокумента” может проверять только документы непосредственно записанные в БД, т.е. те объекты-документы у которых есть ссылка.
3. В процедуре проверки документов “ПроверитьДокумент” из общего модуля “ПроверкаДокументовСервер” метод “Предупреждение” не буде исполнен, т.к. модуль компилируется на сервере, а данный метод вызывается только из клиента.
4. В процедуре “ОбработкаПроведения”:
– в запросе в параметрах виртуальной таблицы “ТоварыНаСкладахОстатки” необходимо указать “Период”;
– в запросе в параметрах виртуальной таблицы “ТоварыНаСкладахОстатки” в поле “Условие” в запросе на выборку товаров из документа необходимо установить условие на выборку различных записей (Выбрать Различные…);
– в запросе в параметрах виртуальной таблицы “ТоварыНаСкладахОстатки” в поле “Условие” в запросе на выборку товаров из документа необходимо установить условие на выборку по сериям:
(Товар,Серия) в (Выбрать различные…);
– в запросе необходимо что бы было Левое соединение:
…Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки…;
– в запросе для поля “КолОст” и “СуммаОст” задать проверку на Null;
– Установить параметр запроса на поле виртуальной таблицы “Период”;
– при проверке на недостачу товара необходимо установить отказ от проведения документа, а так же отмена дальнейшего исполнения кода на запись в регистр по сериям;
– при обходе выборки по сериям так же необходимо сдеать проверку на остаток по серии, т.к. возможно деление на ноль;
– при выводе сообщения пользователю необходимо предусмотреть привязку сообщения о необходимости к конкретной строке по которой есть недостача.
Часть №2:
хочу провести семинар, но увы только на след. неделе(
>ОбъектДок.Товары.Загрузить(ДокументОснование.Товары.выгрузить());
А ведь можно просто Объект.Товары.Загрузить(ДокументОснование.Товары.выгрузить());
см. ДанныеФормыКоллекция.Загрузить (FormDataCollection.Load)
ДанныеФормыКоллекция (FormDataCollection)
Загрузить (Load)
>- в запросе в параметрах виртуальной таблицы «ТоварыНаСкладахОстатки» необходимо указать «Период»
Помните МГ? Нужно указывать только для неоперативно проводимых документов
По шагу 1 – зачет.
Шаг 2 – вышлите презентацию по почте.
Часть №3:
Что нового Вы узнали из базового курса по программированию?
Новый метод контроля остатков, клиент-серверные вызовы, использование форматированного документа; Доп. характеристики объектов метаданных; Произвольные отчеты в типовых конфигурациях.
От каких заблуждений избавились?
СКД это что-то запутанное; ПВХ – как же все таки это работает; Расчет – вроде понятно, но не до конца; Страшны отчеты по бухучету, откуда же брать данные для них.
Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
вам удалось применить новые навыки (какие результаты были достигнуты)
Как раз при прохождении курса был подписан договор на разработку одному из заказачиков системы “с нуля”. Выбор был сразу же и однозначно сделан в пользу 8.2.
Если Вы пока не работаете реальных проектах по внедрению решений на
«1С:Предприятии 8», то, что оказалось неожиданным из материалов курса?
Монетизация)))
Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Жаль что из-за пиратства невозможно скидывать уроки на обычный плеер, первые уроки смотрел в метро между клиентами очень удобно. По поводу очного курса сравнений нет никаких,
там все быстро и голова после третьего дня взрывается. Остаются только методички и куча вопросов после переваривания материала дома, а тут: прослушал, понял, столкнулся в разработке, нашел урок, посмотрел и применил. Круто!) Жду продвинутый и не сомневаюсь что там-то будет еще круче!
Спасибо, Николай.
Жду ответа по шагу 2.
1.Выявленные ошибки и функционал:
Не правильно сделано списание – регистр не закроется в “ноль” при ошибках округления
Не правильно проставлен контекст процедур – они не могут выполняться в этом контексте.
Нет цены в документах.
Проверка на количество проводится без записи – это вызовет проблемы.
Продажа товаров – не привязан к регистру.
Запрос в продаже составлен не корректно.
В покупке товаров нет указания записывать движения – они не записываются.
Ошибки синтаксиса.
2. Курс провел – познакомил бухгалтеров с новой редакцией.
3.ответы на вопросы:
– Работа с управляемыми формами для меня нова.
– Нужно менять стереотипы работы – часто делал как 8.1 – привык.
– Пишу свою конфигурацию для нужд организации на 8.2 – управленческий учет.
– Есть плюсы и минусы – нет реального контакта, но плюсов больше.
Шаг 1. Поставим с натяжкой зачет.
Шаг 2. Фото будут? Или хотя бы презентация?
Шаг 3. Спасибо.
Жду ответа по шагу 2.
размещаю фото – сделана с фотоаппарата, но смысл ясен я думаю.
>размещаю фото – сделана с фотоаппарата
Похоже, что не с фотоаппарата :))
Шаг 2 – зачет.
Марат, поздравляю вас с зачислением в ряды финалистов базового курса!! :)
К сожалению, удалось обнаружить не все ошибки.
1. Является ошибкой или нет отсутствие цены в документах?
2. Не проводится движение при приходе так как нет строки Движения.ТоварыНаСкладах.Записывать = Истина;
3. Возможно, при покупке правильнее указывать основного Поставщика, а не покупателя?
4. Основного поставщика по умолчанию, я бы предоставил выбирать пользователю.
5. В тонком клиенте такой код присвоения работать не будет.
6. В расходной накладной не указано, что движение по регистру имеется.
7. Проверка (кнопка) запрос не верный. Переписал.
8. В тонком клиенте проверка по кнопке не будет работать.
9. При проведении Расходной следовало сделать запись в движении, потом проводить проверку наличия.
10. Зам запрос по проверки тоже корректировал.
Больше ничего не нашел :(
> Является ошибкой или нет отсутствие цены в документах?
Это зависит от контекста решаемой задачи. Поэтому за ошибку не считаем..
>При проведении Расходной следовало сделать запись в движении, потом проводить проверку наличия.
А вот этого бы не получилось. Ответьте почему?
С большой натяжкой Шаг 1 – зачет.
К своему огромному сожалению я отдаю себе отчет, что к финалистам я не отношусь.
Артур, уважаю ваше решение.
Спасибо за хорошую работу.
Успехов во всех делах!
Шаг 1.
1. Документ «Покупка товаров» не формирует движений по регистру «Товары на складе».
В Обработке проведения не записываются движения; добавить
Движения.ТоварыНаСкладе.Записывать = Истина;
2. В док. «Покупка товаров» по кнопке «Заполнить клиента» по умолчанию предлагается «Основной покупатель». Заменить на «Основной поставщик» или что-то вроде этого.
3. При проведении док-та «Продажа товаров» вылетает ошибка Поле объекта не обнаружено «ТоварыНаСкладе)
На закладке Движения установить флажок у соответствующего регистра.
4. В документе «Продажа товаров» кнопка «Проверка документа» работает, только если документ сначала провести. Поэтому в процедуре ПроверитьДокумент(Документ) сначала лучше сделать запись в регистр, а потом проверять.
5. Документ «Продажа товаров» делает неправильные проводки. Неверно указывается количество (берет не из документа, а из регистра).
Добавить очистку набора записей, иначе каждый документ дублирует движения предыдущих.
6. В тонком клиенте при создании/открытии док-та «Покупка товаров» ошибка
{Документ.ПокупкаТоваров.Форма.ФормаДокумента.Форма(4,18)}: Переменная не определена (Справочники)
Объект.Клиент = <>Справочники.Клиенты.ОсновнойПокупатель;
Надо сделать серверную процедуру, т.е. обращение к базе данных.
7. В тонком клиенте при создании/открытии док-та «Продажа товаров» ошибка
{Документ.ПродажаТоваров.Форма.ФормаДокумента.Форма(4,2)}: Переменная не определена (ПроверкаДокументовСервер)
<>ПроверкаДокументовСервер.ПроверитьДоку мент(Объект.Ссылка);
Надо для общего модуля ПроверкаДокументовСервер в свойствах установить флажок «Клиент «управляемое приложение)»
8. Не ошибка, конечно, но справочники «Клиенты» и «Номенклатура» явно должны быть иерархическими.
Как-то пока нашлось только 7 ошибок из 20 с лишним, и времени завтра все равно не будет… похоже, в финал уже никак не попадаю)))
Шаг 2. http://infostart.ru/public/75259/
Конечно, это жесткое задание))) Написать в короткие сроки что-то, конечно, можно, но позориться потом с этим прилюдно…))
Шаг 3.
Что нового Вы узнали из базового курса по программированию?
Для меня вся информация новая, какие-то основы были известны, но разрозненными кусками, а здесь все структурировано, последовательно, в общем, отлично!
От каких заблуждений избавились?
От того, что я очень-быстро-всему-научусь)))
Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
вам удалось применить новые навыки (какие результаты были достигнуты);
Пока тестирую переходы на 8.2, проверяю, как себя все поведет, в частности, обмен данными
Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Очень! Не надо тратить время на поездки туда-обратно, подвязываться к графику, всегда можно повторить непонятный момент… да нет смысла повторять все, конечно удобнее намного!
>4. В документе «Продажа товаров» кнопка «Проверка документа» работает, только если документ сначала провести
А лучше модифицировать проверку, чтобы проверялся и не записанный документ.
>Надо для общего модуля ПроверкаДокументовСервер в свойствах установить флажок «Клиент «управляемое приложение)»
Правильнее – вызов сервера.
> похоже, в финал уже никак не попадаю
С небольшой натяжкой – зачет по первому шагу.
>Конечно, это жесткое задание
Но вы с ним справились. По шагу 2 – зачет.
Подведем итоги.
Ирина, считаю, что правильным будет вручить вам статус финалиста базового курса.
С чем я вас и поздравляю! =)
УРА!!! Спасибо!!!!!!!!!!
1. В модуле формы ПокупкаТоваров
&НаКлиенте
Процедура ЗаполнитьКлиента(Команда)
…. Тип: СправочникиМенеджер. не доступен на тонком клиенте
поэтому сделал функцию на серверной части :
&НаСервере
Функция ПолучитьСсылкуНаОсновногоКонтрагента()
Возврат Справочники.Клиенты.ОсновнойПокупатель;
КонецФункции // ПолучитьСсылкуНаОсновногоКонтрагента()()
2. Не доделка, в форме Документа остутствует Кнопка ЗаполнитьТовары
однако команда : ЗаполнитьТовары описана
3. Тип(“Документ.ПокупкаТоваров”)
нужно на Тип(“ДокументСсылка.ПокупкаТоваров”)
4. сыпится при отмене выбора
ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”));
Если НЕ Основание.Пустая() Тогда
поэтому переделал :
ВыбраноЗначение = ВвестиЗначение(Основание, “Выберите документ-основание”, Тип
(“ДокументСсылка.ПокупкаТоваров”));
Если ВыбраноЗначение Тогда
ЗаполнитьТоварыНаСервере(Основание);
КонецЕсли;
5. переписал процедуру : ЗаполнитьТоварыНаСервере
&НаСервере
Процедура ЗаполнитьТоварыНаСервере(ДокументОснование)
Документ = РеквизитФормыВЗначение(“Объект”);
Документ.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
ЗначениеВРеквизитФормы(Документ, “Объект”);
КонецПроцедуры // ЗаполнитьТоварыНаСервере()
логику разделения клиент-серверного час представляю слабо…, знаю, что есть в курсе, но
честно не слушал пока …. просто делаю по некому эмпирическому пути из логики здравого смысла…
но работать-заполнять начал!
6.
Запись движений при проведении” в Конфигураторе выставлено в “Записывать выбранные”.
поэтому при проведении
Движения.ТоварыНаСкладе.Записывать=Истина;
7. ПродажаТоваров не является регистратором для регистра ТоварыНаСкладе
8. ПродажаТоваров:
ПроверкаДокументовСервер.ПроверитьДокумент(Объект.Ссылка);
Не отрабатывает если документ НОВЫЙ,
поэтому здесь либо запрос на запись, либо отмену вызова если новый!
для исключения “пустых” вызовов
также на модифицированность… если логика проверки построена на запросе из ИБ
10.Разрешает вызов сервера в общем модуле : ПроверкаДокументовСервер
иначе в тонком клиенте ругается
11.
Предупреждение(“Ошибка в строке № “+Выборка.НомерСтроки+” количество не может быть отрицательным!”, 5);
процедура интерактивной работы доступна только на клиенте!
12. Обработка проведения ПродажаТоваров:
ВНУТРЕННЕЕ СОЕДИНЕНИЕ
меняем на левое!
чтобы обработать весь набор ТЧ, а не то что совпадает с набором 2 соединяемого “облака”
данных
13.
так как аналитика выбытия Номенклатура,Серия то в параметрах отбора виртуальной таблицы
можно дополнительно включить отбор по серии
(Товар, Серия) В (…)
14. в параметрах отбора данных вирт. таблицы необходимо исключить дублирование записей
путем включения в запрос : РАЗЛИЧНЫЕ
(Товар, Серия) В
(ВЫБРАТЬ РАЗЛИЧНЫЕ
ПродажаТоваровТовары.Товар,
ПродажаТоваровТовары.Серия
ИЗ
Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ПродажаТоваровТовары.Ссылка = &Ссылка)
15.
Для обработки ситуации дублей в строках табличной части требуется
лучше сгруппировать строки запроса по аналитике Номенклатура, Серия
и суммировать КолДок, показатели остатков выбрать максимальными, что бы не суммировались значения
16. Обработка значения Null в запросе
17. ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество
проверка : Division by zero
18.
в параметрах виртуальной таблицы
Остатки(, … )
нет даты/времени снятия остатков , что является не корректным с точки зрения прикладной логики проведения документа!
19. В запросе отсутствует выборка именно текущего документа проведения !
т.е условие
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка
20.
Если Недостача>0 Тогда
флаг отказа не выставляется, что приводит к ошибка учета !
>
Кроме этого, главный бухгалтер компании Виола Григорьевна попросила Вас сделать поле
«Номер серии» в справочнике «Серии» обязательным для заполнения.
выставляем в ст. реквизитах в свойстве поля код
Проверять заполнение этого поля : выдавать ошибку
для тонкого клиента …
Шаг 3. Вопросы по курсу
скажу честно, часть курса не проходил в силу банального отсутствия времени …
однако считаю вашу работу достаточно важно по просвещению масс… и меня в частности…
обязательно займусь изучением с начала курса … как только появиться окно ….
из-за нескольких проектов …
фирмы выходят из кризиса… потребности автоматизации растут …
внедряем режим “толстого” клиента… так как тонкий час его мало кто знает и понимает логику работы…
и отсутствие возможности подключения внешних обработок в тонком просто финиш…
понимаю, что курс проф. разработки на платформе…
Жду продвинутого (вот только ли найду время ….)
особенно интересует тема блокировок… транзакций… спефицики реализации под разные субд…
упр. блокировки ….
Спасибо вам за курс.
>поэтому сделал функцию на серверной части
А вот контекст гонять лишний раз не следует, нужен был внеконтекстный серверный вызов.
По шагу 1 – зачет.
Сергей, спасибо за ответы на вопросы.
Пока не вижу отчета по шагу 2 и непонятная ситуация с ДЗ в течение курса. Не успели их сделать?
Найденные ошибки в финальном ДЗ:
1. В общем модуле ПроверкаДокументовСервер не установлен флаг «Вызов сервера». Соответственно невозможен вызов процедуры ПроверитьДокумент() из клиентской процедуры ПроверкаДокумента(). Решение: установить флаг «Вызов сервера».
2. В процедуре серверного общего модуля ПроверкаДокументовСервер. ПроверитьДокумент() используется процедура Предупреждение(), недоступная на сервере. Решение: использовать объект СообщениеПользователю.
3. Поскольку проверка документа ПродажаТоваров осуществляется по данным ИБ, перед проверкой документ рекомендуется записать:
Если ЭтаФорма.Модифицированность Тогда
Записать();
КонецЕсли;
4. В документе ПокупкаТоваров процедура ЗаполнитьКлиента() не работает в тонком клиенте. Решение: Получение основного покупателя выделяем в серверную функцию:
&НаСервереБезКонтекста
Функция ПолучитьОсновногоПокупателя()
Возврат Справочники.Клиенты.ОсновнойПокупатель;
КонецФункции
Хотя при закупке товаров контрагента логичнее назвать «Основной поставщик».
5. В обработке проведения документа ПокупкаТоваров не хватает строки:
Движения.ТоварыНаСкладе.Записывать = Истина;
6. В документе ПродажаТоваров для реквизита табличной части Серия не установлены связи параметров выбора Отбор.Владелец(Товары.Товар)
7. Документ ПродажаТоваров не установлен регистратором для регистра накопления ТоварыНаСкладе.
8. Обработка проведения документа ПродажаТоваров никуда не годится. Мой вариант:
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.ТоварыНаСкладе.Записывать = Истина;
Запрос = Новый Запрос;
Запрос.Текст =
“ВЫБРАТЬ
ПродажаТоваровТовары.Товар КАК Товар,
ПродажаТоваровТовары.Серия КАК Серия,
СУММА(ПродажаТоваровТовары.Количество) КАК КолДок,
МИНИМУМ(ISNULL(ТоварыНаСкладеОстатки.КоличествоОстаток, 0)) КАК КолОст,
МИНИМУМ(ISNULL(ТоварыНаСкладеОстатки.СуммаОстаток, 0)) КАК СумОст
ИЗ
Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки(
&Момент,
(Товар, Серия) В
(ВЫБРАТЬ
ПродажаТоваровТовары.Товар,
ПродажаТоваровТовары.Серия
ИЗ
Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка)) КАК ТоварыНаСкладеОстатки
ПО ПродажаТоваровТовары.Товар = ТоварыНаСкладеОстатки.Товар
И ПродажаТоваровТовары.Серия = ТоварыНаСкладеОстатки.Серия
ГДЕ
ПродажаТоваровТовары.Ссылка = &Ссылка
СГРУППИРОВАТЬ ПО
ПродажаТоваровТовары.Товар,
ПродажаТоваровТовары.Серия”;
Запрос.УстановитьПараметр(“Ссылка”, Ссылка);
Если РежимПроведения = РежимПроведенияДокумента.Оперативный Тогда
Запрос.УстановитьПараметр(“Момент”, Неопределено);
Иначе
Граница = Новый Граница(МоментВремени(), ВидГраницы.Исключая);
Запрос.УстановитьПараметр(“Момент”, Граница);
КонецЕсли;
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
Недостача = Выборка.КолДок – Выборка.КолОст;
Если Недостача>0 Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Недостаточно товара “+Выборка.Товар+ ” серии “+Выборка.Серия+” в количестве “+Недостача;
Сообщение.Сообщить();
КонецЕсли;
Запись = Движения.ТоварыНаСкладе.ДобавитьРасход();
Запись.Период = Дата;
Запись.Товар = Выборка.Товар;
Запись.Серия = Выборка.Серия;
Запись.Количество = Мин(Выборка.КолДок, Выборка.КолОст);
Если Выборка.КолДок = Выборка.КолОст Тогда
Запись.Сумма = Выборка.СумОст;
ИначеЕсли Выборка.КолОст = 0 Тогда
Запись.Сумма = 0;
Иначе
Запись.Сумма = Выборка.СумОст/Выборка.КолОст*Запись.Количество;
КонецЕсли;
КонецЦикла; // Пока Выборка.Следующий()
КонецПроцедуры
9. По просьбе Виолы Григорьевны в стандартном реквизите Код справочника Серии в свойстве «Проверка заполнения» ставим «Выдавать ошибку».
Не уверен, что нашёл все 20 ошибок, но похоже, что на пиво я заработал :)
Очень хорошо, Константин.
По шагу 1 – зачет :)
Часть 2 продолжение
http://www.1c-pro.ru/index.php?showtopic=26130&st=0&gopid=110457&#entry110457
По финальному ДЗ – зачет.
Айдана, вы дошли успешно справились со всеми задачами, несмотря на технические сложности.
Поздравляю со статусом финалиста!!!
Урааааа!!! Спасибо!!!
Поиск ошибок
1 Регистр «ТоварыНаСкладе» не закрывается в 0, ПродажаТоваров не является регистратором регистра.
2. Покупка товаров, ТЧ Товары, Количество строкового типа.
3. Покупка товаров ФормаДокумента
&НаКлиенте
Процедура ЗаполнитьКлиента(Команда)
Объект.Клиент = Справочники.Клиенты.ОсновнойПокупатель;
КонецПроцедуры
На клиенте нет доступности предопределенных элементов справочников, необходимо делать вызов функции ПредопределенноеЗначение() и соответственно неявные серверный вызов.
4. Покупка товаров. Команда ЗаполнитьТовары не выведена на форму.
5. Покупка товаров
ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“Документ.ПокупкаТоваров”));
Не верно задан тип, надо Тип(“ДокументСсылка.ПокупкаТоваров”)
6. Покупка товаров
Для незаписанного документа недоступен метод ПолучитьОбъект() из ссылки на этот документ. Надо использовать контекстный серверный вызов.
7. Покупка товаров
Нельзя в метод Загрузить() табличной части передавать табличную часть, нужно передавать ТаблицуЗначений.
&НаСервере
Процедура ЗаполнитьТоварыНаСервере(ДокументОснование)
Объект.Товары.Загрузить(ДокументОснование.Товары.Выгрузить());
КонецПроцедуры // ЗаполнитьТоварыНаСервере()
8. Покупка товаров, модуль объекта
Для движений не установлен признак Записывать, движения не сохраняются.
9. ПродажаТоваров, модуль формы. Перед вызовом функции ПроверитьДокумент(), если документ модифицирован его необходимо записать. Проверять необходимо в ОбработкеПроверкиЗаполнения().
10. В свойствах модуля необходимо установить галку ВызовСервера, поскольку функция вызывается с клиента.
11. Не нужно контролировать остаток при неоперативном проведении
12. В запросе нужно использовать левое соединение, чтобы попали все строки из документа.
13. Данные из документа в запросе не сгруппированы, остатки замножатся.
14. Данные из регистра остатков могут не присоединиться, нужно использовать isnull
15. В сообщении пользователю не указан индекс строки для привязки сообщения
16. В случае Недостачи необходимо установить Отказ=Истина и в дальнейшем алгоритме контролировать.
17. Проверять Знаменатель на 0 при определении себестоимости.
18. Для удаления влияния текущего документа на результат запроса необходимо очистить записи текущего документа в регистре ТоварыНаСкладах.
Вопросы по курсу:
– Что нового Вы узнали из базового курса по программированию?
Я был участником нескольких внедрений 1С 8.1 и кучи на 7.7. Есть сертификат 1С:Специалист 8.1
В базовом курсе понравился практический разбор особенностей 8.2. Подробнее раписывать можно долго – передача контекстов клиент-сервер, новый механизм проведения, обработчики событий – где, что и когда использовать, особенности работы с новыми объектами – форматированный документ. Очень полезные ответы на вопросы слушателей.
– От каких заблуждений избавились?
Особых-то и не было.
– Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
вам удалось применить новые навыки (какие результаты были достигнуты);
На 8.2 у меня пока проектов не было, определенные элементы этого курса безусловно можно использовать и в проектах на 8.1, новичкам он будет крайне полезен.
– Если Вы пока не работаете реальных проектах по внедрению решений на
«1С:Предприятии 8», то, что оказалось неожиданным из материалов курса?
Платформа 8.2 начала нравиться, много новых возможностей, удобно. Язык программирования стал более структурированным. Это шаг вперед в решениях от 1С.
• Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Гм.. на очных курсах не учился, не могу объективно сравнивать. В целом все удобно и материала очень много. Больше других понравился формат «тематических занятий по вторникам». И з пожеланий – на защищенных дисках добавить возможность запуска файликов один за другим.
>На клиенте нет доступности предопределенных элементов справочников
В тонком и веб-клиентах.
По первому шагу – зачет.
Шаг 3. Михаил, спасибо за ответы на вопросы.
Пока не вижу шага 2. Также непонятна ситуация с решениями ДЗ по ходу курса.
Отпишитесь прямо здесь.
Все домашние задания кроме монетизации выполнил, на часть 2 пока не хватает фантазии :)
Фантазии не нужно.
Заходите на http://devtrainingforum.v8.1c.ru/forum/ (или другой форум) и отвечаете..
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=566399#566399
И еще http://www.forum.mista.ru/topic.php?id=504329
(mdocs)
Здорово!
Вопрос, конечно не сложный. Покажите в этой же ветке как параметры устанавливать, я думаю автор вопроса совсем новичок.
Теперь о приятном :)
Михаил, поздравляю вас со статусом “Финалист базового курса”!!!
Урааааа! Спасибо!!!!!
Часть 2
Ответила на один легкий вопрос и долго искала какой нибудь посложнее, но пока ничего не могу найти. Так что пока выкладываю то что есть
http://www.1c-pro.ru/index.php?showtopic=26151&st=0&gopid=110450&#entry110450
Выкладываю первую часть ДЗ
– Документ ПродажаТоваров не является регистратором регистра ТоварыНаСкладе
и не двигает этот регистр. Таким образом, регистр двигается только в одну сторону.Исправляем
– В регистре ТоварыНаСкладе ресурс Количество лучше число 15.3, а не 15.2 тк возможно, будут использоваться граммы или подобные единицы.
– Документ ПокупкаТоваров не двигает регистр ТоварыНаСкладе тк в ОбработкеПроведения нет строки Движения.ТоварыНаСкладе.Записывать=Истина;Добавляем
– В Документе ПокупкаТоваров реквизит табличной части Количество типа строка. Исправляем на Число 15.3
– В Документе ПокупкаТоваров в процедуре ЗаполнитьКлиента из контекста клиента идет обращение к информационной базе. В тонком клиенте и Web это невозможно.Из клиентской процедуры нужно вызвать серверную поцедуру. И в ней обратиться к базе.
– В Документе ПокупкаТоваров команда формы ЗаполнитьТовары недоступна тк она не выведена на форму и соответствующая процедура нигде не вызывается
– В Документе ПокупкаТоваров в клиентской процедуре ЗаполнитьТовары при обращении к функции ВвестиЗначение указывается Тип(“Документ.ПокупкаТоваров”). Правильно было бы Тип(“ДокументСсылка.ПокупкаТоваров”)
– В серверной процедуре ЗаполнитьТоварыНаСервере таблицу нужно загружать из ТаблицыЗначений, для получения которой ТабличнуюЧасть исходного документа надо выгрузить.
– Механизм предложенный в серверной безконтекстной процедуре ЗаполнитьТоварыНаСервере не работает.Можно
предложить следующий вариант.
&НаКлиенте
Процедура ЗаполнитьТовары(Команда)
Перем Основание;
ВвестиЗначение(Основание, “Выберите документ-основание”, Тип(“ДокументСсылка.ПокупкаТоваров”));
ЗаполнитьТоварыНаСервере(Основание);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьТоварыНаСервере(Основание)
Объект.Товары.Загрузить(Основание.Товары.Выгрузить());
КонецПроцедуры // ЗаполнитьТоварыНаСервере()
– Вообще, все действия, связанные с командой ЗаполнитьТовары, видимо, направлены на копирование содержимого
документа типа ПокупкаТоваров. Этого можно достичь создавая новый документ копированием.
Если нужно получить новый документ с содержимым копирующим объект другого типа, то используем механизм “Ввод на
основании”.Для этого надо на соответствующей закладке в свойствах документа указать объект-основание и
воспользоваться конструктором ввода на основании.
Удаляем команду ЗаполнитьТовары и процедуры ЗаполнитьТовары и ЗаполнитьТоварыНаСервере
-В Документе ПродажаТоваров не установлена связь параметров выбора между Товаром и Серией.Устанавливаем для
реквизита Серия связи параметров выбора Отбор.Владелец(Товары.Товар)
– В Запросе Документа ПродажаТоваров:
* не указано условие на то что рассматривается конкретный документ ПродажаТоваровТовары.Ссылка = &Ссылка (не во внуреннем запросе, а во внешнем)
* не сделана группировка по товару и серии, т.е. можно ввести несколько одинаковых строк и они не “Сложатся”
* указано внутреннее соединение табличной части документа и регистра, а нужно указать левое соединение
* не указан период, на который нужны данные регистра – в параметрах виртуальной таблицы – нужно указать период-МоментВремени()
* в параметрах виртуальной таблицы в качестве фильтра указаны только Товары из табличной части, без учета серий. Нужно указывать и то. и другое.
* Поскольку пользователь самостоятельно указывает серии товаров и распределение по сериям автоматически делать не нужно, то и итоги по товару делать тоже не нужно. Наша задача проверить соответствие остатков товаров по сериям.
Текст Запроса в простейшем варианте может быть таким:
“ВЫБРАТЬ
| ВложенныйЗапрос.НомерСтроки,
| ВложенныйЗапрос.Товар,
| ВложенныйЗапрос.Серия,
| ВложенныйЗапрос.КолДок,
| ВложенныйЗапрос.СумДок,
| ТоварыНаСкладеОстатки.КоличествоОстаток КАК КолОст,
| ТоварыНаСкладеОстатки.СуммаОстаток КАК СумОст
|ИЗ
| (ВЫБРАТЬ
| МИНИМУМ(ПродажаТоваровТовары.НомерСтроки) КАК НомерСтроки,
| ПродажаТоваровТовары.Товар КАК Товар,
| ПродажаТоваровТовары.Серия КАК Серия,
| СУММА(ПродажаТоваровТовары.Количество) КАК КолДок,
| СУММА(ПродажаТоваровТовары.Сумма) КАК СумДок
| ИЗ
| Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
| ГДЕ
| ПродажаТоваровТовары.Ссылка = &Ссылка
|
| СГРУППИРОВАТЬ ПО
| ПродажаТоваровТовары.Товар,
| ПродажаТоваровТовары.Серия) КАК ВложенныйЗапрос
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладе.Остатки(
| &МоментВремени,
| (Товар, Серия) В
| (ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПродажаТоваровТовары.Товар,
| ПродажаТоваровТовары.Серия
| ИЗ
| Документ.ПродажаТоваров.Товары КАК ПродажаТоваровТовары
| ГДЕ
| ПродажаТоваровТовары.Ссылка = &Ссылка)) КАК ТоварыНаСкладеОстатки
| ПО ВложенныйЗапрос.Товар = ТоварыНаСкладеОстатки.Товар
| И ВложенныйЗапрос.Серия = ТоварыНаСкладеОстатки.Серия”;
– Обработка запроса делается в двух циклах и серия подбирается автоматически. Это противоречит заданию.
Цикл делаем один. В нем сравниваем количество в документе и на складе данного товара, данной серии. В результате
сравнения – проводим или отказываем.
– В Документе ПродажаТоваров в обработке проведения неверно заполнено
Сообщение.Поле = “Товары.Количество”; Здесь нужно привязывать к номеру строки табличной части.
А номер строки получать из запроса.Например,Сообщение.Поле = “Товары[“+(Выборка.НомерСтроки-1)+”].Количество”;
– При таком определении суммы списания
Запись.Сумма=ВыборкаСерии.СумОст/ВыборкаСерии.КолОст*Запись.Количество;
могут “зависнуть” копейки.
Пишем Запись.Сумма=?(Выборка.КолОст=Выборка.КолДок,Выборка.СумОст,Выборка.КолДок*Выборка.СумОст/Выборка.КолОст)
– Из клиентской процедуры формы Документа ПродажаТоваров вызывается процедура серверного общего модуля и вызов сервера в этом модуле не предусмотрен. Такой вызов не работает. Нужно или делать модуль клиентским, или указывать “вызов сервера”
– В процедуре ПроверитьДокумент делается попытка проверить наличие отрицательных значений количества. Этого можно добиться, указав в свойствах реквизита Количество галочку Неотрицательное.
Еще несколько соображений. Первое касается справочника Товары. Думается, что он должен быть иерархическим.
В постановке задачи ничего не говорится о единицах измерения. Их, наверное, все же нужно использовать. Для чего потребуется соответствующий справочник и реквизиты табличной части в документах. Кроме того, в документах отсутствует ревизит Цена. Это тоже представляется неправильным.
Что касается пожелания Виолы Григорьевны, оно не вполне понятно. НомерСерии в справочнике Серии отражается в наименовании. Заполнение Наименования и так является обязательным. Или это отдельный реквизит? Тогда нужно в его
свойствах свойство ПроверкаЗаполнения выставить в значение ВыдватьОшибку.
>Что касается пожелания Виолы Григорьевны, оно не вполне понятно.
Речь шла о том, что нужно установить свойство “Проверка заполнения” для стандартного реквизита “Код”.
Татьяна Федоровна, по первому шагу – отлично.
1. ПРАКТИЧЕСКОЕ ЗАДАНИЕ
[1]
Процедура Предупреждение() не работает на сервере
Общий модуль ПроверкаДокументовСервер: Предупреждение() заменено на Сообщить()
[2]
Для вызова экспортных процедур серверного общего модуля нужен установленный признак модуля «Вызов сервера»
Общий модуль ПроверкаДокументовСервер: включен признак «Вызов сервера»
[3]
Тип «СправочникиМенеджер» (переменная глобального контекста «Справочники») не существует на клиенте
Модуль формы «ФормаДокумента» документа «ПокупкаТоваров»: заполнение клиента вынесено в серверную контекстную процедуру
[4]
Серию товара в табличной части документа «Продажа товаров» можно выбрать от другого товара
Свойство «Связи параметров выбора» документа «Продажа товаров» настроено соответствующим образом
[5]
Документ «Продажа товаров» не изменяет остатки товаров
Документ «Продажа товаров» включен в состав регистраторов регистра «Товары на складе»
[6]
Сведений о недостаче товара при продаже не выдается, движения по расходу товара не формируются
Процедура ОбработкаПроведения() модуля документа «Продажа товаров»:
1. Соединение таблиц в запросе должно быть левым: к табличной части документа присоединяется таблица остатков регистра.
2. При группировке в секции «ИТОГИ» необходимо учитывать серию товара, а не только товар, кроме того, вместо секции итогов рациональнее применить секцию ГРУППИРОВАТЬ ПО
3. Остатки по регистру в запросе необходимо выбирать на позицию до текущего документа, а не текущую дату
4. Формирование движений полностью переписано в связи с отказом в запросе от секции ИТОГО и множественными ошибками в коде
[7]
Документ «Покупка товаров» не изменяет остатки товаров
Процедура ОбработкаПроведения() модуля документа «Покупка товаров»:
1. Добавлена инструкция записывать движения по регистру
[8]
Проверка заполнения табличной части документа «Продажа товаров» не работает, если объект изменен перед проверкой
Модуль формы документа «Продажа товаров»
Процедура проверки перенесена в модуль формы в отдельную серверную контекстную процедуру.
[9]
Поле «Номер серии» справочника «Серии» необязательно для заполнения
Изменено свойство «Проверка заполнения» стандартного реквизита «Код» справочника «Серии»
>Тип «СправочникиМенеджер» (переменная глобального контекста «Справочники») не существует на клиенте
Если быть более точным, то в тонком и веб клиенте.
В толстом может жить, ведь вы могли бы запустить конфигурацию и она корректно бы заполнила.
>вместо секции итогов рациональнее
Я бы сказал жестче, на рациональнее, а правильнее.
По первому шагу – зачет.
Финальное задание
Шаг 1.
Итак решение должно работать в обычном режиме и в управляемом (толстый и тонкий клиенты) .
(Web клиент не проверялся, т.к. нет под рукой Web-сервера.
Предположения, которые основываются на полном отсутствии упоминания в исходной поставке задачи.
1. Решение является средством для автоматизации оперативного сугубо «управленческого» учета, т.е. в частности
из базы не печатается никакая первичная документация, которая выдается на руки клиенту. Иначе нужно организовывать учет
контрагентов с полным набором первичной информации для печати той же ТОРГ-12 (ИНН, КПП, Р/с т.д.)
2. Информация о самой организации-заказчике в базе тоже полностью отсутствует. Т.е. полное отсутствие печатных форм ошибкой не считается.
3. Также не рассматривается как ошибка отсутствие единиц измерения (о них тоже ничего вообще не говорится), т.е. все покупается и продается в одних единицах.
Итак, отчасти в соответстствии с “общепринятыми” стандартами, отчасти для удобства отладки
1. Создана роль Полные права со всеми правами на объекты (кроме интерактивного удаления).
2. Создана подсистема Учет. В неё включены все объекты. Сформированы панели командного интерфейса.
3. Созданы формы списка документов ПоступлениеТоваров и ПродажаТоваров (для помещения на рабочий стол).
4. Сформирован рабочий стол, на который выведены обе формы списка
5. Созданы Пользователи с Ролью Полные права.
6. Включен режим «Управляемое и обычное приложение» (для работы всех клиентов, т.е. и в обычном, и в управляемом режиме)
7. Сформирован Интерфейс для работы в обычном приложении (как Полный в УПП Документы/Справочники/Сервис).
Далее
8. Справочники Клиенты, Товары, Серии скорее всего потребуют определенной группировки, следовательно
8.1. Сделал их иерархическими с иерархией групп и элементов
8.2. Сделаны обычные (НЕ управляемые) формы элемента, выбора, списка этих справочников для работы в обычном приложении.
9. Справочник Серии
9.1. Поскольку нет информации о том, является ли серия уникальной по всей номенклатуре или только в рамках
одной номенклатуры, установил контроль уникальности в пределах подчинения владельцу.
9.2 По просьбе бухгалтера сделал обязательным к заполнению стандартный реквизит Код (это и есть номер серии). Т.е. Серия (Код) вносится вручную и серии д.б. разные по одной Номенклатуре
9.3 Код для большей свободы в наименовании серий сделал строковым.
10. Основной клиент. Основной клиент может меняться. Поэтому введена Константа ОсновнойКлиент (Тип СправочникСсылка.Клиенты)
куда и заносим основного клиента. Предопределенный основной клиент удален.
11. Документ Поступление Товаров
11.1. Реквизиты Клиент и Табчасть Товары обязательно д.б. заполнены (Проставил «выдавать ошибку»)
11.2. В ТабЧасти д.б. обязательно заполнены Товар, Серия и Количество (Теоретически могут где-то раздобыть товар «без цены» поэтому сумма необязательна) (Проставил «выдавать ошибку»)
Установил флаг Количество и Сумма Неотрицательные
11.3. Установил нумерацию в пределах года
11.4. ФормаДокумента ПоступлениеТоваров (управляемая)
11.4.1. Исправлена Процедура ЗаполнитьКлиента() (СправочникМенеджер на клиенте недоступен), значение константы ОсновнойПокупатель получаю через функцию формы (НаСервереБезКонтекста)
11.4.2. Для реквизитов Клиент, Товары, Товар, Серия, Количество Установлена АвтоотметкаНезаполненного.
11.4.3. Команда «ЗаполнитьТовары» не выведена в форму (Вывел на командную панель) таблицы Товары.
11.4.4. В процедуре ЗаполнитьТовары Ошибка. В функции ВвестиЗначение второй параметр должен быть Тип(“ДокументСсылка.ПокупкаТоваров”).
Сделана проверка на отказ выбора основания,
Добавлено предупреждение об очистке таблицы товаров при заполнении.
11.4.5. Исправлена процедура ЗаполнитьТоварыНаСервере. Сделано выполнение &НаСервере (Чтобы воспользоваться РеквизитФормыВЗначение(“Объект”)
и ЗначениеВРеквизитФормы(ДокОбъект,”Объект”) между этими преобразованиями заполняется табчасть), Объект в процедуру ЗаполнитьТоварыНаСервере передавать не надо: Контекст формы доступен
11.5. МодульОбъекта/ОбработкаПроведения : в начало процедуры добавлена строка Движения.ТоварыНаСкладе.Записывать = Истина; для записи движений по регистру при проведении.
11.6 Сформированы Обычные формы документа (с аналогичными управляемому режиму требованиями) и Форма списка.
12. Документ ПродажаТоваров
12.1. Реквизиты Клиент и Табчасть Товары обязательно д.б. заполнены (Проставил «выдавать ошибку»)
11.2. В ТабЧасти д.б. обязательно заполнены Товар, Серия и Количество (Проставил «выдавать ошибку»)
Реквизиты Количество и Сумма установлены Неотрицательными.
11.3 Ошибка. Для реквизита ТабЧасти Серия установил Связь параметра выбора по владельцу с реквизитом Товар
11.4. Установил нумерацию в пределах года
11.5. ФормаДокумента (управляемая)
11.5.1. Процедура модуля формы ПроверкаДокумента и команда Проверка Документа удалены. Количество будет неотрицательным по настройкам самого реквизита (п.11.2).
Кроме того вызов экспортной серверной процедуры общего модуля из процедуры с директивой НаКлиенте запрещен, Вызов нужно бало б делать через процедуру НаСервере модуля формы.
Удалил общий модуль ПроверкаДокументовСервер (он теперь пустой).
11.5.2. Для реквизитов Клиент, Товары, Товар, Серия, Количество Установлена АвтоотметкаНезаполненного.
11.5.3. Ошибка Регистр ТоварыНаСкладе добавлен в движения документа.
11.5.4. Для правильного определения остатков при запросе параметр Удаление движений установлено “Удалять автоматически”.
11.6. Исправлен запрос в ОбработкеПроведения. Остатки определяются на момент Новый Граница(Ссылка.МоментВремени(),ВидГраницы.Исключая), соединение д.б. левое
(иначе строки документа по номенклатуре/Серии по которым вообще нет остатков не будут Обработаны/продиагностированы), добавлено в выборку поле номер строки и итоги по сериям.
Сделано “заполнение” неопределенных СумОст и КолОст с помощью функции ЕстьNULL (чтобы были нули там где NULL)
Средняя цена тоже рассчитывается прямо в запросе. Сортировка по номеру строки, чтобы товар списывался и контролировался по остатку в порядке строк документа
11.7. Переделан обход результата запроса: Выборки по Товар/Серия/Строка и соответственно вычисление текущего остатка и недостачи по каждой строке документа.
Для списания ошибок округления (из-за ошибок округления при расчете средней цены могут остаться копейки, когда весь товар по количеству списан ) при списании последнего на складе количества по Товару/Серии – оставшаяся сумма списывается полностью.
11.8. Добавлены Перечисление РежимРаботы (Оперативный/Неоперативный) и константа РежимРаботы (перечислениеСсылка.РежимРаботы), в которой можно задавать режим работы. Оперативный режим проведения нужно оговаривать с клиентом, т.к.блокирование проведения документов, приводящих к отрицательным остаткам может не позволить оперативно выписать и провести реальный документ, поэтому реализовал такой контроль отрицательных остатков по партиям при проведении.
11.8. Если режим работы (Константа РежимРаботы) – неоперативный, то при проведении Сообщение об образовании “красных” остатков выдается, но товар списывается полностью
(чтобы потом отчетом легче было вылавливать красные остатки по регистру),
Если Неоперативный – “ошибочные” документы продажи не будут проводиться (но диагностическое сообщение выдается)
11.8. Исправлена опечатка “Недостаточно товава ” в сообщении.
11.9. Исправлена строка для позиционирования сообщения по полю Количество
Сообщение.Поле = “Товары[“+(ВыборкаПоСтроке.НомерСтроки-1)+”].Количество”;
11.10 Сформированы Обычные формы документа (с аналогичными управляемому режиму требованиями к работе полей и связям) и Форма списка.
12 Сделан Отчет “Остатки на складе” (Товар/Серия/Регистратор – Количество и сумма) .
13 Поскрльку эта информация точно понадобится: Ведены два оборотных регистра – Закупки и Продажи. Регистраторы ПокупкаТоваров (Закупки), ПродажаТоваров (Продажи). В регистрах ИзмеренияЖ Клиент, Товар, Серия, Документ. Ресурсы: Сумма, Количество. Прописаны Движения в документах. Сделаны два отчета на СКД Закупки и Продажи.
============================================
Шаг 2. А фотографии просто по почте отправить?
===========================================
Шаг 3.
1. Что нового Вы узнали из базового курса по программированию?
Несмотря на то, что 1С занимаюсь давно, почти во всех частях нашел что-то для себя новое и полезное. Практически во-всех.
НО наиболее полезными оказались: работа с управляемыми формами (формирование интерфейсов, наполнение реквизитами и т.д.). Четкое объяснение и постоянная практическая демонстрация практического кодирования с точки зрения Клиент/Сервер, СКД. Очень хорошее объяснение и я бы сказал обучение методике работы от класса/объекта (через Синтакс-Помощник к свойставам и методам). Вообще наблюдение за работой квалифицированного специалиста само по себе является обучением.
2. От каких заблуждений избавились?
Самое главное и грустное, что управляемое приложение без обычного пока жить не будет. У нас пока спроса нет, да и те болванки, которые заготовлены в УПП и КА не выдерживают никакой критики. Соответственно дорабатывать их имеет смысл только при реальном запросе клиента. На самом деле ни одного готового стандартного рабочего места в управляемом нет. Тот же заказ покпателя даже табчасти не имеет в форме. Да менеджеры взвоют. Вот это действительно “избавление от заблуждений”.
3.Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом вам удалось применить новые навыки (какие результаты были достигнуты)
Лето. Сейчас никаких глобальных проектов не запускали. Но на подходе организация, где может понадобиться WEB – клиент (студенты будут смотреть свои оценки, ну и т.д.) Так что очень вовремя “подучился” :)
4. Если Вы пока не работаете реальных проектах по внедрению решений на
«1С:Предприятии 8», то, что оказалось неожиданным из материалов курса
Такого рода удивлений не было.
5. Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Даже трудно что-то покритиковать. Не хочу ничего придумывать, Вы здорово продумали всю схему работы. Дело не в том, что понравилось/не поравилось. Метода дает обучающемуся результат. Связка Курс/Задания/Ответы/Бонусы работает. С одной стороны ты учишься, а с другой – тебя все время подталкивают: а это еще не все. Так что учиться продолжаем. Отдельное спасибо, что Вы оставляли видео с “текушими” ошибками. Сам процесс поиска и исправления ошибок преподавателем – тоже обучение.
Спасибо все отлично.
Итак с меня осталась презентация (фото) и хвосты по ДЗ. До субботы управлюсь.
Шаг 1. 5 баллов за подробный отчет!
Шаг 3. С заказом покупателя действительно печальная история, но разработчики уверены, что и так вполне пойдет..
Спасибо за детальные ответы. По шагу 3 – зачет.
Роли – не создана ни одна роль, нужно создать чтоб хотя-бы интерактивно не удаляли
спр. Серии – код тип строка, должен число
– нет уникальности, нужна
– в форме доступен вледелец, нужно убрать
– На закладке Стандартные реквизиты, в свойствах Код нужно установить проверку заполнения
Док. Покупка – в команде ЗаполнитьКлиента нужно вызывать серверную функцию
– выбирается основной покупатель, должен продавец
– желательно добавить реквизиты Покупатель, Продавец – булево
– желательно добавить Договор контрагента с подчиненностью Контрагенту и вывести на форму документа
– не выведена команда заполнить товары
– процедура ЗаполнитьТовары вообще непонятна – не зря она и не выведена на форму
для ее реализации нужно создавать докумен ЗаказПоставщика, реквизит ДокументОснование с типом
ЗаказПоставщика
Создавать РН ЗаказыПокупателей и делать по нему движения
– в ТЧ тип Количество строка, должен число
– в ТЧ нет цены, нужно добавить реквизит Цена и вывести на форму
– в ТЧ нет расчета суммы
– в ТЧ нет пересчета цены или количества
– в ОбработкаПроведения нужно добавить строку – Движения.ТоварыНаСкладе.Записывать = Истина;
Док. Продажа – процедура Проверить документ должна выполняться на клиенте, на сервере выводить предупреждения
нельзя
лучше сделать ч/з СообщениеПользователю
– в ТЧ у реквизита Серия нет Связи параметров выбора
– в ТЧ нет цены, нужно добавить реквизит Цена и вывести на форму
– в ТЧ нет расчета суммы
– в ТЧ нет пересчета цены или количества
– в процедуре ОбработкаПроведения нужно очищать движение
– в запросе нет группировки дублей строк, нужно делать вложенный запрос
– в запросе внутреннее соединение, должно левое
– В запросе нет проверки на Null количества и суммы остатка
– В запросе итоги, не нужны
– при выводе недостачи неправильное обращение к ТЧ, нужно к определнной строке
– при выводе недостачи, нет отказа
– при выводе недостачи нет Продолжить
Рег. Товары – не установлен регистратор Продажа
Что нового Вы узнали из базового курса по программированию?
Из нового, я узнал:
– новые возможности 8.2
– про управляемые формы
– команды форм
– управляемые блокировки
– исполнение кода на клиенте и сервере
– модули менеджеров объектов и их предназначение
– новый принцип проведения
– динамический список
– новое предназначение подсистем
– стандартные свойства объектов
– определенный щелчек был при “обнаружении” видов прав, программного и интерактивного
– оптимальное использование СП
– набрался практики
– в формулах сначала умножать потом делить, для увеличения точности
– систематизировал знания
• Если Вы работаете на практике с платформой «1С:Предприятие 8», то, каким образом
вам удалось применить новые навыки (какие результаты были достигнуты);
Стало на много понятнее и проще реализовывть поставленные задачи – не только на 8.2 но и на 8.1
Чувствуется компетентнось по сравнению с коллегами.
• Насколько удобен, оказался формат обучения в сравнении с очным форматом?
Формат вполне удобен, особенно порадовали “окна”.
По сравнению с очным небо и земля – очные курсы эт подход “дойной короровы”, расчитаный на постоянный поток
новичков.
Разово снять кешь, а там дальше будем думать как потом заманивать новичков.
Т.е. на очных некоторые моменты можно упустить, многое зависит от препода – от его состояния.
Что-то для него очевидное может упуститься из виду, не остаются записи – что успел понять и законспектирвать с тем и
останешься.
Этот формат и в электронном виде и в готовом подробном конспекте и ДЗ и МГ помогают подкрутить.
При решении ДЗ можно обсудить спорные моменты, высказать свое мнение.
Да и по цене – на много выгоднее очных, плюс бонусы!..
Отдельно нужно отметиь подход Фарита к своим курсам – в каждом прилагается бонус по Монетизации, что в УПП
Маркетинг, что здесь.
Своеобразная докрутка до щелчка – зацепка, чтоб не только были получены знания, но и максимальная польза.
Знания сами по себе – ничего не значат, нужно уметь их – реализовать !..
Роман, спасибо за обратную связь!
По шагу 3 – зачет.
Не вижу отчета по шагу 2 финального ДЗ..
По поводу помощи ближним:
На работе коллегам объяснял некоторые моменты по 8.2, в частности про новое проведение, объяснил новые функции подсистем, разделение прав в ролях отностительно программного и пользовательского контекста.
Еще дал 0 блок для ознакомлния и стимула приобрести сам курс.
http://www.forum.mista.ru/topic.php?id=504322
http://www.forum.mista.ru/topic.php?id=504330
Может как-то приблизит.. ;))
И еще +50% :)
Подведем итоги.
Роман, поздравляю вас со статусом “Финалист базового курса”.
Спасибо за хорошую работу!
Отлично, 50% по второму шагу засчитываем!
Мое искреннее – Спасибо !..
Евгений, как и обещал – выкладываю ссылку на статью http://infostart.ru/public/75702/
Отлично!!
Сильно вы в сторону типовых конфигураций клоните (договор, заказ…).
По первому шагу – зачет.