|
|
|
Прошу помощи с кодом выборки организации ↓ (Волшебник 16.12.2025 17:10) | ☑ | ||
|---|---|---|---|---|
|
0
Aleks_0684
15.12.25
✎
10:01
|
Добрый день. Такой вопрос в 1с Бухгалтерия заведены 2 организации. У каждой свой префикс. Есть справочник авансовых отчетов, где нумерация сбилась, необходимо установить правильную нумерацию.
Использую такой код: начатьтранзакцию(); Выборка = Документы.АвансовыйОтчет.Выбрать(Дата(2025,1,1),ТекущаяДата(),,"Дата"); Номер = 1; Пока Выборка.Следующий() Цикл Сообщить(Выборка); Док = Выборка.ПолучитьОбъект(); Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"); Док.Комментарий ="#Номер изменен"; Док.Записать(); Сообщить(Док.Номер); Номер = Номер+1; КонецЦикла; зафиксироватьтранзакцию(); Он переименовывает все документы авансового отчета, соответственно изменяя префикс у обеих организаций. Как мне сделать что б данная обработка затрагивала только документы одной из организаций, при этом не трогая документы другой? |
|||
|
1
Aleks_0684
15.12.25
✎
10:02
|
Я так понимаю нужно добавить выборку по организации.
Выбор = Организация.Наименование=Организация1 Выдает синтаксическую ошибку что переменная не определена. |
|||
|
2
Табуретко
15.12.25
✎
10:04
|
а запросом религия не позволяет?
|
|||
|
3
Aleks_0684
15.12.25
✎
10:07
|
Мозгов у меня не хватает. Поэтому и прошу помощи.
|
|||
|
4
Волшебник
15.12.25
✎
10:09
|
Говнокод без лесенки
|
|||
|
5
AAA
15.12.25
✎
10:13
|
(3)Какие тут мозги нужны? В цикл вставляете условие Выборка.Организация. Либо в запрос, как тут правильно советовали. Непосредственно в выборке лучше не менять объект
Не Наименование у Организации сравнивать, а ссылку |
|||
|
6
Fish
гуру
15.12.25
✎
10:15
|
(1) Ну так почитай СП. У метода Выбрать() есть параметр "Отбор". Его и задавай.
|
|||
|
7
Волшебник
15.12.25
✎
10:16
|
(6) При этом реквизит должен быть проиндексирован
|
|||
|
8
Табуретко
15.12.25
✎
10:20
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | АвансовыйОтчет.Ссылка КАК Авансовый |ИЗ | Документ.АвансовыйОтчет КАК АвансовыйОтчет |ГДЕ | АвансовыйОтчет.Организация = &Организация | И АвансовыйОтчет.Дата >= &ВыбДата | |УПОРЯДОЧИТЬ ПО | АвансовыйОтчет.Дата"; Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("ООО Рога и Копыта"); Запрос.Параметры.Вставить("ВыбДата", '20250101'); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Авансовый); //далее ваш код но я бы реквизиты отбора на форму повесил... |
|||
|
9
Ногаминебить
15.12.25
✎
10:31
|
(0) Просто чтоб разбавить общий хор.
Завести отдельный счетчик нумератора под каждую организацию, проверять какая в конкретном документе и его плюсовать. :) |
|||
|
10
Aleks_0684
15.12.25
✎
10:32
|
(8) Все равно меняет нумерацию и префикс сразу у обеих организаций
|
|||
|
11
Kigo_Kigo
15.12.25
✎
10:36
|
(10) А ты "ООО Рога и Копыта" ищешь? бгггг
|
|||
|
12
Aleks_0684
15.12.25
✎
10:38
|
Нет конечно. поставил наименование своей организации
|
|||
|
13
Fish
гуру
15.12.25
✎
10:45
|
(10) А у второй организации наименование отличается?
|
|||
|
14
Aleks_0684
15.12.25
✎
10:55
|
(13) Конечно. 2 разные организации с разным наименованием
|
|||
|
15
Табуретко
15.12.25
✎
10:57
|
(14) можно еще раз код в студию?
|
|||
|
16
Fish
гуру
15.12.25
✎
10:58
|
(14) Тогда не может быть такого. Показывай свой код.
|
|||
|
17
Aleks_0684
15.12.25
✎
11:01
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | АвансовыйОтчет.Ссылка КАК Авансовый |ИЗ | Документ.АвансовыйОтчет КАК АвансовыйОтчет |ГДЕ | АвансовыйОтчет.Организация = &Организация | И АвансовыйОтчет.Дата >= &ВыбДата | |УПОРЯДОЧИТЬ ПО | АвансовыйОтчет.Дата"; Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток")); Запрос.Параметры.Вставить("ВыбДата", '20250101'); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Авансовый); начатьтранзакцию(); Выборка = Документы.АвансовыйОтчет.Выбрать(Дата(2025,1,1),ТекущаяДата(),,"Дата"); Номер = 1; Пока Выборка.Следующий() Цикл Сообщить(Выборка); Док = Выборка.ПолучитьОбъект(); Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"); Док.Комментарий ="#Номер изменен"; Док.Записать(); Сообщить(Док.Номер); Номер = Номер+1; КонецЦикла; зафиксироватьтранзакцию(); КонецЦикла; |
|||
|
18
Kigo_Kigo
15.12.25
✎
11:02
|
(12) Дак встань отладчиком,проверь, ищется организация или там пусто?
|
|||
|
19
Табуретко
15.12.25
✎
11:05
|
Выборка = Документы.АвансовыйОтчет.Выбрать(Дата(2025,1,1),ТекущаяДата(),,"Дата");
свою выборку с циклом накой поставили? Вы точно программист? |
|||
|
20
Aleks_0684
15.12.25
✎
11:06
|
(8) Так написали же //Далее ваш код. Я кстати подумал еще зачем два раза выборка по дате...
|
|||
|
21
Табуретко
15.12.25
✎
11:08
|
транзакцию за цикл вынесите и замените
Док = Выборка.ПолучитьОбъект(); на Док = Выборка.Авансовый.ПолучитьОбъект(); |
|||
|
22
Aleks_0684
15.12.25
✎
11:10
|
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ | АвансовыйОтчет.Ссылка КАК Авансовый |ИЗ | Документ.АвансовыйОтчет КАК АвансовыйОтчет |ГДЕ | АвансовыйОтчет.Организация = &Организация | И АвансовыйОтчет.Дата >= &ВыбДата | |УПОРЯДОЧИТЬ ПО | АвансовыйОтчет.Дата"; Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток")); Запрос.Параметры.Вставить("ВыбДата", '20250101'); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Авансовый); начатьтранзакцию(); Номер = 1; Пока Выборка.Следующий() Цикл Сообщить(Выборка); Док = Выборка.Авансовый.ПолучитьОбъект(); Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"); Док.Комментарий ="#Номер изменен"; Док.Записать(); Сообщить(Док.Номер); Номер = Номер+1; КонецЦикла; зафиксироватьтранзакцию(); КонецЦикла; Так? |
|||
|
23
Fish
гуру
15.12.25
✎
11:11
|
(20) Тщательнее надо думать.
|
|||
|
24
Fish
гуру
15.12.25
✎
11:11
|
(22) Нет, не так. Думай лучше.
|
|||
|
25
Aleks_0684
15.12.25
✎
11:11
|
начатьтранзакцию();
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | АвансовыйОтчет.Ссылка КАК Авансовый |ИЗ | Документ.АвансовыйОтчет КАК АвансовыйОтчет |ГДЕ | АвансовыйОтчет.Организация = &Организация | И АвансовыйОтчет.Дата >= &ВыбДата | |УПОРЯДОЧИТЬ ПО | АвансовыйОтчет.Дата"; Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток")); Запрос.Параметры.Вставить("ВыбДата", '20250101'); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Авансовый); Номер = 1; Пока Выборка.Следующий() Цикл Сообщить(Выборка); Док = Выборка.Авансовый.ПолучитьОбъект(); Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"); Док.Комментарий ="#Номер изменен"; Док.Записать(); Сообщить(Док.Номер); Номер = Номер+1; КонецЦикла; зафиксироватьтранзакцию(); КонецЦикла; |
|||
|
26
AAA
15.12.25
✎
11:12
|
(10)Возьмите себя в руки ) Напишите сначала просто запрос или выборку документов по требуемой организации. Это пара минут
Потом уже меняйте что либо |
|||
|
27
Табуретко
15.12.25
✎
11:12
|
(25)да как-же так? Может позовем специалиста?
|
|||
|
28
Fish
гуру
15.12.25
✎
11:17
|
(25) Убери цикл в цикле.
|
|||
|
29
Aleks_0684
15.12.25
✎
11:19
|
(27) Так я за этим сюда и обратился )
|
|||
|
30
Aleks_0684
15.12.25
✎
11:20
|
(28) начатьтранзакцию();
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | АвансовыйОтчет.Ссылка КАК Авансовый |ИЗ | Документ.АвансовыйОтчет КАК АвансовыйОтчет |ГДЕ | АвансовыйОтчет.Организация = &Организация | И АвансовыйОтчет.Дата >= &ВыбДата | |УПОРЯДОЧИТЬ ПО | АвансовыйОтчет.Дата"; Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("Восток")); Запрос.Параметры.Вставить("ВыбДата", '20250101'); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Авансовый); Номер = 1; Сообщить(Выборка); Док = Выборка.Авансовый.ПолучитьОбъект(); Док.Номер = "08zv-"+Формат(Номер, "ЧЦ=6; ЧВН=; ЧГ=0"); Док.Комментарий ="#Номер изменен"; Док.Записать(); Сообщить(Док.Номер); Номер = Номер+1; КонецЦикла; зафиксироватьтранзакцию(); |
|||
|
31
Табуретко
15.12.25
✎
11:20
|
неправильно
|
|||
|
32
Fish
гуру
15.12.25
✎
11:21
|
(29) Так тебе уже все советы дали. Осталось немного голову включить. Или ты хочешь, чтобы тут за тебя твою работу сделали?
|
|||
|
33
Табуретко
15.12.25
✎
11:21
|
Номер = 1; куда нужно вынести?
|
|||
|
34
Aleks_0684
15.12.25
✎
11:28
|
(33) Я так понимаю за цикл?
|
|||
|
35
1cVandal
15.12.25
✎
11:34
|
(34) правильно
|
|||
|
36
Табуретко
15.12.25
✎
11:34
|
(34) а почему?
|
|||
|
37
1cVandal
15.12.25
✎
11:35
|
интересно он попадет на ошибку что номер не уникален....
|
|||
|
38
Aleks_0684
15.12.25
✎
11:36
|
Потому что так будет правильно )
Но при выполнении запроса 1с выдает ошибку теперь. |
|||
|
39
Волшебник
15.12.25
✎
11:40
|
(25) му-ха-ха
|
|||
|
40
1cVandal
15.12.25
✎
11:37
|
когда пишешь про ошибку, ты её текст сразу публикуй
|
|||
|
41
1cVandal
15.12.25
✎
11:41
|
в Сообщить(Выборка) падает?) убери нафиг
|
|||
|
42
Fish
гуру
15.12.25
✎
11:41
|
Какой-то миста-кодинг получается (по аналогии с вайб-кодингом).
Пациент думать не хочет, только даёт директивы, как ИИ. |
|||
|
43
1cVandal
15.12.25
✎
11:44
|
(42) все когда то начинали)
|
|||
|
44
Волшебник
15.12.25
✎
12:24
|
(42) ОНИ нас воспринимают как ботов.
wiki:Чужие_среди_нас |
|||
|
45
craxx
15.12.25
✎
12:40
|
(0) а Вы кем там в этой организации?
|
|||
|
46
Aleks_0684
15.12.25
✎
13:31
|
Спасибо огромное. По одной организации всё по лучилось. А вот по второй никак. Там в наименовании организации кавычки и наверно из-за этого вываливается ошибка.
Вот тут что я не так делаю? Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоНаименованию("ООО "Рога и опыта"")); |
|||
|
47
Telcher
15.12.25
✎
13:35
|
(46) Справочники.Организации.НайтиПоНаименованию("ООО ""Рога и опыта""");
|
|||
|
48
Fish
гуру
15.12.25
✎
13:42
|
(46) "Вот тут что я не так делаю?" - лучше то искать организацию не по наименованию. В твоей ситуации, имхо, лучше искать по коду. А в общей - по уникальным реквизитам (ИНН/КПП)
|
|||
|
49
Fish
гуру
15.12.25
✎
13:45
|
+(48) Ну а если это обработка для разовой перенумерации, то лучше всего вообще не искать организацию, а воспользоваться советом из (8) и выбирать организацию в реквизит.
|
|||
|
50
Aleks_0684
15.12.25
✎
13:45
|
Пробовал по ИНН тоже вываливается в ошибку
ТОчное название органицации вот: АО "ППЭП "Мир" Пробовал по ИНН вот так: Запрос.Параметры.Вставить("Организация",Справочники.Организации.НайтиПоИНН("123465879")); |
|||
|
51
Aleks_0684
15.12.25
✎
13:51
|
В данной транзакции уже происходили ошибки!
{ОбщийМодуль.ДлительныеОперации.Модуль(2866)}:Блокировка.Заблокировать(); {ОбщийМодуль.ДлительныеОперации.Модуль(1927)}:УстановитьРезультатПотока(ПараметрыВыполнения.СвойстваИсполняющегоПотокаМногопоточнойДлительнойОперации, Результат); {ОбщийМодуль.ДлительныеОперации.Модуль(1898)}:УстановитьРезультатВызоваФункции(Результат, ПараметрыВыполнения); {ОбщийМодуль.ДлительныеОперации.Модуль(1746)}:ВызватьФункцию(ВсеПараметры.ИмяПроцедуры, ВсеПараметры.ПараметрыПроцедуры, ПараметрыВыполнения); {ОбщийМодуль.ДлительныеОперации.Модуль(1761)}:ВызватьИсключение(Уточнение.Текст, Уточнение.Категория,, СтекЗапуска, ИнформацияОбОшибке); [ОшибкаВоВремяВыполненияВстроенногоЯзыка, ИсключениеВызванноеИзВстроенногоЯзыка, ОшибкаКонфигурации] по причине: Ошибка при вызове метода контекста (Заблокировать) [ОшибкаВоВремяВыполненияВстроенногоЯзыка] по причине: В данной транзакции уже происходили ошибки! |
|||
|
52
Kigo_Kigo
15.12.25
✎
13:58
|
(50) НайтиПоИНН Ухааааа, ищи по коду
Справочники.Организации.НайтиПоКоду("00000001") Господа, долго издеваться будем? А вобще бы реквизит вытащил бы на форму и там выбирал организацию |
|||
|
53
Aleks_0684
15.12.25
✎
14:00
|
УРА!!! Заработало!!!!
Спасибо Всем Огромное!!!! Ребят, вы супер. Я вообще в этом деле нихрена не понимаю! ) Вчера в первый раз открыл для себя это всё. Всю ночь сидел учился ) В итоге я просто убрал все кавычки из названия организации, сменил нумерацию и просто снова добавил кавычки в названии организации. Спасибо всем огромное за терпение и помощь. Ну и простите, что вот с такими глупыми вопросами обратился. |
|||
|
54
StanLee
15.12.25
✎
14:18
|
и тебе спасибо за хорошее настроение, вспомнил каким я был когдато :))) а то понедельник, настроение хмурое, а тут весело
|
|||
|
55
Мультук
гуру
15.12.25
✎
14:25
|
Интересно, что будет с нумерацией, когда введут НОВЫЙ документ ?
Хотя, до конца 2025 немного осталось. |
|||
|
56
yurikmellon2
15.12.25
✎
14:34
|
(53) чувак хитёр, далеко пойдёт. Вместо того чтобы обработать входные данные (название организации со спецсимволами), просто изменил входные данные.
Ребёнок у меня начал питон изучать. На днях задачка на преобразование строк. Смотри, говорю, тебе на вход такая последовательность приходит, как её программно обработать чтобы подучилось как надо? Он за ухом почесал и молвит, а давай на вход вот такая последовательность придёт, тогда одна команда, хопа и ответ. |
|||
|
57
Волшебник
15.12.25
✎
14:36
|
Ребят, подскажите. Я выполняю следующий программный код:
Сообщить(""""); // четыре кавычки!
а мне выдаётся " // одна кавычка! Куда делись ещё три?! |
|||
|
58
maxab72
15.12.25
✎
14:40
|
(57) 1с это же бухгалтерская программа. одна кавычка пошла на дебет, другая на кредит, третья на забаланс. Вот и осталась одна на вывод.
|
|||
|
59
Kigo_Kigo
15.12.25
✎
14:41
|
(57) А и Б сидели на трубе, там же и ковычки🔥
|
|||
|
60
AAA
15.12.25
✎
15:38
|
Организацию жалко, хотя сами виноваты )
|
|||
|
61
Chameleon1980
16.12.25
✎
08:37
|
(0) выборка может быть неактуальная после записи документа - используйте запросы
|
|||
|
62
Alex7771
16.12.25
✎
09:18
|
вот чаво GROK выдал :)) :Вот полная внешняя обработка для 1С:Бухгалтерия 3.0 с формой выбора организации и периода для перенумерации документов "АвансовыйОтчет". Номер будет "ПОХ1", "ПОХ2", "ПОХ3" и т.д. Форма обработки (реквизиты формы) Создайте внешнюю обработку с реквизитами: text Организация (СправочникСсылка.Организации) ДатаНач (Дата) ДатаКон (Дата) Кнопка "Перенумеровать" Код модуля формы (клиент-сервер) text &НаКлиенте Процедура Перенумеровать(Команда) Если НЕ ЗначениеЗаполнено(Организация) Тогда ПоказатьПредупреждение(, "Выберите организацию!"); Возврат; КонецЕсли; Если ДатаНач > ДатаКон Тогда ПоказатьПредупреждение(, "Неверный период!"); Возврат; КонецЕсли; Состояние("Выполняется перенумерация..."); ПеренумероватьНаСервере(); Состояние("Перенумерация завершена"); КонецПроцедуры &НаСервере Процедура ПеренумероватьНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | АвансовыйОтчет.Ссылка КАК Ссылка, | АвансовыйОтчет.Дата КАК Дата |ИЗ | Документ.АвансовыйОтчет КАК АвансовыйОтчет |ГДЕ | АвансовыйОтчет.Организация = &Организация | И АвансовыйОтчет.Дата МЕЖДУ &ДатаНач И &ДатаКон | И НЕ АвансовыйОтчет.ПометкаУдаления | |УПОРЯДОЧИТЬ ПО | Дата"; Запрос.УстановитьПараметр("Организация", Организация); Запрос.УстановитьПараметр("ДатаНач", ДатаНач); Запрос.УстановитьПараметр("ДатаКон", ДатаКон); Выборка = Запрос.Выполнить().Выбрать(); ТекНомер = 1; Обработано = 0; Пока Выборка.Следующий() Цикл Попытка ДокОбъект = Выборка.Ссылка.ПолучитьОбъект(); ДокОбъект.Номер = "ПОХ" + Формат(ТекНомер, "ЧГ=0"); ДокОбъект.Записать(РежимЗаписиДокумента.Запись); ТекНомер = ТекНомер + 1; Обработано = Обработано + 1; Исключение Сообщить("Ошибка при обработке " + Выборка.Ссылка + ": " + ОписаниеОшибки()); КонецПопытки; КонецЦикла; Сообщить("Обработано документов: " + Обработано); КонецПроцедуры Как использовать Создайте внешнюю обработку в конфигураторе 1С:Бухгалтерия 3.0 Добавьте форму с реквизитами: Организация, ДатаНач, ДатаКон, кнопка "Перенумеровать" Вставьте код выше в модуль формы Сохраните как .epf файл и загрузите в базу |
|||
|
63
PR
16.12.25
✎
09:47
|
Дожили
60 постов на установку фильтра по организации в выборке |
|||
|
64
Kigo_Kigo
16.12.25
✎
10:25
|
(63) Вопрос подвести джуна, чтобы сам мозгами дошел, как это сделать
|
|||
|
65
PR
16.12.25
✎
09:58
|
(64) И как, подвели?
|
|||
|
66
Волшебник
16.12.25
✎
10:26
|
(64) Не джуна, а бота
|
|||
|
67
Kigo_Kigo
16.12.25
✎
17:08
|
(66) Так бот тупить не может :D
(65) Да притянули к его носу, его ... |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |