Задача на специалиста 1С (по платформе). Бух. учет, управляемая блокировка
Из сборника задач по специалисту.
Часть текста задачи
Подскажите, где и в какой момент необходимо устанавливать блокировку данных , при проведении документа "Расходная накладная"
Для информации:
Субконто есть только у счета "Товары", субконто "Номенклатура" (там хранится и комплект, и комплектующие)
Часть текста задачи
Скрытый текст |
---|
Необходимо организовать возможность учета сборки комплектов. Сами комплекты определяются
в справочнике «Номенклатура» наравне с обычными товарами, услугами. Операция сборки комплекта оформляется в системе с помощью документа «Сборка». В шапке этого документа указывается количество собираемых комплектов и сам комплект. Из чего собирается комплект (какие позиции в него входят и в каком количестве) определяется в табличной части документа. В системе должна храниться информация о плановом составе комплекта, однако в процессе сборки может происходить пересортица. В табличной части документа указывается фактический перечень и количество комплектующих, потребовавшихся для сборки. В состав комплекта не могут входить другие комплекты. Документ «Сборка» реализует следующие проводки: Дт «Основное производство» – Kт «Товары» (на списываемое количество комплектующих и их себестоимость); Дт «Товары» – Kт «Основное производство» (на собранное количество комплектов и сумму списанных материалов). Документ не должен проводиться, если соответствующих комплектующих не оказалось в компании. Документом «Расходная накладная» отражается продажа комплектов, отдельные детали продаваться не могут. В том случае, если каких-либо комплектов нет, то должна произойти сборка непосредственно при отгрузке покупателю. В этом случае делаются следующие проводки: Дт «Общехозяйственные затраты» – Kт «Товары» (на списываемое количество комплектующих и их себестоимость. Комплектующие списываются в составе и количестве соответствующемплановому составу комплекта); Дт «Товары» – Kт «Общехозяйственные затраты» (на собранное количество комплектов и сумму списанных материалов). Дт «Товары» – Kт «Общехозяйственные затраты» (на сумму срочной сборки, которая рассчитывается как 5 рублей за каждую комплектующую, участвующую в сборке). Например, если в состав комплекта входят 5 пузырьков и 1 коробка, то сумма сборки этого комплекта составит 5 X 5 + 1 X 5 = 30 рублей. Далее происходит списание всех продаваемых комплектов, проводки документа: Дт «Прибыли и убытки» – Km «Товары» на сумму себестоимости комплектов; Дт «Покупатели» – Km «Прибыли и убытки» на сумму в продажных ценах. В том случае, когда потребного количества комплектов нет, и недостающее количество не может быть собрано, документ не проводится. |
Подскажите, где и в какой момент необходимо устанавливать блокировку данных , при проведении документа "Расходная накладная"
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Движения.РегистрБухгалтерии.Записывать = Истина;
Запрос = Новый Запрос();
Запрос.Текст = " Тут запрос на получение данных:
| 1.Для списания комплекта (и проверка на его остатки),
| 2.Состава комплекта, для тех случаев, если необходима срочная сборка (и так же проверка на остатки)";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("МоментВремени", МоментВремени());
Запрос.УстановитьПараметр("СчетТовары", ПланыСчетов.ПланСчетов.Товары);
Запрос.УстановитьПараметр("ВидСубконтоНоменклатура",ПланыВидовХарактеристик.ПланВидовСубконто.Номенклатура);
Пакеты = Запрос.ВыполнитьПакет();
// в первом пакете - данные для списания комплекта
ВыборкаКомплектов = Пакеты[1].Выбрать();
// во втором пакете - данные состава комплекта
ВыборкаСоставаКомплекта = Пакеты[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
// ???? ТУТ БЛОКИРОВКУ НА СЧЕТ "Товары" на списываемые комплекты ????
// ???? ТУТ БЛОКИРОВКУ НА СЧЕТ "Товары" на списываемые комплектующие комплекта ????
Пока ВыборкаКомплектов.Следующий() Цикл
ОсталосьСписать = ВыборкаКомплектов.Количество;
СписываемоеКоличество = Мин(ВыборкаКомплектов.Количество,ВыборкаКомплектов.КоличествоОстаток);
// спишем столько, сколько есть комплектов
Если СписываемоеКоличество > 0 Тогда
Движение = Движения.РегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
Движение.СчетКт = ПланыСчетов.ПланСчетов.Товары;
Движение.КоличествоКт = СписываемоеКоличество;
// -------------- какие то еще заполнения регистра------------------//
Движение = Движения.РегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов.Покупатели;
Движение.СчетКт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
Движение.Сумма = СписываемоеКоличество / ВыборкаКомплектов.КоличествоОстаток * ВыборкаКомплектов.СуммаОстаток;
// -------------- какие то еще заполнения регистра------------------//
КонецЕсли;
// смотрим сколько осталось списать комплектов, если что-то осталось сделаем срочную сборку
ОсталосьСписать = ОсталосьСписать - СписываемоеКоличество;
Если ОсталосьСписать > 0 Тогда
// тогда нужно досписать
Если ВыборкаСоставаКомплекта.НайтиСледующий(Новый Структура("Комплект",ВыборкаКомплектов.Номенклатура)) Тогда
ДетализацияСоставаКомплекта = ВыборкаСоставаКомплекта.Выбрать();
СебестоимостьКомплекта = 0;
Пока ДетализацияСоставаКомплекта.Следующий() цикл
Движение = Движения.РегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов.ОсновноеПроизводство;
Движение.СчетКт = ПланыСчетов.ПланСчетов.Товары;
Движение.КоличествоДт = ДетализацияСоставаКомплекта.Количество*ОсталосьСписать;
Движение.КоличествоКт = ДетализацияСоставаКомплекта.Количество*ОсталосьСписать;
// -------------- какие то еще заполнения регистра------------------//
Движение = Движения.РегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов.Товары;
Движение.СчетКт = ПланыСчетов.ПланСчетов.ОсновноеПроизводство;
Движение.КоличествоДт = ОсталосьСписать;
Движение.КоличествоКт = ОсталосьСписать;
// -------------- какие то еще заполнения регистра------------------//
Если ОсталосьСписать > 0 Тогда
Движение = Движения.РегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
Движение.СчетКт = ПланыСчетов.ПланСчетов.Товары;
Движение.КоличествоКт = ОсталосьСписать;
// -------------- какие то еще заполнения регистра------------------//
Движение = Движения.РегистрБухгалтерии.Добавить();
Движение.СчетДт = ПланыСчетов.ПланСчетов.Покупатели;
Движение.СчетКт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
// -------------- какие то еще заполнения регистра------------------//
КонецЕсли;
КонецЦикла;
КонецЕсли;
ВыборкаСоставаКомплекта.Сбросить();
КонецЕсли;
КонецЦикла;
КонецПроцедуры
ПоказатьДля информации:
Субконто есть только у счета "Товары", субконто "Номенклатура" (там хранится и комплект, и комплектующие)
По теме из базы знаний
Найденные решения
Остальные ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
(4) Правильно ли я понимаю, что необходимо будет использовать менеджер временных таблиц, для того чтобы корректно произвести блокировку данных?
То есть, как я это вижу:
Так? На сколько это правильно, и прокатит ли на экзамене?
То есть, как я это вижу:
// 1. Блокируем по счету "Товары" списываемые комплекты из ТЧ
// 2. Формируем запрос
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.Текст = " Тут запрос на получение данных:
| 1.Для списания комплекта (и проверка на его остатки),
| 2.Состава комплекта, для тех случаев, если необходима срочная сборка ";
ПакетРезультатов = Запрос.ВыполнитьПакет();
РезультатЗапросаНаСоставКомплекта = ПакетРезультатов[1];
// 3. Блокируем по счету "Товары" списываемые комплектующие из пакета запроса
// 4. Продолжаем выполнять запрос на проверку остатков для комплектующих
// 5. далее все действия по записи данных в регистр
ПоказатьТак? На сколько это правильно, и прокатит ли на экзамене?
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)