gifts2017

Тюнинг типовых конфигураций 1с 8.1/8.2 (уже 7 примеров, обновлено 14.03.2013)

Опубликовал Александр Медведев (anig99) в раздел Программирование - Практика программирования

Примеры небольших доработок типовых, которые сделают работу проще и приятнее...

В данной статье будут публиковаться примеры доработок типовых (в основном интерфейсной части). Доработки как типовых 8.1, так и 8.2. Всё выкладывать сразу не буду, постепенно дописывая свежие примеры.

1. Вставка фото пользователя в типовой справочник Пользователи для 8.2 Управляемые формы.

2. Автоматизация ввода Грузополучателя в документе Реализация товаров и услуг

3. Номер счет-фактуры совпадает с номером документа Реализация товаров и услуг

4. Запускаем произвольную обработку и загружаем произвольные данные на компьютере пользователя при запуске 1с

5. Организация складов без учета серий и характеристик

6. Добавляем картинки к кнопкам внешних печатных форм и заполнения табличных частей (добавлено 23.11.2011)

7. Выводит вес брутто в шапке табличной части Товары документа Заказ или Реализация (добавлено 14.03.2013)

 

Пример 1. Типовой справочник Пользователи в 8.2. Управляемая форма - вставка фото пользователя и списка контактов. Не для тонкого и web-клиента.

В типовых конфигурациях на платформе 8.2 данных справочник перевели на управляемые формы. Захотелось сразу попробовать, что можно сотворить с ним без кодинга. Тэк-с...Ага у нас в пользователе есть поле Физлицо. Оттуда можно поднятуть несколько реквизитов, обычно редко кому нужных. Что ещё? Ага!,У физлица есть фотография. А нельзя ли вывести фотографию сразу в списке пользователей и в форме элементов? Фиг... В управляемых формах картинки выводятся по-другому ): Что ещё можно вывести? Контактную информацию! Опять облом - данные хранятся в регистре сведений и через настройку управляемой формы до неё не добраться.

Придется допиливать.

Для начала откроем в Конфигураторе форму списка и добавим туда новый реквизит АдресКартинки, типа Строка. Потом добавим Динамический список КонтактнаяИнформацияТаблица с произвольным запросом.

ВЫБРАТЬ
      КонтактнаяИнформация.Вид,
      КонтактнаяИнформация.Представление
ИЗ
      РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация
ГДЕ
      КонтактнаяИнформация.Объект = &Ссылка

 

Ну и размещаем эти элементы на управляемой форме. Соответственно Поле(Поле картинки, Путь к данным -  АдресКартинки) и Таблица (Путь к данным - КонтактнаяИнформацияТаблица). Немного поиграть с точным размещением и размерами для удовлетворения эстетических чувств.

 

После этого нужно выбрать в списке элементов формы сам список пользователей и в свойствах найти событие ПриАктивизацииСтроки и добавить туда процедуру


&НаКлиенте
Процедура СписокПриАктивизацииСтроки(Элемент)   
   
Если Не ЗначениеЗаполнено(Элемент.ТекущаяСтрока) Тогда
       
АдресКартинки="";
       
КонтактнаяИнформацияТаблица.Параметры.УстановитьЗначениеПараметра("Ссылка",Неопределено);
    Иначе
       
АдресКартинки = ПолучитьКартинкуФизЛица(Элемент.ТекущаяСтрока.ФизЛицо);
       
КонтактнаяИнформацияТаблица.Параметры.УстановитьЗначениеПараметра("Ссылка",Элемент.ТекущаяСтрока.Ссылка);
    КонецЕсли;

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

&НаСервере
Функция ПолучитьКартинкуФизЛица(ФизЛицо)

    Если
ЗначениеЗаполнено(ФизЛицо) Тогда
        Возврат(
ПоместитьВоВременноеХранилище(ФизЛицо.ОсновноеИзображение.Хранилище.Получить()));
    Иначе
        Возврат (
"");
    КонецЕсли;
КонецФункции


 Теперь в списке пользователей у нас при выборе пользователя отображается его контактная информация и фотография соответствующего физ.лица...

В форме элемента вывести одновременно и фотографию и контактную информацию - не нашел места пока. Поэтому оставил только фото, которое поместил справа от списка ролей таким же образом как и в списке пользователей. Только исправлений в самом коде чуть меньше. Просто в конец процедуры ПриСозданииНаСервере добавил

Если ЗначениеЗаполнено(Объект.ФизЛицо) Тогда
       
АдресКартинки = ПоместитьВоВременноеХранилище(Объект.ФизЛицо.ОсновноеИзображение.Хранилище.Получить());
КонецЕсли
;

 

 

 

 Пример 2. Документ Реализация товаров и услуг. Ускорение оформления шапки для филиалов/магазинов. УПП/КА/УТ. Толстый клиент.

Ситуация следующая:

1. Есть магазины расположенные в разных частях города и в разных городах, но входящие в одну сеть.

2. Документы оформляются на головную организацию, а магазин указывается в качестве грузополучателя. Соответственно и адрес.

Таким образом, оператор при вводе реализации должен указать контрагента, перейти на закладу Дополнительно и указать там грузополучателя и адрес доставки. Это минимум 4 лишних щелчка мышью. Как можно облегчить ввод?

Операторы пошли легким путем. В документе указывается не головной контрагент, а грузополучатель. Это удобное, но НЕПРАВИЛЬНОЕ решение с т.з. учета.

Для решения данной проблемы пришлось подправить конфигурацию. За основу изменения была взят реквизит Головной контрагент в справочнике Контрагенты. Собственно, данный реквизит в типовых и присутствует именно для таких случаев, хотя и влияет обычно только на некоторые данные в печатных формах.

Сначала пишем следующую процедуру, которая будет вызываться при изменение контрагента в форме документе:

Процедура mavМеняемНаГоловногоКонтрагента(Док) Экспорт

    Если
Док.Контрагент = Док.Контрагент.ГоловнойКонтрагент Тогда
        Если Не
ЗначениеЗаполнено(Док.Грузополучатель) Тогда
            Возврат;
        КонецЕсли;
        Если
Док.Грузополучатель <> Док.Грузополучатель.ГоловнойКонтрагент Тогда
           
Сообщить("Внимание! Очистили поля Грузополучатель и Адрес доставки!",СтатусСообщения.Информация);
           
Док.Грузополучатель = Неопределено;
           
Док.АдресДоставки = "";
           
Док.Комментарий = "";
        КонецЕсли;
    Иначе
       
Док.Грузополучатель = Док.Контрагент;
       
Док.Комментарий     = Док.Контрагент.Наименование;
       
Док.Контрагент      = Док.Контрагент.ГоловнойКонтрагент;
       
Док.ДоговорКонтрагента = Справочники.ДоговорыКонтрагентов.ПустаяСсылка();
    КонецЕсли;

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


Как видно,  процедура обрабатывает 2 варианта:

1. Когда контрагент не имеет головного. В этом случае, если грузополучатель в документе стоит, то это поле, адрес доставки и комментарий очищает.

2. Когда у контрагента проставлен головной. В этом случае контрагент переносится в грузополучателя, в комментарий записывается название контрагента (чтобы в списке документов можно было сразу видеть к какому магазину относится документ), в поле Контрагент устанавливается головной контрагент, а поле договор контрагента очищается.

Данную функцию помещаем или в сам документ, или в общий модуль(как у меня). Потом изменяем в форме документа функцию на событие ПриИзменении поля Контрагент:

Процедура КонтрагентПриИзменении(Элемент)

   
НашМодуль.mavМеняемНаГоловногоКонтрагента(ЭтотОбъект); //mav
   
ПриИзмененииКонтрагента();

КонецПроцедуры
// КонтрагентПриИзменении()


 Но это ещё не всё. Не заполненным осталось поле АдресДоставки. Можно дописать процедуру по установке грузополучателя. Но можно и расширить применяемость процедуры по автоматическому проставлению Адреса доставки поместив вызов в процедуру ПриИзмененииКонтрагента. Процедура будет такой:

Процедура mavУстановитьАдресДоставки(Док) Экспорт

    Если
ЗначениеЗаполнено(Док.Грузополучатель) Тогда
       
ТекКонтрагент = Док.Грузополучатель;
    Иначе
       
ТекКонтрагент = Док.Контрагент;
    КонецЕсли;

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

    Если
СокрЛП(Док.АдресДоставки) = СокрЛП(Результат.Представление) Тогда
        Возврат;
    КонецЕсли;

    Если
СокрЛП(Док.АдресДоставки)="" Тогда
       
Док.АдресДоставки = Результат.Представление;
    Иначе
        Если
Вопрос("Изменить адрес доставки?",РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
            Возврат;
        Иначе
           
Док.АдресДоставки = Результат.Представление;
        КонецЕсли;
    КонецЕсли;

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


В запросе отбираем конкретный адрес по владельцу (контрагент или грузополучатель, если заполнен). Дополнительно накладывается ограничение, что это будет именно адрес. Следующее условие зависит от пожеланий пользователей. Можно указать, что отбираться будет запись регистра с конкретным видом (например, Адрес доставки или Фактический адрес). В моем случае отбор решили делать по ресурсу ЗначениеПоУмолчанию. Данный ресурс обычно отвечает за то, чтобы с форме элемента Контрагента какие-то контактные данные отмечались жирным (кроме этой визуальной функции в типовых этот ресурс никаких функций не несет). Для это в форме есть кнопка Основной над таблицами с адресами и контактной информацией.

Вызов этом процедуры нужно добавить в конец процедуры формы Реализации ПриИзмененииКонтрагента.

После применения вышеперечисленных изменений получим следующий функционал при работе с документом Реализация товаров и услуг:

1. Если у контрагента указан основной адрес, то он автоматически проставляется в поле Адрес доставки.

2. Если у магазина проставить головного контрагента, то в документе можно в качестве контрагента выбирать магазин и все поле перезаполнятся в соответствии с требованиями учета. Как это работает:

  • Есть магазины "Золушка" и "Белоснежка" принадлежащие ООО "Сказки". ООО "Сказки" просит указать в грузополучателе кроме ООО "Сказки" ещё и название магазина.
  • Заводим 3 соответствующих контрагента с необходимыми юридическими данными и адресами. В магазинах указываем полное название ООО "Сказки" плюс название магазина. Короткое название делаем как удобно операторам. Например, Золушка и Белоснежка.
  • У Золушки и Белоснежки указываем основные адреса и головного контрагента ООО "Сказки".
  • Теперь при оформлении реализации можно выбрать контрагента Золушка. При этом в поле грузополучатель попадет Золушка, в поле адрес доставки её основной адрес, а контрагентом станет ООО "Сказки"...

 

Пример 3.  Номер счет-фактуры совпадает с номером документа реализации.

Очень, знаете ли, бухгалтерии удобно когда номера счет-фактур совпадают с номерами документов. Но тут возниает несколько проблем:

  1. 1с реализовала счет-фактуру отдельным документом со своей нумерацией.
  2. Основанием счет-фактуры может быть не только реализация, но и несколько других видов документов.

Какое решение можно предложить бухгалтерии? Привязать нумерацию счет-фактуры на основании реализации к самой реализации, а для остальных случаев вести отдельную нумерацию. Что для этого нужно?

1. Подписка на событие ПриУстановкеНовогоНомера для документа Счет-фактура выданный.

2. Процедура на данное событие:

 


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

 

3. Контролируемо нарушить авто-нумерацию счет-фактур так, чтобы она не совпадала с нумерацией реализации. Например, поставить дополнительный буквенный префикс. Таким образом, все последующие счета-фактуры основанные не на реализации будут идти с доп.префиксом и нумерация будет сохранять уникальность. При печати такие счета фактуры будут выходить с префиксом и всеми нулями перед основной цифрой. Но это не страшно.

 

 

Пример 4. Возможность запускать произвольную обработку и загружать произвольные данные на компьютере пользователя при запуске 1с.

При этом обработку и загружаемые файлы можно менять уже без изменения конфигурации.

Итак. Как всегда наша задача - получить новый функционал с минимум изменений в типовом коде. В типовых конфигурациях есть замечательный регистр сведений - "Внешние компоненты". Регистр предназначен для хранения внешних компонент, которые загружаются в рабочий каталог 1с на машине пользователя при запуске 1с (кстати, в windows 7 это возможно только, если запускать 1с под администратором, что странно). Но в этот регистр можно записывать не только dll, но и любые другие файлы.

Регистр Внешние компоненты

Таким образом, мы получим на компьютере пользователя любые файлы, которые можем использовать как нам нужно.

Один из вариантов использования - добавить в конфигурацию автозагрузку.

Для начала откроем модуль обычного приложения и найдем процедуру ПриНачалеРаботыСистемы() и добавляем в конец

    Попытка
       
ИмяФайла = КаталогПрограммы()+"Autostart.epf";
       
Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
        Если Не
Форма = Неопределено Тогда
           
Форма.Открыть();
        Иначе
           
ВнешняяОбработка = ВнешниеОбработки.Создать(ИмяФайла);
        КонецЕсли;
    Исключение
       
Предупреждение("Не удалось запустить обработку Autostart.");
    КонецПопытки;

где Autostart - это имя запускаемой обработки. Вот код такой обработки для примера, который с помощью внешней компоненты Miracle меняет задний фон и иконку в 1с:

Процедура ВизуальнаяИдентификацияБазы()
    Попытка
       
ЗагрузитьВнешнююКомпоненту("MiracleV8.dll");
       
L=ПолучитьCOMОбъект("","AddIn.MiracleClass");
       
L.SetMainIcon(КаталогПрограммы()+"main.ico");
       
L.SetMDIPicture(КаталогПрограммы()+"logo.jpg");
    Исключение
    КонецПопытки;
КонецПроцедуры;

ВизуальнаяИдентификацияБазы();

 

Таким образом мы получаем быстронастраиваемый механизм автозагрузки - достаточно заменить/загрузить нужные файлы в регистре.

 

Пример 5. Организация складов без учета характеристик или серий (без документа Корректировка серий и характеристик номенклатуры)

Решение не отличается универсальностью, но зато очень простое.

Дано:

На предприятии есть несколько складов, где не нужен/не возможен/пока не реализован учет по сериям и характеристикам, но остальным складам он нужен. Типовое решение - документ Корректировка СиХ номенклатуры. Но тогда вместо одного документа Перемещение требуется создавать/исправлять и КСиХН.

Решение:

Для начала создадим для складов 2 категории "Не учитывать характеристики" и "Не учитывать серии".

Потом добавим в конфигураторе Подписку на событие составного типа для регистров Партии товаров на складах, товары на складах и товары организаций на событие Перед записью. И добавим следующую процедуру обработчик:

 


    Если Источник.Количество() = 0 ИЛИ Источник[0].Период < '20110501' Тогда
        Возврат;
    КонецЕсли;
   
Запрос = Новый Запрос();
   
Запрос.Текст = "ВЫБРАТЬ
                   |    КатегорииОбъектов.Объект КАК Склад
                   |ИЗ
                   |    РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
                   |ГДЕ
                   |    КатегорииОбъектов.Категория.Код = &Код"
;

   
Запрос.УстановитьПараметр("Код","Ю00000009"); //серии
   
СкладыСерии = Запрос.Выполнить().Выгрузить();

   
Запрос.УстановитьПараметр("Код","Ю00000008"); //характеристики
   
СкладыХарактеристики = Запрос.Выполнить().Выгрузить();

    Если
СкладыСерии.Количество() = 0 И СкладыХарактеристики.Количество() = 0 Тогда
        Возврат;
    КонецЕсли;


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

        Если
СкладыХарактеристики.Найти(ЗаписьРегистра.Склад,"Склад")<>Неопределено Тогда
           
ЗаписьРегистра.ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка();
        КонецЕсли;
    КонецЦикла;

 

Пример 6. Добавляем картинки к кнопкам внешних печатных форм и заполнения табличных частей

 Ищем процедуру ДобавитьСтрокуВДеревоКнопок. Обычно она находится в общем модуле УниверсальныеМеханизмы. Ищем в начале процедуры строчку

СтрокаКнопки.Имя = Имя;

и перед ней вставляем такой код 


    Если Не ЗначениеЗаполнено(Картинка) Тогда
        Попытка
           
Расшифровка.ДополнительныеПараметрыОбработки.Свойство("НазваниеКартинки", Картинка);
           
Картинка = БиблиотекаКартинок[Картинка];
        Исключение
           
Картинка = Неопределено;
        КонецПопытки;
    КонецЕсли;

Кроме того, в общей форме ФормаВыбораПечатныхФорм в таблице в основной колонке в поле Данные картинки нужно написать Картинка. Это требуется только для печатных форм. Для кнопок заполнения табличных частей в типовых уже всё стоит как надо.

 

В результате,  если в дополнительных параметрах внешней обработки указать параметр НазваниеКартинки с строкой содержащей название картинки из библиотеки картинок

 

то эта картинка появится при выборе печатной формы или кнопки заполнения табличной части:

  

 

 Пример 7. Выводит вес брутто в шапке табличной части Товары документа Заказ или Реализация

Добавляем в модуль формы саму процедуру

Процедура mavПосчитатьВесНажатие()
   
Вес = 0;
    Для Каждого
стр из Товары Цикл
       
Вес = Вес + стр.ЕдиницаИзмерения.Вес * стр.Количество;
    КонецЦикла;
   
ЭлементыФормы.Товары.Колонки.Номенклатура.ТекстШапки = "Номенклатура. Брутто: " + Строка(Вес)+ " кг";
КонецПроцедуры
 
 

и её вызов в процедуры ПередОткрытием (формы), ТоварыПриОкончанииРедактирования(табличной части) и ОбработкаПодбора

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Сергей Ожерельев (Поручик) 26.11.10 17:36
Доработки под 8.1. с каждым днём всё неактуальней и всё дальше на задний план.
А вот материалы по управляемым 8.2 - это вещь.
Если уж бухню на управляемых запилили.
2. Александр Медведев (anig99) 26.11.10 19:36
Некоторые вещи универсальны - там меняется логика, а не только код
3. Alexandr_P (Русский) 28.11.10 08:06
Стоить заметить, что такая доработка существенно снижает производительность динамического списка...
4. Александр Медведев (anig99) 28.11.10 08:53
(3) Если не знаешь всех пользователей по ФИО, то скорее всего у тебя их больше 30. Соответственно сервер для такой базы должен быть мощный. Поэтому в реальности, у того кому потребуется такая доработка, падение производительности будет незначительна.
5. Alexandr_P (Русский) 28.11.10 11:47
(4) если пользователи будут в локальной сети, то разницы они почти не заметят, а если они будут работать через интернет, то "притормаживание" будет заметным. Количество вызовов сервера увеличивается в разы, сам экземпляр формы будете "гонять" между клиентом и сервером раз в 10-30 больше а объем трафика больше раз в 20, при условии, что изображения будут иметь маленький размер...

Делайте выводы.
6. Alexandr_P (Русский) 28.11.10 11:54
То есть "узким" местом тут является сеть, а не железо сервера, хоть нагрузка на последний тоже увеличивается, пускай даже и не настолько заметно.
7. Александр Медведев (anig99) 28.11.10 16:12
Не соглашусь с вашими количественными оценками. Во первых, по количеству вызовов. Откуда такие цифры? Информация запрашивается при выборе строчки, а не при выводе списка или обновлении. Трафик зависит от размера картинки физ.лица. В управляемом интерфейсе ведь тоже есть картинки.
8. Alexandr_P (Русский) 28.11.10 18:55
(7)
&НаСервере

вот эта вот штуковина тянет всю форму на сервер. Ну и представьте, что же будет, если пользователю вздумается не выделять нужные строки списка, а листать список с клавиатуры? :o
9. Александр Медведев (anig99) 28.11.10 19:42
(8) ну во-первых, &НаСервере НИЧЕГО на сервер не отправляет. Это инструкция определяет, что функция будет выполнена на сервере и её результаты уже будут направлены на клиент. Управляемые формы работают так ВСЕ. Разберитесь в тонкостях управляемых форм получше, т.к. УФ всегда существует и на клиенте, и на сервере и обмен между ними происходит постоянно, вне зависимости есть ли там динамические списки или нет. Про картинки я соглашусь, что они увеличивают траффик, но никак не интенсивность вызовов.
Ближайший аналог от 1с - справочник Номенклатура, где в форме списка можно рассчитывать остатки и смотреть изображение. Там запрос на остатки много тяжелее.
И насколько я помню, справочник Пользователи предназначена для Администраторов.
10. Alexandr_P (Русский) 29.11.10 17:36
(9)
ну во-первых, &НаСервере НИЧЕГО на сервер не отправляет

т.к. УФ всегда существует и на клиенте, и на сервере


:o Может стоит почитать документацию?
11. Александр Медведев (anig99) 29.11.10 23:35
(10) в общем неправы оба.
Я, когда говорю, что обмен происходит постоянно. Обмен происходит по необходимости. И изначально форма пользователей не содержит дополнительных вызовов, поэтому добавление данной функции повлечет за собой увеличение вызовов процедур и траффика.
Но так как изначально объем данных мизерные, то эти "разы" тоже превращаются в незначительные объемы (уже проверено на фактических данных, просто открытие справочника Пользователи занимает времени в десятки раз меньше). Особенно если заменить &НаСервере на &НаСервереБезКонтекста.
Кроме того, данные код вообще не предназначен для тонкого и web-клиента - он там просто не работает.
12. Александр Медведев (anig99) 29.11.10 23:37
Если уж на то пошло, в обычном режиме форм общение с сервером наааамного больше.
13. Alexandr_P (Русский) 30.11.10 06:13
(11) вот. Ну хоть до чего-то докапались. Я в основном насчет &НаСервере vs &НаСервереБезКонтекста и говорил :D

(12) это и так понятно. 7.7/8.1 против 8.2 в режиме управляемого приложения (естессно конфы, разработанной с учетом всех методик и требований) просто беспощадные пожиратели трафика :!:
14. Александр Медведев (anig99) 30.11.10 08:09
(13) а у меня просто чтение документации с практическим освоением было во времени разнесено. Понадеялся на правильность примера от 1с.
15. Андрей Д. (detec) 30.11.10 10:12
Заголовок публикации претендует на какой-то технологический прорыв, а по сути - мелкое допиливание под собственные специфические нужды. Думаю, такое каждый сделает, смысл такое публиковать?

Думаю, выложить самописку с оригинальными техническими решениями на управляемом интерфейсе было бы гораздо полезнее.
16. Александр Медведев (anig99) 30.11.10 10:24
(15) заголовок не претендует на технологический прорыв
По википедии

Тю́нинг (англ. Tuning — «настройка») — термин заимствованный из английского языка.
Тюнинг автомобиля — доработка (с целью улечшения потребительских качеств) автомобилей, как заводом-изготовителем, так и сторонними компаниями.
Тюнинг компьютера (моддинг) — доработка (с целью улечшения потребительских качеств) компьютеров и компьютерной переферии.

Публикация и дальше будет расширяться.
Зачем писать самописки, ссылаясь на неудобность универсального решения от 1с, если это универсальное решение парой строчек кода/функцией можно настроить под себя?
17. Виталий (nafa) 29.05.11 16:21
По поводу Номер счет-фактуры совпадает с номером реализации - какие подписки на события??? Печатную форму счета-фактуры привязать к реализации, про счет-фактуру как отдельный документ забыть, как кошмарный сон.
18. Александр Медведев (anig99) 29.05.11 16:34
(17) тогда ещё надо будет менять и книги продаж и покупок. Счет-фактуры не просто так в отдельные документы поместили.
19. Виталий (nafa) 29.05.11 17:01
Уже давно книге покупок счет-фактура не нужен (по-моему даже в 7.7). А почему не сделано аналогично для книги продаж ? Правильно - ИБД.
Поручик; +1 Ответить 1
20. Александр Медведев (anig99) 29.05.11 19:06
(19) Я предпочту написать 5-10 строк кода, чем ломать логику, которая пронизывает всю конфу и создавать новую печатную форму.
21. Вячеслав Пузанов (puzano-v) 30.05.11 18:11
Если конфигурация стоит на сопровождении - нельзя в нее вносить свои изменения ( практика ).
Если конфигурация Ваша, делайте все что хотите.
Странно, но все доработки на 1с7 работают по умолчанию.
Есть точки выхода на формы, документы, таблицы - используйте их.
22. Александр Медведев (anig99) 31.05.11 12:38
(21) собственно сама тема публикации подразумевает, что стандартная конфа дорабатывается, а значит в ней включена возможность изменения. При этом вносимые изменения действительно минимальны и часто не касаются типового кода, а дополняют его, а значит не мешают обновлению. Использование внешних печатных форм и заполнялок табличных частей - это конечно хорошо, но я повторюсь - легче добавить 5-10 строк кода, чем ради этого писать собственную печатную форму и потом постоянно следить за её работоспособностью после обновлений.
23. Александр Слинкин (prog3000) 17.08.11 20:00
Счет фактура
на 8.2 код работает с незначительным изменением
Если ЗначениеЗаполнено(ДокументОснование) И ТипЗнч(ДокументОснование) = Тип("ДокументСсылка.РеализацияТоваровУслуг") Тогда
        СтандартнаяОбработка = Ложь;
        Номер = ДокументОснование.Номер;
КонецЕсли;


Спасибо
24. Александр Медведев (anig99) 17.08.11 21:48
(23) странно. у меня на 8.2 работает в моей версии. Точный номер платформы?
25. Александр Слинкин (prog3000) 17.08.11 22:09
27. evgen1977 (musatov1c.ru) 16.12.11 08:57
Очень интересно. Оставляю ссылку для обязательного изучения :) Автору респект.
28. kcprovod (loginfo) 19.06.12 12:26
L.SetMainIcon(КаталогПрограммы()+"main.ico");

Хочу изменить иконку программы. кидаю иконку в папку и прописываю путь так: L.SetMainIcon("C:\...\mai.ico");
и иконка не меняется. Подскажите, как правильно прописать путь к иконке? Или нужно закинуть в определенную папку 1с?
29. Александр Медведев (anig99) 19.06.12 12:55
(28) скорее всего опечатка в пути к иконке
30. kcprovod (loginfo) 20.06.12 13:35
31. ProFix (Alex1Cnic) 18.04.13 12:07
Да, в принципе, неплохая статека... Но для использования упомянутыхв статье "фишек" опять же приходится вносить изменения в код типовой конфигурации, что по-моему не совсем удобно...
32. Александр Медведев (anig99) 18.04.13 14:20
(31) ProFix, тут уж кому как. У меня в конфе есть изменения вынужденные, поэтому почему бы не сделать пару фишек для удобства
33. Александр Иванов (dwarkin) 29.04.13 07:38
так же можно в УТ 10.3.х.х, в модуле объекта Обработка.ПодборПараметровРасшифровкиПлатежа, Процедура СформироватьСписокДолговПоРегистру(ТабРасшифровка), строки 284-292 слегка подправить запрос:
    Если УчитыватьФактическиеЗадолженности Тогда
	ТекстОсновнойЗапрос=ТекстОсновнойЗапрос+"
            |	ТЧДокументаПлатежа.ДокументРасчетовСКонтрагентом КАК ДокументРасчетовСКонтрагентом,
            |	ВЫБОР КОГДА (НЕ ТЧДокументаПлатежа.ДокументРасчетовСКонтрагентом=Неопределено)
            |	ТОГДА ТЧДокументаПлатежа.ДокументРасчетовСКонтрагентом.Дата
            |	КОГДА (ТЧДокументаПлатежа.Сделка<>Неопределено И ТЧДокументаПлатежа.Сделка<>NULL)  // <----
            |	ТОГДА ТЧДокументаПлатежа.Сделка.Дата
            |	ИНАЧЕ ТЧДокументаПлатежа.Ссылка.Дата Конец КАК ДатаВозникновения,";
    Иначе
...Показать Скрыть

....
тогда будет корректно получаться дата возникновения задолженности для Текущего документа, если тип Сделки выбран, а конкретно на документ не указали. Или скопировали документ расчетов.
34. Александр Журавлев (apostal86) 12.09.14 08:21
35. Петр Лунегов (pvlunegov) 05.06.15 21:49
anig99
Я к тебе в гости пожаловал.
Смотрю ты тут тоже крутые статьи пишешь.
А помнишь как ты меня лохом обзывал в моей статье, нахер посылал, угрожал, приказывал прекратить печать статей?

Ну что-ж оценим твои творения!

Вот вроде бы пишешь банальности, какие то фигульки дописки. Сам меня опускаешь в лужу, говоришь, не смей писать то, что пишут другие...
Получается, тятенька, вы не правы!
Пишите всякую хрень, а потом за нее же других поносите?
И почему я не могу ту же вещь как у тебя лучше описать, с картинками, с графиками, с таблицами? Почему надо молодых сразу в сортире мочить?
Почему надо сразу говорить что мой сайт отстой и я лох?

А вы собственно кто были в 2011? Такой же лох, который ни хрена не знал в 1с, как и я щас.

Все познается на своем опыте. Другие не виноваты что у вас его больше. Другие вовсе не дураки, как вы считаете.
ТО, что они делают статьи по-другому, вовсе не значит что они пишут просто так, ради того, чтобы написать.

Вот вы ради чего все тут развели?
Чтобы учить людей? Этой банальщине, как мне пишете?

Я простите, такую же банальщину пишу. Мы получается ничем не отличаемся, только тем, что я себя вежливо вел, а вы меня обосрали
36. Александр Медведев (anig99) 05.06.15 22:04
(35) pvlunegov, в 2011 году я уже 5ый год САМОСТОЯТЕЛЬНО осваивал 1с. И ждал года 3 прежде чем публиковать что-то на ИС. И мои первые публикации тоже обсирали, но именно из-за их сырости.

А насчёт этой публикации - просто не значит банально и не оригинально. Например, пункт 6. Пока я не встречал реализацию такого механизма ни у кого.
На Ваши уроки я привел несколько источников, где описывается то же самое, но без ошибок и более удобной форме.

Кроме того, эта публикация оформлена читаемо, несмотря на "ужасный" движок публикаций ИС.

Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа