Архив рубрики: 1с:8.1

Пустая дата в 1C 7.7 и 1C 8.x

В версии 1с 7.7 проверку на пустую дату можно было делать так

Если Число(НашаДата) = 0 Тогда

.....

КонецЕсли



В версии 1с 8.x немного сложнее



Чаще всего используют вот такой вариант:


Если НашаДата = Дата("00010101") Тогда

Сообщить("Это пустая дата");

КонецЕсли;


можно подствлять такие варианты:

Дата(1, 1, 1), Дата("00010101000000"), Дата("0001-01-01")

Более подробная информация: manual1c.ru

Смотрите также:
Как выбрать файл в 1с:8.1: диалог выбора файла с примером

Как прочитать текстовый файл большого объема

Пустая дата в 1C 7.7 и 1C 8.x

В версии 1с 7.7 проверку на пустую дату можно было делать так

Если Число(НашаДата) = 0 Тогда

.....

КонецЕсли



В версии 1с 8.x немного сложнее



Чаще всего используют вот такой вариант:


Если НашаДата = Дата("00010101") Тогда

Сообщить("Это пустая дата");

КонецЕсли;


можно подствлять такие варианты:

Дата(1, 1, 1), Дата("00010101000000"), Дата("0001-01-01")

Более подробная информация: manual1c.ru

Смотрите также:
Как выбрать файл в 1с:8.1: диалог выбора файла с примером

Как прочитать текстовый файл большого объема

Склонения объектов в 1с 8.1. конфигурации УПП

Мысли на тему: Склонения объектов в конфигурации Управление производственным предприятем 8.1. Использование запросов для получения склонений.


В базе должен быть РегистрСведений.СклонениеОбъектов

Функция ЗапросСклоненияОбъекта(Объект,Падеж) 

    // задается Объект и Падеж (Перечисления.Падежи)

        Запрос = Новый Запрос;

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |(СклонениеОбъектов.Падеж = &Падеж)
        |И (СклонениеОбъектов.Объект = &ТекОбъект)";

        Запрос.УстановитьПараметр("Падеж", Падеж);
        Запрос.УстановитьПараметр("ТекОбъект",Объект);
    Возврат Запрос.Выполнить();

КонецФункции



 Функция УстановитьПадеж(Сотрудник)
       Запрос = Новый Запрос;  //  Выбираются склонения должностей и физ. лиц

        Запрос.УстановитьПараметр("Падеж", Сотрудник.Падеж);
        Запрос.УстановитьПараметр("Должность", Сотрудник.Должность);
        Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизЛицо);

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |СклонениеОбъектов.Падеж = &Падеж
        |И (СклонениеОбъектов.Объект = &Должность
        |ИЛИ СклонениеОбъектов.Объект = &ФизическоеЛицо)";

        Результат = Запрос.Выполнить().Выгрузить();


       Для каждого Строка Из Результат Цикл
           Если Строка.Объект = Сотрудник.Должность Тогда

                    Сотрудник.ДолжностьВПадеже   = Строка.Значение;

            КонецЕсли;

           Если Строка.Объект = Сотрудник.ФизЛицо Тогда
                   Сотрудник.ФИОВПадеже   = Строка.Значение;
            КонецЕсли;
        КонецЦикла;

     Возврат Неопределено;
 КонецФункции



В функцию УстановитьПадеж(Сотрудник) Передается Структура. Выглядить она таким образом:


Сотрудник = Новый Структура();


Для Каждого ТекСтрока Из РаботникиОрганизации Цикл

Сотрудник.Вставить("ФизЛицо",ТекСтрока.ФизЛицо);        
Сотрудник.Вставить("Падеж", Перечисления.Падежи.Дательный);
Сотрудник.Вставить("Должность", ТекСтрока.Должность);
Сотрудник.Вставить("ДолжностьВПадеже",ТекСтрока.Должность.Наименование);
Сотрудник.Вставить("ФИОВПадеже",ТекСтрока.ФизЛицо.Наименование);


КонецЦикла;

Склонения объектов в 1с 8.1. конфигурации УПП

Мысли на тему: Склонения объектов в конфигурации Управление производственным предприятем 8.1. Использование запросов для получения склонений.


В базе должен быть РегистрСведений.СклонениеОбъектов

Функция ЗапросСклоненияОбъекта(Объект,Падеж) 

    // задается Объект и Падеж (Перечисления.Падежи)

        Запрос = Новый Запрос;

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |(СклонениеОбъектов.Падеж = &Падеж)
        |И (СклонениеОбъектов.Объект = &ТекОбъект)";

        Запрос.УстановитьПараметр("Падеж", Падеж);
        Запрос.УстановитьПараметр("ТекОбъект",Объект);
    Возврат Запрос.Выполнить();

КонецФункции



 Функция УстановитьПадеж(Сотрудник)
       Запрос = Новый Запрос;  //  Выбираются склонения должностей и физ. лиц

        Запрос.УстановитьПараметр("Падеж", Сотрудник.Падеж);
        Запрос.УстановитьПараметр("Должность", Сотрудник.Должность);
        Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизЛицо);

        Запрос.Текст = "ВЫБРАТЬ
        |    СклонениеОбъектов.Объект,
        |    СклонениеОбъектов.Падеж,
        |    СклонениеОбъектов.Значение
        |ИЗ
        |    РегистрСведений.СклонениеОбъектов КАК СклонениеОбъектов
        |ГДЕ
        |СклонениеОбъектов.Падеж = &Падеж
        |И (СклонениеОбъектов.Объект = &Должность
        |ИЛИ СклонениеОбъектов.Объект = &ФизическоеЛицо)";

        Результат = Запрос.Выполнить().Выгрузить();


       Для каждого Строка Из Результат Цикл
           Если Строка.Объект = Сотрудник.Должность Тогда

                    Сотрудник.ДолжностьВПадеже   = Строка.Значение;

            КонецЕсли;

           Если Строка.Объект = Сотрудник.ФизЛицо Тогда
                   Сотрудник.ФИОВПадеже   = Строка.Значение;
            КонецЕсли;
        КонецЦикла;

     Возврат Неопределено;
 КонецФункции



В функцию УстановитьПадеж(Сотрудник) Передается Структура. Выглядить она таким образом:


Сотрудник = Новый Структура();


Для Каждого ТекСтрока Из РаботникиОрганизации Цикл

Сотрудник.Вставить("ФизЛицо",ТекСтрока.ФизЛицо);        
Сотрудник.Вставить("Падеж", Перечисления.Падежи.Дательный);
Сотрудник.Вставить("Должность", ТекСтрока.Должность);
Сотрудник.Вставить("ДолжностьВПадеже",ТекСтрока.Должность.Наименование);
Сотрудник.Вставить("ФИОВПадеже",ТекСтрока.ФизЛицо.Наименование);


КонецЦикла;

Выбрать элемент справочника в v 7.7 и в 8.1


Поговорим об интерактивном выборе элемента из справочника в версиях 7.7 и 8.1



В Версии 7.7 выбрать элемент справочника можно функцией Выбрать:

Перем ВыбСпр;
Спр=СоздатьОбъект("Справочник.Товары");
Если Спр.Выбрать("Выберите товар из справочника", "ОсновнаяФорма")=Тогда
    ВыбСпр=Спр.ТекущийЭлемент();
КонецЕсли;
 



ОсновнаяФорма - можно выбрать


Для версии 8.1 выбор элемента может выглядеть так:

Спр=Справочники.Товары;
ФормаВыбора=Спр.ПолучитьФормуВыбора("ФормаВыбора");
ФормаВыбора.ЗакрыватьПриВыборе=Истина;
ФормаВыб.РежимВыбора = Истина;
 
ФормаВыбора.ОткрытьМодально();


Аналогичным образом можно выбирать и документы

Рабочая версия выглядит так:

ВыбСправочника = Справочник.Номенклатура.ПолучитьФормуВыбора("ФормаВыбора",ЭтаФорма);
Выб
Справочника.РежимВыбора= Истина;
Выб
Справочника.ЗакрыватьПриВыборе=Истина;
ВыбЭлемент= ВыбДокумента.ОткрытьМодально();
Если ВыбЭлемент <> Неопределено Тогда
//<...Действия с выбраным товаром>
КонецЕсли;


 
Второй параметр в функции  ПолучитьФормуВыбора("ФормаВыбора",ЭтаФорма) - задает форму владелеца (ЭтаФорма) (подробнее описание функции смотрите в справке )

Была ситуация в версии 8.1, когда при выборе элемента из списка - элемент не выбирался, а происходило открытие для редактирования.
Проблема оказалась в коде выбираемого документа. Там был код принудительного открытия формы документа при выборе из списка:

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

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

пришлось добавить условие: если существует форма владелец, то производить выбор. В результате получилось так:

Процедура ДокументСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)

    Если ЭтаФорма.ВладелецФормы = Неопределено Тогда      //Добавлено условие - в случае, если Форма-Владелей не определена

        Если ТекЗначениеУчета.Значение=Перечисления.ВидУчетаЛБ.Соптовары Тогда

            СтандартнаяОбработка = Ложь;

            ФормаСпецификации = ВыбраннаяСтрока.ПолучитьФорму("ФормаДокументаРозничнаяЛБ");

            ФормаСпецификации.Открыть();

        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Ещё можно глянуть более подробный материал здесь 

Выбрать элемент справочника в v 7.7 и в 8.1


Поговорим об интерактивном выборе элемента из справочника в версиях 7.7 и 8.1



В Версии 7.7 выбрать элемент справочника можно функцией Выбрать:

Перем ВыбСпр;
Спр=СоздатьОбъект("Справочник.Товары");
Если Спр.Выбрать("Выберите товар из справочника", "ОсновнаяФорма")=Тогда
    ВыбСпр=Спр.ТекущийЭлемент();
КонецЕсли;
 



ОсновнаяФорма - можно выбрать


Для версии 8.1 выбор элемента может выглядеть так:

Спр=Справочники.Товары;
ФормаВыбора=Спр.ПолучитьФормуВыбора("ФормаВыбора");
ФормаВыбора.ЗакрыватьПриВыборе=Истина;
ФормаВыб.РежимВыбора = Истина;
 
ФормаВыбора.ОткрытьМодально();


Аналогичным образом можно выбирать и документы

Рабочая версия выглядит так:

ВыбСправочника = Справочник.Номенклатура.ПолучитьФормуВыбора("ФормаВыбора",ЭтаФорма);
Выб
Справочника.РежимВыбора= Истина;
Выб
Справочника.ЗакрыватьПриВыборе=Истина;
ВыбЭлемент= ВыбДокумента.ОткрытьМодально();
Если ВыбЭлемент <> Неопределено Тогда
//<...Действия с выбраным товаром>
КонецЕсли;


 
Второй параметр в функции  ПолучитьФормуВыбора("ФормаВыбора",ЭтаФорма) - задает форму владелеца (ЭтаФорма) (подробнее описание функции смотрите в справке )

Была ситуация в версии 8.1, когда при выборе элемента из списка - элемент не выбирался, а происходило открытие для редактирования.
Проблема оказалась в коде выбираемого документа. Там был код принудительного открытия формы документа при выборе из списка:

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

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

пришлось добавить условие: если существует форма владелец, то производить выбор. В результате получилось так:

Процедура ДокументСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)

    Если ЭтаФорма.ВладелецФормы = Неопределено Тогда      //Добавлено условие - в случае, если Форма-Владелей не определена

        Если ТекЗначениеУчета.Значение=Перечисления.ВидУчетаЛБ.Соптовары Тогда

            СтандартнаяОбработка = Ложь;

            ФормаСпецификации = ВыбраннаяСтрока.ПолучитьФорму("ФормаДокументаРозничнаяЛБ");

            ФормаСпецификации.Открыть();

        КонецЕсли;
    КонецЕсли;
КонецПроцедуры

Ещё можно глянуть более подробный материал здесь 

Как программно добавить кнопку в Панель формы 1с 8.1

Иногда бывает, что нужно вставить кнопку в форму программно. Как это можно реализовать в 1с 8.х

Мы хотим на Панель ОсновныеДействияФормы поместить новую кнопку

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

Если ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Найти("ИмяКнопки")=Неопределено Тогда // проверяем: есть ли уже такая кнопка?

ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
ДействиеКнопки = Новый Действие("ОсновныеДействияФормыНазваниеИмяКнопки");

КнопкиФормы =ЭлементыФормы.ОсновныеДействияФормы.Кнопки;
НоваяКнопка =КнопкиФормы.Добавить("ИмяКнопки",ТипКнопки,"Имя Кнопки",ДействиеКнопки);
НоваяКнопка.Картинка = БиблиотекаКартинок.ПиктограммаВашейКнопки;
НоваяКнопка.Отображение = ОтображениеКнопкиКоманднойПанели.Картинка; // можно выбрать другие варианты "Авто", "Надпись" или "Надпись и Картинка"
КнопкиФормы.Сдвинуть(НоваяКнопка,(-1)*КнопкиФормы.Количество()-1); // сдвигаем кнопку в крайнее правое положение
КонецЕсли;

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

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




Программно добавлена кнопка с изображением значка Word


Как программно добавить кнопку в Панель формы 1с 8.1

Иногда бывает, что нужно вставить кнопку в форму программно. Как это можно реализовать в 1с 8.х

Мы хотим на Панель ОсновныеДействияФормы поместить новую кнопку

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

Если ЭлементыФормы.ОсновныеДействияФормы.Кнопки.Найти("ИмяКнопки")=Неопределено Тогда // проверяем: есть ли уже такая кнопка?

ТипКнопки = ТипКнопкиКоманднойПанели.Действие;
ДействиеКнопки = Новый Действие("ОсновныеДействияФормыНазваниеИмяКнопки");

КнопкиФормы =ЭлементыФормы.ОсновныеДействияФормы.Кнопки;
НоваяКнопка =КнопкиФормы.Добавить("ИмяКнопки",ТипКнопки,"Имя Кнопки",ДействиеКнопки);
НоваяКнопка.Картинка = БиблиотекаКартинок.ПиктограммаВашейКнопки;
НоваяКнопка.Отображение = ОтображениеКнопкиКоманднойПанели.Картинка; // можно выбрать другие варианты "Авто", "Надпись" или "Надпись и Картинка"
КнопкиФормы.Сдвинуть(НоваяКнопка,(-1)*КнопкиФормы.Количество()-1); // сдвигаем кнопку в крайнее правое положение
КонецЕсли;

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

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




Программно добавлена кнопка с изображением значка Word


1с: 8.1 Как провести и отменить проведение документа в программно.

Как правильно сделать отмену проведения документа программно?

Такой вопрос у меня возник, когда я попытался сделать отмену проведения документа программно. Так как  команды СделатьНеПроведенным() в "восьмерке" нету, то поначалу я думал, что можно присвоить признаку Проведен = Ложь и проведение документа отменится. Так оно визуально и получалось. НО  движения этого документа оставались. Получалось: документ видно, что он не проведен, а движения документа остались.

Выход оказался прост. Для отмены проведения используется Функция Записать с реквизитом:

НашДок.Записать(РежимЗаписиДокумента.ОтменаПроведения);

Так же работает и программное проведение документа:
НашДок.Записать(РежимЗаписиДокумента.Проведение);


Кроме того, есть команда:
РежимЗаписиДокумента.Запись


В этом случае будут сохранены изменения, внесенные в документ, и движения


Модальное открытие формы в 1с 8. Как вернуть результат ОткрытьМодально()

Открытие формы модально - форма появляется на экране и блокирует другие окна, пока не будет закрыта.
МодФорма = ПолучитьФорму("ОсновнаяФорма",ВладелецФормы); Результат = МодФорма.ОткрытьМодально();
Возникает проблема возврата результата, если форма не "для выбора" Новости наших партнеров : Купить Зелбораф В описании функции ОткрытьМодально() написано:
Форма.ОткрытьМодально (Form.DoModal) ОткрытьМодально(<Таймаут>) Параметры: <Таймаут> (необязательный) Тип: Число. Время показа формы в секундах, по истечении которого форма будет закрыта с параметром закрытия Неопределено. Если значение параметра не задано, время показа не ограничено. Значение по умолчанию: 0 Возвращаемое значение: Тип: Произвольный. Команда закрытия формы. Если форма открывалась для выбора, возвращает выбранное значение (или массив значений, в случае разрешенного множественного выделения в открываемой форме). Если значение не выбрано, возвращается Неопределено. Описание: Открывает форму в модальном режиме.
Я специально выделил фразу цветом. Получается: если форма определена "для выбора" - то она возвращает выбранные значения В любых других случаях будет возвращаться - Неопределено.  Что же делать, когда у нас  "обычная" форма (т. е. форма не определена как "для выбора") и мы хотим вернуть результат из формы после закрытия ? В этом случае есть несколько решений: 1. Получив доступ к форме, мы можем вызывать различные функции и получать переменные. Естественно нужно, чтобы эти функции имели статус Экспорт
Например:  МодФорма = ПолучитьФорму("ОсновнаяФорма",ВладелецФормы);
          Результат = МодФорма.ОткрытьМодально();
РезультатФункции  = МодФорма.НашаФункция("Параметры функции");
Внимание!  Форма после закрытия продолжает существовать, и доступ к функциям с пометкой Экспорт можно получить.
......
// Функция вставляется в   Форму
Функция НашаФункция(ПараметрыФункцииЭкспорт
// Действия в функции
Возврат Результат   КонецФункции
2.  Можно использовать команду ОповеститьОВыборе(ВозвращаемыйПараметр) Эта команда позволяет вернуть из формы указанный параметр "ВозвращаемыйПараметр" На  этом пока всё, может будут у кого замечания и дополнения ... пишите :)