30 июня 2015 г.

1С получить список просроченных заказов


Процедура ПолучитьДокументыПоСтд()
 СрокОплатыСравнение = 2;// 1 - Неважно 2 - Просрочен (более чем на)
 СрокОтгрузкиСравнение = 1;// 1 - Неважно
 НаличиеРезервов = 3;// 1 - Неважно 3 - С резервами
 РазмещениеРезервов = 1; // 1 - На складах и в заказах
 СостояниеОплаты = 2;// 1 - Неважно 2 - Не оплачен полностью (неоплачен либо оплачен частично)
 СостояниеОтгрузки = 1; // 1 - Неважно
    ДатаНач = НачалоДня(ЭтотОбъект.РекДатаНач);//начало периода отбора месяцназад
 ДатаКон = КонецДня(ЭтотОбъект.РекДатаКон);//конец периода отбора месяцвперед
 ПустаяДата=Дата('00010101');
 ДатаОплаты=НачалоДня(ТекущаяДата());
 ДатаОтгрузки=НачалоДня(ТекущаяДата());
 ПричинаЗакрытияЗаказа = Справочники.ПричиныЗакрытияЗаказов.ПустаяСсылка();
 //сообщить(""+ДатаНач+" "+ДатаКон+"");

1С получить список учетных записей электронной почты по пользователю


//Отправитель - СправочникСсылка.Пользователи
//УчетнаяЗапись - Реквизит формы
//Подпись -  - Реквизит формы
//Результат выполнения - последняя итерация цикла
Функция НайтиУЗЗапросом(Отправитель)
  НайтиУчетнуюЗапись=Новый Запрос;
  НайтиУчетнуюЗапись.Текст="ВЫБРАТЬ
                           | УчетныеЗаписиЭлектроннойПочты.Ссылка
                           |ИЗ
                           | Справочник.УчетныеЗаписиЭлектроннойПочты КАК УчетныеЗаписиЭлектроннойПочты
                           |ГДЕ
                           | УчетныеЗаписиЭлектроннойПочты.ДоступКУчетнойЗаписи.Пользователь = &Пользователь"; 
  НайтиУчетнуюЗапись.УстановитьПараметр("Пользователь",Отправитель);
  СписокУЗ=НайтиУчетнуюЗапись.Выполнить().Выбрать();
  Если СписокУЗ.Количество()>0 Тогда
   Сообщить(СписокУЗ.Количество());
   Пока СписокУЗ.Следующий() Цикл
    УчетнаяЗапись=СписокУЗ.Ссылка;
    Подпись=СписокУЗ.Ссылка.ТекстПодписи;
    КонецЦикла;
  Иначе
   Сообщить("УЗ не найдена!!!!")
  КонецЕсли;
КонецФункции


//Вариант 1С, выдает УЗ по-умолчанию
УчетнаяЗаписьПользователя=УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(СсылкаНаПользователя, "ОсновнаяУчетнаяЗапись");

//Также в 1С есть функция возвращающая список доступных УЗ
//ОбщиеМодули.УправлениеЭлектроннойПочтой.ПолучитьДоступныеУчетныеЗаписи(ТекущийПользователь)
//Сами читаем, и пытаемся понять что оно делает


26 июня 2015 г.

1С Вычесть рабочие дни на основе ПК (НеВЗапросе)



//Процедура возвращает массив рабочих дней за два месяца
Процедура ЗапросКалендаря()
 ЗапросКалендаря=Новый Запрос;
 ЗапросКалендаря.Текст="ВЫБРАТЬ
               | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря
               |ИЗ
               | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
               |ГДЕ
               | РегламентированныйПроизводственныйКалендарь.Пятидневка = 1
               | И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря >= &НачалоПериода
      | И РегламентированныйПроизводственныйКалендарь.ДатаКалендаря <= &КонецПериода";
 ЗапросКалендаря.УстановитьПараметр("НачалоПериода",ДобавитьМесяц(ТекущаяДата(),-1)); //НачалоПериода
 ЗапросКалендаря.УстановитьПараметр("КонецПериода",ДобавитьМесяц(ТекущаяДата(),1)); //КонецПериода

  Период=ЗапросКалендаря.Выполнить().Выбрать();
  ДваМесяцаРабочихДней=Новый Массив;
  Пока Период.Следующий() Цикл
   ДваМесяцаРабочихДней.Добавить(Период.ДатаКалендаря);
  КонецЦикла; 
КонецПроцедуры

//Использование
Процедура ПолучитьТриДняНазад()
 ОткатитьНазадНа=3;//3 дня
 Сообщить(НачалоДня(ДваМесяцаРабочихДней[ДваМесяцаРабочихДней.Количество()-ОткатитьНазадНа-1]))
КонецПроцедуры


//Вариант самой 1С (нашел в форме отбора просроченных заказов)
Процедура ДниПросрочки()
 ОткатитьНазадНа=3;//3 дня
 //Пытаемся учитывать только рабочие дни по календарю
 ПолучитьДаты = Новый Запрос;
  ПолучитьДаты.Текст = 
  "ВЫБРАТЬ РАЗРЕШЕННЫЕ
  | РегламентированныйПроизводственныйКалендарь.Год
  |ИЗ
  | РегистрСведений.РегламентированныйПроизводственныйКалендарь КАК РегламентированныйПроизводственныйКалендарь
  |ГДЕ
  | РегламентированныйПроизводственныйКалендарь.ДатаКалендаря МЕЖДУ &НачГода И &КонГода";
  
 ПолучитьДаты.УстановитьПараметр("НачГода",НачалоГода(ТекущаяДата()));
 ПолучитьДаты.УстановитьПараметр("КонГода",КонецГода(ТекущаяДата()));
 
 ПолучилиДаты = ПолучитьДаты.Выполнить();
 Если ПолучилиДаты.Пустой() Тогда
   ТребуемаяДатаОплаты=НачалоДня(ТекущаяДата()-24*60*60*ОткатитьНазадНа);
   //ТребуемаяДатаОтгрузки=НачалоДня(ТекущаяДата()-24*60*60*ОткатитьНазадНа);
  Иначе
   ТребуемаяДатаОплаты=ЗаполнениеДокументов.ОпределитьДату(НачалоДня(ТекущаяДата()),-ОткатитьНазадНа);
   //ТребуемаяДатаОтгрузки=ЗаполнениеДокументов.ОпределитьДату(НачалоДня(ТекущаяДата()),-ОткатитьНазадНа);
 КонецЕсли;
 Сообщить(ТребуемаяДатаОплаты);
КонецПроцедуры


//КалендарныеДни - функция, разберетесь сами
Функция ПолучитьДень(ИсходнаяДата, КоличествоПрибавляемыхДней)
 
 Запрос = Новый Запрос("
 |ВЫБРАТЬ 
 |ДОБАВИТЬКДАТЕ(&ИсходнаяДата, ДЕНЬ, &Количество) как Дата");

 Запрос.УстановитьПараметр("ИсходнаяДата", ИсходнаяДата); 
 Запрос.УстановитьПараметр("Количество", КоличествоПрибавляемыхДней); 
 Возврат Запрос.Выполнить().Выгрузить()[0].Дата; 
КонецФункции 

1С интерактивно нажать кнопку на форме


//Для обычного приложения, работает только на открытой форме. Проверено на платформе 8.2, УТ 10.3
Процедура ИнтерактивноНажатьКнопку(Кнопка, ФормаКнопки) Экспорт
    // Удостоверимся что есть права на нажатие
    // Кнопка
    стрОшибка = "";
    Попытка
        Если Кнопка.Видимость = Ложь Тогда
            стрОшибка = стрОшибка + ", Невидима";
        КонецЕсли;    
    Исключение
    КонецПопытки;    
    Попытка
        Если Кнопка.Доступность = Ложь Тогда
            стрОшибка = стрОшибка + ", Недоступна";
        КонецЕсли;    
    Исключение
    КонецПопытки;    
    Если стрОшибка <> "" Тогда
        стрОшибка = Сред(стрОшибка, 3)+" кнопка, которую требуется нажать";
        ВызватьИсключение(стрОшибка);
    КонецЕсли;    
    
    Если ТипЗнч(Кнопка) = Тип("КнопкаКоманднойПанели") Тогда
        Действие = Кнопка.Действие;
    ИначеЕсли ТипЗнч(Кнопка) = Тип("Кнопка") Тогда    
        Действие = Кнопка.ПолучитьДействие("Нажатие");
    КонецЕсли;    
    буфДействие = ФормаКнопки.ПолучитьДействие("ПриПовторномОткрытии");
    ФормаКнопки.УстановитьДействие("ПриПовторномОткрытии", Действие);
    Попытка
        // собственно вызов нажатия кнопки
        ФормаКнопки.Открыть();
        ФормаКнопки.УстановитьДействие("ПриПовторномОткрытии", буфДействие);
    Исключение    
        ФормаКнопки.УстановитьДействие("ПриПовторномОткрытии", буфДействие);
        ВызватьИсключение;
    КонецПопытки;    
КонецПроцедуры

Процедура ОткрытьИЗапустить()
    ЗакрытиеЗаказаДокумент=документы.ЗакрытиеЗаказовПокупателей.СоздатьДокумент();
    ФормаДокумента=ЗакрытиеЗаказаДокумент.ПолучитьФорму("ФормаДокумента");
    ФормаДокумента.Открыть();
    ИнтерактивноНажатьКнопку(ФормаДокумента.ЭлементыФормы.КоманднаяПанельЗаказы.Кнопки.ПодменюЗаполнить.Кнопки.ДействиеЗаполнить,ФормаДокумента);
КонецПроцедуры

22 июня 2015 г.

Все об 1С: Как в 1с 8 Получить список подчиненных документов

Все об 1С: Как в 1с 8 Получить список подчиненных документов:


Функция ПолучитьСписокПодчиненныхДокументов(ДокументОснование) Экспорт
        
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
                   |    СтруктураПодчиненности.Ссылка
                   |ИЗ
                   |    КритерийОтбора.СвязанныеДокументы(&ЗначениеКритерияОтбора) КАК СтруктураПодчиненности";
    
    Запрос.УстановитьПараметр("ЗначениеКритерияОтбора", ДокументОснование);
    Возврат Запрос.Выполнить().Выгрузить();
    
КонецФункции
//Функция возвращает ТаблицуЗначений
//Обходим ее Для Каждого Из Цикл

15 июня 2015 г.

1С Из двух семерок одна распределенная восьмерка


Картинок не будет, мне лень ;-)

Есть:
Две базы "Бухгалтерский учет 4.5" (7.70.538) - одна для менеджера (заводит продажи), одна для бухгалтера (заводит продажи и покупки)

Задача:

  1. Сделать одну базу БП 2.0/3.0
  2. Перекинуть данные за I-II квартал. 
  3. Сделать так, чтобы бухгалтер и менеджер могли работать с базой "одновременно" (физически они находятся в разных точках города).

7 июня 2015 г.

Не лезь туда, где ничего не понимаешь

Попросили подобрать и установить колонки на улице. Как будто ничего сложно...

Начальная конфигурация:



ROXTON AA240 - 1 штука 
 
ROXTON MS40T - 5 штук