Задача на специалиста 1С (по платформе). Бух. учет, управляемая блокировка

1. Isonic 234 15.05.18 11:33 Сейчас в теме
Из сборника задач по специалисту.

Часть текста задачи

Скрытый текст


Подскажите, где и в какой момент необходимо устанавливать блокировку данных , при проведении документа "Расходная накладная"


Процедура ОбработкаПроведения(Отказ, РежимПроведения)
	
	Движения.РегистрБухгалтерии.Записывать = Истина;
	
	Запрос = Новый Запрос();
	Запрос.Текст = " Тут запрос на получение данных:
	|	1.Для списания комплекта (и проверка на его остатки),
	|	2.Состава комплекта, для тех случаев, если необходима срочная сборка (и так же проверка на остатки)";
	
	Запрос.УстановитьПараметр("Ссылка",					Ссылка);
	Запрос.УстановитьПараметр("МоментВремени",			МоментВремени());
	Запрос.УстановитьПараметр("СчетТовары",				ПланыСчетов.ПланСчетов.Товары);
	Запрос.УстановитьПараметр("ВидСубконтоНоменклатура",ПланыВидовХарактеристик.ПланВидовСубконто.Номенклатура);
	
	Пакеты = Запрос.ВыполнитьПакет();
	
	// в первом пакете - данные для списания комплекта
	ВыборкаКомплектов 		= Пакеты[1].Выбрать();
	// во втором пакете - данные состава комплекта
	ВыборкаСоставаКомплекта = Пакеты[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
	
	// ???? ТУТ БЛОКИРОВКУ НА СЧЕТ "Товары" на списываемые комплекты ????
	// ???? ТУТ БЛОКИРОВКУ НА СЧЕТ "Товары" на списываемые комплектующие комплекта ????
	
	Пока ВыборкаКомплектов.Следующий() Цикл
		
		ОсталосьСписать = ВыборкаКомплектов.Количество;
		СписываемоеКоличество = Мин(ВыборкаКомплектов.Количество,ВыборкаКомплектов.КоличествоОстаток);
		
		// спишем столько, сколько есть комплектов
		Если СписываемоеКоличество > 0 Тогда
			Движение = Движения.РегистрБухгалтерии.Добавить();
			Движение.СчетДт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
			Движение.СчетКт = ПланыСчетов.ПланСчетов.Товары;
			Движение.КоличествоКт = СписываемоеКоличество;
			// -------------- какие то еще заполнения регистра------------------//
			
			Движение = Движения.РегистрБухгалтерии.Добавить();
			Движение.СчетДт = ПланыСчетов.ПланСчетов.Покупатели;
			Движение.СчетКт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
			Движение.Сумма  = СписываемоеКоличество / ВыборкаКомплектов.КоличествоОстаток * ВыборкаКомплектов.СуммаОстаток;
			// -------------- какие то еще заполнения регистра------------------//
		КонецЕсли;	
		
		// смотрим сколько осталось списать комплектов, если что-то осталось сделаем срочную сборку
		ОсталосьСписать = ОсталосьСписать - СписываемоеКоличество;
		Если ОсталосьСписать > 0 Тогда
			// тогда нужно досписать
			Если ВыборкаСоставаКомплекта.НайтиСледующий(Новый Структура("Комплект",ВыборкаКомплектов.Номенклатура)) Тогда
				ДетализацияСоставаКомплекта = ВыборкаСоставаКомплекта.Выбрать();
				СебестоимостьКомплекта = 0;
				Пока ДетализацияСоставаКомплекта.Следующий() цикл
					
					Движение = Движения.РегистрБухгалтерии.Добавить();
					Движение.СчетДт = ПланыСчетов.ПланСчетов.ОсновноеПроизводство;
					Движение.СчетКт = ПланыСчетов.ПланСчетов.Товары;
					Движение.КоличествоДт = ДетализацияСоставаКомплекта.Количество*ОсталосьСписать;
					Движение.КоличествоКт = ДетализацияСоставаКомплекта.Количество*ОсталосьСписать;
					// -------------- какие то еще заполнения регистра------------------//
					
					Движение = Движения.РегистрБухгалтерии.Добавить();
					Движение.СчетДт = ПланыСчетов.ПланСчетов.Товары;
					Движение.СчетКт = ПланыСчетов.ПланСчетов.ОсновноеПроизводство;
					Движение.КоличествоДт = ОсталосьСписать;
					Движение.КоличествоКт = ОсталосьСписать;
					// -------------- какие то еще заполнения регистра------------------//
					
					Если ОсталосьСписать > 0 Тогда
						Движение = Движения.РегистрБухгалтерии.Добавить();
						Движение.СчетДт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
						Движение.СчетКт = ПланыСчетов.ПланСчетов.Товары;
						Движение.КоличествоКт = ОсталосьСписать;
						// -------------- какие то еще заполнения регистра------------------//
						
						Движение = Движения.РегистрБухгалтерии.Добавить();
						Движение.СчетДт = ПланыСчетов.ПланСчетов.Покупатели;
						Движение.СчетКт = ПланыСчетов.ПланСчетов.ПрибылиИУбытки;
						// -------------- какие то еще заполнения регистра------------------//
					КонецЕсли;	
				КонецЦикла;	
			КонецЕсли;
			ВыборкаСоставаКомплекта.Сбросить();
		КонецЕсли;	
	КонецЦикла;	
	
КонецПроцедуры

Показать


Для информации:
Субконто есть только у счета "Товары", субконто "Номенклатура" (там хранится и комплект, и комплектующие)
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
8. Isonic 234 17.05.18 08:45 Сейчас в теме +0.05 $m
кто подскажет? Так или не так?
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Dream_kz 129 15.05.18 11:45 Сейчас в теме
3. Isonic 234 15.05.18 11:47 Сейчас в теме
(2) до запроса и на счет "Товары" можно будет поставить блокировку только на комплект.
На комплектующие наверно тоже надо поставить?
4. Dream_kz 129 15.05.18 11:51 Сейчас в теме
(3) сначала узнаем какие материалы списываем, блокируем, читаем остатки
5. Isonic 234 15.05.18 12:10 Сейчас в теме
(4) Правильно ли я понимаю, что необходимо будет использовать менеджер временных таблиц, для того чтобы корректно произвести блокировку данных?
То есть, как я это вижу:



// 1. Блокируем по счету "Товары" списываемые комплекты из ТЧ

// 2. Формируем запрос 
Запрос = Новый Запрос();
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;   
Запрос.Текст = " Тут запрос на получение данных:
    |    1.Для списания комплекта (и проверка на его остатки),
    |    2.Состава комплекта, для тех случаев, если необходима срочная сборка ";

ПакетРезультатов = Запрос.ВыполнитьПакет();
РезультатЗапросаНаСоставКомплекта = ПакетРезультатов[1];

// 3. Блокируем по счету "Товары" списываемые комплектующие из пакета запроса
// 4. Продолжаем выполнять запрос на проверку остатков для комплектующих
// 5. далее все действия по записи данных в регистр


Показать


Так? На сколько это правильно, и прокатит ли на экзамене?
6. ivan811 15.05.18 17:42 Сейчас в теме
Берете номенклатуру из табличной части и накладываете блокировку по этой номенклатуре до запроса.
7. Isonic 234 16.05.18 08:13 Сейчас в теме
(6) Это я понимаю.
Посмотрите мой коммент (5)
Недостаточно блокировать только комплекты, я так понимаю нужно и комплектующие заблокировать. Тот метод что я указал по идеи выполняет задачу.
8. Isonic 234 17.05.18 08:45 Сейчас в теме +0.05 $m
кто подскажет? Так или не так?
Оставьте свое сообщение
Вакансии
Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)

Программист 1С
Москва
зарплата от 250 000 руб.
Полный день

Программист 1C
Волгоград
зарплата от 200 000 руб.
Полный день

Аналитик
Санкт-Петербург
зарплата от 200 000 руб. до 250 000 руб.
Полный день