Решение задач при подготовке на Специалиста по платформе по 1С:8.3

17.08.16

Разработка - Подготовка к аттестации

Практические занятия. Решение задач из сборника задач при подготовке к сертификату Специалист по Платформе 1С 8.3.

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Архив решений
.rar 13,87Mb
160
160 Скачать (1 SM) Купить за 1 850 руб.

Пока готовился на спеца по платформе мной были решены многие задачи из сборника. Выкладываю свои решения по решению:

  1. Оперативных задач (23 задачи: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 15, 17, 24, 26, 28, 31, 32, 36, 37, 40, 42, 45).
  2. Бухгалтерских задач (21 задача: 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 14, 15, 18, 23, 27, 29, 31, 32, 33, 35)
  3. Расчетных задач (24 задачи: 01, 02, 03, 04, 05, 06, 07, 09, 12, 13, 15, 17, 16, 17, 18, 19, 20, 21, 22, 23, 27, 35, 43, 45, 48)
  4. Бизнес задачи присутствуют.

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

PS: После прорешивания сдал с первого раза.

Пример решения Задачи по Бухгалтерии:

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

Документ «Приходная накладная» реализует следующую проводку: Дт «Товары» - Km «Поставщики» на количество и сумму закупаемого товара.

В системе необходимо реализовать документ, который осуществлял бы перемещение товара между собственными организациями (с возможным изменением склада компании). Фактически подобное перемещение будет регистрировать сразу две операции: продажа товара поставщиком покупателю и покупка покупателем товара у поставщика. Регистрация этих операций будет осуществляться документом «КупляПродажа». В шапке документа (при его заполнении) указывается организация-покупатель, организация-поставщик, склад организации-покупателя и склад организации-поставщика.

Документ «КупляПродажа» реализует следующие проводки:

По организации-поставщику:

Дт «Прибыли и убытки» - Km «Товары» на количество сумму себестоимости. Себестоимость товара рассчитывается для каждой организации в разрезе партий и складов по каждой номенклатурной позиции.

Дт «Покупатели» - Km «Прибыли и убытки» на сумму в продажных ценах;

По организаиии-пуодавцу: Дт «Товары» - Km «Поставщики» на сумму закупаемого товара

Решение:

Не буду расписывать создание объектов. Сразу к делу.

Документ "Приходная накладная" модуль объекта:

Процедура ОбработкаПроведения(Отказ, Режим)
    //Блокировки накладывать смысла нет, тут только увеличиваем остатки.
    // регистр Проводки
    Движения.Проводки.Записывать = Истина;
    Движения.Проводки.Очистить();
    Для Каждого ТекСтрокаСписокНоменклатуры Из СписокНоменклатуры Цикл
        Движение = Движения.Проводки.Добавить();
        Движение.СчетДт = ПланыСчетов.Управленческий.Товары;
        Движение.СчетКт = ПланыСчетов.Управленческий.Поставщики;
        Движение.Период = Дата;
        Движение.Организация = Организация;
        Движение.КоличествоДт = ТекСтрокаСписокНоменклатуры.Количество;
        Движение.Сумма = ТекСтрокаСписокНоменклатуры.Сумма;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Номенклатура] = ТекСтрокаСписокНоменклатуры.Номенклатура;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Склад] = Склад;
        Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконто.Партия] = Ссылка;
    КонецЦикла;
КонецПроцедуры

Документ "Купля продажа" модуль объекта:

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

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

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

    //Обхожу по группировкам
    // и создаю наборы движений
    ВыборкаНоменклатура = Результат.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);

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

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

1С Обучение 1С сертификация 1С специалист по платформе 1С решения задач

См. также

Подготовка к аттестации Программист Платформа 1С v8.3 1C:Бухгалтерия Платные (руб)

Обучающая программа 1С Online представляет собой интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Тренажер запросов подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    79805    106    15    

200

Подготовка к аттестации Программист Запросы 1C:Бухгалтерия Платные (руб)

Желаете повысить свой уровень разработки? Не знаете, как оптимизировать работу тяжелых запросов 1С? Или знаете методы оптимизации, но на практике не получаете результат? Тогда эта интерактивная обучающая программа для Вас! Оптимизация запросов прямо в программе 1С:Предприятие 8. Несколько десятков практических заданий, рассматривающих методы оптимизации на практике. От Вас требуются реальные решения - оптимизация представленных запросов. Автоматизированная система оценит Ваш запрос и представит результат проверки.

1800 руб.

06.07.2015    73148    123    9    

136

Подготовка к аттестации Программист Россия Бесплатно (free)

Источники информации для подготовки к Эксперту.

18.12.2024    10925    GraVVitY    61    

65

Подготовка к аттестации Программист Стажер Бесплатно (free)

Меня зовут Татьяна, в 1С-разработке я уже семь лет, а в этом году официально стала junior-специалистом. Рассказываю, как всё происходило.

10.09.2024    8797    PROSTO-1C    21    

14

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

Я Олег, разработчик 1С. Расскажу, как сдавал на сертификат Специалиста, в чём ошибся и что стоит учесть.

11.06.2024    17478    PROSTO-1C    52    

70

Подготовка к аттестации Программист Стажер Платформа 1С v8.3 Россия Бесплатно (free)

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

04.06.2024    11766    anton99    50    

58

Подготовка к аттестации Стажер 1C:Бухгалтерия Фармацевтика, аптеки Россия Управленческий учет Бесплатно (free)

Краткий рассказ о выборе 1С как основного языка программирования для дипломной работы в университете, и само приложение к диплому.

28.05.2024    5225    DmitryOneBit    20    

20
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. пользователь 24.08.16 07:48
Сообщение было скрыто модератором.
...
2. chilyagin 91 27.08.16 12:23 Сейчас в теме
В *.dt по задачам бизнес-процессах ваш вариант кода не отработает корректно, если в конфигураторе в список пользователей будет добавлен имя пользователя, имени которого не добавлено в справочник ФЛ.
Ваш код


Правильнее оформить условие вот так:
	Если ТекПол.Пустая()Тогда
		ТекПол = Справочники.ФизическиеЛица.СоздатьЭлемент();
		ТекПол.Наименование = ИмяПользователя();
		ТекПол.Записать();
	КонецЕсли;
3. BraunAlex 137 06.09.16 12:15 Сейчас в теме
(2) chilyagin,
Однако, отрабатывало корректно на 100%. И именно такой код дают при подготовке на спеца и при решении сквозной задачи.
К тому же читаем справку:
СправочникМенеджер.<Имя справочника> (CatalogManager.<Имя справочника>)
НайтиПоНаименованию (FindByDescription)

НайтиПоНаименованию(<Наименование>, <ТочноеСоответствие>, <Родитель>, <Владелец>)

Возвращаемое значение:
Тип: СправочникСсылка.<Имя справочника>; Неопределено.
Ссылка на найденный элемент справочника.
Если не существует ни одного элемента с требуемым наименованием, то будет возвращена пустая ссылка.
Если для справочника наименование не задано (длина = 0) и поиск выполняется по полному соответствию, то будет возвращено Неопределено.


СправочникСсылка.<Имя справочника> (CatalogRef.<Имя справочника>)
Пустая (IsEmpty)

Возвращаемое значение:
Тип: Булево.
Истина - ссылка не указывает ни на какой объект (пустая ссылка); Ложь - в противном случае.


Ваш код в данном контексте будет ошибочным, т.к. поиск производится по точному совпадению и ссылки справочника не существует, т.е. Неопределено.
4. white-mount 06.09.16 12:24 Сейчас в теме
(3)
Однако, отрабатывало корректно на 100%.

И сколько человек получили сертификат "специалист" по платформе или бухучёту с этим кодом?
5. BraunAlex 137 06.09.16 12:33 Сейчас в теме
(4) white-mount, Не умничай. Проверил - да, действительно. Не задавался целью ставить под сомнение подготовительные курсы.
6. cmd_vasec 34 13.02.17 11:18 Сейчас в теме
Вопросы:
1. Почему вы используете определение режима проведения - на экзамене это ошибка или нет?
2. При выводе нехватки товара вы выводите ссылку номенклатура (неявное обращение к базе), а надо представление. Или я ошибаюсь?
7. BraunAlex 137 13.02.17 14:54 Сейчас в теме
(6) 1. Лучше использовать определение режима. В некоторых задачах будет считаться ошибкой/недочетом неумение пользоваться этим свойством/методом. С другой стороны Вы теряете время на написание кода.
2. Используйте представление. Но и использование ссылок не будет ошибкой/недочетом, т.к. перед нами не стоит задачи по оптимизации кода.
8. cmd_vasec 34 13.02.17 17:00 Сейчас в теме
(7) 1. Приведите, пожалуйста пример.
2. А не будет ли это запрос в цикле?
9. BraunAlex 137 13.02.17 20:29 Сейчас в теме
(8) 1. Смотрите в примерах и задачи в сборнике задач. Я сейчас не вспомню. Давно подготовку проходил.
2. Что именно? К использованию ссылок внутри конструкций цикла по выборке не придираются. Или мне повезло :) Вы же не на эксперта идете сдавать. Или...?
10. Hans 3 29.08.17 15:43 Сейчас в теме
Загрузил первую задачу по ОУ, пересчеты суммы строки, пересчет суммы документа при изменении табличных частей не нужно что ли делать?
11. BraunAlex 137 29.08.17 19:56 Сейчас в теме
(10) На сколько помню, в постановке задачи такого условия не было (ни в одной). Зачем придумывать дополнительную работу, тем более что время жестко ограничено?
12. DarkUser 16.05.18 10:45 Сейчас в теме
Спасибо за решения. Сейчас как раз готовлюсь и так же решаю задачи по сборнику. Хорошо когда можно сравнить свой код с решениями других программистов.
Оставьте свое сообщение