powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / [игнор отключен] [закрыт для гостей] / Как избежать блокировки?
25 сообщений из 39, страница 1 из 2
Как избежать блокировки?
    #37348743
1С 8.2 SQL УПП

Поясните ламеру кто виноват.

Внедряют у нас в конторе систему.
Администратор ругается что мои простые запросы блокируют регистр.продажи, а значит я чего-то делаю не так.

Для целей аналитической отчетности я с помошью ADO выгружаю нужные детальные записи регистров и справочников на др. сервер.
Я даже переделал алгоритм выгрузки из регистра продаж и тяну оттуда данные запросом частями.

Нужно как-то модифицировать код чтобы не вызывать блокировки или это должен сделать администратор?

Использование консоли запросов приведет к такому же результату?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37348787
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмирий Романовский, текст запроса в студию.
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37348945
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Текст запроса давайте. А вобще странно - этот регистр бессмысленно блокировать.
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349120
Перем АДОДБКоннект, стрПодключения, ИмяСервера, ОшибкаSQL, SQLJob, ЗапросВ, Результат, Сейчас, Начало, Конец, Тн, Тк, Шаг, Строк;

Процедура ВыгрузитьПродажи()

ТаблицаSQL = "v8_Продажи_кор";


ИмяСервера = "XXX";
ИмяБазы = "infanalit";
ИмяПользователя = "sa";
Пароль = "";



стрПодключения = "Provider=SQLOLEDB.1;
|Pwd="+Пароль+";
|User ID="+ИмяПользователя+";
|Data Source=" + ИмяСервера + ";
|Initial Catalog=" + ИмяБазы + "";

Сейчас = ТекущаяДата();
Начало = ДобавитьМесяц(НачалоМесяца(Сейчас),-1);
Если Начало < Дата(2011,7,1) тогда Начало = Дата(2011,7,1) КонецЕсли;
Конец = НачалоДня(Сейчас);
Если Начало > Конец тогда Начало = Конец КонецЕсли;

Шаг = 86400*1; //60*60*24
Тн = Начало;
Тк = Тн + Шаг;



ЗапросВ = Новый Запрос;
ЗапросВ.Текст = "ВЫБРАТЬ
| 1 КАК Движение,
//| началопериода(Продажи.Период, День) КАК ДатаПроводки,
| началопериода(Продажи.Регистратор.Дата, День) КАК ДатаПроводки,
| Продажи.Активность,
| Продажи.Номенклатура.Код как Код,
| Продажи.Количество,
| Продажи.Стоимость,
| Продажи.СтоимостьБезСкидок,
| Продажи.НДС,
| Продажи.Регистратор.Номер КАК НомерДокумента,
| Продажи.Организация.Код КАК КодОрганизации,
| Продажи.Контрагент.Код КАК КодКонтрагента,
| Продажи.Регистратор.Грузополучатель.Код КАК КодГрузополучателя,
| Продажи.Регистратор.Грузоотправитель.Код КАК КодГрузоотправителя,
| Продажи.Регистратор.АдресДоставки КАК АдресДоставки
|ИЗ
| РегистрНакопления.Продажи КАК Продажи
|ГДЕ
| Продажи.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
| И (НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))
| И Продажи.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийРеализацияТоваров.ПродажаКомиссия)
//| И началопериода(Продажи.Период, День) между &Начало и &Конец
| И началопериода(Продажи.Регистратор.Дата, День) между &Начало и &Конец
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 2,
| началопериода(Возвраты.Период, День) как ДатаПроводки,
| Возвраты.Активность,
| Возвраты.Номенклатура.Код как Код,
| Возвраты.Количество,
| Возвраты.Стоимость,
| Возвраты.СтоимостьБезСкидок,
| Возвраты.НДС,
| Возвраты.Регистратор.Номер как НомерДокумента,
| Возвраты.Организация.Код как КодОрганизации,
| Возвраты.Контрагент.Код как КодКонтрагента,
| Возвраты.Регистратор.Грузополучатель.Код как КодГрузополучателя,
| Возвраты.Регистратор.Грузоотправитель.Код КАК КодГрузоотправителя,
| null как АдресДоставки
|ИЗ
| РегистрНакопления.Продажи КАК Возвраты
|ГДЕ
| Возвраты.Регистратор ССЫЛКА Документ.ВозвратТоваровОтПокупателя
| И (НЕ Возвраты.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))
| И Возвраты.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийВозвратТоваровОтПокупателя.ПродажаКомиссия)
| И началопериода(Возвраты.Период, День) между &Начало и &Конец
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| 3,
| началопериода(ВозвратЗакупки.Период, День) как ДатаПроводки,
| ВозвратЗакупки.Активность,
| ВозвратЗакупки.Номенклатура.Код как Код,
| 0 - ВозвратЗакупки.Количество как Количество,
| 0 - ВозвратЗакупки.Стоимость как Стоимость,
| 0 как СтоимостьБезСкидок,
| ВозвратЗакупки.НДС,
| ВозвратЗакупки.Регистратор.Номер как НомерДокумента,
| ВозвратЗакупки.Организация.Код как КодОрганизации,
| ВозвратЗакупки.Контрагент.Код как КодКонтрагента,
| ВозвратЗакупки.Регистратор.Грузополучатель.Код как КодГрузополучателя,
| ВозвратЗакупки.Регистратор.Грузоотправитель.Код КАК КодГрузоотправителя,
| null как АдресДоставки
|ИЗ
| РегистрНакопления.Закупки КАК ВозвратЗакупки
|ГДЕ
| ВозвратЗакупки.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг
| И (НЕ ВозвратЗакупки.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))
| И ВозвратЗакупки.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыОперацийПоступлениеТоваровУслуг.ПокупкаКомиссия)
| И началопериода(ВозвратЗакупки.Период, День) между &Начало и &Конец";



Контрагенты = Новый СписокЗначений;
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("000000001")); // Общие поставщики
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000019")); // Полиграф материалы и сырьё
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD007831")); // Кредиторы (обработанные)
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000027")); // Услуги типографские
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000026")); // Услуги прочие

Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000020")); // Правообладатели физ лица
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000021")); // Правообладатели юр лица
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000016")); // Иностранные компании
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000017")); // Налоговые агенты налоговые органы
Контрагенты.Добавить(Справочники.Контрагенты.НайтиПоКоду("ITD000014")); // Аренда и субаренда

ЗапросВ.УстановитьПараметр("Контрагенты",Контрагенты);



АДОДБКоннект = Новый COMОбъект("ADODB.Connection");
АДОДБКоннект.ConnectionTimeOut =300;
АДОДБКоннект.CommandTimeOut =300;
АДОДБКоннект.CursorLocation = 2; //adUseServer

Попытка
АДОДБКоннект.Open(стрПодключения);
Исключение
АДОДБКоннект.Close();
Сообщить("Невозможно установить соединение с SQL-сервером " + ИмяСервера);
ОшибкаSQL=ТаблицаSQL;
Возврат;
КонецПопытки;



Попытка
//АДОДБКоннект.Execute("IF OBJECT_ID(N'" + ТаблицаSQL + "','U') IS not NULL drop table " + ТаблицаSQL );

АДОДБКоннект.Execute("IF OBJECT_ID(N'" + ТаблицаSQL + "','U') IS not NULL truncate table " + ТаблицаSQL
+ " else CREATE TABLE " + ТаблицаSQL + " ("
+ "Движение smallint null, "
+ "ДатаПроводки datetime null, "
+ "Активность bit null, "
+ "НоменклатураКод varchar(18) COLLATE Cyrillic_General_CI_AS null, "
+ "Количество int null, "
+ "Стоимость money null, "
+ "СтоимостьБезСкидок money null, "
+ "СуммаНДС money null, "
+ "ДокументНомер varchar(15) COLLATE Cyrillic_General_CI_AS null, "
+ "ОрганизацияКод varchar(10) COLLATE Cyrillic_General_CI_AS null, "
+ "КонтрагентКод varchar(10) COLLATE Cyrillic_General_CI_AS null, "
+ "ГрузополучательКод varchar(10) COLLATE Cyrillic_General_CI_AS null, "
+ "ГрузоотправительКод varchar(10) COLLATE Cyrillic_General_CI_AS null, "
+ "АдресДоставки varchar(255) COLLATE Cyrillic_General_CI_AS null, "
+ "Локализация bit null)"
);

АДОДБКоннект.Execute("BEGIN TRANSACTION");
АДОДБКоннект.Execute("set implicit_transactions off");
Исключение
АДОДБКоннект.Close();
Сообщить("Невозможно Drop/Create/BEGIN TRANSACTION table на SQL-сервере " + ИмяСервера);
ОшибкаSQL=ТаблицаSQL;
Возврат;
КонецПопытки;



Пока Тн <= Конец Цикл

Если Тк > Конец Тогда Тк = Конец КонецЕсли;

ЗапросВ.УстановитьПараметр("Начало",Тн);
ЗапросВ.УстановитьПараметр("Конец",Тк);
Сообщить("Выгружаем период с " + Формат( Тн, "ДЛФ=Д") + " по " + Формат( Тк, "ДЛФ=Д"));

Результат = ЗапросВ.Выполнить().Выгрузить();
Строк = Результат.Количество();


Если Строк > 0 тогда
Сообщить("Обрабатываем " + Строк +" строк за период с " + Формат( Тн, "ДЛФ=Д") + " по " + Формат( Тк, "ДЛФ=Д"));

Для Каждого СтрокаРез из Результат Цикл

АдресДоставки = Лев(СтрЗаменить(СтрокаРез.АдресДоставки,"'","''"),255);

Количество = Формат(СтрокаРез.Количество,"ЧГ=0; ЧН=0");
Стоимость = Формат(СтрокаРез.Стоимость,"ЧГ=0; ЧРД='.'; ЦДЧ=2; ЧН=0");
СтоимостьБезСкидок = Формат(СтрокаРез.СтоимостьБезСкидок,"ЧГ=0; ЧРД='.'; ЦДЧ=2; ЧН=0");
НДС = Формат(СтрокаРез.НДС,"ЧГ=0; ЧРД='.'; ЦДЧ=2; ЧН=0");

Активность = Формат(СтрокаРез.Активность,"БЛ=0; БИ=1");

Попытка

АДОДБКоннект.Execute("Insert INTO " + ТаблицаSQL + " values ("
+ "" + СтрокаРез.Движение + ","
+ "'" + СтрокаРез.ДатаПроводки + "',"
+ "" + Активность + ","
+ "'" + СокрП(СтрокаРез.Код) + "',"
+ "" + Количество + ","
+ "" + Стоимость + ","
+ "" + СтоимостьБезСкидок + ","
+ "" + НДС + ","
+ "'" + СтрокаРез.НомерДокумента + "',"
+ "'" + СтрокаРез.КодОрганизации + "',"
+ "'" + СтрокаРез.КодКонтрагента + "',"
+ "'" + СтрокаРез.КодГрузополучателя + "',"
+ "'" + СтрокаРез.КодГрузоотправителя + "',"
+ "'" + АдресДоставки + "',"

+ "null" + ")"
);


Исключение
Сообщить("Ошибка вставки данных в SQL: " + ОписаниеОшибки());
АДОДБКоннект.Execute("Commit");
АДОДБКоннект.Execute("set implicit_transactions on");
АДОДБКоннект.Close();
ОшибкаSQL=ТаблицаSQL;
Возврат;
КонецПопытки;



ОбработкаПрерыванияПользователя();
КонецЦикла;


конецесли;

Тн = Тн + Шаг + 86400; //60*60*24
Тк = Тн + Шаг;

Конеццикла;


Попытка
АДОДБКоннект.Execute("update _v8_Актуальность set Актуальность='" + ТекущаяДата() + "', НачалоПериода='" + Начало + "', КонецПериода='" + Конец + "' where Таблица='" + ТаблицаSQL +"'");
Исключение
Сообщить("Невозможно Update на SQL-сервере " + ИмяСервера);
АДОДБКоннект.Execute("Commit");
АДОДБКоннект.Execute("set implicit_transactions on");
АДОДБКоннект.Close();
ОшибкаSQL=ТаблицаSQL;
Возврат;
КонецПопытки;


Попытка
АДОДБКоннект.Execute("Commit");
АДОДБКоннект.Execute("set implicit_transactions on");
Исключение
Сообщить("Невозможно Commit на SQL-сервере " + ИмяСервера);
АДОДБКоннект.Close();
ОшибкаSQL=ТаблицаSQL;
Возврат;
КонецПопытки;


АДОДБКоннект.Close();


КонецПроцедуры
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349177
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмирий Романовский, в каком контексте идет запрос к 1С? Не выполняется ли он случайно в явной или неявной (при записи документа, в обработке проведения и т.д.) транзакции?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349197
DmitriyZДмирий Романовский, в каком контексте идет запрос к 1С? Не выполняется ли он случайно в явной или неявной (при записи документа, в обработке проведения и т.д.) транзакции?

Даже не знаю что ответить :-(
Я запускаю обычную внешнюю обработку с этим кодом на клиентской машине.
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349244
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмирий Романовский, в коде вроде нет криминала. Вопрос - как администратор определил, что именно ваши запросы блокируют регистр?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349293
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выберите период максимальный. Запустите вашу обработку. Паралельно попробуйте сформировать любой отчет по продажам (что использует регистр продажи). Если формируется - мордой тыкайте админа.
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349309
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сВыберите период максимальный. Запустите вашу обработку. Паралельно попробуйте сформировать любой отчет по продажам (что использует регистр продажи). Если формируется - мордой тыкайте админа. Отчет то сформируется в любом случае. Пусть лучше любой документ по продажам попробует провести - это надежнее.
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349437
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitriyZПрограммист 1сВыберите период максимальный. Запустите вашу обработку. Паралельно попробуйте сформировать любой отчет по продажам (что использует регистр продажи). Если формируется - мордой тыкайте админа. Отчет то сформируется в любом случае. Пусть лучше любой документ по продажам попробует провести - это надежнее.Сорри да сглупил.
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349441
DmitriyZПрограммист 1сВыберите период максимальный. Запустите вашу обработку. Паралельно попробуйте сформировать любой отчет по продажам (что использует регистр продажи). Если формируется - мордой тыкайте админа. Отчет то сформируется в любом случае. Пусть лучше любой документ по продажам попробует провести - это надежнее.

Так Админ именно это и подразумевает.

А как тогда работают встроенные отчеты?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349471
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмирий Романовский, Т.е. когда вы запускаете свою обработку, пользователи не могут проводить документы? На всякий случай еще раз просмотрите код. Если запрос к 1С идет в Попытка - Исключение, уберите.
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349491
DmitriyZДмирий Романовский, Т.е. когда вы запускаете свою обработку, пользователи не могут проводить документы? На всякий случай еще раз просмотрите код. Если запрос к 1С идет в Попытка - Исключение, уберите.

Т.е вот так делать ненадо?

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
// Вставить содержимое обработчика.

Отказ = истина;
Попытка
ВыгрузитьПродажи();
Исключение
Сообщить("Ошибка : " + ОписаниеОшибки());
Возврат;
КонецПопытки;
КонецПроцедуры
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349507
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмирий Романовский, уберите Попытка - Исключение. Повторите эксперимент. Сообщите результат (мне самому интересно).
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349660
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmitriyZДмирий Романовский, уберите Попытка - Исключение. Повторите эксперимент. Сообщите результат (мне самому интересно).Ну скорее уж транзакция... Не вижу даже теоретически чтобы "попытка" помешала - хотя конечно есть ошибки платформы...
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349846
DmitriyZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программист 1сDmitriyZДмирий Романовский, уберите Попытка - Исключение. Повторите эксперимент. Сообщите результат (мне самому интересно).Ну скорее уж транзакция... Не вижу даже теоретически чтобы "попытка" помешала - хотя конечно есть ошибки платформы... Я понимаю, но мало ли, чем черт не шутит :)
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349964
HoBTID
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Криминал:
И (НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

...
Криминал:
И началопериода(Продажи. Регистратор.Дата , День) между &Начало и &Конец
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349973
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HoBTID Криминал:
И (НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

...
Криминал:
И началопериода(Продажи. Регистратор.Дата , День) между &Начало и &КонецИ в чем криминал?
И почему тогда "Возвраты.Регистратор.Грузополучатель" не криминал?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37349975
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Автор - а база случайно не файловая?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37350055
HoBTID Криминал:
И (НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

...
Криминал:
И началопериода(Продажи. Регистратор.Дата , День) между &Начало и &Конец

И как правильно надо?
(НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))
ибо не нужны лишние данные...

это понятно что можно переделать, задав параметры запроса иначе
началопериода(Продажи. Регистратор.Дата , День) между &Начало и &Конец[/quot]

Возвраты.Регистратор.Грузополучатель
Переделать как ?
ВЫРАЗИТЬ(Продажи.Регистратор КАК Документ.РеализацияТоваровУслуг).Грузополучатель.Код КАК ГрузополучательКод,
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37350063
Программист 1сАвтор - а база случайно не файловая?

Нет, там что то серьезное на кластерах и MS SQL :-)
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37350217
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмирий Романовский,

Криминал:
И (НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

Правильно
(НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

Вы про букву и? Или про ссылка?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37350270
Программист 1сДмирий Романовский,

Криминал:
И (НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

Правильно
(НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

Вы про букву и? Или про ссылка?

Простите, но не понял о чем речь!

Что такое условие надо помещать в самое начало списка условий?
Это условие можно без .Ссылка задавать?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37350556
Программист 1с
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмирий Романовский - сорри вопрос не вам. Думал это мне ответили на вопрос. Еще раз его задам.

HoBTID Криминал:
И (НЕ Продажи.Контрагент.Ссылка В ИЕРАРХИИ (&Контрагенты))

...
Криминал:
И началопериода(Продажи. Регистратор.Дата , День) между &Начало и &КонецИ в чем криминал?
И почему тогда "Возвраты.Регистратор.Грузополучатель" не криминал?
...
Рейтинг: 0 / 0
Как избежать блокировки?
    #37351649
Поубирал и поправил все что смог в соответствии с данными рекомендациями.
...
Рейтинг: 0 / 0
25 сообщений из 39, страница 1 из 2
Форумы / [игнор отключен] [закрыт для гостей] / Как избежать блокировки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]