Поблемы Кодировки При копировании из «1С:Предприятие» через буфер обмена текст вставляется в другой кодировке?
Избавляемся от этой проблемы с помощью нехитрых манипуляций.
Попробуем скопировать из конфигуратора любую часть текста, например строку:
Код 1C v 8.х ОкладПриказа = СпрСотрудники.Оклад;
Бывает так, что при вставке из буфера обмена в текстовый документ (например, блокнот или Word) получаем
текст в виде иероглифов !
Конечно, при копировании можно контролировать текущую раскладку, чтобы был включен русский язык, тогда проблем при копировании не возникнет. Но кому хочется следить за этим и делать что-то второй раз, копируя данные повторно?
С помощью программы regedit (Пуск\Выполнить\regedit) нужно открыть реестр Windows и найти путь:
НKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Codepage
В строке с именем 1252 установить строковый параметр c_1251.nls.
После этого перезагружаем компьютер и забываем о проблеме некорректного отображения текста.
Категория:
Администрирование Периодические реквизиты справочника, только 1С v7 Чтение и запись периодических реквизитов.
Установка даты выборки периодических реквизитов для всего справочника.
Код 1C v 7.x //так мы узнаем, какая была у сотрудника
//категория на определенную дату
Катег = СпрСотр.Категория.Получить(НекаяДата);
//так мы установим сотруднику категорию
//на определенную дату
СпрСотр.Категория.Установить(НекаяДата, НоваяКатегория);
//можно установить дату выборки периодических
//реквизитов для всего справочника
СпрСотр.ИспользоватьДату(НекаяДата);
//тогда ниже уже нельзя использовать Установить и Получить
//доступ к периодическим реквизитам становится
//такой же, как к обычным реквизитам
Категор = СпрСотр.Категория;
СпрСотр.Оклад = 100;
В 8-ой версии нет периодических реквизитов. Вместо них необходимо использовать регистры сведений, развернутые во времени.
Категория:
Справочники Удаление элемента справочника Внимание!!! Непосредственное удаление справочника ведет к нарушению целостности данных. Например если удалить Контрагента по которому были сделаны документы, то в этих документах будет пустая ссылка.
Поэтому - лучше на удаляемые объекты ставить пометку на удаление, а непосредственное удаление делать встроенной функцией:
в 1С 7.7 или 8.1 - Меню-Операции - Удаление помеченных объектов.
в 1С 8.2 - Меню - Все функции... - Стандартные - Удаление помеченных объектов.
Код 1C v 8.2 УП &НаКлиенте
Процедура ПоКнопкеУдалитьКонтрагента(Команда)
Режим = РежимДиалогаВопрос.ДаНетОтмена;
Ответ = Вопрос("Удалить непосредственно? Да - удалить, Нет - пометка удаления",Режим, 0);
Если Ответ = КодВозвратаДиалога.Да Тогда
УдалитьКонтрагента(Элементы.СписокКонтрагентов.ТекущаяСтрока, Ложь);
ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда
УдалитьКонтрагента(Элементы.СписокКонтрагентов.ТекущаяСтрока, Истина);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УдалитьКонтрагента(УдаляемыйКонтрагент, ПометкаНаУдаление)
Если ПометкаНаУдаление = Истина Тогда
УдаляемыйКонтрагент.ПолучитьОбъект().УстановитьПометкуУдаления(Истина, Истина);
Иначе
УдаляемыйКонтрагент.ПолучитьОбъект().Удалить();
КонецЕсли;
КонецПроцедуры
Код 1C v 8.х СпрСотр = Справочники.Сотрудники;
СпрСотр.Удалить(); //непосредственное удаление
СпрСотр.УстановитьПометкуУдаления (Истина); //пометка на удаление
СпрСотр.УстановитьПометкуУдаления (Ложь); //снять пометку на удаление
//можно проверить, помечен ли элемент на удаление
//есть свойство ПометкаУдаления, оно имеет тип Булево - Истина или Ложь
Пометка = СпрСотр.ПометкаУдаления; //обратите внимание: это свойство
Если Пометка = Истина Тогда
.....//элемент помечен на удаление
КонецЕсли;
Код 1C v 7.x спр=СоздатьОбъект("Справочник.Материалы");
// далее необходимо найти элемент и
// Удалить элемент справочника, на который установлена переменная спр, можно так:
спр.Удалить(1); //собственно удаление элемента
// Установить пометку на удаление элемента справочника можно так:
спр.Удалить(0); //пометка элемента на удаление
// впоследствии можно снять установленную пометку удаления
спр.СнятьПометкуУдаления();
Категория:
Справочники Помечен ли элемент справочника на удаление Код 1C v 8.х //можно проверить, помечен ли элемент на удаление
//есть свойство ПометкаУдаления, оно имеет тип Булево - Истина или Ложь
Пометка = СпрСотр.ПометкаУдаления; //обратите внимание: это свойство
Если Пометка = Истина Тогда
.....//элемент помечен на удаление
КонецЕсли;
Код 1C v 7.x
//пом=1 если ставим пометку
//пом =0 если хотим снять пометку
спр=СоздатьОбъект("Справочник.Материалы");
спр.ВыбратьЭлементы();
Пока спр.ПолучитьЭлемент()=1 Цикл
Если пом=1 Тогда
спр.удалить(0);//если поставить 1, то будет непосредственное удаление
иначе
спр.СнятьПометкуУдаления();
КонецЕсли;
КонецЦикла;
Предупреждение("Обработка завершена");
Категория:
Справочники Поиск элемента, найти элемент справочника Код 1C v 8.2 УП &НаКлиенте
Процедура ПоКнопкеНайти(Команда)
// Вставить содержимое обработчика.
Сообщить(НайтиКонтрагента("000000001"));
КонецПроцедуры
&НаСервере
Функция НайтиКонтрагента(КодКонтрагента)
Перем КонрагентДляПоиска, СсылкаНайденногоКонрагента;
КонрагентДляПоиска = Справочники.Контрагенты;
СсылкаНайденногоКонрагента = КонрагентДляПоиска.НайтиПоКоду(КодКонтрагента);
Если СсылкаНайденногоКонрагента = КонрагентДляПоиска.ПустаяСсылка() Тогда
Возврат "Контрагент не найден";
Иначе
Возврат СсылкаНайденногоКонрагента.Наименование;
КонецЕсли;
КонецФункции;
Код 1C v 8.х // Ниже перечислены несколько способов поиска,если элемент найден, то он возвращается,
// иначе возвращается Неопределено
СпрСотр = Справочники.Сотрудники;
НайденныйСотр = СпрСотр.НайтиПоКоду(123);
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
НайденныйСотр СпрСотр.НайтиПоРеквизиту("Оклад", 5000);
//далее нужно проверить найденное значение так:
РезультатПоиска = Справочники.Номенклатура.НайтиПоКоду("00030");
Если РезультатПоиска.Пустая() Тогда
// Выполнить действия, предусмотренные в случае, когда элемент не найден.
КонецЕсли;
// или так:
НайденныйСотр = СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
Если НайденныйСотр = Неопределено Тогда
.....//элемент не найден
КонецЕсли;
Код 1C v 7.x СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.НайтиЭлемент(Сотрудник);
СпрСотр.НайтиПоКоду(123);
СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович");
СпрСотр.НайтиПоРеквизиту("Оклад", 5000);
//если элемент найден, он становится текущим и его можно прочитать так:
Если СпрСотр.НайтиПоНаименованию("Иванов Иван Иванович")=1 Тогда
........НайденныйСотр = СпрСотр.ТекущийЭлемент();
КонецЕсли;
//еще пример
спр=СоздатьОбъект("Справочник.Материалы");
Если спр.НайтиПоНаименованию("Пряжа шерстяная")=1 Тогда
Предупреждение("Найденный элемент справочника имеет код "+спр.ТекущийЭлемент().Код);
Иначе
Предупреждение("Элемент с заданным наименованием не найден");
КонецЕсли;
Категория:
Справочники Создание и запись нового элемента справочника Код 1C v 8.2 УП &НаКлиенте
Процедура ПоКнопкеНовыйКонтрагент(Команда)
// Вставить содержимое обработчика.
Перем НовыйКонтрагент;
НовыйКонтрагент = Новый Структура("Наименование, ПолноеНаименование, ИНН");
НовыйКонтрагент.Наименование = "РиК ООО";
НовыйКонтрагент.ПолноеНаименование = "ООО Рога и копыта";
НовыйКонтрагент.ИНН = "123456789012";
Если СоздатьНовогоКонтрагента(НовыйКонтрагент) = 0 Тогда
Сообщить("Не удалось создать нового контрагента");
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция СоздатьНовогоКонтрагента(СтруктураСправочника)
Перем НовыйКонтрагент,СпрПользователи;
СпрКонтрагенты = Справочники.Контрагенты;
НовыйКонтрагент = СпрКонтрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = СтруктураСправочника.Наименование;
НовыйКонтрагент.ПолноеНаименование = СтруктураСправочника.ПолноеНаименование;
НовыйКонтрагент.ИНН = СтруктураСправочника.ИНН;
Попытка
НовыйКонтрагент.Записать();
Возврат 1;
Исключение
Возврат 0;
КонецПопытки;
КонецФункции
Код 1C v 8.х //Пример 1
НовыйЭлемент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлемент.Наименование = "ООО Березка";
// Установить другие реквизиты.
НовыйЭлемент.Записать();
НовыйЭлемент = Справочники.Банки.СоздатьЭлемент();
// Получить ссылку на группу, в которой будет находиться новый элемент.
Родитель = Справочники.Банки.НайтиПоКоду("000000001");
НовыйЭлемент.Наименование = "ВТБ";
НовыйЭлемент.Код = "000000011";
НовыйЭлемент.Родитель = Родитель;
// Установить другие реквизиты.
НовыйЭлемент.Записать();
//Пример 2
СпрСотр = Справочники.Сотрудники;
//или так:
//СпрСотр = Справочники["Сотрудники"]
НовЭл = СпрСотр.СоздатьЭлемент();
НовЭл.Наименование = "Иванов Иван Иванович";
НовЭл.Оклад = 100;
НовЭл.Записать();
Код 1C v 7.x //Пример 1
//создаваться будет прямо в корне справочника
спр = создатьОбъект("Справочник.Контрагенты");
спр.Новый();
спр.Наименование = "ООО Березка";
спр.УстановитьНовыйКод();
// итак далее
//спр.Реквизит1="......"
//спр.Реквизит2="......"
спр.Записать();
//Пример 2
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.Новый();
СпрСотр.Наименование = "Иванов Иван Иванович";
СпрСотр.Оклад = 100;
СпрСотр.Записать();
Категория:
Справочники Функция дни рождения сотрудников Данная функция написана для ЗиК 7.7
Код 1C v 7.x
//Функция подбирает окончание для возраста
Функция СтрГода(Возраст)
Остаток = Возраст%10;
Если Остаток = 1 Тогда
Стр = "год";
ИначеЕсли ((Остаток > 1) и (Остаток < 5)) Тогда
Стр = "года";
Иначе
Стр = "лет";
КонецЕсли;
Возврат Стр;
КонецФункции
//Формируем дни рождения Сотрудников
Процедура ДниРожденияСотрудников()
ТекстДР="";
Именинники = СоздатьОбъект("СписокЗначений");
СпрСотр = СоздатьОбъект("Справочник.Сотрудники");
СпрСотр.ВыбратьЭлементы();
Пока СпрСотр.ПолучитьЭлемент()= 1 Цикл
ТекЭлем = СпрСотр.ТекущийЭлемент();
Если ТекЭлем.ЭтоГруппа() = 0 Тогда
Если ((ТекЭлем.Родитель <> "Уволенные")) Тогда
ТекСотр = СпрСотр.ТекущийЭлемент();
Если (ПустоеЗначение(ТекСотр.СостояниеФизЛица.Получить(НачМесяца(ТекущаяДата()))) = 0) Тогда
Если (ДатаМесяц(ТекСотр.ДатаРождения) = ДатаМесяц(ТекущаяДата())) Тогда
Именинники.ДобавитьЗначение(ТекСотр);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если Именинники.РазмерСписка() <> 0 Тогда
ТекстДР=ТекстДР+" ********* СПИСОК ИМЕНИННИКОВ *********"+РазделительСтрок+" за месяц "+Формат(ТекущаяДата(),"ДММММ")+РазделительСтрок;
ТекстДР=ТекстДР+"-----------------------------------------------------------------------------------------------------------------------------------------------"+РазделительСтрок;
Для к = 1 по Именинники.РазмерСписка() Цикл
Сотр = Именинники.ПолучитьЗначение(к);
Возраст = (Число(ДатаГод(ТекущаяДата()))-Число(ДатаГод(Сотр.ДатаРождения)));
РазницаДней = (Число(ДатаЧисло(Сотр.ДатаРождения))-Число(ДатаЧисло(ТекущаяДата())));
СтрГода = СтрГода(Возраст);
Если (ДатаЧисло(Сотр.ДатаРождения) < ДатаЧисло(ТекущаяДата())) Тогда
ТекстДР=ТекстДР+" "+Сотр+" "+Сотр.ДатаРождения+" уже исполнилось "+Возраст+" "+СтрГода+"!"+РазделительСтрок;
Иначе
Если (РазницаДней = 2) Тогда
ТекстДР=ТекстДР+"ПОСЛЕЗАВТРА! "+Сотр+" послезавтра "+Сотр.ДатаРождения+" будет праздновать " + Возраст + "-й День Рождения!!!! ";
ИначеЕсли (РазницаДней = 1) Тогда
ТекстДР=ТекстДР+"ЗАВТРА! "+ Сотр + " будет отмечает свой " + Возраст + "-й День рождения!";
ИначеЕсли (РазницаДней = 0) Тогда
ТекстДР=ТекстДР+"СЕГОДНЯ! "+ Сотр + " отмечает свой " + Возраст + "-й День рождения!";
КонецЕсли;
ТекстДР=ТекстДР+" ( "+Сотр.Подразделение.Получить(ТекущаяДата())+" , "+Сотр.Должность.Получить(ТекущаяДата())+" )"+РазделительСтрок;
КонецЕсли;
КонецЦикла;
Иначе
ТекстДР=ТекстДР+"В текущем месяце именинников нет!";
КонецЕсли;
Сообщить(ТекстДР);
КонецПроцедуры
В файловом архиве есть и сама обработка.
Категория:
Полезные, Универсальные Функции