1С: 7.7. Функции-обертки, функторы, отложенный вызов, карринг параметров на примере функции чтения табличных данных

Публикация № 398900 17.09.15

Приемы и методы разработки

Функциональное программирование map-reduce carying карринг аргументов паттерны проектирования

Человек, работающий в 1С, в силу своей практики и опыта может нуждаться в средствах программирования, в 1С не представленных. В публикации описаны средства отложенного вызова функций, каринга параметров, композиции и др., в основе которых лежит вызов функции посредством функции Шаблон. Несмотря на простоту, созданный за несколько лет работы в 1С 7.7 набор функций обрел мощь, достаточную для лаконичной реализации указанных целей.

Рассмотрение темы предлагается начать "от обратного".

Вниманию читателя предлагается вызов функции чтения табличных данных (xls,csv)

Функция мПрочитатьВходнойФайл(пКонтекстДокумента, пФайлЗагрузки, пРольАгентскойСхемы)
	лРасшФормы = глРасшФормы(пКонтекстДокумента.Форма);
	лТаблица = глСчитатьТабличныеДанные(пФайлЗагрузки
		, глСписок_("Признак-итога", 2, "ВидЗатрат", 6,"Счет", 6, "Сумма", 11, "Объект", 4, "РольАгентСхемы", 1)
		, глСписок_(
			  "Сумма", глСписок("->", глСписок("глЗаменить", "\.", "", ",", "."), глСписок("Число"))
			, "Объект", глСписок("->>", глСписок("глЭлементСправочника", "СПП"))
			, "ВидЗатрат", глСписок("->>", глСписок("глЭлементСправочника", "IBSВидыЗатрат"))
			, "Счет", глСписок("->>", глСписок("глЭлементСправочника", "IBSВидыЗатрат"), глСписок("глВызов_", глСписок("Реквизит", "БухСчет")))
			, "РольАгентСхемы", глСписок("->>", глСписок("глЗнач", пРольАгентскойСхемы))
			) 
		, глСписок_("Признак-итога", глСписок("ПустоеЗначение"))
		, глСписок("мНоваяСтрокаДокументаОстатки", пКонтекстДокумента)
		, 4);
КонецФункции // ПрочитатьВходнойФайл

Функция мПрочитатьВходнойФайл вызывается из документа "Ввод остатков" конфигурации БУ. При вызове происходит передача контекста документа, который используется для заполнения табличной части вызывающего документа содержимым excel или csv файла.

Таким образом, функция мПрочитатьВходнойФайл  дублируется в нескольких внешних обработках, реализуя множество способов построения документа "Ввод остатков" через интерфейсную функцию мПрочитатьВходнойФайл, каждая из которых производит чтение, преобразование и проверку разнородных табличных данных (паттерн "Строитель")

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

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

глСписок

Функция глСписок( пЗнач1 = "дефолт",  пЗнач2 = "дефолт",  пЗнач3 = "дефолт", ..., пЗнач43 = "дефолт") Экспорт

Функция глСписок является оберткой для создания объекта "СписокЗначений" в одну строку, также поддерживается хранение типизированных пустых значений.

Пример:
лСписок = глСписок(1, 2, 4, "stuf stuf stuf",, ПолучитьПустоеЗначение("Справочник.Номенклатура"));

глСписок_

Функция глСписок_(знач пСтрока1 = 0, пЗнач1 = "дефолт",  знач пСтрока2 = 0, пЗнач2 = "дефолт", ..., знач пСтрока43 = 0, пЗнач43 = "дефолт") Экспорт

Функция глСписок является оберткой для создания объекта "СписокЗначений" в одну строку. Дополнительно указываются строковые представления хранимых в списке значений.

Пример:
лСписок = глСписок_("фамилия", "Рожков", "имя", "Дмитрий",  "отчество", "Сергеевич", "возраст", 30)

глВызов_

Функция глВызов_(знач пФунктор, знач пАргумент, знач пВКонец = 0)

Реализует отложенный вызов функции, переданной в первом параметре. На второй позиции передается аргумент, располагающийся в вызываемом функторе в качестве первого параметра по умолчанию. Если  пВКонец не равно нулю, то пАргумент будет размещен в конце списка параметров пФуктор.

Функтор

Функтором в представленной организации исполнительной среды является объект типа "СписокЗначений", на первой позиции которого хранится строковое наименование вызываемой функции, в оставшейся части списка поочередно размещаются параметры указанной на первой позиции функции. Вызов алгоритмов обработки любых коллекций ("СписокЗначений", "ТаблицаЗначений", файл excel, "Справочник.ХХХ" и др.) подразумевает передачу в обобщенный алгоритм функтора и дальнейшую последовательную подстановку в него i-того элемента коллекции по аналогии с функциями стандартной библиотеки высокоуровневых языков foreach, accumulate, map_reduce, sort, filter, transform, search и др. Как правило, производится подстановка на вторую позицию в списке, сразу после имени функции, при вызове подставленное значение окажется на первой позиции списка аргументов функции. Почти во всех таких абстракциях присутствует вызов глВызов_. Например функция глВызов (без знака подчеркивания) реализована при её помощи.

глВызов

Функция глВызов(знач пФунктор) Экспорт
	Перем лРезульт;
	Если ТипЗначенияСтр(пФунктор) <> "СписокЗначений" Тогда
		Возврат пФунктор;
	КонецЕсли;
	Шаблон("[глПрисвоить(лРезульт, " + глРазвернутьФунктор(пФунктор,, "пФунктор", 1) + ")]");
	Возврат лРезульт;
КонецФункции // глВызов
Функция глРазвернутьФунктор(пФунктор, знач пПервыеАргументы = "", знач пИмяФунктора, знач пБезСкобок = 0) Экспорт
    лРазмер = пФунктор.РазмерСписка();
    
    лНаимФункц = пФунктор.ПолучитьЗначение(1);
    
    Если "->" = лНаимФункц Тогда 
        пФунктор.УстановитьЗначение(1, "Композиция");
    КонецЕсли;

    Если "->>" = лНаимФункц Тогда 
        пФунктор.УстановитьЗначение(1, "Композиция_");
    КонецЕсли;
    
    лВызовУсловия = ?(пБезСкобок <> 0, "", "[") + пФунктор.ПолучитьЗначение(1) + "(" + пПервыеАргументы
                        + ?(лРазмер > 1, ?(ПустаяСтрока(пПервыеАргументы) = 0, ", ", ""), "");
    лАргументы = глСписок();
    Если пФунктор.РазмерСписка() > 1 Тогда
        пФунктор.Выгрузить(лАргументы, 2);
    КонецЕсли;

    Возврат лВызовУсловия + глРазвернутьАргументы(лАргументы, пИмяФунктора, 1) + ")" + ?(пБезСкобок <> 0, "", "]");
КонецФункции // глРазвернутьФунктор
Функция глРазвернутьАргументы(знач пСписок, знач пИмяСписка, знач пСмещение = 0) Экспорт
	лРазмер = пСписок.РазмерСписка();
	лСтрВызова = "";
	Для ит = 1 по лРазмер Цикл
		лСтрока = "";
		лЗначение = глЗначениеСписка(пСписок, ит, лСтрока);
		лСтрВызова = лСтрВызова +  ", " + ?(НепустоеЗначение(лЗначение) = 0, "Пуст(""" + лСтрока + """)"
			, Шаблон("глЗначениеСписка([пИмяСписка], [ит + пСмещение])"));
	КонецЦикла;
	Возврат Сред(лСтрВызова, 3);
КонецФункции // глРазвернутАргументы

Функция глВызов производит "развертывание" функтора в строковое представление, интерпретируемое впоследствии вызовом Шаблон

Шаблон("[глПрисвоить(лРезульт, " + глРазвернутьФунктор(пФунктор,, "пФунктор", 1) + ")]");

Считается, что аргументы функтора, как и её название, хранятся в переменной пФунктор. Исходя из этого знания происходит развертывание. В глРазвернутьФунктор передается не только его содержание, но и наименование переменной, представленное в контексте исполнения. После работы функций глРазвернутьФунктор и глРазвернутьАргументы в контексте глВызов оказывается пригодная для выполнения в Шаблоне строка вызова. Например, подстановка в табло операций развёртывания функторов даст следующие результаты:

глРазвернутьФунктор(глСписок("ок", "Привет мир!!!"),, "пФунктор", 1)  = ок(глЗначениеСписка(пФунктор, 2))
глРазвернутьФунктор(глСписок("->>", глСписок("глЭлементСправочника", "СтавкиНДС", "V1")),, "пФунктор", 1) 
	= Композиция_(глЗначениеСписка(пФунктор, 2))

Композиция, Композиция_ ("->", "->>")

Функция Композиция создана исключительно для "заворачивания" и хранения её в функторе. Прямой вызов этой функции вне функций обхода коллекций нецелесообразен.

Отложенный вызвов функций Композиция ("->") и Композиция_ ("->>") подразумевает уже упомянутую передачу в них в качестве первого аргумента i-го элемента коллекции. Функция композиция производит последовательное выполнение функторов переданных в качестве параметров. На вход первого функтора подается i-й элемент обрабатываемой в текущий момент коллекции.

Композиция ("->") отличается от Композиция_ ("->>") тем, что в первом случае переданный начальный параметр всегда размещается как первый аргумент цепочки функторов, а во втором как последний. Очень редко может понадобиться размещение входного параметра в цепочке функторов на иной позиции - для этого следует использовать функции глСместАргСлева(Справа). Сказанное наглядно иллюстрирует исходный код функции композиция и пример.

Функция Композиция(знач пИскомое, знач пф1 = 0, знач пф2 = 0, знач пф3 = 0, знач пф4 =0, знач пф5 = 0) Экспорт
	лРезультат = пИскомое;
	лФункторы = глСписок();
	Если пф1 <> 0 Тогда лФункторы.ДобавитьЗначение(пф1); КонецЕсли;
	Если пф2 <> 0 Тогда лФункторы.ДобавитьЗначение(пф2); КонецЕсли;
	Если пф3 <> 0 Тогда лФункторы.ДобавитьЗначение(пф3); КонецЕсли;
	Если пф4 <> 0 Тогда лФункторы.ДобавитьЗначение(пф4); КонецЕсли;
	Если пф5 <> 0 Тогда лФункторы.ДобавитьЗначение(пф5); КонецЕсли;
	
	лРазмер = лФункторы.РазмерСписка();
	Для ит = 1 по лРазмер Цикл
		лФунктор = лФункторы.ПолучитьЗначение(ит);
		Если лФунктор = 0 Тогда Прервать; КонецЕсли; 
		лРезультат = глВызов(глВставитьВСписок(лФунктор, лРезультат, 2));
	КонецЦикла;
	Возврат лРезультат;
КонецФункции // Композиция

Пример:

Установлено, что в справочнике "СПП" по коду "test-test-test" хранится строка, в которой среди прочего мусора хранится дата ("Элемент справочника СПП - дата х . 17.09.2015 --"), которую необходимо изъять и преобразовать в тип Дата:

глВызов_(
    глСписок("->>"
        , глСписок("глЭлементСправочника", "СПП")
        , глСписок("Строка")
        , глСписок("глСместАргСправа" // сместить аргумент справа в указанную позицию (1)
            , глСписок("глЗаменить", ".*(\d{2}\.\d{2}\.\d{2,4}).*", "$1"), 1)
        , глСписок("Дата"))
    , "test-test-test") = 17.09.15

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

В заключение

Поводом для статьи послужили несколько причин.

К сожалению, некоторые разработчики на 1С и не только придерживаются в своей практике принципа простоты, считая что для создания хороших програм достаточно операторов Если...ИначеЕсли...Иначе...Тогда, Для..Цикл..КонецЦикла. Практика показала, что исходные коды, созданые без применения минимальных абстракций, стремятся в к высоким величинам по показателям длина кода функции и вложенность условий. Любовь к ремеслу вызывает стремление показать заинтересованному читателю, что можно писать на 1С лаконичней, интересней и продуктивней.

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

Нежелание хоронить результат своей работы ...

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

Еще примеры:

Объединение списков периодов

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

Функция глОбъединитьСпискиПериодов(знач пА, знач пБ, знач пМетодУчетаКоэфПересеч = 1) Экспорт
	лРазнАБ = глРазностьСписковПериодов(пА, пБ);
	лРазнБА = глРазностьСписковПериодов(пБ, пА);
	лПересАБ = глПересеченияСписковПериодов(пА, пБ, пМетодУчетаКоэфПересеч);
	лОбъединение = глСортироватьСписокЗначений(глОбъединитьСписки(глОбъединитьСписки(лРазнАБ, лРазнБА), лПересАБ), глСписок("глПериодРаньше"));

        //... обработка коэффициентов
КонецФункции
Функция глПериодРаньше(знач пВрПер1, знач пВрПер2) Экспорт
	Возврат ?(пВрПер1.ПолучитьЗначение(1) < пВрПер2.ПолучитьЗначение(1), 1, 0);
КонецФункции // глПериодРаньше

Обход справочника, копирование стажей

Рассмотрено копирование стажей по всему справочнику сотрудников при помощи вызова глОбходСправочника. Стажи хранятся в отдельном подчиненном сотрудникам справочнике.

глФильтрСправочника("Сотрудники"
	, глСписок("глСкопироватьСтажи", Перечисление.ВидСтажа.ВОтрасли, 1, 0.85, Перечисление.ВидСтажа.МММ),,,0);
Функция глСкопироватьСтажи(знач пСотрудник, знач пВидСтажаИЗ, знач пРучнСтажиИз, знач пКоэф, знач пВидСтажаВ, знач пОчист = 0) Экспорт ...

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

Фильтр списка сотрудников

Интересный пример выборки сотрудников с достаточным стажем и не перерботавших более полугода после возраста права гос. пенсии для назначения негосударственной пенсии.

Возврат глФильтрСпискаПоИ(лСостав
	, глСписок("->", глСписок("СтажГазпромРКСПриУвольнении"), глСписок("больше", 14))
	, глСписок("НеПереработал"));

Фильтр таблицы, получение строк таблицы по типу документа

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

Функция ПечатьРасходов_ФСС_НС(знач пРасходыЗаСчет_ФСС_НС)
	лТаблица = глТаблица("4ФСС_Расходы_ФССНС");
	лТаблица.Вывести();
	
        // ... предварительная подготовка

	лРасходыЗаСчет_ФСС_НС = глФильтрТаблциы(пРасходыЗаСчет_ФСС_НС, глСписок("Композиция"
			, глСписок("глЗначениеКолонки", "Документ")
			, глСписок("глВидДокумента")
			, глСписок("равно", "НачислениеОтпуска")));
  
       // ... обработка отфильтрованной таблицы
КонецФункции

https://yadi.sk/d/2SrdDsVGj9T7y

Скачать файлы

Наименование Файл Версия Размер
Конфигурация, содержащая весь описанный набор функций

.zip 291,75Kb
3
.zip 291,75Kb 3 Скачать

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. MaxDavid 127 17.09.15 14:59 Сейчас в теме
К сожалению, некоторые разработчики на 1С и не только придерживаются в своей практике принципа простоты, считая что для создания хороших програм достаточно операторов Если...ИначеЕсли...Иначе...Тогда, Для..Цикл..КонецЦикла.
Простота обуславливает низкий порог вхождения и, как следствие, массовость, что для 1С актуальнее красоты и продуктивности кода.

Но подход интересный, на досуге посмотрю ))
21. alexey.kutya 267 19.02.19 11:22 Сейчас в теме
(1) Простота обуславливает низкий порог вхождения
и как следствие низкое качество кода
2. CheBurator 3378 17.09.15 23:08 Сейчас в теме
Приведите плиз не пример самих функций а пару кусков кода с использованием этих возможностей/функций для текущей работы
3. rozhkovdmitriy 25 18.09.15 09:12 Сейчас в теме
(2) CheBurator, добавил несколько примеров
4. vcv 89 18.09.15 13:00 Сейчас в теме
Подход интересный. Но боюсь, быстродействие будет сильно страдать.
Возврат глФильтрСпискаПоИ(лСостав
, глСписок("->", глСписок("СтажГазпромРКСПриУвольнении"), глСписок("больше", 14))
, глСписок("НеПереработал"));

Если уж пользуетесь активно функцией Шаблон, то почему бы не сделать более простой синтаксис?
Что-то типа такого:
глФильтрСпискаЗначений(лСписок,"($.СтажГазпромРКСПриУвольнении>14)И($.НеПереработал=1)")

где $ обозначает текущий объект перебираемой коллекции.
5. rozhkovdmitriy 25 18.09.15 14:33 Сейчас в теме
(4) vcv, Спасибо за интерес к теме

Подход интересный. Но боюсь, быстродействие будет  сильно страдать.


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

Если уж пользуетесь активно функцией Шаблон, то почему бы не сделать более простой синтаксис?
Что-то типа такого:

глФильтрСпискаЗначений(лСписок,"($.СтажГазпромРКСПриУвольнении>14)И($.НеПереработал=1)")


Я согласен с Вами, vcv, предложенный вид хорош и вполне себе реализуем для фильтра коллекции, но к сожалению не вписывается во всё разнообразие возможных вызовов.

Предложенная строка заработает в Шаблоне если на лету будет создан некий КОП (класс определенный пользователем), перенаправляющий вызовы через точку, а все остальные возможные аргументы, с учетом своих позиций в целевой функции, будут сохранены в объекте класса до своего вызова(И они тоже должны быть указаны в строке шаблона). Вопрос, позиции аргумента, в которую передается текущий элемент тоже открыт, его надо будет прописать в строке шаблона и элегантно распарситься не превратившись в дополнительный язык запросов 7.7 :). Как реализовать композицию и шифтинг, возвращаемого параметра на другую позицию?

Рождается больше вопросов чем ответов. Прошу меня поправить, если я во всем и не прав :)

глФильтрСпискаЗначений(лСписок,"($.СтажГазпромРКСПриУвольнении(прм1, прм2..., прмN)>14)И($.НеПереработал(прм1, прм2..., прмN)=1)")

Идея использования функторов, для лаконичного представления кода не нова, как и все парадигмы, которые я попросту попытался перенести в 1С без изменений, вероятно вы знаете про это.

Существующие реализации:

c++ (https://en.cppreference.com/w/cpp/utility/functional) ,
lisp (http://clojuredocs.org/clojure.core/sort)
javascript,actionscript - там нет явной подстановки операторов, зато лямбда-функции создаются на лету (http://javascript.ru/Function)

p.s. Были мысли перевести вызов функций на ВыполнитьФункцию объекта "Сервис" из FormEx, но что-то мне тогда помешало

Спасибо!
6. brr 181 18.09.15 14:59 Сейчас в теме
Вместо строки, с возможными опечатками, завести переменную, например, глСкопироватьСтажи = "глСкопироватьСтажи".

Вот и передача функции параметром.

Костыль конечно.
7. bulpi 188 18.09.15 22:02 Сейчас в теме
Как то Грибоедов написал "Горе от ума". Само произведение плевенькое, но название зачетное. Очень подходит для таких вот "произведений". Особенно доставляет поддержка таких вот конфигураций после ухода автора. Если бы проклятия обладали материальной силой, Вам, автор, пришлось бы очень плохо. Долго бы болели и умерли нехорошей смертью.
wolfsoft; +1 Ответить
8. vcv 89 19.09.15 12:41 Сейчас в теме
(7) bulpi, Проблема с поддержкой есть. Во многом она объясняется прямолинейностью мышления среднего 1Сника, не воспринимающего приёмов программирования, распространённых в других языках. Но проблему с поддержкой это не облегчает.
Мне больше не нравится проблема с проверкой кода. Синтаксический контроль в 7.7 и так прост и туп как доска, а тут у его еще и отбирают возможность проверить имя функции и количество параметров.
Я вот недавно занялся противоположным (в некоторой степени) вопросом. Как проверить еще что-нибудь в дополнение к синтаксическому контролю. Первый вариант прост и туп, но уже помог выловить ряд потенциально проблемных мест в большом рабочем проекте.
10. rozhkovdmitriy 25 21.09.15 06:25 Сейчас в теме
(8) vcv, добрый день, использую прототипирование в табло чтобы проверять работоспособность написанного, всегда "проваливаюсь" в функцию по ctrl-Enter чтобы посмотреть количество параметров.
15. wolfsoft 2422 23.09.15 09:12 Сейчас в теме
(8) vcv,
Во многом она объясняется прямолинейностью мышления среднего 1Сника, не воспринимающего приёмов программирования, распространённых в других языках.


Нет, она объясняется тем, что обычные заказчики не хотят оплачивать специалиста стоимостью 200к в месяц. Плюсанул к "горю от ума", ибо приходилось иногда разгребать такие витиеватые коды, мама не горюй... причём за счёт заказчика...

PS: Особенно нравится одна самописная конфа - судя по коду, её явно писали люди, которые программировали до этого на фокспро, а тут заказчик потребовал написать конфу на 1с. 1с при этом они первый раз увидели, в результате чего нагромоздили такого, за что их периодически хочется побить. А самое грустное, что заказчик уже привык к такому и другого видеть не желает, поневоле приходится продолжать в том же духе.. ))
9. rozhkovdmitriy 25 21.09.15 06:20 Сейчас в теме
(7) bulpi, "горе от ума", вы правы, крыть нечем :)
11. kote 526 21.09.15 11:09 Сейчас в теме
Идея хорошая.
Но реализация - плохая..

И не то, что бы у Вас плохая - не знаю, можно ли удобнее сделать в 1С.. убогость языка, конечно, убивает. Особенно после того, как пощупаешь python или ruby - хочеться более гибкого языка.
autotrade; +1 Ответить
12. rozhkovdmitriy 25 22.09.15 07:49 Сейчас в теме
13. brr 181 22.09.15 10:39 Сейчас в теме
По конфигурации. Вроде как рекомендуется 1с++ грузить первой.
14. MaxDavid 127 22.09.15 20:31 Сейчас в теме
Впечатление двойственное, честно говоря. Можно, конечно, попытаться и Лисп реализовать на 1С, но... но...
Я сам одно время думал, как средствами 1С реализовать нечто похожее на мою юношескую любовь - Forth ))
16. wolfsoft 2422 23.09.15 09:14 Сейчас в теме
Ну, а так в целом, как разминка для ума, конечно, интересно :) В принципе, если функция работает и хорошо задокументирована, то почему бы и нет. Просто использовать её, не вникая в реализацию.
17. Frogger1971 23.09.15 09:44 Сейчас в теме
самое главное в публикации начинается после
- "продвинутый" код 1С 7.7
18. rozhkovdmitriy 25 23.09.15 14:29 Сейчас в теме
Спасибо за критику, друзья!

В оправдание своего решения позволю себе процитировать самого себя.

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


Замечу также, что в неумелых руках и обычный синтаксис 1С превращается в кучу макарон, как и стремление накрутить функтор посложней и повложенней.
Знание меры позволит писать приятней и эффективней и радовать своих коллег, простыми и лаконичными решениями.

Нет, она объясняется тем, что обычные заказчики не хотят оплачивать специалиста стоимостью 200к в месяц. Плюсанул к "горю от ума", ибо приходилось иногда разгребать такие витиеватые коды, мама не горюй... причём за счёт заказчика...


Если бы я был заказчиком, я бы тоже с осторожностью относился к *витиеватым* кусочкам кода соискателей. Ключевым словом, уважаемый woflsoft, является "витиеватые коды". Сам перелопатил, тонны такого кода, в зарплатной конфигурации, написанного тёмными силами, работающими в не менее тёмных застенках компании 1С и кода, написанного за счет моего предприятия, именитыми аутсорсинговыми компаниями-подрядчиками. Надеюсь вы не будете оппонировать отложенным вызовам и возьмете их на вооружение при сохранении требования отсутствия витиеватости.

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


Спасибо, так и есть, берем и пользуемся. Документация в шапках функций. Мои коллеги, их двое, не используют предложенные механизмы, но и по голове мне тоже не стучат, вполне себе могут править мои куски.
Более того, при обсуждении всплыл например такой вопрос - "Что проще, отложенные вызовы или прямые запросы из 1С++". И то и другое - инструмент. В первом случае надо иметь опыт работы с функторами на одном из ЯП высокого уровня, в другом - иметь опыт работы с SQL
19. aspirator23 470 26.09.15 14:34 Сейчас в теме
Поддержу автора. Мне такой подход ближе, чем километровые "портянки" из простых, а главное повторяющихся конструкций в коде. Которые да, легче поддерживать, но как то не вызывают чувства гармонии. Хотя, пожалуй, гармония мало подходит к коду. Но однотипные функции в разных местах - это уж точно не то чем стоит гордиться.
20. MaxDavid 127 26.09.15 19:56 Сейчас в теме
(19) aspirator23, видите ли, в чем дело. Фикси всегда доделывают конфу в соответствии со своими представлениями о красоте кода. Это нормально, их не в чем упрекнуть. Беда в том, что рано или поздно появляется человек, которому во всей этой красоте приходится разбираться. Даже топикстартер, при всем моем уважении и при всей его пунктуальности, допустил как минимум одну ошибку в документировании функций. Будь вы на месте руководителя, стали бы вы оплачивать приходящему 1Снику время, затраченное на вникание в красоту стороннего кода? ))
Оставьте свое сообщение

См. также

StartManager 1.4 - Развитие альтернативного стартера Промо

Стартеры 1С v7.7 v8 Абонемент ($m)

Очередная редакция альтернативного стартера, являющегося продолжением StartManager 1.3. Спасибо всем, кто присылал свои замечания и пожелания, и тем, кто перечислял финансы на поддержку проекта. С учетом накопленного опыта, стартер был достаточно сильно переработан в плане архитектуры. В основном сделан упор на масштабируемость, для способности программы быстро адаптироваться к расширению предъявляемых требований (т.к. довольно часто просят добавить ту или иную хотелку). Было пересмотрено внешнее оформление, переработан существующий и добавлен новый функционал. В общем можно сказать, что стартер эволюционировал, по сравнению с предыдущей редакцией. Однако пока не всё реализовано, что планировалось, поэтому еще есть куда развиваться в плане функциональности.

1 стартмани

23.04.2014    146901    1776    Alexoniq    1575    

Криптография: внешняя компонента для 1С 7.7

Разработка внешних компонент Защита и шифрование v7.7 Абонемент ($m)

Цифровые подписи, шифрование, просмотр сертификатов ключей ЭЦП, работа с различными криптопровайдерами (в т.ч. КриптоПРО ГОСТ 2012) в 1С 7.7.

1 стартмани

08.06.2020    4724    8    mdbruyfn    5    

Мобильное приложение для формирования заказов. Агент

Мобильная разработка Управление торговлей СRM Оптовая торговля Розничная торговля СRM Оптовая торговля Розничная торговля v7.7 v8 Оптовая торговля, дистрибуция, логистика УУ Абонемент ($m)

Мобильное приложение на платформе Андроид для формирования заказов клиентов. Основное предназначение - работа торговых агентов, представителей, что включает в себя: список клиентов с адресами, телефонами, историей взаиморасчетов; список товаров с остатками, с несколькими типами цен; составление заявки; регистрация поступления оплаты; отслеживание координат. Приложение можно состыковать с 1С любой версии. Поддерживаемые протоколы передачи: файловый (FTP), Web-service, HTTP-service.

1 стартмани

30.01.2019    12878    7    ruslan_hut    2    

Консоль прямых запросов для 1С++ (1С 7.7) Промо

Консоль запросов v7.7 1cv7.md Абонемент ($m)

Консоль прямых запросов для 1С 7.7, под компоненту 1Сpp.dll. Особенности: 1. Печать результата запроса. 2. Сохранение результата в файл в виде внутреннего представления таблицы значений 3. Формирование запроса как для SQL, так и для DBF вариантов, с разными вариантами драйверов. 4. Сортировка по произвольной колонке результата таблицы

1 стартмани

25.04.2012    37478    177    Aristo_    9    

Диалоги выбора периода для 1С версий 8.3 и 7.7

Работа с интерфейсом v7.7 v8 Абонемент ($m)

Представлены два диалога для выбора интервала дат по календарю в составе демонстрационных конфигураций 1С8.3 и 1С7.7

1 стартмани

24.01.2017    20979    18    romasna    7    

Полноценное использование Drag&Drop в 1С 7.7

Работа с интерфейсом Разработка внешних компонент v7.7 1cv7.md Абонемент ($m)

Несмотря на то, что кое-какие функции Drag&Drop были заложены авторами 1cpp, моё дополнение позволяет сделать этот функционал законченным. Дело в том, что средствами 1cpp можно было таскать файлы ТОЛЬКО в 1С, а из 1С - невозможно. Теперь Вы можете сделать работу с файлами на порядок удобнее и эффективнее.

1 стартмани

19.09.2016    17189    15    DasIsFantastich    4    

Шедулер для 1С 7.7

Сервисные утилиты v7.7 1cv7.md Абонемент ($m)

Запуск отчетов и обработок по расписанию

1 стартмани

03.09.2016    13331    10    Утюг    2    

Методы для группировки данных по полю,полям в Таблице Значений на примере универсального метода списания по партиям, а также отбора строк в ТЗ по произвольному условию. Для 8.x и 7.7 Промо

Универсальные функции Практика программирования v7.7 v8 1cv8.cf 1cv7.md Абонемент ($m)

Я очень часто использую группировку данных по полю и полям, как в восьмерке, так и в семерке. Это аналог запроса Итоги, но там строится дерево, а в большинстве случаев нужны "плоские данные". Да и делать запрос в большинстве случаев более накладный процесс, чем работа с ТЗ. Все достоинства такого подхода приведены на примере метода универсального списания по париям, а так же отбора строк в ТЗ по произвольному условию. Для 7.7 еще отчеты сравнения двух ТЗ. Работая с различными базами для упрощения сравнения номенклатуры, или как аналог джойнов(join), сделал сравнение двух таблиц значений по нескольким полям. Пока группировки полей должны быть уникальны. Часто приходится искать дубли, для универсального поиска есть ДублиВТзПоПолю и пример в Тест.ert.

1 стартмани

25.06.2015    32878    4    Serginio    1    

Подсветка кода 1С в Visual Studio (2012, 2013)

Инструментарий разработчика v7.7 1cv7.md Абонемент ($m)

Для тех, кто использует GСomp и TFS в качестве системы контроля версий, не очень удобно сравнивать модули без подсветки кода. Этот плагин призван исправить несправедливость.

1 стартмани

06.06.2016    15816    10    MadDAD    6    

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

Обработка справочников Практика программирования v7.7 1cv7.md Абонемент ($m)

В типовых конфигурациях платформы "1С:Предприятие 7.7" часто номер и дата договора указаны в самом наименовании договора. Что создает сложности в тех случаях, когда эти реквизиты надо знать, например, при конвертации данных в конфигурации платформы "1С:Предприятие 8", где номер и дата договора - отдельные реквизиты.

1 стартмани

24.09.2015    24888    2    SiAl    7    

Технологическая проверка кода конфигурации (7.7)

Инструментарий разработчика Практика программирования v7.7 1cv7.md Абонемент ($m)

1С 7.7 не имеет практически никаких средств, предназначенных для контроля правильности кода. В синтаксически правильном, с точки зрения 1С, коде можно, например, определить переменную НомерДок в модуле документа. Эта обработка может помочь найти некоторые "плохие решения" в коде.

1 стартмани

03.09.2015    12259    7    vcv    6    

Быстрое попроцедурное сравнение модулей конфигураций 7.7

Инструментарий разработчика v7.7 1cv7.md Абонемент ($m)

Утилита для быстрого формирования отчета о различиях в конфигурациях 7.7

1 стартмани

18.06.2015    13432    7    MadDAD    3    

Консоль прямых запросов для 1С++ (1С 7.7) + ToySQL

Консоль запросов v7.7 1cv7.md Абонемент ($m)

Консоль прямых запросов для 1С 7.7, под компоненту 1Сpp.dll. Особенности: 1. Печать результата запроса. 2. Сохранение результата в файл в виде внутреннего представления таблицы значений 3. Формирование запроса как для SQL, так и для DBF вариантов, с разными вариантами драйверов. 4. Сортировка по произвольной колонке результата таблицы Консоль подпилена для работы с ToySQL

1 стартмани

04.06.2015    13966    22    qeos    5    

Консоль запросов

Консоль запросов v7.7 1cv7.md Абонемент ($m)

Консоль запросов к базе SQL, не требующая внешних компонент

1 стартмани

29.04.2015    16326    40    Gvozdod    8    

Hot tray 1C - Быстрый старт v. 1.5 и версия .NET Промо

Сервисные утилиты Инструменты администратора БД Стартеры 1С v7.7 v8 Россия Абонемент ($m)

Самая последняя версия нового альтернативного стартера 1С. Программа призвана облегчить жизнь людям, которые вынуждены работать с большим количеством различных баз данных

1 стартмани

24.08.2009    45310    1456    salexdv    309    

Распаковка дистрибутивов и обновлений 1С:7.7 под Windows Vista, 7, 8, 10 (х32, x64)

Сервисные утилиты v7.7 Россия Абонемент ($m)

Файлы проекта позволяют распаковать дистрибутивы и обновления 1С:7.7 под Windows Vista, 7, 8, 10 (х32, x64)

10 стартмани

18.03.2015    55122    228    Gkmy    20    

Все про картинки в 1С 7.7, ну или почти все...

Практика программирования v7.7 1cv7.md Абонемент ($m)

В 1С 8 наличие картинок товаров предусмотрено изначально, а в 7.7 такого нет. Проблема существует и ее исправляют, но это, как правило, частные случаи, касающиеся, например, печати прайса http://infostart.ru/public/289876/ , показу картинок в справочнике номенклатура http://infostart.ru/public/17125/, файловый менеджер картинок товара http://infostart.ru/public/15239/ или просто конфигурации работы с картинками http://infostart.ru/public/21142/ (не стремился дать полный обзор, поэтому не попавшие не обижайтесь :). Что не устроило – информация разбросана по статьям, необходимость дополнительно напрягаться, чтобы это заработало. Здесь я попытался собрать все «до кучи», а так же дать необходимые ссылки для желающих «копнуть вглубь».

1 стартмани

18.11.2014    39165    84    kitminsk    12    

Злоумышленник зашифровал базы 1С и другие файлы

Информационная безопасность Защита и шифрование v7.7 1cv7.md Абонемент ($m)

Звонит пользователь, на экране сообщение ваши данные зашифрованы, введите пароль, пишите письма и т.д.

1 стартмани

08.11.2014    37146    44    aleksch21    85    

[Разработчику] Любая таблица значений в OLAP Промо

Инструментарий разработчика Универсальные обработки Практика программирования v7.7 1cv7.md Абонемент ($m)

Анализируем различные данные в 1С, используя OLAP-технологии со всеми прелестями. Т.е. наглядное отображение данных, быстрые расчеты, горизонтальные и вертикальные группировки любой вложенности, удобная фильтрация, Drag'n'Drop и ещё много приятных вещей от MS. Обработка на входе принимает практически любую таблицу значений (ТЗ в которой колонкам указаны типы значений, строка, число и т.п.), на выходе имеем на форме 1С сводную таблицу и график по этой ТЗ, с которой работаем, как и в Excel со сводной таблицей и диаграммой. Взял за основу разработку «OLAP Анализ счёта» ( http://infostart.ru/public/14964/ ) от JohnyDeath и переделал под любую ТЗ. Опционально используется «Прогресс бар для 1С 77» (http://infostart.ru/public/14061/ ) от Gmix.

1 стартмани

21.12.2012    31729    51    venger    7    

"Магический батон" или еще одна попытка сделать "волшебную кнопку"

Универсальные обработки Работа с интерфейсом v7.7 1cv7.md Абонемент ($m)

Очень часто, в процессе работы с 1С, у пользователя может возникнуть желание получить какую-либо информацию по данным, которыми он оперирует в данный момент. Например, забивая документ отгрузки, хочется посмотреть взаиморасчеты с контрагентом, или находясь в справочнике номенклатуры посмотреть движения по ней и т.д. В типовых конфигурациях с такими хотелками не очень то развернешься. К примеру про взаиморасчеты с контрагентом, это надо ползти в меню "Отчеты"->"Специализированные"->"Акт сверки", затем в самом отчете, как минимум, необходимо опять выбрать нужного контрагента и только после этого заветная "циферка" порадует глаз пользователя. Некоторые моменты всё же реализованы, например в типовой "Бухгалтерии", в формах списка справочника "Номенклатура", есть в привязанных печатных формах отчеты: "Оборотно-сальдовая ведомость" и "Анализ субконто", но в них также приходится что-либо выбирать/менять перед формированием. Или довольно удобная штука - механизм внешних печатных форм, но не для всех объектов он реализован (к примеру документ "Поступление ТМЦ" обделен такой возможностью). Добавить подобные вещи конечно можно, но для этого придется править конфигурацию и при обновлении учитывать все эти правки...

1 стартмани

21.08.2014    12970    7    SvSoft    4    

Шаблон внешней компоненты для Lazarus (FreePascal)

Инструментарий разработчика Разработка внешних компонент v7.7 v8 Абонемент ($m)

Шаблон внешней компоненты COM для Lazarus (FreePascal)

1 стартмани

16.05.2014    19323    29    v77    5    

1C7.7 парсер JSON

Универсальные функции v7.7 1cv7.md Россия Абонемент ($m)

РАБОТОСПОСОБНЫЙ парсер JSON встраивается в глобальный модуль в виде 3х функций. Для достижения положительного результата активно используется regexp.

1 стартмани

23.01.2014    24564    72    pit201201    16    

Библиотека кода 1С 7.7 (накопленная за 8 лет) Промо

Практика программирования v7.7 1cv7.md Абонемент ($m)

Весь код на 1С 7.7, собранный для повторного использования за 8 лет работы.

10 стартмани

25.11.2012    30388    245    adhocprog    51    

Компонента "Быстрый регистр" для 1С 7.7 (на прямых запросах SQL 1c++)

Универсальные функции v7.7 Абонемент ($m)

Ускорение операций с регистрами 1с 7.7 через объектную модель, за счет доступа через прямые запросы SQL (1c++). Существует возможность добавления произвольных подзапросов соединений c другими таблицами и отборов WHERE, гибкой настройки вывода полей в результат

1 стартмани

13.01.2014    14649    9    victor_goodwill    7    

Быстрый умный поиск с выпадающим списком

Поиск данных v7.7 Абонемент ($m)

Обработка + консольная утилита (exe). Работает с использованием FormEx.dll (Алексей Фёдоров aka АЛьФ), strmatch (Ракунов Александр aka skorp) и 1sqlite (Александр Орефков). Выполняет быстрый нечеткий поиск по справочнику (по умолчанию - номенклатуры) с выводом наиболее похожих позиций в выпадающий список. Работает на 1с 7.7. Тестировалось на server 2003 в терминалах, в файловой БД. Предполагаемые достоинства: пример (более) «адекватного» (по меркам автора на данный момент) поведения поисковой строки (реализовано при помощи консольной утилиты, работающей через winapi – исходники прилагаются (писалось в lazarus)) и удобной навигации по списку, во время ввода. Является, скорее, примером для реализаций собственных адаптированных поисковых решений.

1 стартмани

30.12.2013    19008    34    Jill    13    

Поворот картинки

Работа с интерфейсом Практика программирования v7.7 v8 Абонемент ($m)

Иногда возникает необходимость повернуть картинку из 1С.

1 стартмани

16.12.2013    20339    36    bborisko    14    

Автообновление конфигураций 1С Предприятие 7.7 Версия 3.28 Промо

Сервисные утилиты Инструменты администратора БД v7.7 openconf 1cv7.md Россия Абонемент ($m)

Утилита предназначена для автоматического локального или удаленного обновления или объединения конфигураций программы 1С Предприятие 7.7. Определяет список доступных информационных баз и пользователей. Хранит в зашифрованном виде список паролей. Ожидает выхода пользователей. Встроенный монитор пользователей и журнал выполнения заданий. Поддерживает незарегистрированные в реестре информационные базы. Обновляет регламентированные отчеты. Выгружает и загружает файлы для обновлений из Интернет по протоколам FTP, HTTP. Формирует, отсылает и получает задания на обновления по электронной почте. Отправляет по электронной почте отчеты о выполнении заданий и копии информационных баз

1 стартмани

16.12.2007    33500    2012    rauf    155    

Tray Informer

Инструментарий разработчика Разработка внешних компонент Работа с интерфейсом v7.7 v8 Россия Абонемент ($m)

Согласитесь, что окно стандартное сообщений в 1С иногда приносит больше неудобств, чем пользы. И тем более разные "Предупредить"... Что с этим окном только не делают! Его отцепают от формы, делают маленьким, умудряются спрятать за границы экрана. А потом звонят программистам с претензией, что документ почему-то не проводится, отя ничего и не пишет. У вас такого не было? А вот у нас было и не раз )))

1 стартмани

04.09.2013    29141    60    O-Planet    78    

Отчет "Дерево справочника"

Инструментарий разработчика Практика программирования v7.7 1cv7.md Абонемент ($m)

Зарядка для ума: вывод сворачиваемого дерева справочника в 1С v.7.7.

1 стартмани

20.07.2013    15517    12    uus    12    

1С7: Галерея изображений для любого справочника

Инструментарий разработчика Универсальные обработки Работа с интерфейсом v7.7 1cv7.md Абонемент ($m)

В публикации представлена конфигурация "Галерея изображений". В конфигурации показан метод связки любого элемента любого справочника с изображением, хранящемся в внешнем файле в галерее ИБ. - Хранение изображений в структуре каталогов, сходной с иерархией элемента; - Использование Active-x броузера для отображения связанного рисунка; Используемые компоненты: 1SQLite, 1CPP, Formex. Используемые классы: УправлениеФормой.Привязки (из набора классов http://www.1cpp.ru/forum/YaBB.pl?num=1273512019)

1 стартмани

10.07.2013    22400    12    unichkin    11    

1C.Net:Предприятие – использование богатых графических возможностей .Net Framework Промо

Работа с интерфейсом v7.7 v8 1cv8.cf 1cv7.md Россия Абонемент ($m)

Windows Presentation Foundation (WPF) – презентационная система нового поколения для построения клиентских приложений Windows с ошеломляющими возможностями. Технология WPF основана на независимой от разрешения системе визуализации, построенной на векторной графике и использующей преимущества современного графического оборудования. В составWPF входят следующие средства: язык описания Extensible Application Markup Language (XAML), элементы управления, механизм привязки данных, средства разметки, 2d- и 3d-графика, анимация, стили, шаблоны, документы, медиа-элементы, текст и средства оформления текста. Презентационная система входит в состав .Net framework и доступна для использования внутри 1С:Предприятие средствами Elisy .Net Bridge, начиная с версии 3.2. Windows Presentation Framework полностью заменяет и многократно превосходит устаревающую технологию WinForms.

1 стартмани

19.05.2010    30131    281    Elisy    22    

BgInfo для 1С 7.7

Работа с интерфейсом Инструменты администратора БД v7.7 1cv7.md Россия Абонемент ($m)

Класс для получения параметров сессии (включая данные терминального сервера и клиентской машины) и их вывода фоном в окне 1С.

1 стартмани

29.04.2013    15263    6    sournk    12    

1Cv77. Исправление поведения множественного фильтра (МФ) типовых отчетов в части сохранения/восстановления настроек.

Работа с интерфейсом Практика программирования v7.7 1cv7.md Россия Абонемент ($m)

В большинстве российских типовых конфигураций для 1Сv7.7 (ТиС, ПУБ, Комплекс и др.) в отчетах используется множественный фильтр (МФ). Впервые он появился, более 10 лет назад, еще в ТиС 8.7, придя на смену МФ ТиС 8.6. С тех пор, аж до сего дня (24.03.2013) типовой механизм МФ содержит глюк связанный с восстановлением сохраненных настроек, хотя разработчики поют нам об обратном.

1 стартмани

26.03.2013    13842    6    piloturs    8    

Где-то была обработка

Поиск данных Инструменты администратора БД v7.7 1cv7.md Россия Абонемент ($m)

Обработка 1С 7.7 осуществляющая поиск по истории открытых обработок. Обработки могли быть открыты программистом в конфигураторе и пользователем в режиме предприятия. В редакции 0.5 добавлены плюшечки: Наравне с открытием обработки добавлено, открытие папки содержащей обработку. Так же понятно что поскольку история хранится в реестре, то данная обработка является примером для работы с реестром. Строго говоря в то время для эксплуатации реестра MSScriptControl.ScriptControl . Крест возле имения базы на форме означает что база нет (нет файла 1CV7.MD по указанному пути). Соответственно крест возле имени обработки означает что обработки нет по указанному пути. Добавлена сортировка. Убрана возможность разобрать понравившуюся обработку. Добавлена возможность показать в папке (не путать с открыть папку). Добавлена возможность скопировать обработку. Добавлена выборка обработок по истории отладчика.

1 стартмани

07.03.2013    12492    21    lamer19    25    

Поиск ошибок в регистрах 7.7 Промо

Поиск данных Тестирование и исправление Анализ учета v7.7 v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Обработка позволяет найти ошибки в регистрах 7.7 в Вашей базе данных

1 стартмани

04.05.2010    27751    427    _Z1    31    

Задача про сгибание листка

Практика программирования v7.7 1cv7.md Абонемент ($m)

Часто при приеме на работу встречается задача про сгибание листка

1 стартмани

26.02.2013    17405    11    Sbelyi78    38    

v7.7 1CDialogControls: Инструмент в помощь разработчику на 7.7.

Инструментарий разработчика v7.7 1cv7.md Абонемент ($m)

Давным давно, когда я еще плотно писал на 7.7 работа с формами была мучительной и неудобной. Приходилось каждый элемент выкладывать, выравнивать на форме ручками, прописывать код в модуле. Иногда при разработке очередной формы приходила в голову мысль: "а где-то я уже похожее делал..." и начинался мучительный поиск подходящего кода в своих запасах........

1 стартмани

21.02.2013    14915    35    MarSeN    14    

Универсальная версия новогоднего поздравления на 1С:7.7

Работа с интерфейсом v7.7 Абонемент ($m)

Без использования агентов Microsoft и дополнительных библиотек

1 стартмани

22.12.2012    12727    21    pt_olga    9    

Функция Случайное число, RANDOM, RND для 1С 7.7 Промо

Практика программирования v7.7 1cv7.md Россия Абонемент ($m)

В 1С нет функции случайного числа. представляю Вам свою. основана на получении идентификатора и из него случайного числа. от 0 до 10, от 0 до 100 и от 0 до 1000.

1 стартмани

28.09.2011    26234    18    dnikolaev    19    

FTP отправка из 7.7

Практика программирования v7.7 1cv7.md Абонемент ($m)

Всё чаще встречаются задачи по отправке отчетов поставщику, и нередко подготовленные файлы необходимо записать на FTP сервер. О том, как можно решить подобную задачу, и пойдёт речь.

3 стартмани

07.12.2012    44982    115    Yury1001    25    

Универсальный 1С++ класс Faval для организации часто используемых элементов справочников и быстрого интерактивного доступ к ним

Работа с интерфейсом v7.7 1cv7.md Абонемент ($m)

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

1 стартмани

27.11.2012    71007    21    sournk    10    

Групмейкер для таблицы значений.

Инструментарий разработчика Универсальные обработки Практика программирования v7.7 v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

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

1 стартмани

20.11.2012    27147    58    dusha0020    15    

Обработка выборки документов и выборочное перепроведение по видам движений для 1С-Предприятие-7.7 Промо

Обработка документов Сервисные утилиты v7.7 openconf v77::ОУ v77::БУ v77::Расчет 1cv7.md Абонемент ($m)

Обработка позволяет выполнить над подобранным списком документов следующие действия: 1) "Провести"; 2) "Отменить проведение"; 3) "Пометить на удаление"; 4) "Снять пометку на удаление"; 5) "Удалить непосредственно"; 6) "Сменить фирму" (если есть общий реквизит 'Фирма'). Имеются удобные инструменты для подбора выборки документов (Подбор в обработках 'ПодборUChoice' и 'Консоль1CQA'). Реализованы различные опции обработки документов (в том числе 'выборочное проведение по видам движений'). Описана технология выборочного проведения документов по видам движений.

1 стартмани

04.01.2012    39575    289    yuraos    26    

Поиск в движениях регистров битых ссылок на документы (<объект не найден>) и их пометка, как измененных, в другой базе для переноса по УРБД.

Распределенная БД (УРИБ, УРБД) Поиск данных 1С7.7<->1C7.7 v7.7 1cv7.md Россия Абонемент ($m)

Обработка предназначена для поиска в движениях регистров оперативного учета битых ссылок на документы (<объект не найден>), записи ID этих документов в файл и их пометки, как измененных, в другой (не поврежденной) базе для переноса в исходную с помощью УРБД.

1 стартмани

29.10.2012    19135    32    evgeniybel    3    

Класс "ЗаписьXML" для 1С++, аналог одноименного класса из 8.x.

Обмен через XML Практика программирования v7.7 openconf 1cv7.md Абонемент ($m)

Мне понадобилось перенести работающий код выгрузки данных в xml из 1С 8.2 в 7.7. Чтобы минимизировать исправления - написал класс-эмулятор класса ЗаписьXML из 8.2. Теперь при переносе кода из 1С8.2 в 7.7 количество необходимых изменений - минимально.

1 стартмани

26.10.2012    19091    14    curdate    8