Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
21 ноя 2024, 15:30

Флуд по Экзамену

Автор sergathome, 18 янв 2011, 17:16

0 Пользователей и 1 гость просматривают эту тему.

sergathome

Сергей, Вам ещё интересна эта тема ? Я просмотрел Ваше решение первой задачи и был удивлён подходом к проведению документа по варианту 8.2 с управляемыми блокировками. Во-первых создание объекта Блокировка является избыточным, так как существует специальный параметр Движение.Регистр.БлокироватьДляИзменения, во-вторых не понял, какой смысл отменять руками движения если есть возможность просто сменить модель проведения - Ваше решение имитирует технологию 8.1 с её контролем остатков до проведения, тогда как технология 8.2 предполагает контроль после. На экзамене за это убьют однозначно. Я сам в растерянности ибо не могу придумать простого способа выкрутиться при партионном списании. На имеющейся у меня демо-базе к радченковской книге этот вопрос тупо обойдён. Чешу репу...

Vdeg

Цитата: sergathome от 18 янв 2011, 17:16На экзамене за это убьют однозначно.

Откуда информация?  :mellow:

pershinsergei

если мы хотим проводить документ так, как это делалось в 8.1 , то используется эта конструкция

Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");

ЭлементБлокировки = Блокировка.Добавить("РегистрБухгалтерии.Управленческий");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Субконто1", "Номенклатура");

Блокировка.Заблокировать();


а если проводим по новому методу, то
Движения.ТоварныеЗапасы.БлокироватьДляИзменения = Истина;

а вообще по новому методу задач 10 и то не наберется из оперативного учета, да и из бух всего пока мне пару встретилось

sergathome

"а вообще по новому методу задач 10 и то не наберется из оперативного учета, да и из бух всего пока мне пару встретилось"

Я вообще-то так понимаю, что все задачи, для которых в явном виде не указано, что они должны решаться под 8.1 решаются под текущую 8.2 платформу. К тому же технология 8.1 всё равно использована Вами неверно. Предполагается использование конструкции ДЛЯ ИЗМЕНЕНИЯ в запросе по остаткам ;) что вобщем-то гораздо проще и быстрее нежели создание объекта блокировки.
Ошибки технологии разработки считаются самыми грубыми. (это для Вам, Vdeg)

sergathome

Короче я придумал как, но приходится обращаться к лишней таблице - из основной таблицы регистра остатков выбирать движения текущего документа и плюсовать их к текущим остаткам... Теоретически это должно работать быстрее чем полная отмена проведения, но как-то это ... непривычно, что ли. При этом постконтроль есстно теряет смысл. Если интересно - пишите, выложу.

Vdeg

Цитата: sergathome от 19 янв 2011, 15:06
Короче я придумал как, но приходится обращаться к лишней таблице - из основной таблицы регистра остатков выбирать движения текущего документа и плюсовать их к текущим остаткам...

Зачем??

pershinsergei

ДЛЯ ИЗМЕНЕНИЯ в запросе по остаткам
это как раз и будет ошибкой на экзамене
каким методом решать нигде не говориться, а про блокировки мне люди поведали которые уже прошли атестацию

sergathome

Я не совсем точно описал проблему. Уточняю. Технология 8.1 предполагает использование автоматических блокировок, соответственно конструкции ДЛЯ ИЗМЕНЕНИЯ. Естественно можно использовать и управляемые, как и смешанные, но тогда нужно объяснить с какой целью это делается. Думаю в Вашем случае это будет затруднительно.
Ваше решение 1 задачи - гибрид гориллы с крокодиллой - вся настройка конфигурации выполнена под 8.2, а технология проведения имитирует 8.1 на управляемых блокировках, при этом вместо использования БлокироватьДляИзменения зачем-то создаётся отдельный объект.  Кстати там есть ещё ошибка - Вы используете ЭтоНовый() для определения наличия движений... ай-яй-яй, а если документ был записан, но не проведён ? А если проведение было отменено ? ;)

Vdeg

Цитата: sergathome от 20 янв 2011, 09:20
Кстати там есть ещё ошибка - Вы используете ЭтоНовый() для определения наличия движений... ай-яй-яй, а если документ был записан, но не проведён ? А если проведение было отменено ? ;)
Где эта ошибка?

sergathome

Процедура ОбработкаПроведения(Отказ, Режим)

....
//устанавливаем блокировку на рег остатки номенклатуры
Блокировка=новый БлокировкаДанных;
ЭлементБлокировки=Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим=РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных=СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");

Блокировка.Заблокировать();


//если документ перепроводится, то удаляем старые движения
Если НЕ ЭтоНовый() Тогда
Движения.ОстаткиНоменклатуры.Очистить();
КонецЕсли;
....


Весь этот кусок - сплошная ошибка. А надо-то всего лишь было :
РегистрНакопления.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Если Проведен Тогда

Хотя я повторюсь - ручная отмена проведение это нарушение технологии.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск