пятница, 20 декабря 2019 г.

1С 8.x : Этот хост неизвестен. Ошибка Windows Sockets - 11001

Проблема: При старте 1С на получаем сообщение "1С 8.x : Этот хост неизвестен. Ошибка Windows Sockets - 11001"

Решение:
Ошибка подключения к базе, расположенной на сервере 1С:Предприятия, возникает не всегда.
Подключение из Windows XP обычно проходит без особых проблем, при этом аналогичное подключение из Windows 7 может завершаться аварийно:
Ошибка 11001 - Windows Sockets
Лечится эта ошибка довольно просто - достаточно внести изменения в файл hosts

Файл hosts представляет собой
Обычный текстовый файл (не имеющий расширения). В hosts-файле по умолчанию прописан всего один IP-адрес (127.0.0.1), зарезервированный для localhost, то есть для локального ПК. Файл hosts представляет собой обычный текстовый файл (не имеющий расширения).

Где находится файл hosts
• Windows 95/98/ME – WINDOWS;
• Windows NT/2000/XP/Vista/7 – Windows/System32/drivers/etc.

И так у нас Win7 открываем C:\WINDOWS\system32\drivers\etc\hosts, и добавляем в него ip-адрес вашего сервера.
Например так:
192.168.1.100 sermac

Сохраните, и попробуйте через пару минут запустить программу.

Источник: https://helpf.pro/faq8/view/1482.html

вторник, 17 декабря 2019 г.

Ошибка SQL сервера с 1С: There is already an object named '#tt1' in the database

Проблема: В журнале регистрации фиксируются следующие события:

ОбщийМодуль.НашЧудесныйМодуль.Модуль(1000)}: Ошибка при вызове метода контекста (ВыполнитьПакет) по причине: Произошла исключительная ситуация (1C:Enterprise 8.3.8.2027): Ошибка СУБД: Microsoft SQL Server Native Client 10.0: There is already an object named '#tt1' in the database. HRESULT=80040E14, SQLSrvr: SQLSTATE=42S01, state=6, Severity=10, native=2714, line=1

Версия платформы: 8.3.8.2027, конфигурация 1С ДО Корп (2.1.8.13)

Решение:
https://forum.infostart.ru/forum83/topic106109/ (коммент от 2014: Проблема с неудалением временных таблиц, обсуждалась на партнерском форуме. Вероятно, кривая работа пула временных таблиц. Пока нормального решения нет.)
и немного здесь: http://www.gilev.ru/dieztt/

Т.к. менять версию платформы пока нельзя:
1) Обновление статистик
2) Дефрагментация индексов
3) Реиндексация индексов
4) Перезапуск сервера

Под катом текст на память:

понедельник, 14 октября 2019 г.

1С 7.7, "скрытые" возможности функции Шаблон., Получение и установка реквизита формы по его имени.

Отсюда: http://dml.compkaluga.ru/forum/index.php?showtopic=35958

На днях решал тут одну задачу, пришлось столкнуться вот с чем. Допустим на форме у нас есть несколько десятков реквизитов, типа Строка, с именами, к примеру Строка1, Строка2, Строка3 и т.п. Хотелось бы получить доступ к значениям этих реквизитов по имени. Эксперименты с Форма.ПолучитьАтрибут("Строка1") собственно ничего не дали. Полез копаться дальше и накопал вот что. Оказывается в 1С есть крайне полезная функция Шаблон, которая возвращает строку, полученную по шаблону заменой встроенных выражений на значения и форматированием. Так вот, получить значение реквизита формы по его имени можно следующим образом:

Значение = Шаблон("["+ИмяРеквизитаФормы+"]");

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

Значение=ЗначениеИзСтрокиВнутр(Шаблон("[ЗначениеВСтрокуВнутр("+ИмяРеквизитаФормы+")]")); // - это чтение реквизита формы через шаблон

Ну и напоследок самое вкусное. Две функции, которые можно прописать и в глобальном модуле, которые позволяют читать и записывать реквизит формы по его имени:

//_______________________________________________________Функция УстАтрибут(Атр,Зн)
    
Атр = Зн;
     Возврат
"";
КонецФункции
// УстАтрибут(Атр,Зн) 

Процедура УстановитьАтрибут(Атр,Зн);
     Шаблон(
"[УстАтрибут("+ Атр + ",Зн)]");
КонецПроцедуры
// УстановитьАтрибут(Атр,Зн);

//_________________________________________________________
Функция ПолАтрибут(Атр,Зн)
    
Зн = Атр;
    Возврат
"";
КонецФункции
// УстАтрибут(Атр,Зн)


Процедура ПолучитьАтрибут(Атр,Зн);
     Шаблон(
"[ПолАтрибут("+ Атр + ",Зн)]");
КонецПроцедуры
// УстановитьАтрибут(Атр,Зн);


Использовать, естественно, через ПолучитьАтрибут(...) и УстановитьАтрибут(...) ... вот такой вот нестандартный подход.

пятница, 16 августа 2019 г.

В форме обработки 1С 7.7 не работает команда Активизировать


Проблема: При попытке в коде обработки выполнить команду Активизировать, чтобы вернуть курсор в поле ввода - получаем ошибку "В данной формуле не может быть вызвана эта процедура(функция)"

Решение: Несколько вариантов, например Установить фокус на поле ввода 7.7 или Активизировать поле ввода
Предлагаемый метод - использовать фиктивное закрытие формы. 
Бонус - получаем защиту от случайных нажатий клавиши Esc

Пример:
"РазрешитьЗакрытие" - служебная переменная, анализируемая в процедуре ПриЗакрытии().
"Штрихкод" - имя поля на форме, которое надо активизировать.

При закрытии анализируется переменная "РазрешитьЗакрытие", и в зависимости от её значения -  закрытие отменяется, активизируется требуемое поле и снова таки закрытие отменяется, или же - просто закрываем форму.

Перем РазрешитьЗакрытие;    // флаг используем для разрешения закрытия формы и для обхода ошибки активизации реквизита

Процедура АктивизироватьШтрихКод()    // через фиктивное закрытие формы обойдем ошибку функции Активизировать
    РазрешитьЗакрытие = 2;
    Форма.Закрыть(0);       // вызываем процедуру закрытия
КонецПроцедуры

Процедура ЗакрытьОбработку()        // нажали на кнопку Х - разрешаем закрытие
    РазрешитьЗакрытие = 1;
    Форма.Закрыть(0);       // вызываем процедуру закрытия
КонецПроцедуры

Процедура ПриЗакрытии()
   
    Если РазрешитьЗакрытие=0 Тогда        // простое закрытие запрещаем (страхуемся от случайных закрытий по ESC)
        Сообщить("Закрыть форму можно только по кнопке!");   
        СтатусВозврата(0);    // отменяем закрытие
    ИначеЕсли РазрешитьЗакрытие=1 Тогда    // всё в порядке, это закрытие по кнопке
        //
    ИначеЕсли РазрешитьЗакрытие=2 Тогда    // фиктивное закрытие - для активизации реквизита на форме
        Активизировать("ШтрихКод");       // активизируем наше поле
        СтатусВозврата(0);    // отменяем закрытие
        РазрешитьЗакрытие = 0;    // сбрасывам переменную
        возврат;
   КонецЕсли;
   
КонецПроцедуры

вторник, 4 июня 2019 г.

Программное изменения проводок документа 1С 7.7

Задача: Очистить субконто кредита у всех проводок в одной ручной операции
Решение:
Процедура Сформировать()
    опер = СоздатьОбъект("Операция");
    опер.НайтиОперацию(НашДокументНаФормеСВидомОперация);
    опер.ВключитьПроводки(0);
    опер.ВыбратьПроводки();
    Пока опер.ПолучитьПроводку()=1 Цикл
        опер.Кредит.Субконто(1,"");
    КонецЦикла;
    опер.Записать();
    опер.ВключитьПроводки(1);
КонецПроцедуры



Отсюда:
https://forum.mista.ru/topic.php?id=382542
https://forum.mista.ru/topic.php?id=382419
https://forum.mista.ru/topic.php?id=478141

четверг, 14 февраля 2019 г.

Ищем дубли наименований товаров при помощи запросов 1С

Отсюда

1С8.х

ВЫБРАТЬ
    Товары.Наименование КАК Наименование,
    КОЛИЧЕСТВО(Товары.Ссылка) КАК КоличествоДублей
ИЗ
    Справочник.Товары КАК Товары
СГРУППИРОВАТЬ ПО
    Товары.Наименование
ИМЕЮЩИЕ 
    КОЛИЧЕСТВО(Товары.Ссылка) > 1