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

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

Разработка - Практика программирования

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

23
Человек, работающий в 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

23

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

Наименование Файл Версия Размер
Конфигурация, содержащая весь описанный набор функций
.zip 291,75Kb
18.09.15
4
.zip 291,75Kb 4 Скачать

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

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

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

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

где $ обозначает текущий объект перебираемой коллекции.
5. rozhkovdmitriy 23 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 176 18.09.15 14:59 Сейчас в теме
Вместо строки, с возможными опечатками, завести переменную, например, глСкопироватьСтажи = "глСкопироватьСтажи".

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

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


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

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

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

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

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


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

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


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

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


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

См. также

Установка принтера по умолчанию для 1С 7.7 2

Инструменты и обработки Системный администратор Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования Разработка

Установка принтера по умолчанию в 1С 7.7. Обработка может быть полезна в том случае, когда нужно установить принтер по умолчанию, а доступа к рабочему столу нет (например, терминальный режим без рабочего стола или remoteApp)

1 стартмани

13.02.2019    2175    2    alsen    2       

Формирование строки json в 1С: 7.7 12

Статья Программист Внешняя обработка (ert,epf) v7.7 1cv7.md 1С7:Комплекс Windows Абонемент ($m) Практика программирования

Предлагается набор функций 1с 7.7 для формирования строки json стандартными средствами.

1 стартмани

10.12.2018    3175    18    malovandrey    0       

Асинхронное программирование в 1с77 без внешних компонент. Обратные вызовы. 9

Статья Программист Архив с данными v7.7 Windows Абонемент ($m) Практика программирования

Пример построения программного кода для достижения функционала обратных вызовов (call back) во внешних обработках исключительно штатными средствами. Тестировалось на платформе 1с77 релиз 027. Конфигурация значения не имеет.

1 стартмани

06.10.2018    3687    2    Vortigaunt    5       

Несколько табличных частей в 1С:7.7 - это просто 3

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

При программировании на платформе V7 достаточно часто возникает задача создать несколько табличных частей документа (или справочника). Традиционно эта задача имеет несколько решений..

1 стартмани

01.05.2018    6619    10    Gkmy    6       

Суммирование выделенных ячеек в столбце для 1С:Предприятие 7.7 3

Инструменты и обработки Программист Архив с данными v7.7 Windows Абонемент ($m) Практика программирования

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

1 стартмани

09.03.2016    7757    4    электра    9       

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

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования Обработка справочников

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

1 стартмани

24.09.2015    16430    2    SiAl    7       

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

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

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

1 стартмани

03.09.2015    6876    6    vcv    6       

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

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

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

1 стартмани

25.06.2015    20933    4    Serginio    1       

Оптимизация количества журналов документов в 1С:7.7 0

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

Один из вариантов оптимизации количества журналов документов в 1С:7.7 без использования внешних компонент

1 стартмани

24.02.2015    5883    2    voha    8       

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

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Windows Абонемент ($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    27660    74    kitminsk    8       

Печать прайс-листа с картинками для 1С Предприятие 7.7 Торговля и Склад 9.2 - пример реализации 11

Отчеты и формы Программист Внешний отчет (ert,erf) v7.7 1С7:ТиС Windows Оптовая торговля Абонемент ($m) Ценообразование, прайсы Практика программирования

Задача: требуется вывести в прайс фотографии товаров. Фотографии не хранятся в БД, ссылки на файлы генерируются в момент формирования прайса.

1 стартмани

29.06.2014    19971    49    Chaotic    18       

Перевод десятичного числа в HEX, BIN, OCT, _IdToStr и другие системы 1

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

Два алгоритма перевода десятичного числа в другую систему исчисления от 2 до 36 только средствами 1С (без ВК)

1 стартмани

05.06.2014    10280    10    kos    3       

Пример получения остатков по складу по запросу по почте из программы 1С 7.7. 4

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

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

3 стартмани

25.03.2014    14873    5    protexprotex    3       

Новые сказки о старом или как поймать событие «При активизации строки» в 1С: 7.7 1

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

Давным-давно, в 1344152635 секунде по времени Unix, жил был один добрый, сильный и очень умный программист… Осилим царь-батюшка! — воскликнул наш добрый молодец и открыл пофигуратор однаэски 8.2… Там можно только прописать процедуры для реквизитов табличной части и реализовать событие ПриИзменении…

1 стартмани

29.01.2014    15591    8    majmyl    6       

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

Инструменты и обработки no Приложение (exe) v7.7 v8 Windows Абонемент ($m) Практика программирования Работа с интерфейсом

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

1 стартмани

16.12.2013    13123    32    bborisko    14       

Изменение структуры баз 1С 7.7 без долгой реструктуризации. Часть 1. Справочники 31

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

На днях встретил вопрос на форуме про возможность внесения изменений в конфигурацию без долгого сохранения в рабочей базе большого объема. Вот решил поделиться опытом, как это делал я. База у нас была объемом порядка 120 Гб. К базе обращался сайт в режиме 24/7, поэтому важно было быстро сохранять изменения и желательно без последующего монопольного запуска для восстановления индексов и процедур и без отключения пользователей от базы. Это первая часть статьи и посвящена она справочникам. С одной стороны - это самый простой объект, с другой стороны, именно про справочник спрашивалось на форуме. Если статья будет востребована, то я напишу аналогичные про документы, регистры и может еще что.

1 стартмани

13.08.2013    16416    4    Reptile    5       

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

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Россия Windows Абонемент ($m) Практика программирования Работа с интерфейсом

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

1 стартмани

26.03.2013    7949    6    piloturs    8       

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

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

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

1 стартмани

26.02.2013    12219    11    Sbelyi78    37       

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

Инструменты и обработки Программист Архив с данными v7.7 1cv7.md Windows Абонемент ($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    24213    49    venger    7       

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

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 1cv7.md Windows Абонемент ($m) Практика программирования

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

3 стартмани

07.12.2012    35292    114    Yury1001    25       

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

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

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

10 стартмани

25.11.2012    23342    247    adhocprog    51       

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

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

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

1 стартмани

20.11.2012    19713    59    dusha0020    15       

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

Инструменты и обработки Программист Конфигурация (md, cf) v7.7 openconf 1cv7.md Windows Абонемент ($m) Практика программирования Обмен через XML

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

1 стартмани

26.10.2012    13881    14    curdate    8       

Миникласс ТПерехватчик - методология работы с несколькими перехватчиками формы 11

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v7.7 1cv7.md Россия Абонемент ($m) Практика программирования

Небольшое пособие "Как правильно накладывать несколько перехватчиков на одну форму" + мини-класс, реализующий описанную технологию.

1 стартмани

29.06.2012    132927    6    SatanClaws    18       

Баги 1С 7.7 - добро или зло: непосредственный ввод "а ля 1С 8.х" без использования ВК 44

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

Баг 1С 7.7 открывает нам возможность реализовать без использования ВК непостредственный ввод таких значений, как справочники, перечисления, документы по введенному тексту в поле ввода (а ля 1С 8.х)

1 стартмани

25.06.2012    19729    33    MarSeN    21       

Группы "быстрых" индикаторов на формах 1с7. 14

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

Индикация влож. циклов, параллел. процессов; динам.гистограммы. Индикаторы: реагируют на отрицат.шаги - не только Прогресс-Индикаторы. "Быстрые": вывод на экран не на каждом, а на заранее расчитанном шаге. Управление: инверсия белого-черного, переворот линейки. Можно записывать истории Процессов. Возможны вертикальный и компактный вывод.

1 стартмани

13.06.2012    8799    23    newold2    6       

Календари на справочнике 5

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

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

1 стартмани

11.06.2012    4779    17    an_2    9       

"Справочник плюс". Прямая запись в справочники 1С 7.7 13

Инструменты и обработки Программист Компонента, плагин (dll, vbs,..) v7.7 1cv7.md Россия Абонемент ($m) Практика программирования

"Справочник плюс" - замена штатного объекта "Справочник.ХХХ" Предназначен для "прямой" записи, и дает возможность управлять табличными подсказками при чтении. Позволяет избавиться от монопольных блокировок таблиц справочников и таблицы констант. Главным мотивом написания было избавиться от вылетов 1С из-за deadlock-ов и "недопустимых состояний курсоров". Состоит из нескольких классов 1с++, нескольких переменных и методов в глобальном модуле.

1 стартмани

24.05.2012    12235    23    an_2    16       

Проверка зацикливания групп справочников 6

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Абонемент ($m) Практика программирования Обработка справочников

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

1 стартмани

22.05.2012    22518    116    Shaman100M    3       

Работа с бинарными файлами в 1С 7.7 20

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

Описание принципов и набор инструментов для работы с двоичными данными в 1С 7.7. Примеры во вложениях.

1 стартмани

16.05.2012    21547    90    dusha0020    8       

Получалка списка реквизитов документа или справочника (v7) 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Абонемент ($m) Практика программирования

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

1 стартмани

08.05.2012    6264    23    Рэйв    6       

Быстрый нечёткий поиск по атрибутам справочников 7

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Windows Абонемент ($m) Практика программирования Обработка справочников

Данная программа предназначена для быстрого поиска элементов справочников по значениям атрибутов справочников в среде 1С 7.7.

1 стартмани

28.04.2012    7589    30    ivangorchakov    9       

Внешний отчет Книга покупок 2012 для старых релизов Бухгалтерии 7.7 16

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v77::БУ 1С7:Бух Россия БУ Розничная торговля Абонемент ($m) Практика программирования Анализ учета

Внешний отчет Книга покупок 2012 для старых релизов Бухгалтерии 7.7 (протестировано на релизе 445 типовой конфигурации).

1 стартмани

26.04.2012    7862    159    ddv68    8       

Обновление не типовой конфигурации на платформе 77 на примере конфигурации "1С: Бухгалтерский учет 7.7" 7

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

На примере обновления не типового релиза 538 "1С: Бухгалтерия 77" по шагам рассказывается как обновить до релиза 539.

1 стартмани

23.04.2012    10126    55    valux_pux_12345    11       

Выбор строки из ТаблицыЗначений 2

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 openconf 1cv7.md Россия Абонемент ($m) Практика программирования

В 1С 7.7 легко предоставить пользователю выбор из списка значений, или Таблицы значений. Но уважающий себя программист не будет пользоваться методом ТаблицаЗначений.ВыбратьСтроку(), так как стандартный диалог мягко говоря несимпатичен. Предлагаю класс для 1С++, который позволит использовать более удобный диалог выбора строки из таблицы значений.

1 стартмани

11.04.2012    14868    26    curdate    6       

Просмотр имен sql реквизитов метаданных 1с 7.7 11

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 openconf 1cv7.md Россия Абонемент ($m) Практика программирования

Обработка показывает sql имена таблиц и столбцов, а также индексов (для оптимальных запросов) построенных по метаданным 1с 7.7. Удобно при написании прямых sql запросов, или запросов из др. баз данных.

1 стартмани

27.03.2012    11408    43    born85    13       

Передача данных между формами 7.7 7

Инструменты и обработки Программист Внешний отчет (ert,erf) v7.7 1cv7.md Россия Windows Абонемент ($m) Практика программирования

Использование подбора для передачи данных между формами

1 стартмани

23.03.2012    12441    18    i132    3       

Вывод и перенумерация отчета с заранее неизвестным количеством группировок. 19

Инструменты и обработки Программист Внешняя обработка (ert,epf) openconf v77::ОУ v77::БУ v77::Расчет 1cv7.md Россия Абонемент ($m) Практика программирования Работа с интерфейсом

1C v.7.7 Пример вывода отчета с заранее неизвестным количеством группировок, с возможностью изменять уровень вложенности группировок из списка значений на форме, с нумерацией конечного отчета, с выводом структуры вложенности группировок (с помощью внешней компоненты Йоксель - http://yoksel.net.ru/Hotfixes). В приложенном файле показан пример вывода отчета из сформированной таблицы значений. Код я старался закомментировать как можно подробней. Хоть семерка и вымирающая платформа, думаю еще есть люди, которые только начинают ей заниматься, и им это может пригодиться.

1 стартмани

21.03.2012    23007    20    unichkin    11       

Исправление ошибки вычисления суммы удержанного НДФЛ в ЗиК 320-322 14

Статья Программист Нет файла v77::Расчет 1С7:ЗиК Россия БУ Зарплата НДФЛ Абонемент ($m) Практика программирования

При заполнении таблицы ДоходыВычетыНалогиСотрудников в функции глобального модуля глСобратьДанныеДляНДФЛ2011() есть ошибка при вычислении колонки "НУ1" (суммы удержанного НДФЛ для целей налогового учёта). Данная статься посвящена её исправлению.

1 стартмани

18.03.2012    15140    30    andrewks    33       

Тригонометрические функции в 7.7 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v7.7 1cv7.md Россия Абонемент ($m) Практика программирования

Алгоритм получения значения тригонометрических функций путем разложения их в ряд Тейлора

1 стартмани

04.03.2012    4831    4    nysysimara    10       

Исправление ошибки в печати справок 2-НДФЛ в 1С Бухгалтерии 7.7 535 релиз и УСН 189 38

Инструменты и обработки Программист Бухгалтер Внешняя обработка (ert,epf) v77::БУ 1С7:Бух Россия БУ Зарплата НДФЛ Абонемент ($m) Справки Практика программирования

При подборе в печати справок возникает ошибка "Если Элемент.ОсновнойЭлемент Элемент Тогда {Отчет.СправкиПоНДФЛ.Форма.Модуль(4782)}: Поле агрегатного объекта не обнаружено (ОсновнойЭлемент)"

1 стартмани

30.01.2012    14976    72    Intelligent    21