Помогите с кодом на 1с

1. user2118713 12.12.24 12:20 Сейчас в теме
&НаКлиенте
Процедура НачатьИгру(Команда)
	Элементы.НачатьИгру.Картинка = Элементы.ИграНачалась.Картинка;
	СоздатьИгровоеПоле();
	ЗаполнитьПолеМинами();
	ЗаполнитьПолеЦифрами();
КонецПроцедуры                                             

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	// Вставить содержимое обработчика.
КонецПроцедуры

&НаКлиенте
Процедура РежимСложностиПриИзменении(Элемент) 
	НастроитьВидимостьПараметров();
КонецПроцедуры                 

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

Процедура ОпределитьПараметрыИгровогоПоля()
	Если Объект.РежимСложности = "Новичок" Тогда
		Объект.ВысотаИгровогоПоля = 3;
		Объект.ШиринаИгровогоПоля = 3;
		Объект.КоличествоМин = 3;
	ИначеЕсли Объект.РежимСложности = "Любитель" Тогда
		Объект.ВысотаИгровогоПоля = 7;
		Объект.ШиринаИгровогоПоля = 7;
		Объект.КоличествоМин = 10;				
	ИначеЕсли Объект.РежимСложности = "Профессионал" Тогда
		Объект.ВысотаИгровогоПоля = 9;
		Объект.ШиринаИгровогоПоля = 9;
		Объект.КоличествоМин = 30;
	КонецЕсли;	
КонецПроцедуры
&НаКлиенте
Процедура СоздатьИгровоеПоле()

	Для НомерКолонки = 1 по Объект.ШиринаИгровогоПоля цикл
			Колонка = НоваяКолонка(НомерКолонки);
			Для НомерСтроки = 1 по Объект.ВысотаИгровогоПоля цикл
				ДобавитьЯчейку(НомерКолонки, НомерСтроки, Колонка);
				// Конструкция попытка - исключение
				Попытка
					ИмяЭлемента = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
					ПунктМеню = Элементы.Найти("Пункт1_" + ТекущийЭлемент.Имя);
					ПунктМеню.Доступность = Истина;
					ПунктМеню = Элементы.Найти("Пункт2_" + ТекущийЭлемент.Имя);
					ПунктМеню.Доступность = Ложь;
				Исключение
					Элемент = Элементы.Найти(ИмяЭлемента);
					ПунктМеню = Элементы.Добавить("Пункт1_" + ИмяЭлемента,
					Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
					ПунктМеню.ИмяКоманды = "ПоставитьФлажок";
					ПунктМеню = Элементы.Добавить("Пункт2_"+ИмяЭлемента,
					Тип("КнопкаФормы"), Элементы.КонтекстноеМеню);
					ПунктМеню.ИмяКоманды = "УбратьФлажок";
					ПунктМеню.Доступность = Ложь;
				КонецПопытки;
				// Конструкция попытка - исключение
			КонецЦикла;
	КонецЦикла;
	УдалитьЛишниеЭлементы();
КонецПроцедуры

Функция НоваяКолонка(Номер)
	ИмяЭлемента = "Колонка" + Номер;
	Элемент = Элементы.Найти(ИмяЭлемента);
	Если Элемент = Неопределено тогда
		Элемент = Элементы.Добавить("Колонка" + Номер, Тип("ГруппаФормы"),Элементы.ИгровоеПоле);
		//Элемент = Элементы.Добавить("Колонка" + Номер, Тип("ГруппаФормы"),Элементы.ИгровоеПоле);
	Элемент.Вид = ВидГруппыФормы.ОбычнаяГруппа;
    Элемент.ОтображатьЗаголовок = Ложь;
	Элемент.ЦветФона = WebЦвета.Орхидея;
	Элемент.Группировка = ГруппировкаПодчиненныхЭлементовФормы.Вертикальная;
	КонецЕсли;
	Возврат Элемент;
КонецФункции // НоваяКолонка()

Процедура ДобавитьЯчейку(НомерКолонки, НомерСтроки, Группа)
	ИмяЭлемента = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
	Элемент = Элементы.Найти(ИмяЭлемента);
	Если Элемент = Неопределено тогда
	Элемент = Элементы.Добавить("Ячейка_" + НомерКолонки + "_" + НомерСтроки, Тип("ДекорацияФормы"), Группа);
	Элемент.Вид = ВидДекорацииФормы.Картинка;
	Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Выпуклая, 2);
	Элемент.Высота = 1;
	Элемент.Ширина = 2;
	Элемент.Гиперссылка = Истина;
	Элемент.УстановитьДействие("Нажатие", "ОткрытьЯчейку");
	Элемент.Заголовок = "";
	ПунктМеню = Элементы.Добавить("Пункт1_" + ИмяЭлемента,
	Тип("КнопкаФормы"), Элемент.КонтекстноеМеню);
	ПунктМеню.ИмяКоманды = "УбратьФлажок";
	ПунктМеню.Доступность = Ложь;
	КонецЕсли;
КонецПроцедуры     

Процедура УдалитьЛишниеЭлементы()
	ТекущаяШирина = Элементы.ИгровоеПоле.ПодчиненныеЭлементы.Количество();
	Если ТекущаяШирина = 0 Тогда
		ТекущаяВысота = 0;
	Иначе
		Колонка = Элементы.ИгровоеПоле.ПодчиненныеЭлементы.Получить(0);
		ТекущаяВысота= Колонка.ПодчиненныеЭлементы.Количество();
	КонецЕсли;
	//Начинаем удаление колонок ячеек
	//Обходим с правого нижнего угла
	НомерКолонки = ТекущаяШирина;
	Пока НомерКолонки > 0 Цикл
		НомерСтроки = ТекущаяВысота;
		Пока НомерСтроки > 0 Цикл
			Если НомерСтроки > Объект.ВысотаИгровогоПоля тогда
				Элемент = Элементы.Найти("Ячейка_" + НомерКолонки + "_" + НомерСтроки);
				Элементы.Удалить(Элемент);
			КонецЕсли;
			НомерСтроки = НомерСтроки - 1;
		КонецЦикла;
		Если НомерКолонки > Объект.ШиринаИгровогоПоля Тогда
			Элемент = Элементы.Найти("Колонка" + НомерКолонки);
			Элементы.Удалить(Элемент);
		КонецЕсли;
		НомерКолонки = НомерКолонки - 1;
	КонецЦикла;	
КонецПроцедуры

&НаКлиенте
Процедура ОткрытьЯчейку(Элемент)
	Элемент.Гиперссылка = Ложь;
	Если Элемент.Заголовок = "ЭтоМина" Тогда
		Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 0);
		Элемент.Картинка = Элементы.Взрыв.Картинка;
		ПоказатьПредупреждение(,"Вы проиграли");
	Иначе
		Элемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Вдавленная, 2);
		Элемент.Картинка = КартинкаЯмки(Элемент.Заголовок);
		Если Элемент.Заголовок = "0" Тогда
			ОткрытьСоседниеЯчейки(Элемент);
		КонецЕсли;	
	КонецЕсли;
КонецПроцедуры 

Процедура ЗаполнитьПолеМинами()

	Генератор = Новый ГенераторСлучайныхЧисел();
	ОсталосьМин = Объект.КоличествоМин;
	Пока ОсталосьМин > 0 Цикл
		НомерСтроки = Генератор.СлучайноеЧисло(1,Объект.ВысотаИгровогоПоля);
		НомерКолонки = Генератор.СлучайноеЧисло(1, Объект.ШиринаИгровогоПоля);
		Элемент = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
		Элемент = Элементы.Найти(Элемент);
		Если Элемент.Заголовок = "ЭтоМина" Тогда
			Продолжить;
		КонецЕсли;
		Элемент.Заголовок = "ЭтоМина";
		ОсталосьМин = ОсталосьМин - 1;
		//Картинка мины
		//Элемент.Картинка = БиблиотекаКартинок.Удалить;
	КонецЦикла;	
КонецПроцедуры 

Процедура ЗаполнитьПолеЦифрами()

	Для НомерСтроки = 1 по Объект.ВысотаИгровогоПоля Цикл
		Для НомерКолонки = 1 по Объект.ШиринаИгровогоПоля Цикл
			ИмяЭлемента = "Ячейка_" + НомерКолонки + "_" + НомерСтроки;
			Элемент = Элементы.Найти(ИмяЭлемента);
			Если Элемент.Заголовок = "ЭтоМина" тогда
				Продолжить;
			КонецЕсли;
			Элемент.Заголовок = КоличествоМин(НомерСтроки, НомерКолонки);
			//Элемент.Картинка = Новый Картинка();
			//Элемент.ТекстНевыбраннойКартинки = Элемент.Заголовок;
			//Элемент.Шрифт = Новый Шрифт (Элемент.Шрифт,,,Истина);
			//Элемент.ЦветТекста = WebЦвета.СветлоГрифельноСерый
		КонецЦикла
	КонецЦикла	

КонецПроцедуры

Функция КоличествоМин(НомерСтроки, НомерКолонки)
	Результат = 0;
	Для Шаг = 1 По 8 Цикл
		ИмяЭлемента = "Ячейка_";
		Если Шаг = 1  тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки-1);
		ИначеЕсли Шаг = 2 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки-1);
		ИначеЕсли Шаг = 3 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки-1);
		ИначеЕсли Шаг = 4 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки);
		ИначеЕсли Шаг = 5 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки);
		ИначеЕсли Шаг = 6 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки+1);
		ИначеЕсли Шаг = 7 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки+1);
		Иначе
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки+1);
		КонецЕсли;
		СоседнийЭлемент = Элементы.Найти(ИмяЭлемента);
		Если СоседнийЭлемент <> Неопределено
			и СоседнийЭлемент.Заголовок = "ЭтоМина" Тогда
			Результат = Результат + 1;
		КонецЕсли;
	КонецЦикла;	
				
	Возврат Результат

	

КонецФункции // КоличествоМин()

Функция КартинкаЯмки(МинВокруг)
	Если МинВокруг = "0" Тогда
		Возврат Элементы.Ямка.Картинка;
	Иначе
		ИмяКартинки = "Ямка"+МинВокруг;
		Возврат Элементы[ИмяКартинки].Картинка
	КонецЕсли;	

	

КонецФункции // КартинкаЯмки()

&НаКлиенте
Процедура ОткрытьСоседниеЯчейки(Элемент)
	Координаты = СРЕД(Элемент.Имя, 8);
	ПозицияРазделителя = Найти (Координаты, "_");
	НомерКолонки = Число (ЛЕВ(Координаты, ПозицияРазделителя-1));
	
	НомерСтроки = Число (СРЕД(Координаты, ПозицияРазделителя+1));
	Для Шаг = 1 По 8 Цикл
		ИмяЭлемента = "Ячейка_";
		Если Шаг = 1  тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки-1);
		ИначеЕсли Шаг = 2 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки-1);
		ИначеЕсли Шаг = 3 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки-1);
		ИначеЕсли Шаг = 4 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки);
		ИначеЕсли Шаг = 5 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки);
		ИначеЕсли Шаг = 6 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки-1)+"_"+(НомерСтроки+1);
		ИначеЕсли Шаг = 7 Тогда
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки)+"_"+(НомерСтроки+1);
		Иначе
			ИмяЭлемента = ИмяЭлемента+(НомерКолонки+1)+"_"+(НомерСтроки+1);
		КонецЕсли;
		СоседнийЭлемент = Элементы.Найти(ИмяЭлемента);
		Если СоседнийЭлемент <> Неопределено
			и СоседнийЭлемент.Заголовок <> "ЭтоМина" и СоседнийЭлемент.Гиперссылка = Истина Тогда
			СоседнийЭлемент.Гиперссылка = Ложь;
			СоседнийЭлемент.Картинка = Новый Картинка();
			СоседнийЭлемент.Рамка = Новый Рамка(ТипРамкиЭлементаУправления.Одинарная, 0);
			Если СоседнийЭлемент.Заголовок = "0" Тогда
				СоседнийЭлемент.ТекстНевыбраннойКартинки = "";
				ОткрытьСоседниеЯчейки(СоседнийЭлемент);
			Иначе
				СоседнийЭлемент.ТекстНевыбраннойКартинки = СоседнийЭлемент.Заголовок;
				СоседнийЭлемент.Шрифт = Новый Шрифт(СоседнийЭлемент.Шрифт,,,Истина);
				СоседнийЭлемент.ЦветТекста = WebЦвета.КрасноФиолетовый;
			КонецЕсли;	
		КонецЕсли;
	КонецЦикла;
	                                                                   
КонецПроцедуры

&НаКлиенте
Процедура УбратьФлажок(Команда)
		ПунктМеню = Элементы.Найти("Пункт1_" + ТекущийЭлемент.Имя);
	ПунктМеню.Доступность = Истина;
	ПунктМеню = Элементы.Найти("Пункт2_" + ТекущийЭлемент.Имя);
	ПунктМеню.Доступность = Ложь;

КонецПроцедуры

&НаКлиенте
Процедура ПоставитьФлажок(Команда)
	ПунктМеню = Элементы.Найти("Пункт1_" + ТекущийЭлемент.Имя);
	ПунктМеню.Доступность = Ложь;
	ПунктМеню = Элементы.Найти("Пункт2_" + ТекущийЭлемент.Имя);
	ПунктМеню.Доступность = Истина;
	КонецПроцедуры
Показать

Помогите с кодом, тут где-то ошибка
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user2107191 12.12.24 12:31 Сейчас в теме
(1)
Помогите с кодом, тут где-то ошибка
Вон там где-то посмотри, видно же невооруженным глазом!
Yellow_Cube; user1936660; Sashares; +3 Ответить
3. glek 120 12.12.24 12:47 Сейчас в теме
(1) Запуск с отладкой, флаг Остановка по ошибке. Смотришь в чем ошибка.
4. mkalimulin 1280 12.12.24 12:49 Сейчас в теме
Элементы.КонтекстноеМеню
Пользуйся ИИ, будешь сразу получать ответы, а не это вот все...
5. RustamZz 12.12.24 12:58 Сейчас в теме
(4) Или не получишь. Или получишь, но не правильный. Верно?
user1936660; lefthander; Sashares; +3 Ответить
6. mkalimulin 1280 12.12.24 13:34 Сейчас в теме
7. RustamZz 12.12.24 13:36 Сейчас в теме
(6) Ну вот, например, этот ваш совет от ИИ не верен. Причем это не в первый раз, правда же?
13. mkalimulin 1280 12.12.24 14:38 Сейчас в теме
(7) Он верен. ИИ показал место в коде, где ошибка. И там действительно ошибка(описка). "Элементы" вместо "элемент"
15. RustamZz 12.12.24 14:46 Сейчас в теме
(13) Элемент нет на форме, только Элементы. Ваш Капитан Очевидность.
16. mkalimulin 1280 12.12.24 14:48 Сейчас в теме
(15) На форме нет, а в модуле есть. Переменная "Элемент". Вы напрасно спорите, не глядя в код
17. RustamZz 12.12.24 14:54 Сейчас в теме
(16) Вы напрасно спорите. Конечно вы можете создать переменную "Элемент". Но стандартной коллекции содержащей все элементы формы с таким именем нет. Поэтому я и пишу о галлюцинации в данном примере.
19. mkalimulin 1280 12.12.24 18:02 Сейчас в теме
(17) Нет никакой галлюцинации. Модель попросили найти ошибку в коде, она ее нашла
22. RustamZz 13.12.24 08:29 Сейчас в теме
(19) Модель попросили найти ошибку в коде, она ее НЕ нашла, поэтому написала бред, который вы протранслировали сюда, т.к. не имеете практики программирования в 1С, а просто прокачиваете свой уровень в OpenAI.

Для того что бы подтвердить свою правоту не надо оправдываться, просто приложите код который подтвердит вашу версию, как это делаю я.
Прикрепленные файлы:
user1936660; +1 Ответить
23. user1936660 13.12.24 09:23 Сейчас в теме
(22)
а просто прокачиваете свой уровень
миссионерства. Просвещение дикарей, оно затягивает.
Sashares; orakool; +2 Ответить
25. spacecraft 13.12.24 10:12 Сейчас в теме
(22) КонтекстноеМеню нет у самой формы. Следовательно по умолчанию Элементы.КонтекстноеМеню не существует.
Элемент это создаваемый элемент формы, у которого есть КонтекстноеМеню.
26. mkalimulin 1280 13.12.24 11:22 Сейчас в теме
(22) Код вверху. Найдите там строчку

ПунктМеню = Элементы.Добавить("Пункт2_"+ИмяЭлемента,
Тип("КнопкаФормы"), Элементы.КонтекстноеМеню);

и убедитесь, что это ошибка
27. RustamZz 13.12.24 11:44 Сейчас в теме
(26) Я оказывается даже не развернул весь код ТС. Ваша правда.
28. user2118713 13.12.24 12:11 Сейчас в теме
(26) Можно поинтересоваться, а как пофиксить данную ошибку в коде?
29. Sashares 35 13.12.24 12:18 Сейчас в теме
(28) Если озвученной выше информации недостаточно, надо сменить прокладку =)
30. mkalimulin 1280 13.12.24 13:01 Сейчас в теме
(28) Элементы.КонтекстноеМеню заменить на Элемент.КонтекстноеМеню
20. user2107191 12.12.24 20:19 Сейчас в теме
(17) Чует моё сердце, и пост автора и комментарии Миши с одного IP писаны...
Sashares; +1 Ответить
21. mkalimulin 1280 12.12.24 21:47 Сейчас в теме
(20) Нет. Я гоняю o1 на примерах, которые беру на форумах, потому что:
1. мне самому интересно
2. мне надо перейти на следующий уровень в сервисе OpenAI, а для этого надо потратить некоторую сумму.

Вот как потрачу, останется только п.1 и вы меня уже так часто здесь не увидите. Потерпите
24. spacecraft 13.12.24 09:50 Сейчас в теме
8. user2107191 12.12.24 13:44 Сейчас в теме
(5) Тебе что ли трудно самому проверить потом правильность ответа?
9. RustamZz 12.12.24 13:54 Сейчас в теме
(8) Разработчики 1С объясняли проблемы ИИ и языка 1С малым количеством открытого кода на нем из-за этого нейросеть начинает галлюцинировать. Что и демонстрирует нам Калимулин, похоже сам этого не понимая.
10. user2107191 12.12.24 14:03 Сейчас в теме
(9)
малым количеством открытого кода на нем
Намёк понял! Не дадим себя в обиду - скроем весь свой код в недрах нашего работодателя! (и в своих укромных репозитариях)
11. RustamZz 12.12.24 14:05 Сейчас в теме
(10) Ага, а если учить по текстам инфостарта, то это уже будет не галлюцинация, а полный бред.
12. user2107191 12.12.24 14:16 Сейчас в теме
(11) Еще один намек понял...
18. user1936660 12.12.24 15:17 Сейчас в теме
14. mkalimulin 1280 12.12.24 14:39 Сейчас в теме
(9) Эти сведения устарели.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот