Запись булева значения.

1. Intercititude 20.11.19 18:29 Сейчас в теме
Есть документ с табличной частью Номенклатура,СерииНоменклатуры,Установить( тип Булево),Количество.

Надо,чтобы при проведении документа,если стоит галочка в Установить, то в справочнике СерииНоменклатуры на форме элемента у соответствующей серии Ставилась эта галочка тоже в Истина.

Как это реализовать ? или может поделитесь ссылкой с примером.

В правильном ли направлении думаю?:


	
Процедура ПослеЗаписи
Серии = Справочники.СерииНоменклатуры.ПустаяСсылка();
	НовСтр = ЭтотОбъект.ТЧ.Добавить();
	Если НовСтр.Установить = Истина Тогда
		Упс = Серии.ПолучитьОбъект();
		Упс.ТребуетсяДооформление = Истина;
		Упс.Записать(РежимЗаписиДокумента.Запись);
		 
	КонецЕсли;
КонецПроцедуры;
Показать


Что использовать вместое РежимЗаписиДокумента. Надо запись справочника.
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
5. Aleksandr_prof 191 20.11.19 19:30 Сейчас в теме +0.5 $m
Странная задача. Но если её всё-таки нужно решить, то я механизм вижу примерно так:
Процедура ПослеЗаписи()
	
	Для каждого строка из Объект.ТабЧастьТовары цикл
		СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект(); // получили элемент справочника
		Если строка.Установить тогда
			СерияОбъект.ТребуетсяДооформление = истина;
			// необходимо оставить информацию о том, что именно этот документ
			// изменил реквизит (для отмены проведения), либо придумайте свой реквизит для механизма:
			СерияОбъект.Комментарий = "ИзмененДокументом № " + Строка(Объект.Номер);
			СерияОбъект.Записать(); // это справочник, никакой режим записи не нужен!
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

// Если при отмене проведения галку необходимо снимать
Процедура ПриЗаписи() // возможно нужна другая процедура, тут нужно проверять
	
	Если РежимЗаписиДокумента.ОтменаПроведения тогда
		Для каждого строка из Объект.ТабЧастьТовары цикл
			СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект();
			Если строка.Установить тогда
				Коммент = СерияОбъект.Комментарий;
				// если элемент справочника изменён именно этим документом тогда убираем признак
				Если Прав(Коммент, СтрДлина(СерияОбъект.Комментарий) - 20) = Объект.Номер тогда
					СерияОбъект.ТребуетсяДооформление = ложь;
					СерияОбъект.Комментарий = ""; // удалили признак изменения документом
					СерияОбъект.Записать();
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;		

КонецПроцедуры;
Показать
trickster; +1 Ответить
Остальные ответы
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
2. Fox-trot 156 20.11.19 18:48 Сейчас в теме
(1) а при отмене проведения галку снимать?
Intercititude; +1 Ответить
3. Intercititude 20.11.19 18:51 Сейчас в теме
(2) Интересный момент,уточню уже только завтра у пользователя.
4. Fox-trot 156 20.11.19 19:10 Сейчас в теме
(3) все это похоже на попытку использовать справочник в виде регистра сведений, а может и оборотов
12. ben19791010 21.11.19 07:10 Сейчас в теме
(1)
Надо,чтобы при проведении документа

Процедура ПослеЗаписи

обработка проведения есть такая процедура? в ней и нужно делать всё
23. Intercititude 21.11.19 10:53 Сейчас в теме
(12)Хорошо,подскажите как это реализовать в обработчике проведения ?
19. Sashares 34 21.11.19 10:47 Сейчас в теме
(1) Встречал подобную реализацию.
Особенно весело, если один и тот же элемент справочника есть в разных документах.
Взял пользователь и перепровел старый документ.
И справочник перезаписался по данным старого документа.
20. Intercititude 21.11.19 10:49 Сейчас в теме
(19) Остался пример и обход этого веселого случая?)
26. Sashares 34 21.11.19 11:08 Сейчас в теме
(20)У данной реализации нет обхода.

При проведении документа записывались для справочника новые значения.
В ОбработкаУдаленияПроведения - возвращались старые.

Но это дичь.
Ганс; Intercititude; +2 Ответить
5. Aleksandr_prof 191 20.11.19 19:30 Сейчас в теме +0.5 $m
Странная задача. Но если её всё-таки нужно решить, то я механизм вижу примерно так:
Процедура ПослеЗаписи()
	
	Для каждого строка из Объект.ТабЧастьТовары цикл
		СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект(); // получили элемент справочника
		Если строка.Установить тогда
			СерияОбъект.ТребуетсяДооформление = истина;
			// необходимо оставить информацию о том, что именно этот документ
			// изменил реквизит (для отмены проведения), либо придумайте свой реквизит для механизма:
			СерияОбъект.Комментарий = "ИзмененДокументом № " + Строка(Объект.Номер);
			СерияОбъект.Записать(); // это справочник, никакой режим записи не нужен!
		КонецЕсли;
	КонецЦикла;
	
КонецПроцедуры

// Если при отмене проведения галку необходимо снимать
Процедура ПриЗаписи() // возможно нужна другая процедура, тут нужно проверять
	
	Если РежимЗаписиДокумента.ОтменаПроведения тогда
		Для каждого строка из Объект.ТабЧастьТовары цикл
			СерияОбъект = строка.СерииНоменклатуры.ПолучитьОбъект();
			Если строка.Установить тогда
				Коммент = СерияОбъект.Комментарий;
				// если элемент справочника изменён именно этим документом тогда убираем признак
				Если Прав(Коммент, СтрДлина(СерияОбъект.Комментарий) - 20) = Объект.Номер тогда
					СерияОбъект.ТребуетсяДооформление = ложь;
					СерияОбъект.Комментарий = ""; // удалили признак изменения документом
					СерияОбъект.Записать();
				КонецЕсли;
			КонецЕсли;
		КонецЦикла;
	КонецЕсли;		

КонецПроцедуры;
Показать
trickster; +1 Ответить
6. Fox-trot 156 20.11.19 19:40 Сейчас в теме
(5) то есть даже если отменить проведение, то этот код выполнится. надо бы проверку проведения добавить
7. Aleksandr_prof 191 20.11.19 19:42 Сейчас в теме
(6) А разве не добавил строкой?
Если РежимЗаписиДокумента.ОтменаПроведения тогда
15. Intercititude 21.11.19 09:18 Сейчас в теме
8. vugluscr1991 12 20.11.19 20:47 Сейчас в теме
Поскольку процедура выбрана "ПослеЗаписи" - значит транзакция уже окончена и синхронизировать запись документа и справочника не имеет смысла.
Тогда имеет смысл синхронизировать установку это галки со всеми записями во всех документах такого вида,
то есть
ВЫБРАТЬ
	ДокументВидТЧ.Ссылка КАК Ссылка
ИЗ
	Документ.ДокументВид.ТабличнаяЧасть КАК ДокументВидТЧ
ГДЕ
	ДокументВидТЧ.СерияНоменклатуры= &НужнаяМнеСерия
	И ДокументВидТЧ.Ссылка.Проведен = ИСТИНА

Сперва запрос: а нет ли вообще документов, проведенных с такой серией в табличной части?
Если Результат пустой - тогда если галка установлена - снимаем, объект записываем,
если результат не пустой, а галка не установлена - устанавливаем, объект записываем.
Процедура записи правильная в (5) только условия нужно проверить, вдруг записывать не надо (и без того все правильно).
18. Unk92 270 21.11.19 10:42 Сейчас в теме
Как отметили в (8) транзакция уже окончена.
1. Некорректно для данной задачи использовать обработчик после записи, у вас может быть ситуация, когда документ провелся, а элемент справочника не перезаписался (например конфликт блокировок).
В данном случае правильнее использовать обработку проведения.
Если нужно, чтобы при отмене проведения тоже изменялись данные (например, снимались галочки), то можно использовать обработку отмены проведения.
2. Судя по обработчику "После записи" я так понимаю вы используете модуль формы, и тут вы тоже можете столкнуться с проблемой.
Если нажать провести не из формы документа, а из формы списка, то изменений в справочнике не будет.
21. Intercititude 21.11.19 10:49 Сейчас в теме
(18) Хорошо,подскажите как это реализовать в обработчике проведения ?
24. Unk92 270 21.11.19 10:55 Сейчас в теме
(21) В (5) написали пример кода, такой же кот использовать в обработке проведения. Табличная часть, та что с сериями, это же табличная часть объекта, а не реквизит формы?
25. Intercititude 21.11.19 10:56 Сейчас в теме
(24) Извиняюсь,увидел. Да табличная часть.
10. ganjaman 21.11.19 01:36 Сейчас в теме
(5) только получение объекта нужно поставить уже после всех "если", когда уже явно выяснили, что объект нужно будет изменять

да и по уму, вообще не использовать при/после записи, а юзать ОбработкуПроведения, если уж совсем по поставленному условию все делать, ибо там в любом случае ТЧ будет каким то образом обходиться, смысл гонять циклы несколько раз по одной и той же ТЧ в разных событиях
22. Intercititude 21.11.19 10:51 Сейчас в теме
(10)Хорошо,подскажите как это реализовать в обработчике проведения ?
27. ganjaman 21.11.19 14:02 Сейчас в теме
(22) точно таким же образом, как предложили в (5), только подправить под имеющийся алгоритм обработки проведения
14. Intercititude 21.11.19 09:18 Сейчас в теме
(5) То что ПослеЗаписи это я решил. Так как у документа много разных форм. В модуле формы основной форы документа открывается определенная форма в зависимости от настройки.
9. lmnlmn 69 20.11.19 21:15 Сейчас в теме
А может быть одна и та же номенклатура с одинаковой серией в разных документах?
16. Intercititude 21.11.19 09:19 Сейчас в теме
(9) Да, решил выводить сообщение пользователю об этом.
17. lmnlmn 69 21.11.19 09:27 Сейчас в теме
(16) В подобном случае я бы не подписался галочку в справочнике делать. Но если уж так хочется, то можно подпиской на событие проверить что там вообще с данной номенклатурой и сериями во всех документах и нарисовать "галочку" соответствующую действительности. Три варианта развития событий получается:
1. Все серии с "галочкой"
2. Все серии без "галочки"
3. Есть серии как с "галочкой" так и без.
11. Fox-trot 156 21.11.19 05:35 Сейчас в теме
тогда уж до кучи еще и ОтменаПроведения() юзать
13. alekshihanov 21.11.19 07:54 Сейчас в теме
Подписки на события юзать
Оставьте свое сообщение
Вакансии
1С аналитик
Москва
зарплата от 210 000 руб.
Полный день

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

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

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

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